精华内容
下载资源
问答
  • 互联网公司监控运维

    千次阅读 2017-07-01 15:51:17
    监控系统、日志系统、配置管理系统以及部署系统 以前公司监控、日志分析、应用配置和部署的工作方面都是徒手操作,若将徒手变为自动化,对于上流的互联网公司都急切需要这些自动化管理系统。无数生产的问题以及...

      监控系统、日志系统、配置管理系统以及部署系统
      以前公司在监控、日志分析、应用配置和部署的工作方面都是徒手操作,若将徒手变为自动化,对于上流的互联网公司都急切需要这些自动化管理系统。无数生产的问题以及生产效率的问题都是因为监控、日志、配置以及部署所造成的。做这些自动化管理的系统需要投入大量人力和物力,而且还要专心致志做相关研究才能将这些系统做完做好。
        思考下这些系统的做法以及会使用到的相关技术:
      监控系统

        监控系统很好理解,它的作用是监控线上系统的运行状况,如果线上系统发生问题,那么监控系统会将问题及时的通知到每一个相关的人员。小公司这样的工作是一个半自动化的状态,很多工作还是需要大量人力的投入才能完成,但大公司的监控系统已经实现了监控自动化,虽然大公司的系统比小公司的多的多,但是他们监控的人力的成本却是少之又少。大型互联网公司的系统往往是成百上千,服务器则是成千上万,因此自动化的监控绝对不是看不到产出的而一定是可以实实在在创造价值的。

        对如此庞大的资源进行监控,需要考虑很多,首先要定义一些监控的维度,一般最大是系统级别,其次是系统下的功能模块,再细点就是方法层面的,在实际的开发中,一般会从功能模块和方法上控制,这些控制好了,系统级别的监控也就相应的做到了。一般这种监控肯定也是会使用到打点的技术,也就是在程序合适的地方引入监控程序,当系统运行出现异常的时候,监控程序会及时的将信息传递到监控的服务器,服务器将这些问题记录下来后通过短信,邮件的方式通知给相关人员。方法级别的监控比较好做,只要监控程序捕获到了程序运行的异常就行,而功能模块的监控则是需要相关人员定义一套捕获规则,当功能模块触发到不符合规则的地方,监控系统就会给相关人员发出警报,监控的实时性可以达到秒级,效率是非常高的。监控系统做的要人性化,所有的操作都可以在一个Web的管理系统里完成,这个管理系统也是用了大量的可视化图表的方式,直观且易于操作,同时还有相关的绩效管理功能,实在是非常的强大。
        日志系统

        通过日志查找线上系统的问题,这是解决生产问题的唯一方式,但是对于查看互联网系统的日志是一件非常痛苦的事情,因为互联网的系统几乎没有单点,都是分布式的,所以查看日志的时候就需要查找很多台服务器,如果碰到程序本身的日志写的不太合理,那么查问题几乎是一件大海捞针的事情,此外,在公司里,生产环境往往都是被严格的管理起来的,只有很少数的人可以直接查看生产日志,一般人员想看生产日志常常会有一大堆冗长的审批过程,这些审批过程保证了生产系统的稳定性和安全性,但是恶果就是严重拉长了问题解决的时间,那么如果有一套实现办公自动化的日志系统那就是非常棒的一件事情了,大公司就自己研发了一些这样的日志系统,它的日志系统定义了一套日志的规范,应用系统的开发人员可以按这个规范打出日志,该系统除了能打出符合日志规范的日志,还能将应用系统自身的日志拉到日志系统里,这些日志的查看不再是通过命令行在控制台里看,而是由专门的Web系统来进行查看,他们的Web系统做的挺棒的,可以分组分类的查看相关系统的日志,这些日志在规定的时间里会自动刷新,同时使用者也可以在Web系统里像控制台那样实时的查看相关的日志,只有有相关查看日志权限的人,随时随地不受限制的查看到系统的运行情况。日志系统的设计上某些地方和监控系统类似,也要做到非侵入式,尽量降低系统对生产系统的影响。比较特别的是,在Web系统里看到日志并不是保存在生产系统上的日志,而是存放在日志系统里的日志,也就是说该日志系统会实时的同步生产系统的日志,这种同步不是盲目的,而是会根据一个的规则同步到日志系统,这种规则可以保证在Web系统里很容易定位到那个系统,那个功能模块的日志。大量日志存储绝不可能用关系数据库完成,那么想高效的查询到日志就得使用搜索技术,使用solr进行搜索的。当然保证日志集群的可靠性,zookeeper就得上场了,zookeeper已经是做分布式系统不可避免的技术了。
        统一配置系统

      系统的配置一般是指将一些环境的参数,系统的参数或者是某些会经常变化的信息用一种特殊的文件保存起来,这样利于系统的维护和扩展,java里通常使用xml文件和properties文件存储配置信息,而那些会经常改变的信息通常会使用properties文件保存,这种配置管理方式对于规模不大或者变更很少的系统而言十分有效,但是对于互联网公司的大型系统以及一些关联度很高的系统而言,当系统运维到一定程度,配置文件可能是最让人沮丧和痛苦的事情,特别是维护它们的方式是通过人力的方法,其潜在的风险也是非常之大的。zookeeper一个重要特性就是配置管理,一些大公司实现的统一配置系统就是通过zookeeper来实现的。统一配置系统同样也是可视化的,使用者不用直接到生产机器上修改配置,重启服务器,而是直接在Web管理系统里操作,配错了可以修改,也可以进行回滚。

      自动化部署系统

        生产部署是一个项目的最后一步,也是压力最大、风险最高的一步,如果最后上线部署失败了,这种感受就犹如进行了一次辛苦的长跑,眼看就要到达终点了,没想被一块大石头绊倒了,甚至还会掉到坑里,最后还要挨领导批,那滋味可不好受。

        小公司系统部署的问题很多,不同的环境,如:开发环境、测试环境、伪发布环境和生产环境,开发环境和测试环境对开发人员来说可以控制,这个操作调试都很方便,这个都比较好。但开发环境和测试环境同伪发布环境同生产环境基本上是完全隔离的,而且不同环境之间的环境配置,系统配置等等都存在或多或少的差异。经常发生,测试环境运行好好的程序到了伪发布环境就出现问题,更揪心的是,测试环境和伪发布环境都没问题,上了生产出问题了,而且是环境造成,这就使每一次部署操作都是小心翼翼的,部署后任然还要投入大量的人力和时间进行监控和测试。

        大公司的环境其实比小公司的还要复杂,它们甚至在伪发布环境和生产环境之间还有一些仿真的环境,还可进行灰度发布。仿真的环境是可以直接从生产上摘取一个服务器,部署新开发的程序,让相关人员进行测试验证,而且部署环境的切换也是有专门的Web系统进行管理,不同环境之间可以做到平滑的过渡。这样部署操作不仅是安全性以及在效率上都有很大的提升。

        总结
      大公司一般有几千名的开发人员却只需要20几个运维人员,因为有强大的开发团队可以支撑内部管理系统的研发,内部管理系统的监控和运维作用,加大了应用系统的稳定和容灾,这就大大减少了运维人员的工作量。
      由此可以看到互联网的技术远比传统的企业软件复杂的多,互联网的技术基本都是分布式的,因此线程、进程、通讯、分布式技术以及分布式的可靠性是十分的重要。上面描述的这四种系统,也不是大公司自创的,也是大量借鉴与美国牛叉的大型互联网公司,例如facebook,谷歌等等。

    ----------------------------------------------------------------

    BAT级别的公司都定制自己的监控运维工具,一般公司使用开源的就足够了,常用的开源工具:

    监控:ganglia, nagios, zabbix, zenoss...
    日志:logstash, flume, sentry...
    配置管理和自动化:puppet, chef, fabric, rundeck...


    持续交付:本书提到了许多提高系统开发质量的方案。

    51cto有个杂志叫 linux运维趋势,也介绍了此方面的内容,可以参考学习
    -------------------------------------------------------------------------------

    展开全文
  • RocketMQ 添加监控和系统告警通知

    千次阅读 2019-03-02 17:27:01
    前言 最近由于RocketMQ在使用过程中,发现在...首先提出我们的监控诉求,出现如下情况时,希望能够及时接收到系统告警通知: RocketMQ 服务宕机 RocketMQ 消费者下线 RocketMQ 消息出现长时间或者大量堆积 本文将...

    前言

    最近由于RocketMQ在使用过程中,发现在某些时候消息堆积,并且还是长时间堆积不消费,这种情况下没能及时发现,导致客户投诉,所以就有给RocketMQ增加监控,当出现特定异常时,能够及时告警,及时处理。
    首先提出我们的监控诉求,出现如下情况时,希望能够及时接收到系统告警通知:

    • RocketMQ 服务宕机
    • RocketMQ 消费者下线
    • RocketMQ 消息出现长时间或者大量堆积

    本文将通过修改 rocketmq-console源码的方式,增加RocketMQ 消费者下线RocketMQ 消息出现长时间或者大量堆积 监控能力。

    1. RocketMQ 服务宕机监控告警

    这一级别的监控,本质上而言是监控Linux上启动的Rocket MQ Java进程的运行情况。细分的话,需要监控以下两个维度:

    1. Linux Java 进程的CPU 使用率,内存使用量;
    2. Java 进程本身的JVM的服务质量,GC,并发数,内存分布等
      一般的公司在运维方面会有专门的监控组件,如zabbix会做统一处理

    监控的方式有很多,比如简单点的,我们可以写一个shell脚本,监控执行rocketmqJava进程的存活状态,如果rocketmq crash了,发送告警:

    #!/bin/bash
    ## monitor.sh
    while true
    do
            echo "开始监控rocket broker 进程..."
            PID=$(ps -ef | grep java | grep org.apache.rocketmq.broker.BrokerStartup | awk '{printf $2}');
            if [ -z $PID  ];then
                    curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxx' -H 'Content-Type: application/json'  \
                     -d '
                     {"msgtype": "text", 
                             "text": {
                                     "content": "【172.xxx.xxx.xxx】rocketmq broker 进程不存在,可能宕机,请尽快排查!"
                             }
                     }'
            fi
            sleep 10
    done
    
    

    2. RocketMQ的集群组件组成

    一个完整的RocketMQ集群,一般组成关系如下图所示:
    在这里插入图片描述
    除了核心组成部分:Name ServerBroker Cluster 之外,RocketMQ还提供了 mqadmin工具,该工具的具体实现代码在RocketMQ tools模块(rocketmq-tools-xxxx.jar)中。但是mqadmin命令行在交互上不够友好,**rocketmq-console**作为一个社区项目,底层基于mqadmin 核心库,用Spring Boot+Angularjs实现了一个RocketMQ Web管理端,开发运维人员可以轻松地使用此管理端完成日常运维操作。

    3. mqadmin–提供一套命令行工具,做RocketMQ的日常管理维护

    1.mqadmin 工具在哪儿?

    mqadmin本质上是一个Java命令行工具,也就是说执行mqadmin的过程也是执行Java的过程,**mqadmin**的位置和runbrokermqnamesrv并列:
    在这里插入图片描述

    2.mqadmin能做什么?

    执行./mqadmin,会在命令行输出其指令列表:
    在这里插入图片描述
    具体每个指令的作用不是本文的重点,后续会开新的文章介绍~

    4. 使用 rocketmq-console添加MQ监控告警

    我们可以利用rocketmq-console做如下的监控:

    • RocketMQ 消费者下线
    • RocketMQ 消息出现长时间或者大量堆积

    4.1 rocketmq-console的监控告警功能

    作为mqadmin的GUI封装,rocketmq-console基本上具备了mqadmin的功能外,也提供了一些额外的功能,如dashboard面板统计。但是,作为开源源码部分,rocketmq-console将MQ监控功能做了隐藏,我们需要手动放开。如下是使用rocket-console的监控原理:
    在这里插入图片描述
    当此项功能被放开后,在Consumer菜单下,为每一个consumer-group 的operation 会增加MONITOR CONFIG 选项,如下图所示:
    在这里插入图片描述
    图中的两个指标:

    指标名称说明备注
    minCount当前消费分组的机器数量最小阈值,低于此值将会告警
    minCount当前消费分组允许的最大消息堆积量,高于辞职将会告警

    4.2 如何开启rocketmq-console的监控告警功能

    开源的rocketmq-console将此功能隐藏了,可以通过下载源码,并修改源码的方式支持。

    4.2.1 下载源码

    从github中获取源码,rocketmq-externals
    地址:https://github.com/apache/rocketmq-externals

    4.2.2 导入项目

    项目导入后,如下图所示,rocketmq-console即为控制台代码
    在这里插入图片描述

    4.2.3 放开console控制台的监控参数配置

    默认的rocketmq-console将此功能注释掉了,修改文件:
    ~/rocketmq-console/src/resources/static/view/pages/consumer.html,将如下图所示的代码放开即可。
    在这里插入图片描述

    4.2.4 开启定时任务监控,扫描实时数据,做阈值判断,告警提示

    默认情况下,rocketmq-console只定义了定时任务入口,具体的策略没有任何处理,我们需要根据自己的需求加入自身的告警方式,比如:邮箱,钉钉,短信,微信等等。
    其预留的定时任务实现类为:
    org.apache.rocketmq.console.task.MonitorTask
    定时任务的扫描频率可根据自身系统要求考量设置。

    @Component
    public class MonitorTask {
        private Logger logger = LoggerFactory.getLogger(MonitorTask.class);
    
        @Resource
        private MonitorService monitorService;
    
        @Resource
        private ConsumerService consumerService;
    
    //    @Scheduled(cron = "* * * * * ?")
    //    定时任务的扫描频率可根据自身系统要求考量设置
        public void scanProblemConsumeGroup() {
            for (Map.Entry<String, ConsumerMonitorConfig> configEntry : monitorService.queryConsumerMonitorConfig().entrySet()) {
                GroupConsumeInfo consumeInfo = consumerService.queryGroup(configEntry.getKey());
                if (consumeInfo.getCount() < configEntry.getValue().getMinCount() || consumeInfo.getDiffTotal() > configEntry.getValue().getMaxDiffTotal()) {
                    logger.info("op=look consumeInfo {}", JsonUtil.obj2String(consumeInfo)); 
                   // notify the alert system 
                   //根据自身的要求加如通知方式
                }
            }
        }
    
    }
    
    4.2.5 build修改后的代码,生成可运行的jar包,然后部署运行

    在这里插入图片描述

    4.2.6 样例

    经笔者改造后的console的控制台可以显示出 ‘MONITOR CONFIG’ 配置项:
    在这里插入图片描述
    钉钉告警样例:
    在这里插入图片描述

    5. 总结

    rocketmq-console 作为开发运维人员监控MQ的便捷入口,可根据自身要求改造rocketmq-console,rocketmq-console服务本身可以调用所有mqadmin的所有能力,项目本身基于angularjs +spring boot,作为java 开发人员来说拓展成本也比较低。不过前期需要对rocketmq的一些概念和各种衡量标准要有明确的认知。

    本文没有对’mqadmin’的具体指令和设计原理展开,将另开文章解释,有兴趣的可关注下,敬请期待~

    另外作者已开通微信订阅号,精品文章同步更新,欢迎关注~
    亦山札记公众号

    展开全文
  • ZABBIX5.0监控安装手册

    千次阅读 2020-07-23 20:49:00
    友情提示:该教程是以官网的安装教程为基础进行了的优化,所有提供内容均为笔者验证可用。 什么是ZABBIX zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix能监视各种...

    该教程是以官网的安装教程为基础进行了的优化,所有提供内容均为笔者验证可用。

    提供安装方式有两种分别为:二进制安装、Docker容器安装(推荐)


    什么是ZABBIX

    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

    zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

    zabbix由2部分构成,zabbix server与可选组件zabbix agent。

    zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。


    准备工作

    系统准备(建议|可选)

    可以根据自身系统的要求选择性的参照此章节,如果是新安装的CentOS7操作系统建议执行该章节内容。

    • 备份镜像源

      # 备份源
      mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
      
    • 替换镜像源

      # 下载阿里云CentOS.repo
      curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
      
    • 关闭防火墙

      # 关闭防火墙
      systemctl stop firewalld.service
      
      # 撤销开机启动
      systemctl disable firewalld.service
      
    • 关闭安全增强

      # 设置SELinux的运行模式
      setenforce 0
      
      # 设置SELINUX=disabled
      sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
      
    • 安装EPEL源

      yum install -y epel-release
      
    • 安装开发组件

      # 常用开发组件
      yum groups install -y "Development Tools"
      
    • 重启系统

      reboot
      

    数据库安装(可选)

    使用MYSQL或者MariaDB数据库,如果已有现成数据库则可以跳过该步骤。

    注:Oracle公司收购了MySQL后,有将MySQL闭源的潜在风险。社区采用分支的方式来避开这个风险,因此诞生了MariaDB。部分大型互联网用户以及Linux发行商纷纷抛弃MySQL,转投MariaDB阵营。MariaDB是目前最受关注的MySQL数据库衍生版,也被视为开源数据库MySQL的替代品。

    如果打算Docker安装(推荐)也建议跳过此步骤,Docker有提供容器数据库安装。

    • 安装MariaDB

      yum install -y mariadb-server
      
    • 启动MariaDB

      # 启动MariaDB
      systemctl start mariadb.service
      
      # 设置为开启启动
      systemctl enable mariadb.service
      
    • 初始化数据库

      mysql_secure_installation
      

    数据库安装并初始化完成。


    ZABBIX安装

    本文提供安装方式有两种分别为:二进制安装、容器安装(强烈推荐)

    系统环境——

    • 发行版本:CentOS7.5 +
    • 内核版本:3.10 +

    二进制安装

    • 安装zabbix5.0镜像源

      # 安装Zabbix镜像源
      rpm -ivh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
      
      yum clean all
      
    • 安装zabbix-server-mysql与zabbix-agent

      yum install -y zabbix-server-mysql zabbix-agent
      
    • 安装zabbix-frontend

      开启Red Hat软件集合

      yum install -y centos-release-scl
      

      编辑/etc/yum.repos.d/zabbix.repo文件

      [zabbix-frontend]
      ...
      enabled=1
      ...
      
      yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
      
    • 配置zabbix数据库

      # 使用root用户登录(密码自行修改)
      mysql -uroot -proot
      
      # 新建zabbix用户与数据库
      MariaDB> create database zabbix character set utf8 collate utf8_bin;
      MariaDB> create user `zabbix`@`%` identified by 'Zabbix@Password';
      MariaDB> grant all privileges on zabbix.* to `zabbix`@`%`;
      
    • 初始化数据

      zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pZabbix@Password zabbix
      
    • Zabbix server配置数据库

      编辑配置文件/etc/zabbix/zabbix_server.conf

      DB开头的参数均为数据库参数,根据Mysql|MariaDB的配置修复即可。如下所示——

      ...
      DBHost=localhost
      ...
      DBPassword=Zabbix@Password
      ...
      
    • Zabbix前端配置PHP

      编辑配置文件/etc/opt/rh/rh-php72/php.ini

      ...
      max_execution_time = 300
      ...
      post_max_size = 16M
      ...
      date.timezone = Asia/Shanghai
      ...
      

      编辑配置文件/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

      ...
      listen.acl_users = apache,nginx
      ...
      ; php_value[date.timezone] = Asia/Shanghai
      ...
      

      编辑配置文件/etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf

      # port
      listen 80;
      
      # server_ip_or_name
      server_name 192.168.1.100;
      
    • 启动Zabbix server和agent进程

      启动Zabbix server和agent进程,并为它们设置开机自启。

      # 启动
      systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
      
      # 开机自启
      systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
      
    • 进入UI安装界面

      输入nginx配置的host跟port,例如http://192.168.1.100进入后需要安装。

      点击下一步。

      这里是验证是否满足安装条件,我们之前修复改配置因此全部OK,直接下一步。

      输入数据库信息,之前笔者配置的密码是Zabbix@Password

      这里要注意Zabbix server需要与配置保持一致。

      确认无误之后直接下一步。

      完成安装。

    • 登录zabbix

      账号/密码为Admin/zabbix

      成功登录后进入zabbix监控页面。


    docker安装

    推荐使用容器化安装zabbix。

    • 安装mysql

      docker run -it --rm \
      --privileged=true \
      --name mysql-server \
      -p 3306:3306 \
      -v /opt/docker/zabbix/zabbix-mysql/log:/var/log/mysql \
      -v /opt/docker/zabbix/zabbix-mysql/data:/var/lib/mysql \
      -v /opt/docker/zabbix/zabbix-mysql/conf:/etc/mysql \
      -e MYSQL_ROOT_PASSWORD="root" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="Zabbix@Password" \
      -e TZ="Asia/Shanghai" \
      -d mysql:5.7 \
      --character-set-server=utf8mb4 \
      --collation-server=utf8mb4_bin \
      --lower_case_table_names=1
      
    • 安装zabbix-java-gateway

      docker run -it --rm \
      --privileged=true \
      --name zabbix-java-gateway \
      -d zabbix/zabbix-java-gateway:latest
      
    • 安装zabbix-server

      docker run -it --rm \
      --privileged=true \
      --name zabbix-server-mysql \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="Zabbix@Password" \
      -e MYSQL_ROOT_PASSWORD="root" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --link mysql-server:mysql \
      --link zabbix-java-gateway:zabbix-java-gateway \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:latest
      
    • 安装zabbix-web

      docker run -it --rm \
      --privileged=true \
      --name zabbix-web-nginx-mysql \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="Zabbix@Password" \
      -e MYSQL_ROOT_PASSWORD="root" \
      -e ZBX_SERVER_HOST="zabbix-server-mysql" \
      -e ZBX_SERVER_PORT=10051 \
      -e ZBX_POSTMAXSIZE=1024M \
      -e PHP_TZ="Asia/Shanghai" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 18080:8080 \
      -p 18443:8443 \
      -p 10080:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest
      
    • 安装zabbix-agent

      docker run -it --rm \
      --privileged=true \
      --name zabbix-agent \
      -e ZBX_HOSTNAME="Zabbix server" \
      -e ZBX_SERVER_HOST="zabbix-server-mysql" \
      -p 10050:10050 \
      --link zabbix-server-mysql:zabbix-server \
      -d zabbix/zabbix-agent:latest
      
    • 修改host地址

      注意因为agent是使用容器,因此这里需要配置容器IP。

      # 获取zabbix-agent的IP地址
      docker inspect --format='{{.NetworkSettings.IPAddress}}' zabbix-agent
      

    尾声

    以上就是ZABBIX5.0的安装流程,后续笔者会介绍ZABBIX的功能模块与实践。


    展开全文
  • Linux进程监控 + 钉钉通知

    千次阅读 2017-12-22 09:59:42
    进程监控脚本背景启动于正式服务器的项目,有时会因为某种因素,例如docker内存超限因而容器崩溃(前不久就遇过…),如服务器内存不足或IO读写异常而崩溃….等等等等。而这些原因,都可能影响到项目的正常运行,...

    进程监控脚本

    背景

    启动于正式服务器的项目,有时会因为某种因素,例如docker内存超限因而容器崩溃(前不久就遇过…),如服务器内存不足或IO读写异常而崩溃…等等等等。而这些原因,都可能影响到项目的正常运行,严重地将会被kill掉。那么,在服务器上弄一套进程监控方案就很有必要了!

    说明

    进程监控采用shell脚本的形式,结合日常开发使用的CI工具(如Jenkins),再通过Linux服务器的定时器,定时监控进程,当进程被killed,服务自动重启。

    • 进程:shell script
    • 集成:Jenkins
    • 打包:Jar

    简单介绍Jenkins

    Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

    进入主题

    注:install jenkins的过程暂不在本篇介绍,若有时间,会整理出来。

    简单几句话带过:

    jenkins新建一个需持续集成的maven项目,然后配置了从git拉取源码之后,通过执行shell脚本打包到Linux服务器运行。

    流程

    一、Jenkins shell脚本

    示例

    PROJECT=online_store
    MOD=cms
    PORT=9065
    IP=xxx
    ssh root@yyy sh -xe deploy-production.sh $PROJECT $JOB_NAME $MOD $PORT $IP
    

    解析:
    xxx:根据需要传该参数,如远程打包到不同服务器上,内网 or 公网,对传输都会有影响,涉及的东西与本篇侧重点不一样,故不作拓展

    yyy:这个IP务必是 deploy-production.sh 脚本所在的服务器,至关重要,影响着打包及进程监控,可理解为Jenkins持续集成到Linux服务器的入口

    二、Linux服务器执行的初始脚本

    注:初始脚本,言下之意是Jenkins与Linux服务器交互的第一个脚本,其余操作包括监控都与初始脚本息息相关

    由于是为公司持续集成写的脚本,涉及一些隐私,故不全贴出来,仅贴关键部分。

    1、接收参数

    PROJECT=$1
    JOB=$2
    MOD=$3
    PORT=$4
    IP=$5
    

    2、主要流程代码根据企业需求不同而编写不同代码,关键执行代码如下:

    nohup /usr/bin/java -jar -Dsun.jnu.encoding=UTF8 -Dfile.encoding=UTF8 -Dspring.profiles.active=production,swagger$MOD $JOB.jar >> /dev/null 2>&1 &
    

    说明:可选择性开启swagger。

    3、注意注意!!!监控代码执行语句…

    sh ~/monitor_exec.sh $PROJECT $JOB $MOD $PORT
    

    解析:显而易见,执行 monitor_exec.sh 脚本。

    三、监控脚本的初始脚本

    作用:将监控脚本写入定时器。

    关键代码:

    #!/bin/sh
    PROJECT=$1
    JOB=$2
    MOD=$3
    PORT=$4
    
    mkdir -p ~/cron/
    touch ~/cron/$PROJECT.cron
    file=~/cron/$PROJECT.cron
    
    echo 'cron path:'$file;
    
    if test -s $file; then
      echo "cron文件内容不为空";
    else
      echo "* * * * * sh /root/monitor.sh $PORT $PROJECT $MOD $JOB" >> ~/cron/$PROJECT.cron
      crontab ~/cron/$PROJECT.cron
    

    解析:中间echo的cron path路径,会输出到Jenkins日志里。目的是将执行 monitor.sh 写入服务器定时任务。cron规则就不介绍了,自定义即可。

    说明:监控脚本的执行过程,应该加上日志输出,这是好习惯,以便做记录!

    四、重点:监控脚本

    关键代码

    #!/bin/sh
    PID=`/usr/sbin/lsof -i:$1 | grep -E 'java|node' | awk '{print $2}'`
    PROJECT=$2
    MOD=$3
    JOB=$4
    
    mkdir -p ~/log
    touch ~/log/$PROJECT.log
    
    if test -z "$PID"
    then
      echo '后台自启动' >> ~/log/$PROJECT.log
    
      nohup /usr/bin/java -jar -Dsun.jnu.encoding=UTF8 -Dfile.encoding=UTF8 -Dspring.profiles.active=test,swagger$MOD ~/$PROJECT/$JOB.jar >> /dev/null 2>&1 &
    
      sleep 5
      echo '启动成功!!!' >> ~/log/$PROJECT.log
    
    else
      echo 'service has been started' >> ~/log/$PROJECT.log
    fi
    

    解析:Jar包会运行于服务器的一个端口上,与其同时也会对应一个进程号,以一定的时间规则去检查进程号是否存在,判断不在自启动即可,逻辑很简单。

    拓展部分:集成钉钉通知

    背景:进程被kill,若是企业开发人员想要知道被kill的原因,便会查看日志,而通知就很有必要了。由于所在企业使用钉钉工作,因此集成在钉钉机器人,可实时通知开发人员。

    关键代码

    echo '钉钉通知开始' >> ~/log/$PROJECT.log
    
    curl 'https://oapi.dingtalk.com/robot/send?access_token= xxx ' \
       -H 'Content-Type: application/json' \
       -d '
      {"msgtype": "text",
        "text": {
            "content": "钉钉--- jiayuan 监控测试,killed port:'$1',project:'$PROJECT' has been killed,已重启"
         }
      }'
    
      sleep 3
      echo '钉钉通知结束' >> ~/log/$PROJECT.log
    

    说明:
    xxx:填上对应钉钉机器人的access_token即可。

    注:脚本现在还一直在迭代,为了让脚本更强大、更健壮,我也会一直持续地完善…

    相关截图

    日志

    钉钉通知

    查看定时任务

    总结

    好了,真真真好久没写博客了,最近有些许忙,虽然有好多好多新鲜玩意想写,但一直没机会分享!

    本篇依旧介绍一直以来颇有兴趣的服务器部分,但架构一个更完善、更健壮的开发体系,还有很多很多东西要学…

    展开全文
  • 各大公司的大数据质量监控平台

    万次阅读 2018-08-09 08:31:41
    上述主要分析了当前各大公司主要在使用或者开发的数据质量方面的平台,无论是离线数据监控还是实时数据监控,均有涉及。然而可能你的公司没有这么多的人力或者物力,但是由于数据量的增长,需要考虑数据治理方面的...
  • exporter安装mysqld_exporter安装redis_exporter安装Grafana配置grafana-node_exporter仪表版配置grafana-mysqld_exporter仪表版配置grafana-redis_exporter仪表版安装Altermanager(Altermanager监控告警) ...
  • 监控Gitlab备份整个过程并且邮件提醒备份结果 的功能。 二、修改Gitlab服务器上的脚本 首先 我们查看Gitlab服务器上的定时任务,使用 vi /etc/crontab 命令打开 /etc/crontab 文件 vi /etc/crontab ...
  • zabbix监控系统介绍及安装部署

    千次阅读 2021-01-25 12:31:45
    1,监控介绍 (1)、Cacti cacti是一套基于PHP、MySQL、SNMP 及 RRD Tool开发的监测图形分析工具,Cacti是使用轮询的方式由主服务器向设备发送数据请求来获取设备上状态数据信息的,如果设备不断增多,这个轮询的过程就...
  • Python磁盘监控、日志分析监控脚本

    万次阅读 2015-09-28 23:15:06
    因为公司异常监控系统还不够完善,特意在Linux服务器上加上Python监控脚本来实现简单的监控功能。功能: 1、磁盘使用率报警功能。在磁盘使用率超过我们定义的阈值时,会发送邮件到我们的邮箱来通知我们磁盘空间将要...
  • 早上买早点,扫码下单,用户在微信中会收到下单成功的服务通知。 扫码出地铁后,手机会收到APP支付通知。 微信、支付宝、刷卡消费后,手机会收到短信通知。 在海底捞吃完火锅,扫结账小票上的开票二维码开电子...
  • 集成开源技术的性能监控平台

    千次阅读 2019-08-08 10:28:30
    商业版的性能监控平台确实强大,但是对于很多初创公司来说,一般不会选择昂贵的商业监控平台,更多的是选用开源的监控系统,比如Zabbix。但是无论多么强大的开源监控平台,基本都不能满足所有的监控需求,比如没有...
  • 关于MYSQL的轮询与监控一点点小心得

    千次阅读 2017-09-11 20:44:55
    好久都没有动过编程这种东西了,之前用帝国CMS帮公司建了一个在线文档系统,文档转换也一直用第三方的,经常出一些问题,又没有源码可以改可以看的,时间过去久了,越来越麻烦,只能动手自己写一个。 这次自己写的...
  • linux下Nagios远程监控安装与配置详解

    千次阅读 2010-07-07 16:12:00
    要改变这种被动局面,我一直在找好的办法来解决,下面讲讲网络监控软件Nagios,我个人认为它最大的好处是可以发故障报警短信—只要Nagios监控的对象发生故障,系统就会自动发送短信到手机上,虽然Nagios十分受用,但...
  • Tomcat监控系列——监控工具介绍

    万次阅读 2015-01-28 11:24:51
    最近公司windows服务器刚做完Nginx+tomcat的负载均衡处理,下一步想实现对后台服务软件tomcat和nginx服务的监控。此处我们想实现的不是对性能等各项指标的监控,而是服务能否正常访问,若出现异常希望能重启服务,...
  • 16 网站运行监控

    千次阅读 2021-05-10 21:48:17
    “不允许没有监控的系统上线”,这是许多网站架构师在做项目上线评审时常说的一 句话。网站运行监控对于网站运维和架构设计优化至关重要,运维没有监控的网站,犹 如驾驶没有仪表的飞机。盲人骑瞎马,夜半临深渊而...
  • Prometheus的监控解决方案(含监控kubernetes)

    万次阅读 多人点赞 2018-07-30 13:51:03
    prometheus的简介和安装 Prometheus(普罗米修斯)是一个开源系统监控和警报工具,最初是在SoundCloud建立的。自2012年成立以来,许多公司和组织都采用了普罗米修斯,该项目拥有一个非常活跃的开发者和用户社区。它...
  • 一些好用的开源监控工具汇总

    万次阅读 2018-10-08 11:14:29
    监控系统是整个 IT 架构中的重中之重,小到故障排查、问题定位,大到业务预测、运营管理,都离不开监控系统,可以说一个稳定、健康的 IT 架构中必然会有一个可信赖的监控系统。 但是,难道监控就只是监控?多年来,...
  • Promethus(普罗米修斯)监控

    万次阅读 2020-08-02 16:28:52
    某某某公司是一家电商网站,由于公司的业务快速发展,公司要求对现有机器进行业务监控,责成运维部门来实施这个项目。 任务要求 1)部署监控服务器,实现7x24实时监控 2)针对公司的业务及研发部门设计监控系统,...
  • linux load 监控,负载监控 。shell 监控cpu,memory,load average,记录到log,当负载压力时,发电邮通知管理员。
  • 服务器运维监控知识体系

    千次阅读 2020-05-15 14:24:57
    从来没讲过运维,因为我觉得运维这种东西不需要太多的知识面,然后我一个做了运维朋友告诉我大错特错,...当然,对监控不是很明白的朋友们,看了以下文章可能会对监控整个体系有比较深刻的认识。 一、监控目标 每个人
  • 搞定Prometheus普罗米修斯监控系统

    千次阅读 2021-01-17 00:33:59
    学习目录 能够安装prometheus服务器 能够通过安装node_exporter监控远程linux 能够通过安装mysqld_exporter监控远程...AAA公司是一家电商网站,由于公司的业务快速发展,公司要求对现有机器进行为业务监控,责成运维
  • 服务端监控方案

    千次阅读 2017-03-21 19:30:29
    今明两天我们为大家介绍服务端监控方案,为方便大家碎片化时间阅读,我们将本文分为上下两部分,今天先讲讲需求说明、监控方案、监控方案决策。对于任何一个服务端应用来说,监控都是至关重要的一环。一个系统在运行...
  • 静态业务:高并发、采用nginx,lighttpd,根据自己的掌握程度或公司的要求。 动态业务:采用nginx和Apache均可。 既有静态业务又有动态业务:nginx或Apache,不要多选要单选。 动态业务可以由前端代理(haproxy)...
  • 服务端监控

    千次阅读 2016-06-21 11:42:39
    java服务端监控平台设计 arganzheng's Weblog 2015-06-08 117 阅读   需求 功能性监控(availability):我们希望能够及时的发现线上的bug,异常。性能监控与调优(performance):我们希望能够识别...
  • 0、前言  做为公司的服务器运维攻城狮兼程序猿,服务器的不稳定一直是偶的心头病... “监控宝是由北京云智慧科技所提供的一项非免费服务,可以定时监控网站、服务和服务器器的可用率(Uptime)和响应时间(Response
  • ZooKeeper监控

    万次阅读 2014-03-21 17:57:07
    公司内部,有不少应用已经强依赖zookeeper,zookeeper的工作状态直接影响它们的正常工作。目前开源世界中暂没有一个比较成熟的zookeeper-monitor, 于是开始zookeeper监控这块工作。 目前zookeeper-monitor能做...
  • Redis 服务监控

    千次阅读 2015-04-08 23:07:15
    Redis现在在很多公司中应用已经很广泛了,但是如何监控redis,实时的观察redis的性能,下面就关于Redis的常用监控介绍一下。
  • 监控ElasticSearch性能指标

    万次阅读 2017-10-09 09:31:36
    这篇文章是关于Elasticsearch性能指标的4部分系列的第1部分。在这篇文章中,我们将介绍Elasticsearch如何工作,并探索您应该监控的关键指标。第2部分解释了如何收集Elasticsearch的性能指标,第3部分将介绍如何使用...
  •  - 集团下属的各二级单位和大连港务局之间采用双设备、双链路,... - 各种信息化应用系统比较多,无法通过一个统一的平台进行监控管理和报警,针对各平台上的数据库和Oracle应用服务器(Oracle Application Server)
  • zabbix 监控介绍

    万次阅读 2021-03-13 14:52:05
    一、监控介绍 你用过哪些监控软件? zabbix 和 nagios、cacti、ganglia 有什么区别? zabbix 有那些好处? zabbix 的监控流程是什么? zabbix 常见监控项有那些? 1、Cacti Cacti 是一套基于 PHP、MySQL...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,455
精华内容 23,382
关键字:

关于公司安装监控的通知