一、User parameters 用户参数
官方预定义监控项文档:
https://www.zabbix.com/documentation/5.0/zh/manual/config/items/itemtypes/zabbix_agent
1、介绍和用法
① 介绍
自定义用户参数,也就是自定义key
有时,你可能想要运行一个代理检查,而不是Zabbix的预定义
你可以编写一个命令来检索需要的数据,并将其包含在代理配置文件("UserParameter"配置参数)的用户参数中
② 用法格式 syntax
UserParameter=<key>,<command>
A user parameter also contains a key 一个用户参数也包含一个键
The key will be necessary when configuring an item 在配置监控项时,key是必需的
Note: Need to restart the agent 注意:需要重新启动agent 服务
2、用法展示
(1)修改agent 端的配置,设置用户参数
① free | awk '/^Mem/{print $3}' 自己需要查找的参数的命令
[root@localhost ~]# free | awk '/^Mem/{print $3}'
789668
[root@localhost ~]# free | awk '/^Mem/{print $3}'
789608
[root@localhost ~]# free | awk '/^Mem/{print $3}'
789752
② 修改配置文件,把查找参数的命令设为用户参数
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.d/memory_usage.conf
UserParameter=memory.used,free | awk '/^Mem/{print $3}'
③ systemctl restart zabbix-agent.service 重启agent 服务
[root@localhost ~]# systemctl restart zabbix-agent.service
(2)在zabbix-server 端,查询
zabbix_get -s 10.36.192.124 -p 10050 -k "memory.used"
[root@zabbix_server ~]# zabbix_get -s 10.36.192.124 -p 10050 -k "memory.used"
196052
[root@zabbix_server ~]# zabbix_get -s 10.36.192.124 -p 10050 -k "memory.used"
196136
[root@zabbix_server ~]# zabbix_get -s 10.36.192.124 -p 10050 -k "memory.used"
196128
(3)在监控上,设置一个item监控项,使用这个用户参数
3、用法升级
(1)修改agent 端的配置,设置用户参数
① 命令行查询参数的命令
[root@localhost ~]# cat /proc/meminfo
MemTotal: 1863032 kB
MemFree: 799572 kB
····
DirectMap2M: 2011136 kB
DirectMap1G: 0 kB
② 修改配置文件,把查找参数的命令设为用户参数
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.d/memory_usage.conf
UserParameter=memory.stats[*],cat /proc/meminfo | awk '/^$1/{print $$2}'
[root@localhost ~]# systemctl restart zabbix-agent
分析:$$2:表示不是前边调位置参数的$2 ,而是awk 的参数$2
注意:$1是调用前边的[*],位置参数,第一个参数
(2)在zabbix-server 端,查询使用这个用户参数的key
[root@zabbix_server ~]# zabbix_get -s 10.36.192.124 -p 10050 -k "memory.stats[MemTotal]"
1863032
[root@zabbix_server ~]# zabbix_get -s 10.36.192.124 -p 10050 -k "memory.stats[MemFree]"
802136
[root@zabbix_server ~]# zabbix_get -s 10.36.192.124 -p 10050 -k "memory.stats[Cached]"
816092
(3)在监控上,设置一个item监控项,使用这个用户参数
① 添加Memory Total 的item监控项,使用memory.stats[MemTotal] 的用户参数
② clone 克隆Memory Total 创建Memory Free和Memory Cached 的监控项
③ 在三个监控项中自定义倍数,其目的是为了实验效果更清晰。
(4)上面3个监控项的graph 图形
① memory-total
② memory-free
③memory-cached
4、使用用户参数监控php-fpm 服务的状态
在agent 端:
(1)下载,设置php-fpm
① yum -y install php-fpm nginx
[root@localhost ~]# yum -y install php-fpm nginx
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
····
完毕!
② vim /etc/php-fpm.d/www.conf 打开php-fpm的状态页面
[root@localhost ~]# vim /etc/php-fpm.d/www.conf
# 修改如下内容
user = nginx
group = nginx
pm.status_path = /php-fpm-status #php-fpm 的状态监测页面
ping.path = /ping #ping 接口,存活状态是否ok
ping.response = pong #响应内容pong
③ systemctl start php-fpm 开启服务
[root@localhost ~]# systemctl start php-fpm
[root@localhost ~]# ss -nplt | grep php
LISTEN 0 128 127.0.0.1:9000 *:* users:(("php-fpm",pid=102042,fd=0),("php-fpm",pid=102041,fd=0),("php-fpm",pid=102040,fd=0),("php-fpm",pid=102039,fd=0),("php-fpm",pid=102038,fd=0),("php-fpm",pid=102037,fd=6))
(2)设置nginx ,设置代理php,和php-fpm的状态页面匹配
① vim /etc/nginx/nginx.conf
[root@localhost ~]# vim /etc/nginx/nginx.conf
# 在server中添加这些内容
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* /(php-fpm-status|ping) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
allow 127.0.0.1; #因为这个页面很重要,所有需加访问控制
deny all;
access_log off; #访问这个页面就不用记录日志了
}
② systemctl start nginx 开启nginx服务
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# ss -nplt | grep nginx
LISTEN 0 128 *:80 *:* users:(("nginx",pid=110856,fd=6),("nginx",pid=110855,fd=6),("nginx",pid=110852,fd=6))
LISTEN 0 128 [::]:80 [::]:* users:(("nginx",pid=110856,fd=7),("nginx",pid=110855,fd=7),("nginx",pid=110852,fd=7))
(3)在agent 端,设置用户参数
① 查询 curl 127.0.0.1/php-fpm-status
[root@localhost ~]# curl 127.0.0.1/php-fpm-status
pool: www
process manager: dynamic
start time: 16/Nov/2023:21:21:34 +0800
start since: 429
accepted conn: 1
listen queue: 0
max listen queue: 0
listen queue len: 128
idle processes: 4
active processes: 1
total processes: 5
max active processes: 1
max children reached: 0
slow requests: 0
② 设置配置文件 并 重启服务
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.d/php_status.conf
UserParameter=php-fpm.stats[*],curl -s http://127.0.0.1/php-fpm-status | awk '/^$1/{print $$NF}'
[root@localhost ~]# systemctl restart zabbix-agent
分析:设置用户参数为php-fpm.stats[*],$1为第一个参数;$$NF为awk中的参数,倒数第一列
(4)在zabbix-server 端,查询使用这个用户参数的key
[root@zabbix_server ~]# zabbix_get -s 10.36.192.124 -p 10050 -k "php-fpm.stats[idle]"
4
[root@zabbix_server ~]# zabbix_get -s 10.36.192.124 -p 10050 -k "php-fpm.stats[active]"
1
[root@zabbix_server ~]# zabbix_get -s 10.36.192.124 -p 10050 -k "php-fpm.stats[max active]"
1
(5)创建一个模板,在模板上创建4个item监控项,使用定义的用户参数
① 创建一个模板
② 在模板上配置items 监控项,使用刚定义的用户参数fpm.stats[total processes]
③ 再clone克隆几个items监控项 fpm.stats[active processes]
fpm.stats[max active processes]
fpm.stats[idle processes]
(6)host主机链接模板
(7)查看graph 图形
① php-fpm total processes
② php-fpm active processes
③ php-fpm max active processes
④ php-fpm idle processes
二、Network discovery 网络发现
1、介绍
(1)介绍
网络发现:zabbix server扫描指定网络范围内的主机;
网络发现是zabbix 最具特色的功能之一,它能够根据用户事先定义的规则自动添加监控的主机或服务等
优点:
加快Zabbix部署
简化管理,在快速变化的环境中使用Zabbix,而不需要过度管理
(2)发现方式:
ip地址范围;
可用服务(ftp, ssh, http, ...);
zabbix_agent的响应;
snmp_agent的响应;
(3)网络发现通常包含两个阶段:discovery发现 和actions动作
① discovery:
Zabbix定期扫描网络发现规则中定义的IP范围;检查的频率对于每个规则都是可配置的
每个规则都有一组用于为IP范围执行的服务检查
由网络发现模块执行的服务和主机(IP)的每个检查都会生成一个发现事件
8种响应事件:
② actions:网络发现中的事件可以触发action,从而自动执行指定的操作,把discvery events当作前提条件;
Sending notifications 发送通知
Adding/removing hosts 添加/删除主机
Enabling/disabling hosts 启用/禁用host
Adding hosts to a group 向组中添加主机
Removing hosts from a group 移除组中的主机
Linking hosts to/unlinking from a template 从模板链接主机或取消链接
Executing remote scripts 执行远程脚本
这些事件的配置还可以基于设备的类型、IP 、状态、上线/ 离线等进行配置
(4)网络发现:接口添加
网络发现中添加主机时会自动创建interface 接口
例如:
如果基于SNMP 检测成功,则会创建SNMP 接口
如果某服务同时响应给了agent 和SNMP ,则两种接口都会创建
如果同一种发现机制( 如agent) 返回了非唯一数据,则第一个接口被识别为默认,其它的为额外接口
即便是某主机开始时只有agent 接口,后来又通过snmp 发现了它,同样会为其添加额外的snmp 接口
不同的主机如果返回了相同的数据,则第一个主机将被添加,余下的主机会被当作第一个主机的额外接口
2、配置网络发现Network discovery
(1)准备一台可被扫描发现的主机
① 安装agent 段的包
[root@zabbix_node2 ~]# yum -y install zabbix-agent zabbix-sender
② 设置agent 配置,可以把之前设置好的slave1的配置传过来
[root@zabbix_node2 ~]# vim /etc/zabbix_agentd.conf
Hostname=zabbix_node2
Server=10.36.192.186
ServerActive=10.36.192.186
③ visudo 修改sudo的配置(在100行)
[root@zabbix_node2 ~]# visudo
root ALL=(ALL) ALL
zabbix ALL=(ALL) NOPASSWD: ALL
④ 开启服务
[root@zabbix_node2 ~]# systemctl start zabbix-agent
[root@zabbix_node2 ~]# ss -nplt | grep zabbix
LISTEN 0 128 *:10050 *:* users:(("zabbix_agentd",pid=52786,fd=4),("zabbix_agentd",pid=52785,fd=4),("zabbix_agentd",pid=52784,fd=4),("zabbix_agentd",pid=52783,fd=4),("zabbix_agentd",pid=52782,fd=4),("zabbix_agentd",pid=52781,fd=4))
LISTEN 0 128 [::]:10050 [::]:* users:(("zabbix_agentd",pid=52786,fd=5),("zabbix_agentd",pid=52785,fd=5),("zabbix_agentd",pid=52784,fd=5),("zabbix_agentd",pid=52783,fd=5),("zabbix_agentd",pid=52782,fd=5),("zabbix_agentd",pid=52781,fd=5))
(2)设置自动发现规则discovery
注释:
① key:zabbix_get -s 192.168.30.2 -p 10050 -k "system.hostname"
[root@zabbix_server ~]# zabbix_get -s 10.36.192.124 -p 10050 -k "system.hostname"
zabbix_node1
[root@zabbix_server ~]# zabbix_get -s 10.36.192.148 -p 10050 -k "system.hostname"
zabbix_node2
② 更新间隔:1h就好,不要扫描太过频繁,扫描整个网段,太废资源;这里为了实验,设为3s
(3)自动发现成功
(4)设置自动发现discovery 的动作action
a) 创建
b) 设置action动作
发现后通过钉钉发送信息,并将发现的主机加入到主机群,关联相关模板。
③ 查看主机检测操作
三、web监控
1、介绍
(1)介绍
① Web监控:监控指定的站点的资源下载速度,及页面响应时间,还有响应代码;
② 术语:
web Scenario: web场景(站点)
web page :web页面,一个场景有多个页面
內建key:要测一个页面,要测三个步骤(下边3个內建key)
③ 内建key:
web.test.in[Scenario,Step,bps]:传输速率
web.test.time[Scenario,Step]: 响应时长
web.test.rspcode[Scenario,Step]:响应码
2、创建设置web场景
(1)创建
① 点击步骤,设置web page web页面
a) 设置名为home page,URL为 http://10.36.192.124/index.html 的web页面
b) 设置名为fpm status,URL为http://10.36.192.124/fpm-status 的web页面
c) 设置2个web页面成功
3、查看测试
监测 - 主机
四、主动/被动 监控
1、介绍
(1)主动/被动介绍
被动检测:相对于agent而言;agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
主动检测:相对于agent而言;agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
主动监控能极大节约监控server 的资源。
(2)zabbix_sender发送数据:实现人工生成数据,发给server端
① zabbix server上的某主机上,直接定义Item时随便定义一个不与其它已有key冲突的key即可,即item type为"zabbix trapper";
② 用法选项:
zabbix_sender:
-z zabbix_server_ip
-p zabbix_server_port
-s zabbix_agent_hostname
-k key
-o value 值
zabbix_get:
-s zabbix_agent_ip
-p zabbix_agent_port
-k key
2、设置一个通过內建key发送数据的主动监控
(1)agent端所需要基本配置:
[root@zabbix_node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=10.36.192.186 #给哪个监控server 发送数据
Hostname=zabbix_node1 #注意,这里的名字要与web页面中的主机名称配置相同,自己的主机名,假设主机定死了,不设置下一项
#HostnameItem= #如果自己的主机名易变动,这一项相当于key一样去匹配
注意:若后两项同时启用,下边一个选择生效
(2)设置一个主动监测
配置 - 主机 - web1
① 选择进程,每秒更改,
因为key:system.cpu.switches :上下文的数量进行切换,它返回一个整数值。为了监控效果,选择下一秒减上一秒的值作为监控。
这里将主机web1改为了zabbix_node1。
3、设置一个通过命令zabbix_sender发送数据的主动监控
(1)配置一个zabbix traper(采集器) 的item 监控项
(2)agent 端手动发送数据
[root@zabbix_node1 ~]# zabbix_sender -z 10.36.192.186 -p 10051 -s zabbix_node1 -k "send.test.data" -o 56721
Response from "10.36.192.186:10051": "processed: 1; failed: 0; total: 1; seconds spent: 0.000032"
sent: 1; skipped: 0; total: 1
[root@zabbix_node1 ~]# zabbix_sender -z 10.36.192.186 -p 10051 -s zabbix_node1 -k "send.test.data" -o 52929
Response from "10.36.192.186:10051": "processed: 1; failed: 0; total: 1; seconds spent: 0.000062"
sent: 1; skipped: 0; total: 1
(3)监控到数据的变化
五、分布式监控
使用zabbix proxy进行分布式监控
1、配置数据库
# 安装
[root@zabbix_proxy ~]# yum -y install mysql mysql-server
# 启动数据库
[root@zabbix_proxy ~]# systemctl restart mariadb
# 进入数据库进行数据初始化
[root@zabbix_proxy ~]# systemctl start mysqld
[root@zabbix_proxy ~]# grep pass /var/log/mysqld.log
2023-11-18T08:33:07.402059Z 1 [Note] A temporary password is generated for root@localhost: kkdaCfXhb0?a
[root@zabbix_proxy ~]# mysqladmin -uroot -p'kkdaCfXhb0?a' password 'Xiaolizi@123'
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
[root@zabbix_proxy ~]# mysql -p'Xiaolizi@123'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
····
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database zabbix_proxy character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on zabbix_proxy.* to 'zabbix'@'%' identified by 'Xiaolizi@123';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> ^DBye
2、配置proxy端
配置proxy端:
[root@zabbix_proxy ~]# yum install -y https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zabbix_proxy ~]# yum install -y zabbix-proxy-mysql zabbix-get zabbix-sender
[root@zabbix_proxy ~]# vim /etc/zabbix/zabbix_proxy.conf
# 修改一下内容
ProxyMode=1 # 0为主动 1为被动
Server=服务端ip地址
SourceIP=发送采样信息的ip地址
Hostname=zbxproxy.along.com #主机名
ListenPort=10051 #proxy自己的监听端口
EnableRemoteCommands=1 #允许远程命令
LogRemoteCommands=1 #记录远程命令的日志
数据的配置
DBHost=数据库地址
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=Xiaolizi@123
ConfigFrequency=30 #多长时间,去服务端拖一次有自己监控的操作配置;为了实验更快的生效,这里设置30秒,默认3600s
DataSenderFrequency=1 #每一秒向server 端发一次数据,发送频度
3、导入数据
[root@zabbix_proxy ~]# rpm -ql zabbix-proxy-mysql
/etc/logrotate.d/zabbix-proxy
/etc/zabbix/zabbix_proxy.conf
/usr/lib/systemd/system/zabbix-proxy.service
/usr/lib/tmpfiles.d/zabbix-proxy.conf
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_proxy_mysql
/usr/share/doc/zabbix-proxy-mysql-5.0.39
/usr/share/doc/zabbix-proxy-mysql-5.0.39/AUTHORS
/usr/share/doc/zabbix-proxy-mysql-5.0.39/COPYING
/usr/share/doc/zabbix-proxy-mysql-5.0.39/ChangeLog
/usr/share/doc/zabbix-proxy-mysql-5.0.39/NEWS
/usr/share/doc/zabbix-proxy-mysql-5.0.39/README
/usr/share/doc/zabbix-proxy-mysql-5.0.39/schema.sql.gz #这一行
/usr/share/man/man8/zabbix_proxy.8.gz
/var/log/zabbix
/var/run/zabbix
[root@zabbix_proxy ~]# zcat /usr/share/doc/zabbix-proxy-mysql-5.0.39/schema.sql.gz | mysql -uzabbix -pXiaolizi@123 -h 10.36.192.148 zabbix_proxy
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@zabbix_proxy ~]#
重新启动
[root@zabbix_proxy ~]# systemctl start zabbix-proxy
[root@zabbix_proxy ~]# ss -nplt | grep zabbix_proxy
LISTEN 0 128 *:10051 *:* users:(("zabbix_proxy",pid=36118,fd=4),("zabbix_proxy",pid=36117,fd=4),("zabbix_proxy",pid=36116,fd=4),("zabbix_proxy",pid=36115,fd=4),("zabbix_proxy",pid=36114,fd=4),("zabbix_proxy",pid=36113,fd=4),("zabbix_proxy",pid=36112,fd=4),("zabbix_proxy",pid=36111,fd=4),("zabbix_proxy",pid=36110,fd=4),("zabbix_proxy",pid=36109,fd=4),("zabbix_proxy",pid=36108,fd=4),("zabbix_proxy",pid=36107,fd=4),("zabbix_proxy",pid=36106,fd=4),("zabbix_proxy",pid=36105,fd=4),("zabbix_proxy",pid=36104,fd=4),("zabbix_proxy",pid=36103,fd=4),("zabbix_proxy",pid=36102,fd=4),("zabbix_proxy",pid=36101,fd=4),("zabbix_proxy",pid=36100,fd=4),("zabbix_proxy",pid=36099,fd=4),("zabbix_proxy",pid=36098,fd=4),("zabbix_proxy",pid=36097,fd=4),("zabbix_proxy",pid=36096,fd=4),("zabbix_proxy",pid=36095,fd=4),("zabbix_proxy",pid=36094,fd=4),("zabbix_proxy",pid=36093,fd=4),("zabbix_proxy",pid=36091,fd=4))
LISTEN 0 128 [::]:10051 [::]:* users:(("zabbix_proxy",pid=36118,fd=5),("zabbix_proxy",pid=36117,fd=5),("zabbix_proxy",pid=36116,fd=5),("zabbix_proxy",pid=36115,fd=5),("zabbix_proxy",pid=36114,fd=5),("zabbix_proxy",pid=36113,fd=5),("zabbix_proxy",pid=36112,fd=5),("zabbix_proxy",pid=36111,fd=5),("zabbix_proxy",pid=36110,fd=5),("zabbix_proxy",pid=36109,fd=5),("zabbix_proxy",pid=36108,fd=5),("zabbix_proxy",pid=36107,fd=5),("zabbix_proxy",pid=36106,fd=5),("zabbix_proxy",pid=36105,fd=5),("zabbix_proxy",pid=36104,fd=5),("zabbix_proxy",pid=36103,fd=5),("zabbix_proxy",pid=36102,fd=5),("zabbix_proxy",pid=36101,fd=5),("zabbix_proxy",pid=36100,fd=5),("zabbix_proxy",pid=36099,fd=5),("zabbix_proxy",pid=36098,fd=5),("zabbix_proxy",pid=36097,fd=5),("zabbix_proxy",pid=36096,fd=5),("zabbix_proxy",pid=36095,fd=5),("zabbix_proxy",pid=36094,fd=5),("zabbix_proxy",pid=36093,fd=5),("zabbix_proxy",pid=36091,fd=5))
4、配置agent客户端
[root@zabbix_node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=10.36.192.148 #server端地址,proxy端地址
ServerActive=10.36.192.148 #server端地址,proxy端地址
[root@zabbix_node1 ~]# systemctl restart zabbix-agent
5、web页面配置
注意,下面的代理程序名称,一定要与proxy配置文件中的Hostname相同
然后将之前所添加的主机进行设置
6、检查
观察之前配置的监控项是否依然可以接受数据