Zabbix Proxy
zabbix作为一个分布式监控系统(分布式监控解决方案),支持通过代理(proxy)收集zabbix agent的监控数据,然后由zabbix proxy再把数据发送给zabbix server,也就是zabbix proxy 可以代替zabbix server收集监控数据,然后把数据汇报给zabbix server,所以zabbix proxy可以在一定程度上分担了zabbix server的数据收集压力,从而降低了数据的采集时间、也相应的增加了zabbix server的监控能力。
zabbix proxy 是一个数据收集器,它不计算触发器、不处理事件、不发送报警。所以最终导致告警延时可能会比较长。
使用场景
监控远程区域设备,尤其是多机房和多个云环境时
监控网络不稳定区域,避免跨网段监控的告警不及时
当需要监控设备众多时,使用它来减轻 Zabbix Server 的压力
简化分布式监控的维护,无需各位创建 Zabbix Server,统一管理策略
Zabbix Server和Zabbix Proxy
工作模式
以proxy角度区分主动被动。
proxy的主动被动和agent主动被动没有关系。
主动模式(推荐)
主动地向zabbix server周期性的申请获取zabbix agent的监控项信息,此模式可以大幅降低Zabbix Server的压力。
被动模式
被动地等待zabbix server的连接,并接受zabbix server发送的监控项指令,然后再由zabbix proxy向zabbix agent发起请求获取数据
端口
默认端口10051
实验
Zabbix proxy的大版本必须要和Zabbix Server的版本相同,不然会出问题。
所有主机的主机名要唯一,否则被动模式可能会影响数据采集。
Zabbix Server | 192.168.28.60 | Ubuntu2204 | Apache | MySQL | |
Zabbix Proxy Active | 192.168.28.61 | Ubuntu2204 | MySQL | 包安装 | |
Zabbix Proxy Passive | 192.168.28.62 | Ubuntu2204 | MySQL | 编译安装 | |
Zabbix Agent1 | 192.168.28.41 | Rocky8.9 | |||
Zabbix Agent2 | 192.168.28.42 | Rocky8.9 |
Zabbix Server
[root@zbx-server ~]#apt -y install mysql-server
[root@zbx-server ~]#apt -y install language-pack-zh-hans
[root@zbx-server ~]#wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb && dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb && apt update && apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent
[root@zbx-server ~]#mysql
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.00 sec)
mysql> create user zabbix@localhost identified by 'Admin.123';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on zabbix.* to zabbix@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> quit;
Bye
[root@zbx-server ~]#zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
Enter password:
[root@zbx-server ~]#mysql
mysql> set global log_bin_trust_function_creators = 0;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> quit;
[root@zbx-server ~]#vim /etc/zabbix/zabbix_server.conf
DBPassword=Admin.123
[root@zbx-server ~]#vim /etc/zabbix/apache.conf
php_value date.timezone Asia/Shanghai
[root@zbx-server ~]#vim /etc/apache2/sites-enabled/000-default.conf
ServerAdmin wenzi.zabbix.com
[root@zbx-server ~]#systemctl restart zabbix-server zabbix-agent apache2
[root@zbx-server ~]#systemctl enable zabbix-server zabbix-agent apache2
1、Zabbix Proxy Active
包安装
[root@zbx-proxy-active ~]#apt -y install mysql-server
[root@zbx-proxy-active ~]#wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
[root@zbx-proxy-active ~]#dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
[root@zbx-proxy-active ~]#apt update
[root@zbx-proxy-active ~]#apt install zabbix-proxy-mysql zabbix-sql-scripts
[root@zbx-proxy-active ~]#mysql
mysql> create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.00 sec)
mysql> create user zabbix@localhost identified by 'Admin.123';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> quit;
Bye
[root@zbx-proxy-active ~]#cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy
Enter password:
[root@zbx-proxy-active ~]#mysql
mysql> set global log_bin_trust_function_creators = 0;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> quit
Bye
-------------------------------------关键配置
[root@zbx-proxy-active ~]#vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.28.60
Hostname=zabbix-proxy1-active
DBPassword=Admin.123
[root@zbx-proxy-active ~]#systemctl restart zabbix-proxy
[root@zbx-proxy-active ~]#systemctl enable zabbix-proxy
Zabbix Proxy 配置文件说明
ProxyMode=0 #主动模式为0,被动模式为1,默认为0即主动模式
Server=10.0.0.100 #指向Zabbix Server
Hostname=zabbix-proxy-active #主动模式:此名称必须和后面Web管理页的agent代理程序名称相同
#被动模式:可以不一致
DBHost=localhost #MySQL服务器地址
DBName=zabbix_proxy_active #MySQL数据库名
DBUser=proxy #连接MySQL的用户
DBPassword=123456 #连接MySQL的用户密码
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
DebugLevel=4 #指定日志级别,默认为3,值越大日志越详细
EnableRemoteCommands=1 #开启远程命令,允许server到proxy上执行命令,在故障自愈时使用
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
ProxyLocalBuffer=360 #当proxy将数据发送给server后将数据仍在本地保存多少时间,默认不保留
ProxyOfflineBuffer=720 #当proxy和server无法连接时将数据在本地保存多长时间,默认1小时
HeartbeatFrequency=60 #server端用来检测proxy可用性的心跳信息的时间间隔,被动模式无效
ConfigFrequency=60 #每间隔多少时间到server获取监控项,在agent更新端监控项,只在主动模式有效,默认3600s
DataSenderFrequency=60 #数据发送的间隔时间,只在主动模式有效,默认1s,建议加长
JavaGateway=10.0.0.101 #指向JAVA gateway主机
StartJavaPollers=10 #指定开启的进程数,默认为0,即不开启
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
CacheSize=8M #当主机数量很多时,会将获取的监控项存放在缓存中,生产中设置2G
StartDBSyncers=4 #启动多少个线程和数据库连接
HistoryCacheSize=16M #保存agent发送过来的监控数据的内存空间大小,生产中设置2G
HistoryIndexCacheSize=4M #历史数据的索引
Timeout=30 #获取数据的最长等待时间
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000 #慢查询时长
1.1 Zabbix Agent1
使用主动模式
[root@zbx-agent1 ~]$rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm
[root@zbx-agent1 ~]$dnf clean all
[root@zbx-agent1 ~]$dnf install zabbix-agent
-------------------------------------关键配置
[root@zbx-agent1 ~]$vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.28.61
ServerActive=192.168.28.61
Hostname=zabbix-agent1
[root@zbx-agent1 ~]$systemctl enable --now zabbix-agent.service
Zabbix Agent 配置文件说明
LogFile=/tmp/zabbix_agentd.log
Server=10.0.0.100,10.0.0.101 #指向Zabbix Server(可选)和Zabbix Proxy(必
选)
ServerActive=10.0.0.101 #指向Zabbix Proxy
Hostname=10.0.0.103 #主动模式:和web界面主机名称一致
#被动模式:可以不一致
1.2 配置Zabbix Web
浏览器访问 http://wenzi.zabbix.com/zabbix/
添加代理
此处代理名称和Zabbix Proxy配置文件中 Hostname保持一致
配置Agent1使用Proxy Active
此处主机名称和Zabbix Agent配置文件中 Hostname保持一致
2 Zabbix Proxy Passive
编译安装
[root@zbx-proxy-passive ~]#apt update
[root@zbx-proxy-passive ~]#useradd zabbix
[root@zbx-proxy-passive ~]#apt -y install gcc make libxml2-dev libevent-dev libmysqlclient-dev libsnmp-dev libssh2-1-dev libcurl4-openssl-dev
[root@zbx-proxy-passive ~]#wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.27.tar.gz
[root@zbx-proxy-passive ~]#tar -xf zabbix-6.0.27.tar.gz -C /usr/local/
[root@zbx-proxy-passive ~]#cd /usr/local/zabbix-6.0.27/
[root@zbx-proxy-passive zabbix-6.0.27]#./configure --prefix=/apps/zabbix_proxy --enable-proxy --with-agent --with-net-snmp --with-mysql --with-ssh2 --with-libcurl --with-libxml2
[root@zbx-proxy-passive zabbix-6.0.27]# ~]#make && make install
[root@zbx-proxy-passive zabbix-6.0.27]#vim /lib/systemd/system/zabbix-proxy.service
[Unit]
Description=Zabbix Proxy
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_proxy/etc/zabbix_proxy.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-proxy
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_proxy.pid
KillMode=control-group
ExecStart=/apps/zabbix_proxy/sbin/zabbix_proxy -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0
[Install]
WantedBy=multi-user.target
[root@zbx-proxy-passive ~]#apt -y install mysql-server
[root@zbx-proxy-passive ~]#mysql
mysql> create database zabbix_proxy_passive character set utf8 collate utf8_bin;
Query OK, 1 row affected, 2 warnings (0.01 sec)
mysql> create user proxy@'localhost' identified by 'Admin.123';
Query OK, 0 rows affected (0.01 sec)
mysql> grant all on zabbix_proxy_passive.* to proxy@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
[root@zbx-proxy-passive ~]#cd /usr/local/zabbix-6.0.27/ && mysql -uproxy -pAdmin.123 zabbix_proxy_passive < database/mysql/schema.sql
[root@zbx-proxy-passive ~]#mysql
mysql> set global log_bin_trust_function_creators = 0;
Query OK, 0 rows affected, 1 warning (0.00 sec)
-------------------------------------关键配置
[root@zbx-proxy-passive ~]#vim /apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=1
Server=192.168.28.60
Hostname=zabbix-proxy2-passive #此项无关web界面,可以不改
DBName=zabbix_proxy_passive
DBUser=proxy
DBPassword=Admin.123
[root@zbx-proxy-passive ~]#systemctl daemon-reload
[root@zbx-proxy-passive ~]#systemctl enable --now zabbix-proxy.service
2.1 Zabbix Agent2
使用被动模式
[root@zbx-agent2 ~]$vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.28.62
Hostname=zabbix_agent2 #此项无关web界面,可以不改
[root@zbx-agent2 ~]$systemctl restart zabbix-agent.service
2.2 配置Zabbix Web
添加代理
代理程序名称无需和配置文件Hostname保持一致
配置Agent2使用Proxy Passive
主机名称无需和配置文件Hostname保持一致
最后zabbix web怎么搞都没看到检测数据,过程应该没错,后续解决。
Zabbix实现自动化
API:Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组功能的能力,而又无需直接使用源代码,或理解内部工作机制的细节。
Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。广泛用于:
- 创建新的应用程序以使用Zabbix
- 将Zabbix与第三方软件集成
- 自动执行常规任务
Zabbix API是基于Web的API,作为Web前端的一部分提供。使用JSON-RPC 2.0协议,这意味:
- 该API包含一组独立的方法
- 客户端和API之间的请求和响应使用JSON格式进行编码
官方文档:19. API
常用API
user.login #用户登录
host.get(create|delete|update) #主机操作
hostgroup.get(create|delete|update) #主机组操作
item.get(create|delete|update) #监控项目操作
history.get #历史数据查询
event.get #事件查询
trigger.get #触发器查询
API路径和Web服务器有关
#如果是基于Nginx
http://${ZABBIX_SERVER}/api_jsonrpc.php
#如果是基于Apache
http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php
实验
官方文档API部分有很多案例。
获取Token(一切操作的基础)
请求的 Content-Type 头部必须设置为以下值之一:application/json-rpc,application/json 或 application/jsonrequest。
访问Zabbix内部的任何数据之前,需要登录并获得身份验证令牌。
[root@zbx-server ~]#cat zabbix-api-token.sh
#!/bin/bash
#********************************************************************
#FileName: zabbix-api-token.sh
#Version: 1.0
#Date: 2024-03-08
#Author: wenzi
#Description: This is description
#********************************************************************
#httpd
zabbix_server='http://wenzi.zabbix.com/zabbix'
#nginx
#zabbix_server='http://wenzi.zabbix.com'
user=Admin
password=zabbix
curl -s -X POST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "'${user}'",
"password": "'${password}'"
},
"id": 1,
"auth": null
}' ${zabbix_server}/api_jsonrpc.php
[root@zbx-server ~]#./zabbix-api-token.sh | jq
{
"jsonrpc": "2.0",
"result": "6c55fa45f2d903a117627b5a22188ec9",
"id": 1
}
查询所有已配置主机的ID,主机名,接口
[root@zbx-server ~]#cat zabbix-api-gethost.sh
#!/bin/bash
#********************************************************************
#FileName: zabbix-api-gethost.sh
#Version: 1.0
#Date: 2024-03-08
#Author: wenzi
#Description: This is description
#********************************************************************
source ./zabbix-api-token.sh
token=`./zabbix-api-token.sh | awk -F '"' '{print $8}'`
curl -s -X POST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "'${token}'"
}' ${zabbix_server}/api_jsonrpc.php
[root@zbx-server ~]#./zabbix-api-gethost.sh | jq
{
"jsonrpc": "2.0",
"result": "a9f80171e010bcbdc58a3c3119544e08",
"id": 1
}
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
},
{
"hostid": "10620",
"host": "ubuntu",
"interfaces": [
{
"interfaceid": "46",
"ip": "192.168.28.62"
}
]
},
{
"hostid": "10621",
"host": "rocky",
"interfaces": [
{
"interfaceid": "47",
"ip": "192.168.28.41"
}
]
}
],
"id": 2
}