• zabbix监控nginx+php-fpm,mysql+主从复制+高可用,tomcat,redis web状态


     zabbix监控对象区分

    • 使用SNMP监控交换
    • 使用IPMI监控服务器硬件
    • 使用Agent监控服务器
    • 使用JMX监控JAVA

    SNMP监控流程

    1. 交换机上开启snmp
    2. 在zabbix上添加监控(设置SNMP interfaces)
    3. 关联监控模版、

    IPMI

    建议使用自定义item监控服务器硬件,在本地执行ipmitool命令来获取数据

    可以在本地执行ipmitool命令获取数据(命令需要安装)连接远程控制卡监控

     JMX(使用Zabbix Java Gateway代理)

    用来获取java数据,实现监控tomcat

    安装zabbix-agent客户端

    Zabbix监控MySQL数据库操作

    需要部署一个MySQL服务和一个zabbix-agentd客户端   #部署过程略,不会看前边博文

     编写监控脚本

    在nginx服务器(192.168.0.221)上安装一个MySQL下面是监控mysql状态的一个shell脚本,内容如下:

    mkdir -p /server/scripts              #创建文件
    vim /server/scripts/check_mysql.sh       #创建脚本
    #!/bin/bash
    MySQL_USER="root"
    MySQL_PWD="123456"
    MySQL_HOST="127.0.0.1"
    MySQL_PORT="3306"
    MySQL_CONN="/usr/local/mysql/bin/mysqladmin -u${MySQL_USER} -h${MySQL_HOST} -P${MySQL_PORT} -p${MySQL_PWD}"
    if [ $# -ne "1" ];then
        echo "arg error!"
    fi
    case $1 in
            Uptime)
                    result=`${MySQL_CONN} status | cut -f2 -d":" | cut -f1 -d "T"`
                    echo $result
            ;;
        Com_update)
            result=`${MySQL_CONN} extended-status | grep -w "Com_update" | cut -d"|" -f3`
            echo $result
                    ;;
        Slow_querles)
                    result=`${MySQL_CONN} status | cut -f5 -d":" | cut -f1 -d"O"`
                    echo $result
            ;;
        Com_select)
            result=`${MySQL_CONN} extended-status | grep -w "Com_select" | cut -d "|" -f3`
            echo $result
                    ;;
            Com_rollback)
                    result=`${MySQL_CONN} extended-status | grep -w "Com_rollback" | cut -d"|" -f3`
                    echo $result
            ;;
        Questions)
            result=`${MySQL_CONN} status | cut -f4 -d":" | cut -f1 -d"S"`
            Com_insert)
                    result=`${MySQL_CONN} extended-status | grep -w "Com_insert" | cut -d"|" -f3`
                    echo $result
            ;;
        Com_delete)
            result=`${MySQL_CONN} extended-status | grep -w "Com_delete" | cut -d"|" -f3`
            echo $result
                    ;;
            Com_commit)
                    result=`${MySQL_CONN} extended-status | grep -w "Com_commit" | cut -d"|" -f3`
                    echo $result
            ;;
        Bytes_sent)
            result=`${MySQL_CONN} extended-status | grep -w "Bytes_sent" | cut -d"|" -f3`
            echo $result
                    ;;
            Bytes_received)
                    result=`${MySQL_CONN} extended-status | grep -w "Bytes_received" | cut -d"|" -f3`
                    echo $result
            ;;
        Com_begin)
            result=`${MySQL_CONN} extended-status | grep -w "Com_begin" | cut -d"|" -f3`
            echo $result
                    ;;
            *)
                    echo "Usage:$0(Uptime|Com_update|Slow_querles|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
            ;;
    esac

    在zabbix-agent端创建自定义键值配置文件

    #创建mysql.status的键值
    chmod +x /server/scripts/check_mysql.sh
    chown zabbix.zabbix /server/scripts/check_mysql.sh
    
    vim /etc/zabbix/zabbix_agentd.d/mysql_status.conf 
    UserParameter=mysql.status[*],/server/scripts/check_mysql.sh $1
    #删除旧键值模版
    rm -rf /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf 
    #创建mysql.ping和mysql.version的键值
    vim /etc/zabbix/zabbix_agentd.d/mysql_status.conf 
    UserParameter=mysql.status[*],/server/scripts/check_mysql.sh $1
    UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin -uroot -p123456 ping | grep -c alive        #监控数据库可否能ping通
    UserParameter=mysql.version,/usr/local/bin/mysql -V     #监控数据库的版本(防止手欠升级的)
    #重启zabbix-agentd服务
    /etc/init.d/zabbix-agent restart

    在zabbix-server端测试键值

     zabbix_get -s 192.168.50.168 -p 10050 -k "mysql.status[Uptime]"
    1317
    zabbix_get -s 192.168.50.168 -p 10050 -k "mysql.status[Com_commit]"
    0
    zabbix_get -s 192.168.50.168 -p 10050 -k "mysql.status[Bytes_sent]"
    10249
    zabbix_get -s 192.168.50.168 -p 10050 -k "mysql.status[Bytes_received]"
    1633
    zabbix_get -s 192.168.50.168 -p 10050 -k "mysql.ping"
    1
    zabbix_get -s 192.168.50.168 -p 10050 -k "mysql.version"
    /usr/local/bin/mysql  Ver 14.14 Distrib 5.5.32, for linux2.6 (x86_64) using readline 5.1

    在zabbix-server端Web前台引入zabbix监控MySQL的模版

    zabbix自带监控MySQL的模版,我们只需要将模版引入到主机即可 配置-->主机-->选择主机-->模板,然后将MySQL模版连接到此主机即

     zabbix监控mha高可用

     监控mha原理在于监控进程是否有mha进程,因为一旦主库宕机,mha进程会自动结束

    自定义键值+监控命令

    vim /etc/zabbix/zabbix_agentd.d/mha.conf
    UserParameter=mha,/usr/bin/ps -ef |grep "masterha_manager" |grep -v "grep"|wc -l
    键值mha 查看后台进程过滤出 过滤出mha进程 统计个数
    /etc/init.d/zabbix-agent restart            #重启服务
    #server端键值测试
    zabbix_get -s 192.168.50.168 -p 10050 -k 'mha'
    1       #一个高可用进程存活     

    在zabbix页面设置监控mha

     设置报警器

     

    如果mha不等于1报警(既后台没有mha进程)

     zabbix监控主从复制

    监控主从复制的原理在于监控主从复制状态页,我们用show slave status;查看主从复制状态页,会发现如果主从状态正常,状态页显示两个Yes,所以我们监控状态页的两个Yes即可

     自定义键值+监控命令

    vim /etc/zabbix/zabbix_agentd.d/zc.conf
    UserParameter=zcfz,/usr/local/mysql/bin/mysql -uhehe -e "show slave statusG" | grep Yes|wc -l
    定义键值主从复制 这里用一个低权限的为设密码的用户 查看状态页 过滤出两个yes
    /etc/init.d/zabbix-agent restart            #重启服务
    #server端键值测试
    zabbix_get -s 192.168.50.168 -p 10050 -k 'zcfz'
    2                       #两个yes

    在zabbix页面设置监控主从复制

    如果过滤出的yes不是两个则报警

    Zabbix监控Nginx

     开启nginx状态页

    #在nginx的配置文件中,添加status配置
    location = /nginx-status {
            stub_status on;
            access_log off;
            allow 192.168.50.173;
            allow 192.168.50.172;            #设置权限只允许内网查看
            deny all;
            }

    访问设置好的nginx-status链接

    #在zabbix-server上通过如下方式获取nginx状态页面信息:
    
    curl 192.168.50.173/nginx-status Active connections: 1 server accepts handled requests 634 634 618 Reading: 0 Writing: 1 Waiting: 0
    nginx status详细说明如下: Active connections:对后端发起的活动连接数; accepts:nginx总共处理了多少个连接; handled:nginx成功创建了几次握手; requests:nginx总共处理了多少请求。 Reading:nginx读取客户端的header数; Writing:nginx返回给客户端的header数; Waiting:nginx请求处理完成,正在等待下一请求指令的连接

    编写nginx状态监控脚本

    vim /server/nginx_status.sh
    #!/bin/bash
    # Set Variables
    HOST="192.168.50.173"
    PORT="80"
    #Functions to return nginx stats
    function active(){
        /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | grep "Active" | awk '{print $NF}'
    }
    function reading(){
        /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | grep "Reading" | awk '{print $2}'
    }
    function writing(){
        /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | grep "Writing" | awk '{print $4}'
    }
    function accepts(){
        /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | awk 'NR==3' | awk '{print $1}'
    }
    function handled(){
        /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | awk 'NR==3' | awk '{print $2}'
    }
    function requests(){
        /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null | awk 'NR==3' | awk '{print $3}'
    }
    function ping(){
        /sbin/pidof nginx | wc -l
    }
    # Run the requested function
    $1      

    给脚本可执行权限并且授权

    chmod +x /server/nginx_status.sh
    chowm zabbix:zabbix /server/nginx_status.sh

    在zabbix-agent端配置nginx键值配置文件

    vim /etc/zabbix/zabbix_agentd.d/nginx.conf
    UserParameter=nginx.active,/usr/bin/curl -s "http://192.168.50.173:80/nginx-status" | grep "Active" | awk '{print $NF}'                         #监控活动连接数
    UserParameter=nginx.status[*],/server/nginx_status.sh $1  
         #监控状态
    vim /etc/zabbix/zabbix_agentd.d/nginx.conf
    UserParameter=nginx.active,/usr/bin/curl -s "http://192.168.50.173:80/nginx-status" | grep "Active" | awk '{print $NF}'     #监控活动连接数
    UserParameter=nginx.status[*],/server/nginx_status.sh $1                #监控状态
    /etc/init.d/zabbix-agent restart        #重启服务

    在zabbix-server端测试键值

    zabbix_get -s 192.168.50.173 -k "nginx.status[reading]" -p 10050
    0
    zabbix_get -s 192.168.50.173 -k "nginx.status[active]" -p 10050
    1
    zabbix_get -s 192.168.50.173 -k "nginx.status[ping]" -p 10050
    1

    接下来在Web端导入nginx监控模版 创建监控nginx主机 略 

    Zabbix监控PHP-FPM

     启用php-fpm状态功能

    修改php-fpm配置文件,确保如下配置是打开状态:

    vim /usr/local/php/etc/php-fpm.conf
    pm.status_path = /status                #第360行去掉注释开启状态功能
    #重启php-fpm服务
    pkill php-fpm
    /usr/local/php/sbin/php-fpm

    nginx配置php-fpm状态页面

    vim /usr/local/nginx/conf/nginx.conf
     location = /status {
                include fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
                }       #加入此项location规则        

    #重启动nginx服务
    nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

    /usr/local/nginx/sbin/nginx -s reload

    状态页浏览器访问测试

    #具体含义说明如下
    [root@Zabbix_Server nginx]# curl 127.0.0.1/status
    pool:                 www           #fpm进程池名称,大多数为www
    process manager:      dynamic       #进程管理方式(static,dynamic or nodemand.dynamic
    start time:           26/Jan/2018:02:56:58 -0500    #启动日期
    start since:          2972          #运行时长
    accepted conn:        517           #当前FPM进程池接受的请求数
    listen queue:         0             #请求等待队列,如果值不是0,那么要增加FPM的进程数
    max listen queue:     4             #请求等待队列最高的数量
    listen queue len:     128           #socket等待队列长度
    idle processes:       2             #空闲进程数量
    active processes:     1             #活跃进程数量
    total processes:      3             #总进程数量
    max active processes: 3             #最大的活跃进程数量(FPM启动开始算)
    max children reached: 0             #达到最大子进程的次数,如果值不为0,那么需要调高最大进程数
    slow requests:        0             #当启用了php-fpm的slow-log功能时,如果出现php-fpm慢请求这个计数器会增加,一般不当的MySQL查询会触发这个值

    修改Zabbix agent配置

    vim /etc/zabbix/zabbix_agentd.d/userparameter_php-fpm.conf
    UserParameter=php-fpm.status[*],/usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<$1>" | awk -F "[>|<]" '{print $$3}'
    #这里需要注意在脚本里如果写成$3的话,脚本会认识是一个变量,因此我们需要用$$3
    #重启动agent客户端
    /etc/init.d/zabbix-agent restart
    Shutting down Zabbix agent:                                [  OK  ]
    Starting Zabbix agent:                                     [  OK  ]

    进行键值配置文件测试

    zabbix_get -s 192.168.50.173 -p 10050 -k "php-fpm.status[process-manager]"
    dynamic

     Zabbix图形界面导入我们的监控模版

    Zabbix的Web监测功能

    Zabbix的Web监测功能,没有任何依赖,不需要agent端,全部依赖于Server的主动监测 

     

    Zabbix监控Tomcat

    zabbix监控tomcat,需要zabbix_server开启java poller,zabbix_java开启javaGateway,端口10052,Tomcat JMX开启12345端口,提供性能数据。

    配置Tomcat JMX

    vim /usr/local/tomcat/bin/catalina.sh
    在249行加入
    CATALINA_OPTS="-server
    -Xms256m
    -Xmx512m
    -XX:PermSize=64M
    -XX:MaxPermSize=128m
    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -Djava.rmi.server.hostname=192.168.50.166
    -Dcom.sun.management.jmxremote.port=12345"
    #此处注意空格,配置完最好重启,特别容易报错tomcat起不来

    这里需要注意,必须增加-Djava.rmi.server.hostname选项,并且后面的IP就是tomcat服务器的IP

    重启Tomcat

    /usr/local/tomcat/bin/shutdown.sh 
    /usr/local/tomcat/bin/startup.sh 
    netstat -antup | grep java
    tcp6       0      0 :::46112                :::*                    LISTEN      1322/java           
    tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1322/java           
    tcp6       0      0 :::8009                 :::*                    LISTEN      1322/java           
    tcp6       0      0 :::8080                 :::*                    LISTEN      1322/java           
    tcp6       0      0 :::44820                :::*                    LISTEN      1322/java           
    tcp6       0      0 :::12345                :::*                    LISTEN      1322/java        
    tcp6       0      0 192.168.50.166:46112    192.168.50.172:34827    ESTABLISHED 1322/java  

    编译zabbix,加入java支持

    zabbix server服务器上需要安装JDK,并需要设置JAVA_HOME,以让系统能够识别到jdk的路径

    #解压jdk
    tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/
    ln -s /usr/local/jdk1.8.0_60/ /usr/local/jdk
    #配置java环境变量
    sed -i.ori '$a export JAVA_HOME=/usr/local/jdk
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
    #让环境变量立刻生效
    source /etc/profile
    java -version

    在zabbix server服务器上,编译安装zabbix-server,需要加上--enable-java,以支持jmx监控,如果之前的zabbix server没加此选项,那么需要重新编译安装,编译参数如下:

    ./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --enable-java --with-libxml2

    重新编译zabbix-server服务器端

    #重新编译zabbix-server服务器端
    /etc/init.d/zabbix_server stop
    cd /usr/src/zabbix-3.2.4/
    
    ./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --enable-java --with-libxml2
    
    make;make install
    
    cd /usr/local/zabbix/sbin/
    
    ll 总用量
    8608 -rwxr-xr-x 1 root root 1165774 8月 31 05:06 zabbix_agentd drwxr-xr-x 4 root root 4096 8月 31 05:06 zabbix_java #多了一个目录 -rwxr-xr-x 1 root root 3672055 8月 31 05:06 zabbix_proxy -rwxr-xr-x 1 root root 3966037 8月 31 05:06 zabbix_server
    cd zabbix_java/
    
    ll total
    20 drwxr-xr-x 2 root root 4096 Jan 25 22:22 bin drwxr-xr-x 2 root root 4096 Jan 25 22:22 lib -rw-r--r-- 1 root root 791 Jan 25 22:22 settings.sh #java gateway配置脚本 java gateway服务的配置脚本settings.sh不需要修改任何配置 -rwxr-xr-x 1 root root 545 Jan 25 22:22 shutdown.sh #停止java gateway服务 -rwxr-xr-x 1 root root 2025 Jan 25 22:22 startup.sh #启动java gateway服务

    启动java Gateway服务

    /usr/local/zabbix/sbin/zabbix_java/startup.sh 
    netstat -antup | grep 10052
    tcp        0      0 :::10052                    :::*                        LISTEN      13126/java

     修改zabbix server 配置

    默认的情况下,zabbix server未启用javaPollers,需要修改zabbix_server.conf的如下配置

    vim /usr/local/zabbix/etc/zabbix_server.conf
    215  JavaGateway=192.168.50.172     #JavaGateway的地址(本机地址)
    223  JavaGatewayPort=10052
    231  StartJavaPollers=5
    
    #重启服务
    /etc/init.d/zabbix_server restart
    #查看已经打开的java poller进程 ps
    -ef | grep "java poller" | grep -v grep zabbix 1591 1534 0 16:20 ? 00:00:01 /usr/local/sbin/zabbix_server: java poller #1 [got 0 values in 0.000005 sec, idle 5 sec] zabbix 1592 1534 0 16:20 ? 00:00:01 /usr/local/sbin/zabbix_server: java poller #2 [got 0 values in 0.000003 sec, idle 5 sec] zabbix 1593 1534 0 16:20 ? 00:00:01 /usr/local/sbin/zabbix_server: java poller #3 [got 0 values in 0.000003 sec, idle 5 sec] zabbix 1594 1534 0 16:20 ? 00:00:01 /usr/local/sbin/zabbix_server: java poller #4 [got 0 values in 0.000003 sec, idle 5 sec] zabbix 1595 1534 0 16:20 ? 00:00:01 /usr/local/sbin/zabbix_server: java poller #5 [got 0 values in 0.000011 sec, idle 5 sec]

    Zabbix图形界面配置

    新建主机选择JMX接口

    然后添加主机最后导入摸板

    Zabbix监控redis-cluster集群

    利用查看状态监控 redis-cli -p 7001 cluster nodes   原理和mha类似 有空再做    
  • 相关阅读:
    [LeetCode] 210. Course Schedule II
    [LeetCode] 207. Course Schedule
    [LeetCode] 450. Delete Node in a BST
    [LeetCode] 1122. Relative Sort Array
    [LeetCode] 1013. Partition Array Into Three Parts With Equal Sum
    [LeetCode] 173. Binary Search Tree Iterator
    [LeetCode] 208. Implement Trie (Prefix Tree)
    [LeetCode] 211. Add and Search Word
    [LeetCode] 449. Serialize and Deserialize BST
    [LeetCode] 236. Lowest Common Ancestor of a Binary Tree
  • 原文地址:https://www.cnblogs.com/ywrj/p/9556995.html
Copyright © 2020-2023  润新知