zabbix对第三方应用软件的监控,主要有两个工做难点,一个是编写自定义监控脚本,另外一个是在编写模板并导入zabbix web中,编写脚本这个要根据mysql
监控需求定制便可,而编写模板文件有些难度,不过网上已经有不少已经写好的模板,咱们能够直接拿来直接使用,因此,zabbix对应用软件的监控其实并不难。nginx
1、zabbix 监控 mysql应用实战
本文首先要介绍的是zabbix对mysql的监控,这个是最简单的,由于zabbix已经自带了mysql监控的模板,咱们只须要编写一个监控mysql的脚本便可,因此对mysql的监控能够分红两个步骤完成。web
一、zabbix添加自定义监控mysql脚本sql
这里给出咱们一个线上运行的mysql监控脚本check_mysql,内容以下:shell
#!/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文件中,相似以下:apache
[mysqladmin] user=root password=xxxxxx
这样,经过mysqladmin在命令行执行操做的话,会自动经过root用户和对应的密码登陆到数据库中。后端
二、zabbix agent端修改配置安全
要监控mysql,就须要在mysql服务器上安装zabbix agent,而后开启agent的自定义监控模式,将上面脚本放到zabbix agent端的/etc/zabbix/shell目录下,而后进行受权:bash
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服务使配置生效。
三、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主机已经添加完成了。
四、查看监控状态数据
点击web上面的“监测中”选项,而后选择“最新数据”,便可看到监控项是否获取到了最新数据,以下图所示:
经过过滤器进行过滤,便可查看mysql监控项返回的数据,能够看到“最新数据”一列中,已经获取到了mysql的状态数据,此外,在“名称”一列中,还能够看到“Template DB MySQL”模板中每一个监控项对应的键值,例如mysql.status[Com_begin]、mysql.status[Bytes_received]、mysql.status[Bytes_sent],这些监控项键值与zabbix agent端自定义监控项的名称是彻底对应的。
有时候因为agent端配置的问题,或者网络、防火墙等问题,可能致使server端没法获取agent端的数据,此时在web界面上就会出现以下图信息:
在此图中,能够从“最近检查记录”一列中查看最近一次的检查时间,若是监控项没法获取到数据,那么这个检查时间确定不是最新的,此外,最后一列“信息”中也会给出错误提示,咱们能够从错误提示中找到没法获取数据的缘由,这将很是有助于排查问题。在没有获取到数据时,能够看到每列信息都是灰色的。
五、测试触发器告警功能
MySQL加入zabbix监控后,咱们还须要测试一下,触发器告警动做是否正常,点击web上面的“监测中”选项,而后选择“问题”,便可看到有问题的监控项,以下图所示:
在这个界面中,能够看到哪一个主机出现了什么问题,以及问题持续的时间,还有问题的严重性,当触发器触发后,会激活触发器动做,也就是发送告警消息的操做,在上面的介绍中,咱们配置了邮件告警,那么就来看看是否发送了告警邮件,接下来,点击web导航上面的“报表”选项,而后选择“动做日志”,便可看到动做事件的日志,以下图所示:
此界面显示了监控项在发生故障后,触发器动做发送的消息事件,其中,“类型”一列指定是发送邮件信息,“接收者”一列是消息收件人的地址,“消息”一列是发送消息的详细内容,“状态”一列显示了告警邮件是否发送成功,若是发送不成功,最后一列“消息”会给出错误信息,咱们根据错误提示进行排错便可。
2、zabbix 监控 apache应用实战
zabbix对apache的监控,稍微复杂一些,但基本流程仍是两个步骤,第一个是编写监控apache的脚本,第二个是建立apache监控模板。
一、开启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状态页面的开启。
二、编写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
三、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个应用集,而后点 “监控项”,便可显示监控项的名称和键值信息。请注意一下监控项中每一个键值的名称。
四、查看apache状态数据
点击web上面的“监测中”选项,而后选择“最新数据”,根据过滤器指定条件,便可看到“Apache Web Server”这个应用集下每一个监控项是否获取到了最新数据,以下图所示:
今后图中能够看出,已经获取到了apache的监控状态数据,重点关注监控项对应的键值名称,每一个监控项最后的检查时间以及最新数据信息。
3、zabbix 监控 nginx应用实战
Zabbix对Nginx的监控,与监控apache的方式彻底同样,基本流程仍是两个步骤,第一个是编写监控Nginx的脚本,第二个是建立Nginx监控模板。这里咱们以监控远程主机172.16.213.236上的Nginx服务为例,详细介绍下如何对nginx进行状态监控。
一、 开启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状态页面就设置好了。
二、访问设置好的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 请求处理完成,正在等待下一请求指令的链接。
三、编写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”变量。
四、在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服务,以保证配置生效。
五、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监控中了。
六、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监控状态数据以及测试触发器动做告警是否正常,这个以前已经详细介绍过,这里就再也不重复介绍了。