多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] * * * * * > * 有的时候zabbix提供的监控项目,不能满足我们生产环境下的监控需求,此时我们就要按照zabbix的规范自定义监控项目,达到监控的目的 > * zabbix_get:模拟zabbix_server和agent获取数据 * 相关概念 > * item: Items是从agnet主机里面获取的所有数据。通常情况下我叫itme为监控项,item由key+参数组成 > * Key:我们可以理解为key是item的唯一标识,在agent端有很多监控项,zabbix-server根据key区分不同的监控项 > * trigger:触发器是建立在item数据上的,具有阈值触发事件的功能 基本格式: <server>:<key>.<function>(<parameter>)}<operator><constant> server:agent名称,加入主机时配置的 key:就是上面说的key function:对阈值进行操作的函数,以下函数 operate:表达式 constant:常量 > 例如:{docker02:proc.mysql.last()}<>1 > * 不用担心trigger表达式不好写,在定义好item后,在zabbix点点就自动生成了 ~~~ zabbix_get -s 192.168.56.131 -p 10050 -k "proc.item[/usr/sbin/mysqld,mysql]" 【option】 # -s:指定agent地址 # -p:agent端口 # -k:指定item的key # [/usr/sbin/mysqld,mysql]:向脚本传递了两个参数,用逗号分隔 ~~~ * * * * * #### * 下面以监控mysql进程为例,做了自定义监控 * * * * * ### 1. zabbix_server与zabbix_agent ![](https://box.kancloud.cn/064b243ede8a779a7b1695560d109dfc_461x224.png) >* zabbix_server通过发送key给zabbix_agent,然后agent端口根据key,把所要监控的item的最新数据返回给server端 * * * * * ### 2. 自定义监控项 > * 自定义脚本格式 ~~~ key[*],[command|sh] # <key[参数]>,<命令或者脚本> # [*]:固定格式,表示server端是否传过来参数,在命令或者脚本中用$1,23...引用,shell脚本中的引用$$1,2,3..引用, # 如果server端不传参数,[*]可以不写 ~~~ > #### 2.1 修改agent端配置文件,自定义key ~~~ sudo vim /etc/zabbix/zabbix_agentd.conf ~~~ * 做以下修改 ~~~ UnsafeUserParameters=1 # 默认为0,表示不允许自定义key # 监控mysql进程是否存在,[*]因为不需要server端传递参数,所以没写 UserParameter=proc.mysql,ps -ef|grep /usr/sbin/mysqld|grep -v grep|wc -l ~~~ > #### 2.2 web页面配置,加入自定义监控项 > 1. 【配置】->【主机】,点击所要监控的主机 ![](https://box.kancloud.cn/4220485ea7fa879a44789c6182aa9d77_1167x413.png) > 2. 点击【监控项】 ![](https://box.kancloud.cn/6917af5c4c5d0666b465f2faad76cf7a_1093x453.png) > 3. 点击右上角【创建监控项】 ![](https://box.kancloud.cn/48a79742312a7bd9f2985adf124937b7_1585x216.png) > 4. 创建监控项 > * 这里的key值对应我们在agent端自定义的key ![](https://box.kancloud.cn/f14c4ae157a6dfb70fabab84e3b3b16d_1663x621.png) * 重启agent服务 ~~~ sudo service zabbix-agent restart ~~~ #### 2.4 查看item返回的数据:【检测中】->【最新数据】 最新数据是zabbix所有监控项的收集的数据的概览,从这可以看到监控项最新的监控值 ![](https://box.kancloud.cn/014fcc8a9fb6e0c1c39a1b73b4b11692_1633x498.png) > 从图中可以看到,mysql监控项返回的数值是1,说明mysql的进程数为1,代表mysql运行正常,如果想要可以邮件报警,可以给这个自定义的item添加触发器,参考“监控进程和端口号”一章 * * * * * ### 3. 执行脚本练习 > * 执行自定义脚本监控,agent通过server端发来的参数,执行脚本返回一个结果给server 1. 修改zabbix_agent配置文件,添加自定义key ~~~ sudo vim /etc/zabbix/zabbix_agentd.conf ~~~ * 做以下修改 ~~~ UserParameter=proc.item[*],/home/tuna/shelles/zabbix/user_defined.sh $1 $2 # server端要向agent端发送两个参数 ~~~ ![](https://box.kancloud.cn/74ab6928edc02cacc6249f1102e63fd4_971x260.png) 2. 写脚本 ~~~ vim user_defined.sh ~~~ ~~~ #!/bin/bash PROC=$1 # 接收用于匹配进程的字段 USER=$2 # 接收进程的开启者 ps -ef|grep "$PROC"|grep -v grep|awk '{if($1=="'$USER'"){print $2}}'|wc -l ~~~ * 测试一下 ~~~ zabbix_get -s 192.168.56.131 -p 10050 -k "proc.item[/usr/sbin/mysqld,mysql]" # [/usr/sbin/mysqld,mysql]:模拟server端向agent端发送了两个参数,分别是/usr/sbin/mysqld用于匹配进程,mysql:进程的发起者 ~~~ * 如果没有zabbix_get,就网上下载一个,放到/usr/local/bin目录下,并赋予执行权限。 * ![](https://box.kancloud.cn/80698ddf40e8f1c165896f918ea471e8_1024x84.png) * 接着就一样的配置监控项就可以了