zoukankan      html  css  js  c++  java
  • Zabbix 监控MySQL、Apache、Nginx应用监控

    zabbix对第三方应用软件的监控,主要有两个工作难点,一个是编写自定义监控脚本,另一个是在编写模板并导入zabbix web中,编写脚本这个要根据

    监控需求定制即可,而编写模板文件有些难度,不过网上已经有很多已经写好的模板,我们可以直接拿来直接使用,所以,zabbix对应用软件的监控其实并不难。

    一、zabbix 监控 mysql应用实战
    本文首先要介绍的是zabbix对mysql的监控,这个是最简单的,因为zabbix已经自带了mysql监控的模板,我们只需要编写一个监控mysql的脚本即可,所以对mysql的监控可以分成两个步骤完成。

    1、zabbix添加自定义监控mysql脚本

    这里给出我们一个线上运行的mysql监控脚本check_mysql,内容如下:

    #!/bin/bash
    # 主机地址/IP
    MYSQL_HOST='127.0.0.1'
    # 端口
    MYSQL_PORT='3306'
    # 数据连接
    MYSQL_CONN="/usr/local/mysql/bin/mysqladmin  -h${MYSQL_HOST} -P${MYSQL_PORT}"
    
    # 参数是否正确
    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_queries) 
            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"` 
                    echo $result 
                    ;; 
        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_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|C
    om_begin)" 
            ;; 
    esac

    此脚本很简单,就是通过mysqladmin命令获取mysql的运行状态参数,因为要获取mysql运行状态,所以需要登录到mysql中获取状态值,但这个脚本中并没有添加登录数据库的用户名和密码信息,原因是密码添加到脚本中很不安全,另一个是在mysql5.7版本后,在命令行输入明文密码的话,都会提示如下信息:

    mysqladmin: [Warning] Using a password on the command line interface can be insecure.

    对待这个问题的解决方法是,将登录数据库的用户名和密码信息写入/etc/my.cnf文件中,类似如下:

    [mysqladmin]
    user=root
    password=xxxxxx

    这样,通过mysqladmin在命令行执行操作的话,会自动通过root用户和对应的密码登录到数据库中。

    2、zabbix agent端修改配置

    要监控mysql,就需要在mysql服务器上安装zabbix agent,然后开启agent的自定义监控模式,将上面脚本放到zabbix agent端的/etc/zabbix/shell目录下,然后进行授权:

    chmod o+x check_mysql
    chown zabbix.zabbix check_mysql

    接着,将如下内容添加到/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf文件中,注意,userparameter_mysql.conf文件之前内容全部删除或者注释掉。

    UserParameter=mysql.status[*],/etc/zabbix/shell/check_mysql.sh $1
    UserParameter=mysql.ping,HOME=/etc /usr/local/mysql/bin/mysqladmin ping  2>/dev/null| grep -c alive
    UserParameter=mysql.version,/usr/local/mysql/bin/mysql -V

    这里其实是自定义了三个监控项,分别是mysql.status、mysql.ping和mysql.version,注意自定义监控的写法。这三个自定义监控项键值在zabbix web中需要添加进去的。

    配置完成后,最后,重启zabbix agent服务使配置生效。

    3、Zabbix web界面引入模板

    zabbix自带了mysql监控的模板,因此只需将模板链接到对应的主机即可。
    点击web界面“配置”,选择“主机”,点击右上角“创建主机”,添加一台mysql主机,如下图所示:

    这里先添加一台mysql主机172.16.213.236,然后点击图中“模板”选项,点击“链接指示器”后面的选择按钮,选择“Template DB MySQL”模板,如下图所示:

    最后点击上图中红框标注的”添加”按钮,完成模板的链接。

    接着,点击web上面的“设置”选项,然后选择“模板”,找到“Template DB MySQL”模板,可以看到此模板已经添加了14个监控项,1个触发器,2个图形,1个应用集,然后点 “监控项”,即可显示监控项的名称和键值信息,如下图所示:

    这里重点需要关注的是每个监控项名称对应的“键值”一列的配置,这里的键值,必须和agent端自定义的监控键值保持一致。另外,可以看到,“mysql status”这个监控项有一个触发器,用来检查mysql的运行状态,最后,还需要关注的是这些监控项的监控类型是“zabbix客户端”,所有监控项都存放在了“MySQL”应用集中。

    所有设置完成后,监控mysql的172.16.213.236主机已经添加完成了。

    4、查看监控状态数据

    点击web上面的“监测中”选项,然后选择“最新数据”,即可看到监控项是否获取到了最新数据,如下图所示:

    通过过滤器进行过滤,即可查看mysql监控项返回的数据,可以看到“最新数据”一列中,已经获取到了mysql的状态数据,此外,在“名称”一列中,还可以看到“Template DB MySQL”模板中每个监控项对应的键值,例如mysql.status[Com_begin]、mysql.status[Bytes_received]、mysql.status[Bytes_sent],这些监控项键值与zabbix agent端自定义监控项的名称是完全对应的。

    有时候由于agent端配置的问题,或者网络、防火墙等问题,可能导致server端无法获取agent端的数据,此时在web界面上就会出现如下图信息:

    在此图中,可以从“最近检查记录”一列中查看最近一次的检查时间,如果监控项无法获取到数据,那么这个检查时间肯定不是最新的,此外,最后一列“信息”中也会给出错误提示,我们可以从错误提示中找到无法获取数据的原因,这将非常有助于排查问题。在没有获取到数据时,可以看到每列信息都是灰色的。

    5、测试触发器告警功能

    MySQL加入zabbix监控后,我们还需要测试一下,触发器告警动作是否正常,点击web上面的“监测中”选项,然后选择“问题”,即可看到有问题的监控项,如下图所示:

    在这个界面中,可以看到哪个主机出现了什么问题,以及问题持续的时间,还有问题的严重性,当触发器触发后,会激活触发器动作,也就是发送告警消息的操作,在上面的介绍中,我们配置了邮件告警,那么就来看看是否发送了告警邮件,接下来,点击web导航上面的“报表”选项,然后选择“动作日志”,即可看到动作事件的日志,如下图所示:

    此界面显示了监控项在发生故障后,触发器动作发送的消息事件,其中,“类型”一列指定是发送邮件信息,“接收者”一列是消息收件人的地址,“消息”一列是发送消息的详细内容,“状态”一列显示了告警邮件是否发送成功,如果发送不成功,最后一列“消息”会给出错误信息,我们根据错误提示进行排错即可。

    二、zabbix 监控 apache应用实战
    zabbix对apache的监控,稍微复杂一些,但基本流程还是两个步骤,第一个是编写监控apache的脚本,第二个是创建apache监控模板。

    1、开启apache状态页

    要监控apache的运行状态,需要在apache的配置中开启一个apache状态页面,然后再通过编写脚本获取这个状态页面的数据即可达到监控apache的目的,这里我们以apache2.4版本为例,如何安装httpd不做介绍,主要介绍下如何打开apache的Server Status页面,要打开状态页面,只需在apache配置文件httpd.conf文件最下边加入如下代码段:

    ExtendedStatus On
    <location /server-status>
    SetHandler server-status
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1 172.16.213.132
    </location>
    或者
    ExtendedStatus On
    <location /server-status>
    SetHandler server-status
    Require ip 127.0.0.1 172.16.213.132
    </location>

    其中:

    ExtendedStatus On: 表示开启或关闭扩展的status信息,设置为On后,通过ExtendedStatus指令可以查看更为详细的status信息。但启用扩展状态信息将会导致服务器运行效率降低。

    第二行的/server-status表示以后可以用类似http://ip/server-status来访问, 同时也可以通过http://ip/server-status?refresh=N 方式动态访问,此url表示访问状态页面可以每N秒自动刷新一次。

    Require是apache2.4版本的一个新特效,可以对来访的IP或主机进行访问控制。 “Require host www.abc.com”表示仅允许www.abc.com访问apache的状态页面。“Require ip 172.16.213.132”表示仅允许172.16.213.132主机访问apache的状态页面。Require类似的用法还要如下几种:

     允许所有主机访问:Require all granted
     拒绝所有主机访问:Require all denied
     允许某个IP访问:Require ip ip地址
     禁止某个IP访问: Require not ip ip地址
     允许某个主机访问:Require host 主机名
     禁止某个主机访问 Require not host 主机名

    最后,重启apache服务即可完成httpd状态页面的开启。

    2、编写apache的状态监控脚本和zabbix模板

    apache状态页面配置完成后,接下来就需要编写获取状态数据的脚本了,脚本代码较多,大家可直接从如下地址下载即可:

    [root@iivey /]# wget  https://www.ixdba.net/zabbix/zabbix-apache.zip

    接着,就是编写apache的zabbix监控模板了,zabbix默认没有自带apache的监控模板,需要自己编写,这里我们直接将编写好的模板供大家下载,可以从如下地址下载apache zabbix模板:

    [root@iivey /]# wget https://www.ixdba.net/zabbix/zabbix-apache.zip

    获取监控数据的脚本文件和监控模板都编写完成后,接下来,还需要在要监控的apache服务器上(需要安装zabbix agent)上做两个步骤的操作,第一个步骤是将apache监控脚本放到需要监控的apache服务器上的/etc/zabbix/shell目录下,如果没有shell目录,自行创建一个即可。然后执行授权:

    [root@iivey shell]#chmod 755 zapache

    当然,zabbix_agentd.conf也是需要配置的,这个文件的配置方式前面已经介绍过,这里就不在多说了。

    第二个步骤是在apache服务器上的/etc/zabbix/zabbix_agentd.d目录下创建userparameter_zapache.conf文件,内容如下:

    UserParameter=zapache[*],/etc/zabbix/shell/zapache  $1

    注意这里/etc/zabbix/shell/zapache的路径。

    最后,重启zabbix-agent服务完成agent端的配置:

    [root@localhost zabbix]# systemctl  start zabbix-agent

    3、Zabbix图形界面导入模板

    点击web导航上面的“配置”选项,然后选择“模板”,点击右上角“导入”按钮,开始导入apache模板到zabbix中,如下图所示:

    在此界面下,在“导入文件”选项中点击“浏览”,导入apache的模板文件,接着点击最下面的“导入”按钮即可将apache模板导入zabbix中。

    模板导入后,还需要将此模板关联到某个主机下,这里我们仍然选择将此模板关联到172.16.213.236这个主机下,点击web导航上面的“配置”选项,然后选择“主机”,接着点开172.16.213.236主机链接,然后选择“模板”这个二级选项,链接一个新的模板,如下图所示:

    在此界面下点击“链接指示器”后面的“选择”按钮,选择刚刚上传上来的模板,这样就把apache模板链接到了172.16.213.236主机上了。这样172.16.213.236主机已经链接了两个模板了,如下图所示:

    点击“更新”按钮,完成模板的链接。

    点击web上面的“设置”选项,然后选择“模板”,找到“Template App Apache Web Server zapache”模板,可以看到此模板已经添加了23个监控项,1个触发器,5个图形,1个应用集,然后点 “监控项”,即可显示监控项的名称和键值信息。请注意一下监控项中每个键值的名称。

    4、查看apache状态数据

    点击web上面的“监测中”选项,然后选择“最新数据”,根据过滤器指定条件,即可看到“Apache Web Server”这个应用集下每个监控项是否获取到了最新数据,如下图所示:

    从此图中可以看出,已经获取到了apache的监控状态数据,重点关注监控项对应的键值名称,每个监控项最后的检查时间以及最新数据信息。

    三、zabbix 监控 nginx应用实战
    Zabbix对Nginx的监控,与监控apache的方式完全一样,基本流程还是两个步骤,第一个是编写监控Nginx的脚本,第二个是创建Nginx监控模板。这里我们以监控远程主机172.16.213.236上的Nginx服务为例,详细介绍下如何对nginx进行状态监控。

    1、 开启nginx状态页

    这个操作是在Nginx服务器172.16.213.236上完成的。Nginx跟Apache一样,也提供了状态监控页面,所以,第一步也是开启Nginx的状态监控页面,然后再通过脚本去状态页面获取监控数据即可,这里我们以Nginx1.14版本为例,首先在nginx的配置文件的server段(想监控哪个虚拟主机,就放到哪个server段中)中添加如下配置:

    location /nginx-status {
      stub_status on;
      access_log  off;
      allow 127.0.0.1;
      allow 172.16.213.132;
      deny all;
    }

    这段location是打开nginx的状态监控页面,“stub_status”为“on”表示开启状态监控模块,“access_log off”表示关闭这个页面的访问日志,接下来的“allow”表示这个状态监控页面允许哪些客户端访问,一般允许本机(127.0.0.1)和你的客户端电脑就行,这里172.16.213.132就是我的客户端电脑,为了调试方便,我允许自己电脑访问nginx的状态页面,除了允许访问的客户端外,其它都通过“deny all”禁止访问即可。这样,nginx状态页面就设置好了。

    2、访问设置好的nginx-status链接

    要访问nginx状态页面,可通过如下方式获取nginx状态页面信息:http://172.16.213.236/nginx-status, 其中,172.16.213.236就是nginx服务器,访问这个页面后,会输出如下信息:

    Active connections: 22
    server accepts handled requests
    502254 502254 502259
    Reading: 0 Writing: 2 Waiting: 20
    对上面输出中每个参数含义详细说明如下:

     Active connections:对后端发起的活动连接数;
     accepts:nginx总共处理了多少个连接;
     handled:nginx成功创建了几次握手;
     requests:nginx总共处理了多少请求。
     Reading:nginx读取客户端的header数;
     Writing: nginx 返回给客户端的header数;
     Waiting: nginx 请求处理完成,正在等待下一请求指令的连接。

    3、编写nginx状态监控脚本

    编写nginx状态监控脚本的思路,主要是对状态页面获取的信息进行抓取,下面是通过shell编写的一个抓取nginx状态数据的脚本文件nginx_status.sh,内容如下:

    #!/bin/bash
    # Set Variables
    HOST=127.0.0.1
    PORT="80"
    
    if [ $# -eq "0" ];then 
        echo "Usage:$0(active|reading|writing|waiting|accepts|handled|requests|ping)" 
    fi 
    
    # 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 waiting {
      /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
      }
    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

    脚本内容很简单,基本不需要修改即可使用,如果你要修改主机和端口,可修改脚本中的“HOST”和“PORT”变量。

    4、在zabbix agent端修改配置

    将编写好的nginx_status.sh脚本放到172.16.213.236服务器上zabbix agent的一个目录下,这里是/etc/zabbix/shell,然后做如下操作:

    [root@zabbix agent1 shell]#chmod o+x /etc/zabbix/shell/nginx_status.sh
    [root@ zabbix agent1 shell]#chown zabbix:zabbix /etc/zabbix/shell /nginx_status.sh

    接着,创建一个名为userparameter_nginx.conf的文件,放到/etc/zabbix/zabbix_agentd.d目录下,内容如下:

    UserParameter=nginx.status[*],/etc/zabbix/shell/nginx_status.sh  $1

    这个内容其实就是自定义了一个监控项nginx.status[], 其中,“[]”代表参数,这个参数是通过nginx_status.sh脚本的参数传进来的。

    所有配置完成,还需要重启zabbix agent服务,以保证配置生效。

    5、Nginx模板导入与链接到主机

    zabbix默认没有自带Nginx的监控模板,需要自己编写,这里我们直接将编写好的模板供大家下载,可以从如下地址下载Nginx zabbix模板:

    [root@iivey /]# wget https://www.ixdba.net/zabbix/zabbix-nginx.zip

    模板下载完成后,点击zabbix web导航上面的“配置”选项,然后选择“模板”,点击右上角“导入”按钮,开始导入Nginx模板到zabbix中。
    模板导入后,点击web上面的“设置”选项,然后选择“模板”,找到“Template App NGINX”模板,可以看到此模板包含8个监控项,1个触发器,2个图形,1个应用集,重点看一下监控项和键值信息,如下图所示:

    最后,还需要将此模板链接到需要监控的主机下,点击web导航上面的“配置”选项,然后选择“主机”,接着点开172.16.213.236主机链接,然后选择“模板”这个二级选项,通过“链接指示器”选择一个模板“Template App NGINX”,添加进去即可。

    其实,要对主机的基础信息(CPU、磁盘、内存、网络等)做监控的话,只需要链接一个基础模板“Template OS Linux”到此主机即可,这样,172.16.213.236主机已经链接了四个模板了,如下图所示:

    模板添加后,172.16.213.236主机上的基础信息、apache信息、nginx信息、MySQL信息都已经纳入到了zabbix监控中了。

    6、zabbix server端获取数据测试

    在将主机加入zabbix过程中,可以会发生一些问题,例如Zabbix server一直没有获取到agent端数据的话,怎么排查问题呢,这里介绍一个简单有效的方法,就是通过在zabbix server上执行zabbix_get手动测试,如果zabbix_get能获取到数据,那说明zabbix server和zabbix agent之间通信正常,如果获取不到数据,那么就会报错,我们可以根据错误的提示进行有目的的排错。

    在本例中,可以执行如下命令进行排错:

    [root@zabbix server ~]# /usr/local/zabbix/bin/zabbix_get -s 172.16.213.236 -p 10050 -k "nginx.status[active]"
    16

    其中,“nginx.status[active]”就是监控项的一个键值。注意,这个操作是在zabbix server上执行的,然后去zabbix agent上获取数据的过程。

    只要我们在这里测试正常后,一般都能够马上在zabbix web上看到nginx的监控状态数据。如何查看nginx监控状态数据以及测试触发器动作告警是否正常,这个之前已经详细介绍过,这里就不再重复介绍了。

  • 相关阅读:
    【加密】 RSA
    【Resource】【ResourceLoader】【ResourcePatternResolver】学习
    【拦截器】Springboot项目之拦截器使用
    【OpenSSl】linux下OpenSSL的RSA密钥生成
    【微服务架构】图解
    【md5】几种常见的数据摘要算法(MD5、CRC32、SHA1和SHA256)
    【VM VirtualBox】【Vagrant】的安装及使用
    VUE中解决echarts数据二次渲染不成功的问题xAxis
    TypeError: Cannot read property 'map' of null
    VS code 卡顿很严重
  • 原文地址:https://www.cnblogs.com/flytor/p/11440776.html
Copyright © 2011-2022 走看看