mrtg (Multi Router Traffic Grapher)通过snmp协议得到设备的流量信息,并以包含PNG格式的图形的HTML文档方式显示给用户。
cacti (仙人掌) 用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据。官网地址: https://www.cacti.net/
ntop 官网地址: https://www.ntop.org/
nagios 能够跨平台,插件多,报警功能强大。官网地址: https://www.nagios.org/
centreon 底层使用的就是nagios。是一个nagios整合版软件。官网地址:https://www.centreon.com/
ganglia 设计用于测量数以千计的节点,资源消耗非常小。官网地址:http://ganglia.info/
open-falcon 小米公司开源,高效率,高可用。用户基数相对小。官网地址: http://open-falcon.org/
zabbix 跨平台,画图,多条件告警,多种API接口。用户基数大。官网地址: https://www.zabbix.com/
prometheus 基于时间序列的数值数据的容器监控解决方案。官网地址: https://prometheus.io/
环境准备: 这里为1台监控服务器和2台被监控端
配置静态ip
修改主机名
各自配置好主机名
# hostnamectl set-hostname --static server
三台都互相绑定IP与主机名
# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.1.11 server
10.1.1.12 agent1
10.1.1.13 agent2
# systemctl restart ntpd
# systemctl enable ntpd
# systemctl stop firewalld
# systemctl disable firewalld
# iptables -F
# setenforce 0
setenforce: SELinux is disabled
# vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=zabbix
baseurl=file:///root/zabbix_soft
enabled=1
gpgcheck=0
说明: 上面是将共享的软件包目录拷贝到所有机器上做的本地源,如果需要使用公网源可以去清华源搜索
[root@server ~]# yum install zabbix-server-mysql zabbix-web-mysql mariadb-server
在mysql(mariadb)里建立存放数据的库并授权,然后导入zabbix所需要用的表和数据
[root@server ~]# systemctl restart mariadb
[root@server ~]# systemctl enable mariadb
[root@server ~]# mysql
MariaDB [(none)]> create database zabbix default charset utf8;
MariaDB [(none)]> grant all on zabbix.* to zabbix@'localhost' identified by '123';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit
说明:
[root@server ~]# zcat /usr/share/doc/zabbix-server-mysql-4.4.4/create.sql.gz |mysql -u zabbix -p123 zabbix
验证导入的表数据
[root@server ~]# mysql -e 'use zabbix; show tables;'
配置server端配置文件/etc/zabbix/zabbix_server.conf
注意: 有些参数默认为注释状态也是生效的。如果要修改,则必须要打开注释再修改
[root@server ~]# vim /etc/zabbix/zabbix_server.conf
ListenPort=10051
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123 打开注释并修改连接mysql的密码,在124行
DBSocket=/var/lib/mysql/mysql.sock
ListenIP=0.0.0.0
[root@server ~]# systemctl restart zabbix-server
[root@server ~]# systemctl enable zabbix-server
[root@server ~]# netstat -ntlup |grep 10051
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 9221/zabbix_server
tcp6 0 0 :::10051 :::* LISTEN 9221/zabbix_server
zabbix软件包自带了httpd的子配置文件,需要修改时区,否则监控的数据会出现时间不对应的情况
[root@server ~]# vim /etc/httpd/conf.d/zabbix.conf
20 php_value date.timezone Asia/Shanghai 打开注释,并修改时区
[root@server ~]# systemctl restart httpd
[root@server ~]# systemctl enable httpd
[root@server ~]# netstat -ntlup |grep :80
tcp6 0 0 :::80 :::* LISTEN 9338/httpd
使用浏览器访问http://10.1.1.11/zabbix
右上角点一个类似小人的图标 --》 语言选 chinese zh-cn --》 点 update后换成中文件界面
概念:
主机(host): 指被监控的一个设备(服务器,交换机等)
主机群组(hostgroup): 指被监控的一组主机(主要应用在有特别多主机的情况,方便分组区分)
zabbix服务器端默认配置了监控本机,但还需要安装客户端收集工具:zabbix-agent。
[root@server ~]# yum install zabbix-agent
请使用vi或vim打开agent端配置文件/etc/zabbix/zabbix_agentd.conf
修改,修改后的结果如下
[root@server ~]# egrep -vn '^#|^$' /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
98:Server=127.0.0.1 zabbix服务器的IP,agent被动监控(默认模式)
139:ServerActive=127.0.0.1 zabbix服务器的IP,agent主动监控
150:Hostname=server zabbix服务器的主机名
290:Include=/etc/zabbix/zabbix_agentd.d/*.conf
说明:
[root@server ~]# systemctl restart zabbix-agent
[root@server ~]# systemctl enable zabbix-agent
[root@server ~]# netstat -ntlup |grep :10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 65171/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 65171/zabbix_agentd
监控状态不OK的排错思路:
cat /var/log/zabbix/zabbix_server.log
乱码原因: 字符不兼容
解决乱码方法: 换一个字体
下载我共享的ttf-arphic-ukai.tar.gz
软件包,并做如下配置
# tar xf ttf-arphic-ukai.tar.gz -C /usr/share/zabbix/assets/fonts/
# mv /usr/share/zabbix/assets/fonts/ukai.ttc /usr/share/zabbix/assets/fonts/ukai.ttf
# vim /usr/share/zabbix/include/defines.inc.php
67 define('ZBX_GRAPH_FONT_NAME', 'ukai'); 修改原来的graphfont字体改成ukai
做完后不用重启服务,web界面刷新查看图形就会发现中文显示正常了
[root@agent1 ~]# yum install zabbix-agent -y
配置/etc/zabbix/zabbix_agentd.conf
配置文件,配置结果如下:
[root@agent1 ~]# egrep -vn '^#|^$' /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
98:Server=10.1.1.11 修改成zabbix监控服务器的IP,agent被动模式
139:ServerActive=10.1.1.11 修改成zabbix监控服务器的IP,agent主动模式
150:Hostname=agent1 修改为被监控端的主机名
290:Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@agent1 ~]# systemctl restart zabbix-agent
[root@agent1 ~]# systemctl enable zabbix-agent
[root@agent1 ~]# netstat -ntlup |grep :10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 7413/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 7413/zabbix_agentd
回到web管理界面--》点配置--》点主机 --》 点创建主机
监控不OK的排错思路:
cat /var/log/zabbix/zabbix_agentd.log
cat /var/log/zabbix/zabbix_server.log
模板(template): 是包括监控项,应用集,触发器,图形,聚合图形,自动发现,web监测等的一组实体。
使用模板可以方便应用到主机,更改模板也会将更改应用到所有链接的主机。
例: 比如我要把监控nginx相关的全部做成一个模板,有100台服务器需要监控nginx,我只需要链接模板到这100台机器即可。以后需要修改,只需要修改模板,这100台就会被同时修改。
zabbix自带了很多实用的模板, 对于一些要求不高的公司来说, 直接将模板添加到监控主机都几乎够用了。
练习: 请将agent1其它模板都清空,只保留刚刚自定义的Template test
模板。
操作的最终结果如下:
监控项(item): 是从主机收集的数据信息,代表收集数据或监控的一个最小单位。
比如cpu1分钟内平均负载,内存空闲值,磁盘使用率等等都可以做为监控项,可以说监控项有无限种可能。
应用集(applications): 代表多个监控项目合成的组。
创建监控项的方法有2种:
创建监控项中最核心的概念就是**键值(key)**。
键值就看作是开发好的用于收集数据的命令,主要有两种:
案例: 使用zabbix自带键值创建监控项实现监控cpu的1分钟内平均负载
键值写法可参考下图:
以监控登录用户数为例,自带键值中有system.users.num
这个键值,但我们不使用它,使用自定义的键值来实现。
首先在agent1多打开几个终端,模拟多个登录用户,然后使用who |wc -l
查询
[root@agent1 ~]# who |wc -l
15 我这里确认登录用户数为15
然后在agent1上,定义UserParameter
[root@agent1 ~]# vim /etc/zabbix/zabbix_agentd.conf
318 UserParameter=loginusers,who | wc -l
说明: loginusers是我自定义的一个键值名称(会在创建监控项时用到),后面的who |wc -l就要被监控的命令
重启zabbix-agent服务使之生效
[root@agent1 ~]# systemctl restart zabbix-agent
在zabbix服务器安装zabbix-get
工具,可以远程测试能否通过自定义的键值得到数据
[root@server ~]# yum install zabbix-get
[root@server ~]# zabbix_get -s 10.1.1.12 -k loginusers
15 可以确认得到的值确实为agent1的登录用户数
说明:
监控项创建好了, 但是它监控收集的数据在哪里看呢? 答案就是图形
**练习: **请将前面自定义的登录用户数这个监控项也做成图形
聚合图形: 就是把多个重要常用的图形整合一起来显示,方便查看.
假设需要经常查看agent1的cpu负载与登录用户数这两张图,我们可以将其聚合到一起做成一张聚合图形
虽然我们可以通过图形查看到监控的数据,但我们不可能一直盯着图形的变化。
所以需要定义监控项到达一个临界值(阈值)或者满足一个条件,就会发生状态变化的通知。
定义**触发器(trigger)**就是定义这个临界值(阈值)或条件.
监控项有无限种可能,触发器也一样有无限种可能。如:
等等,主要还是看需求。
先在agent1上再多打开几个终端,将登录用户数控制在20个以上(操作过程省略)
自由思维与操作练习: 请将cpu负载的相关监控项也创建对应的触发器并验证。
触发器的通知信息显示在web管理界面, 运维工程师仍然没办法24小时盯着它。所以我们希望它能自动地通知工程师们,这就是报警。
zabbix的报警媒介支持email,jabber,sms(短信),微信,电话语音等。
自己配置报警过程比较复杂,需要配置触发器动作,用户与其报警媒介,最麻烦的是写程序对接邮件,微信,短信,电话等接口.
以上要求对于没有开发能力和开发支持的运维工程师来说,难度较大。
所以我们这里选择专业的报警平台就可以帮助实现一体化报警方案。
如:onealeart 参考:http://www.onealert.com/
请先申请一个账号,绑定邮箱,手机,微信等(过程省略)。
按照提示进行安装
[root@server ~]# cd /usr/lib/zabbix/alertscripts
[root@server alertscripts]# wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-2.1.0.tar.gz
[root@server alertscripts]# tar xf ca_zabbix_release-2.1.0.tar.gz
[root@server alertscripts]# cd cloudalert/bin/
[root@server bin]# bash install.sh 2842d6d7-f7a1-fb97-254d-9be972403dd0
start to create config file...
Zabbix管理地址: http://10.1.1.11/zabbix
Zabbix管理员账号: admin
Zabbix管理员密码:
......
配置完onealert后,我们可以验证下它安装后到底对zabbix做了啥。简单来说,它做了三件事:
以下脚本看不懂没关系,我们只要知道是对接报警平台的API接口就OK了
[root@server bin]# cat /usr/lib/zabbix/alertscripts/cloudalert/bin/alert.sh
#!/bin/bash
# PATH
DIR="$( cd "$( dirname "$0" )" && pwd )"
echo $DIR
source $DIR/log.sh
$(log INFO ZabbixActionParams "$3")
r=`curl -H "Content-Type:application/json" -X POST -d "$3" http://api.aiops.com/alert/api/event/zabbix/v3`
$(log INFO ItsmAlertResponse "$r")
把以上验证的内容再连成一条复习一下:
监控项 --》图形 --》触发器 --》动作 --》用户 --》报警媒介 --》报警脚本 --》报警平台
在报警平台按需求配置通知策略(过程省略)
我这里主要配置的是任务时间任务报警立刻发送到我所绑定的邮箱,微信,手机短信,手机电话。
这里以前面配置过的"登录用户数大于20个"这个触发器来测试报警.
注意: 要触发器有状态变化才能报警。
如果在测试前就已经大于20个了是不会报警的,需要先降到20以下,再升到20以上让其触发。
我们要监控的服务器数量很大的情况下,如何批量操作:
因为创建监控主机和添加模板都需要web界面操作,如何自动批量做?
答案: 自动发现或自动注册。
自动发现: 由Zabbix Server开启发现进程,每隔一段时间扫描网络中符合条件的主机。
自动注册: 与自动发现相反由Zabbix agent去找Server注册。
所以大家看到,和前面提过的主动监控与被动监控的概念很类似。
自动发现案例:
前面早就准备了一台agent2,一直还没使用,这里就尝试自动发现这台agent2,并通过动作将其创建为监控主机并添加模板。
[root@agent2 ~]# yum install zabbix-agent
配置/etc/zabbix/zabbix_agentd.conf
配置文件,配置结果如下:
[root@agent2 ~]# egrep -vn '^#|^$' /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
98:Server=10.1.1.11
139:ServerActive=10.1.1.11
150:Hostname=agent2
290:Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@agent2 ~]# systemctl restart zabbix-agent
[root@agent2 ~]# systemctl enable zabbix-agent
[root@agent2 ~]# netstat -ntlup |grep :10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 20447/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 20447/zabbix_agentd
再次说明: 在自动化运维体系里可以使用cobbler的postscript脚本或ansible来批量做以上2步
确认时间同步, 需要耐心等待一段时间。(可能几分钟到十几分钟)
最终效果如下:
问题: agent2上的"登录用户数"这个监控项的图形上没有数据, 为什么? 如何解决?
自动注册就不再演示了,仅了解即可。
把大量的服务器实现了自动监控后,后续还可能会做一些相关的批量操作,如:
说明:
.xml
格式文件辛苦配置好的模板或主机,如果被误删除了怎么办? 或者我想搭建多个zabbix服务器,那么又要辛苦再配置一遍?
解决方法就是把配置的模板或主机导出成.xml
格式文件,主要有两大好处:
参考: https://www.zabbix.com/documentation/current/manual/distributed_monitoring/proxies
应用场景1: 跨内外网监控
当zabbix server与被监控机器不在同一个机房时,跨公网监控会很麻烦, 也会带来安全隐患
应用场景2: 分布式监控
当监控机主机特别多,甚至分散在不同的地域机房。这个时候zabbix server压力很大,所以可以通过增加zabbix proxy来代理收集每个机房里的主机信息,再统一给zabbix server.
环境准备:
1, 新增一台全新环境的服务器做proxy,修改主机名
[root@proxy ~]# hostnamectl set-hostname --static proxy
2, 四台服务器全部重新绑定主机名
# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.1.11 server
10.1.1.12 agent1
10.1.1.13 agent2
10.1.1.14 proxy
3, 确认关闭防火墙,selinux
4, 确认时间同步
5, proxy上添加zabbix源
# vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=zabbix
baseurl=file:///root/zabbix_soft
enabled=1
gpgcheck=0
说明: 上面是将共享的软件包目录拷贝到所有机器上做的本地源,如果需要使用公网源可以去清华源搜索
操作步骤:
[root@proxy ~]# yum install mariadb-server zabbix-proxy-mysql zabbix-agent -y
[root@proxy ~]# systemctl restart mariadb
[root@proxy ~]# systemctl enable mariadb
[root@proxy ~]# mysql
MariaDB [(none)]> create database zabbix_proxy default charset utf8;
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to 'zabbix'@'localhost' identified by '123';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit
[root@proxy ~]# zcat /usr/share/doc/zabbix-proxy-mysql-4.4.4/schema.sql.gz |mysql zabbix_proxy -u zabbix -p123
[root@proxy ~]# mysql -e 'use zabbix_proxy; show tables'
[root@proxy ~]# egrep -vn '^#|^$' /etc/zabbix/zabbix_proxy.conf
30:Server=10.1.1.11 修改为zabbix服务器的ip
49:Hostname=proxy 修改为本代理服务器的主机名
91:LogFile=/var/log/zabbix/zabbix_proxy.log
102:LogFileSize=0
143:PidFile=/var/run/zabbix/zabbix_proxy.pid
153:SocketDir=/var/run/zabbix
173:DBName=zabbix_proxy
188:DBUser=zabbix
196:DBPassword=123 打开注释并修改为连接数据库的密码,和上面授权对应
250:ConfigFrequency=60 proxy多久从server接收一次配置数据(打开注释并修改)
259:DataSenderFrequency=5 proxy多久发送一次收集的数据给server(打开注释并修改)
406:SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
482:Timeout=4
525:ExternalScripts=/usr/lib/zabbix/externalscripts
561:LogSlowQueries=3000
667:StatsAllowedIP=127.0.0.1
[root@proxy ~]# systemctl restart zabbix-proxy
[root@proxy ~]# systemctl enable zabbix-proxy
说明: ConfigFrequency=60
和DataSenderFrequency=5
这两个参数需要配置,否则最终结果会很久都看不到数据。
除了agent1和agent2之外,server和proxy也可以被监控, 也就是说一共4台都可以被监控。
这4台都可以被proxy监控,也可以被server监控。本实验我选择以下方案:
所以proxy,agent1,agent2这3台都做如下操作:
# egrep -vn '^#|^$' /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
98:Server=10.1.1.14 修改为proxy的IP,而不是server的IP
139:ServerActive=10.1.1.14 修改为proxy的IP,而不是server的IP
150:Hostname=XXX 主机名分别为proxy,agent1,agent2
290:Include=/etc/zabbix/zabbix_agentd.d/*.conf
318:UserParameter=loginusers,who | wc -l 都加上此自定义监控项
# systemctl restart zabbix-agent
在被代理监控机上(agent1,agent2,proxy)做信息的改变, 比如改变登录用户数,然后在web管理界面的图形上能查看到相应变化,则表示代理一切OK。
过程省略, 请自行验证.
一共有4种模式:
相对于agent的被动,也就是表示是server或proxy去找agent拿数据。
# grep -n ^Server= /etc/zabbix/zabbix_agentd.conf
98:Server=10.1.1.14 agent被动模式, IP为server或proxy的IP
相对于agent的主动, 也就是表示是agent主动把数据传给server或proxy
# grep -n ^ServerActive= /etc/zabbix/zabbix_agentd.conf
139:ServerActive=10.1.1.14 agent主动模式, IP为server或proxy的IP
优点: 当agent太多的情况下, server或proxy去找这么多agent搜集数据, 压力负载过大。用agent主动模式就可以缓解server或proxy的压力。
但用主动模式的问题是: 监控项也要转为主动式.
由/etc/zabbix/zabbix_proxy.conf
里的ProxyMode
参数决定。
默认情况下的监控方向如下图所示:
上图中:
上图中:
个人推荐默认的模式,完全不用修改。请讨论或思考为什么? 什么情况才有可能需要修改模式?
web监测: 类似一个 (可以包含多个小监控项),主要针对web服务器做监控场景。
可以对一个url页面进行监测(监测它的状态码,页面匹配的字符串,响应时间,下载速度等)
去agent1上安装httpd,创建主页,并启动服务
[root@agent1 ~]# yum install httpd -y
[root@agent1 ~]# echo web1 > /var/www/html/index.html
[root@agent1 ~]# systemctl restart httpd
[root@agent1 ~]# systemctl enable httpd
再次验证
[root@agent1 ~]# echo "1111111haha22222222" > /var/www/html/test.txt
系统有4大子系统: CPU, 内存, 磁盘IO, 网络。除了这4大子系统外还有进程, 登录用户等等。
请有实力的同学在以下题目基础上做自由拓展。
1, 监控所有进程数量,并设定触发器(当大于200就警告,当大于300就严重警告,超过400个就灾难)
2, 监控tcp连接数量, 并自定义触发器
3, 监控某分区磁盘使用率,并自定义触发器
4, 监控可用内存,并自定义触发器
在前面讲模板章节中有提到zabbix4版本中有自带的nginx模板,如下图所示:
不想用自带模板的, 也可以参考以下方式自定义监控nginx:
nginx有一个状态页,通过查看状态页信息可以连接到nginx服务负载情况.
下面我们假设监控agent1的nginx
1,在agent1上安装nginx
[root@agent1 ~]# yum install epel-release
[root@agent1 ~]# yum install nginx
2,在nginx里的server{}配置段里加上下面一段,然后重启服务
[root@agent1 ~]# vim /etc/nginx/nginx.conf
location /status {
stub_status on;
allow 127.0.0.1; # 允许本机访问,因为下一步脚本是在本机,通过127.0.0.1来得到状态信息的
allow 10.1.1.1; # 加这个IP是为了windows宿主机访问用的,方便浏览器测试用的(可以不加这句)
deny all;
access_log off;
}
[root@agent1 ~]# systemctl restart nginx
[root@agent1 ~]# systemctl enable nginx
3, 通过浏览器访问http://10.1.1.12/status就能看到如下nginx状态信息
Active connections: 1
server accepts handled requests
59 59 115
Reading: 0 Writing: 1 Waiting: 0
Active connections:当前所有处于打开状态的活动连接数
accepts :已经接收连接数
handled : 已经处理过的连接数
requests : 已经处理过的请求数,在保持连接模式下,请求数量可能会大于连接数量
Reading: 正处于接收请求的连接数
Writing: 请求已经接收完成,处于响应过程的连接数
Waiting : 保持连接模式,处于活动状态的连接数
4, 在agent1上准备一个脚本,并给执行权限
[root@agent1 ~]# vim /opt/nginx_status.sh
#!/bin/bash
HOST="127.0.0.1"
PORT="80"
function ping { # 这个不是ping,是判断nginx进程是否存在
/sbin/pidof nginx | wc -l
}
function active {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
$1
[root@agent1 ~]# chmod 755 /opt/nginx_status.sh
5, 在agent1上定义UserParameter,并重启服务
在配置文件里加上下面一句
[root@agent1 ~]# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=nginx_status[*],/opt/nginx_status.sh $1
[root@agent1 ~]# systemctl restart zabbix-agent
6, 在server上(如果使用了使用proxy则这里就在proxy上操作)zabbix_get测试
[root@proxy ~]# yum install zabbix-get -y
[root@proxy ~]# zabbix_get -s 10.1.1.12 -k nginx_status[ping]
1
[root@proxy ~]# zabbix_get -s 10.1.1.12 -k nginx_status[handled]
76
7, 测试能成功监控取到值,说明监控OK。
说明: web管理界面添加监控项的过程请自行完成, 这里省略。
数据库能做监控项的基本都在show status
命令里
例: 自定义监控agent1上mariadb的当前登录用户数, 并设定触发器(当大于50个就警告)
[root@agent1 ~]# yum install mariadb-server -y
[root@agent1 ~]# systemctl restart mariadb
方法一:
下面这条命令就可以得到当前登录用户数,然后自定义一个UserParameter就可以了
[root@agent1 ~]# mysqladmin extended-status |grep Threads_connected |awk '{print $4}'
方法二:
[root@agent1 ~]# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | mysql -N | awk '{print $$2}' # 这里显示方式有点特殊,需要$$2而不是$2
[root@agent1 ~]# systemctl restart zabbix-agent
说明: 这句配置在zabbix3版本里/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
配置文件默认自带,zabbix4自带的参数不能直接对mariadb使用了,所以我们手工再加上
在server或proxy上验证,show status
命令里的理论上都可以验证
[root@proxy ~]# zabbix_get -s 10.1.1.12 -k mysql.status[Threads_connected]
[root@proxy ~]# zabbix_get -s 10.1.1.12 -k mysql.status[uptime]