一、介绍 Zabbix是一款开源免费的,自动化发现服务与网络设备的分布式监控,可以监视应用层服务并以web前端页面集中管理并展示。
二、Zabbix构成 Zabbix主要由以下5个组件构成:
1、server zabbix server是zabbix的核心组件,server内部存储了所有的配置信息、统计信息和操作信息。zabbix agent会向zabbix server报告可用性、完整性及其他统计信息。
2、web页面 web页面也是zabbix的一部分,通常和zabbix server位于一台物理设备上,但是在特殊情况下也可以分开配置。web页面主要提供了直观的监控信息,以方便运维人员监控管理。
3、数据库 zabbix数据库内存储了配置信息,统计信息等zabbix相关内容。
4、proxy zabbix proxy可以根据具体生产环境进行采用或者放弃。如果使用了zabbix proxy,则其会替代zabbix server采集数据信息,可以很好的分担zabbix server的负载。zabbix proxy通常运用与架构过大、zabbix server负载过重,或者是企业设备跨机房、跨网段、zabbix server无法与zabbix agent直接通信的场景。
5、agent zabbix agent通常部署再被监控目标上,用于主动监控本地资源和应用程序,并讲监控的数据发送给zabbix server
#在服务器端安装中文文泉仪字体,并替换原有字体
[root@zabbix /]# yum -y install wqy-microhei-fonts
[root@zabbix /]# cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
在zabbix服务端需要装一个工具,验证与客户端的连通性
[root@zabbix ~] yum install zabbix-get -y
[root@zabbix ~] zabbix_get -s '你的客户端IP' -p 10050 -k 'system.hostname'
[root@zabbix ~] zabbix_get -s '172.16.68.164' -p 10050 -k 'system.hostname'
其中“system.hostname” 返回该客户端的主机名
然后在页面上操作添加主机
在菜单栏选择“配置-主机-创建主机”
在主机页面填入以下信息
主机名称,需要与客户端的主机名称一致
可见名称,方便识别该主机,可自由取名
群组,由于我的客户端是linux服务器,所以归为linux servers
群组
客户端IP地址,填客户端的IP地址
DNS名称,由于我的客户端不需要域名解析,不需要填,若有,则可填
在第二项模板里,搜索linux选择使用Template OS Linux by Zabbix agent
的模板,并添加
约几十秒后,主机的ZBX绿色亮起,说明添加成功了
如图,客户端报了一个问题,zabbix客户端与zabbix服务器端时间差距超过60秒。
原因是我仅将客户端与NTP同步了,未将服务端与NTP同步,所以时间差距过大。
所以去处理好问题之后,点击确认的“不”这里,提交问题处理的信息进行确认。
例如自定义一个监控MySQL进程的监控项
首先需要在Zabbix agent配置文件中定义一个新的键来获取MySQL进程数量。编辑/etc/zabbix/zabbix_agentd.conf文件,按G快速到最后一行添加以下内容:
UserParameter=mysql.process,pgrep -c mysqld
这将创建一个名为mysql.process
的自定义键,它将返回MySQL进程的数量。保存文件并重新启动Zabbix agent以应用更改:
systemctl restart zabbix-agent
最后,到ZabbixWeb界面上选择主机进行添加监控项:
其中,"类型" 选择zabbix客户端 , “键值” 要与zabbix_agentd.conf文件中添加的值对应: mysql.process ,“新的应用集” 意思就是新的类型,方便后续过滤查找。剩下其它选项可自定义设置。最后添加即可。
添加成功后,在该主机的监控项中可以查看到,后面已启用表示添加成功了。
可以在 “最新数据” 中查看该项最新的返回值
可以给MySQL进程监控项添加一个触发器来实现告警提醒:
选择主机点击触发器,然后创建新的触发器,
点击 添加 一个表达式,选择监控项,就是新添加的“MySQL进程监控”,然后设置“功能”条件,这里是取值,因为MySQL进程监控返回的是数值。然后设置“结果”等于多少时触发,这里是设置为0时触发。意思就是当 MySQL监控项返回0值时(也就说明MySQL进程不在线)触发预警。其它选项自定义设置,比如 该触发器 “严重性”。
确认好点击“添加”即可。
以上状态显示“已启用” 说明添加成功了。
模拟一下"MySQL进程触发器“ 告警:关闭服务器中MySQL进程,看系统会不会触发告警。
当关闭主机的MySQL时,系统已经出现问题告警,说明设置成功生效了
如果人工不处理该告警,那么当再次开启MySQL时,系统自动处理触发器告警。显示状态:已解决。
自定义监控项还可以在agent执行某个脚本并且可以传参数,比如: 写个通用的进程监控脚本check_process.sh,脚本内容如下:
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "Usage: $0 process_name"
exit 1
fi
process_name=$1
pgrep -x "$process_name" > /dev/null
if [ $? -eq 0 ]; then
echo 1
else
echo 0
fi
check_process.sh mysqld --监测MySQL进程,返回1表示在线,0表示不在线 check_process.sh mongod --监测MongoDB进程是否在线
然后编辑/etc/zabbix/zabbix_agentd.conf文件,按G快速到最后一行再添加一行自定义键值项,键值名为custom.process.check[*]带参数的,脚本文件check_process.sh位置和参数名,以下内容:
UserParameter=custom.process.check[*],/etc/zabbix/zabbix_agent2.d/check_process.sh $1
然后保存后重启zabbix-agent服务
systemctl restart zabbix-agent
再去zabbix页面上添加自定义监控项:
可以点击下方“测试” 看是否能执行成功返回值。
还可以直接 “克隆” 来复制一个 添加MongoDB的监控项:
最后也可以去添加相应的触发器。步骤一样。
表达式可以设置触发器在某个时间段触发,比如:以下就是08:30-15:00和20:30-23:00这两个时间段执行的监测mykline进程的触发器,使用的是time()功能。
总结:
1.创建自定义监控项时,都要在/etc/zabbix/zabbix_agentd.conf配置文件中添加一行键值,然后再去web界面上创建此监控项。
2.键值可以是个命令,或者运行某个脚本,可以带参数。
授权码去相应邮箱设置里获取。
测试一下
出现告警发送一次邮件、告警恢复也发送一次邮件
然后设置用户的收件邮箱信息
此时我们将nginx服务停止,就会给我们发送一个告警邮件: