各版本zabbix安装
安装
!!! warning 注意事项
- font-end 为 apache, 前端访问地址: http://host/zabbix
- font-end 为 nginx (zabbix 6.0 后支持), 前端访问地址 http://host_name/
!!!
rpm系包安装
# 安装6.0LTS / Rocky Linux 8 / server, fronted, agent / mysql / Apache
1. 关闭epel源的zabbix项
[epel]
...
excludepkgs=zabbix*
2. 安装zabbix仓库
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm
dnf clean all
3. 安装
dnf install zabbix-server-mysql \
zabbix-web-mysql zabbix-apache-conf \
zabbix-sql-scripts zabbix-selinux-policy \
zabbix-agent mysql-server mysql
4. 创建数据库
mysql -uroot -p
> password
> mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin; -- 创建用户zabbix设定字符集等
> mysql> create user zabbix@localhost identified by 'alopex'; -- 修改用户zabbix的密码
> mysql> grant all privileges on zabbix.* to zabbix@localhost; -- localhost修改为对应的主机
> mysql> set global log_bin_trust_function_creators = 1; -- 允许在MySQL服务器中创建并使用自定义函数
> mysql> quit;
5. 导入数据库脚本
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
mysql -uroot -p
> password
> mysql> set global log_bin_trust_function_creators = 0; -- 关闭在MySQL服务器中创建并使用自定义函数
> mysql> quit;
6. 修改zabbix server的DB密码
/etc/zabbix/zabbix_server.conf
DBPassword=alopex
7. 设置zabbix开机启动
systemctl restart zabbix-server zabbix-agent httpd php-fpm mysqld.service
systemctl enable zabbix-server zabbix-agent httpd php-fpm mysqld.service
8. 打开zabbix UI访问界面,初始化数据库
...
dpkg系包安装
# 安装6.0LTS / ubuntu 22.04 / server, fronted, agent / mysql / Nginx
1. 安装zabbix仓库
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
2. 安装
apt install zabbix-server-mysql \
zabbix-frontend-php zabbix-nginx-conf \
zabbix-sql-scripts zabbix-agent \
mysql-server mysql-client
3. 创建数据库
mysql -uroot -p
> password
> mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin; -- 创建用户zabbix设定字符集等
> mysql> create user zabbix@localhost identified by 'alopex'; -- 修改用户zabbix的密码
> mysql> grant all privileges on zabbix.* to zabbix@localhost; -- localhost修改为对应的主机
> mysql> set global log_bin_trust_function_creators = 1; -- 允许在MySQL服务器中创建并使用自定义函数
> mysql> quit;
4. 导入数据库脚本
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
mysql -uroot -p
> password
> mysql> set global log_bin_trust_function_creators = 0; -- 关闭在MySQL服务器中创建并使用自定义函数
> mysql> quit;
5. 修改zabbix server的DB密码
/etc/zabbix/zabbix_server.conf
DBPassword=alopex
6. 关闭apache2
systemctl disable --now apache2
6. 配置PHP前端
/etc/zabbix/nginx.conf
listen 8080;
server_name my_zabbix.com; # 修改服务器名称
7. 追加hosts解析
echo "ip.ip.ip.ip my_zabbix.com" | sudo tee -a /etc/hosts
7. 设置zabbix开机启动
systemctl restart zabbix-server zabbix-agent nginx php8.1-fpm mysql-service
systemctl enable zabbix-server zabbix-agent nginx php8.1-fpm mysql-service
8. 打开zabbix UI访问界面,初始化数据库
...
主动模式和被动模式比较与实现
被动模式(默认)
项目 | 说明 |
---|---|
通信方式 | 被动模式下,Zabbix Agent被动地等待来自Zabbix Server或Proxy的连接请求和数据收集指令。 |
工作特点 | 1) 定期被Zabbix Server或Proxy主动连接和查询 2) 监控本地资源和应用程序状态 3) 将收集的数据发送给Server或Proxy |
适用场景 | 1) 中小规模环境,无需分布式监控 2) 防火墙限制,Agent无法主动连接Server 3) 监控对象数量有限 |
系统负载 | 相对较低,Agent处理请求的负载较小 |
Agent监听端口 | 10050 (TCP) - 与Zabbix Server/Proxy通信 10049 (TCP) - 与Zabbix Server通信(仅被动模式) |
Server/Proxy端口 | 10051 (TCP) - Zabbix Proxy的Trapper接收主动数据 10025 (TCP) - Server与Proxy、其他组件通信 10020 (TCP/UDP) - Server的SNMP Trapper与Agent通信 |
数据更新频率 | 由Zabbix Server或Proxy控制,默认60秒刷新一次被动项目。可根据需求进行配置调整。 |
主动模式
项目 | 说明 |
---|---|
通信方式 | 主动模式下,Zabbix Agent主动连接Zabbix Server,不需要Server端主动查询。 |
工作特点 | 1) 主动连接并主动将监控数据发送给Zabbix Server 2) 可在防火墙后工作,只需开启出站连接 3) 支持主动发送Trapper数据给Zabbix Server |
适用场景 | 1) 分布式大规模环境,大量被监控对象 2) 防火墙限制,只允许主动出站连接 3) 监控对象分散在广域网络中 |
系统负载 | 相比被动模式,Agent端负载较高,需要主动建立连接。 |
Agent监听端口 | 不适用,没有监听端口。 |
Server端口 | 10051 (TCP) - Zabbix Server Trapper接收主动数据 |
数据更新频率 | 由Agent端控制,可根据配置进行主动更新,默认120秒。 |
配置
配置
!!! abstract 配置信息
-
被动模式 (默认模式)
- agent端文件配置
/etc/zabbix/zabbix_agentd.conf
Server=192.168.100.136 # 指向zabbix server
- 重启服务
systemctl restart zabbix-agent.service
- 前端配置
- agent端文件配置
-
主动模式
- agent端文件配置
/etc/zabbix/zabbix_agentd.conf
Server=192.168.100.136 # !强制! 指向zabbix server ServerActive=192.168.100.136 # !强制! zabbix服务器IP地址 Hostname=192.168.100.77 # !强制! 当前主机IP,必须与zabbix server前端主机名称(Host name)相同 Timeout=30 # (建议配置 超时时间)
- 重启服务
systemctl restart zabbix-agent.service
- 前端配置
主动模式模板Linux by Zabbix agent active的agent.ping监控项ZBX标记不会变绿,需要修改
为被动模式ZBX标记才能被绿 (可以通过添加 agent.ping 变绿)
!!! - agent端文件配置
proxy主动被动模式案例
原理
通过zabbix proxy
将数据发送给zabbix server
,一来减轻了zabbix server
的负担,二来可以实现分布式
监控,将分散在各处的数据汇集到同一个监控上。
zabbix proxy 是一个数据收集器,它不计算触发器
、不处理事件
、不发送报警
。
架构
zabbix proxy
仅仅需要一条tcp
连接到zabbix server,所以防火墙上仅仅需要加上一条规则即可。zabbix proxy
数据库必须和server
分开,否则数据会被破坏,毕竟这两个数据库的表大部分都相同。总之记住,数据库分开即可。proxy
收集到数据之后,首先将数据缓存在本地,然后在一定得时间
之后传递给zabbix server
。- 这个时间由proxy配置文件中参数
ProxyLocalBuffer
andProxyOfflineBuffer
决定。
安装proxy
# Rocky8 / Mysql
1. 导入官方源
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm
sed -i.bak 's/repo.zabbix.com/mirrors.aliyun.com\/zabbix/' /etc/yum.repos.d/zabbix.repo
dnf clean all
2. 安装源
dnf install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy mysql-server
3. 创建数据库
# mysql -uroot -p
password
mysql> create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'alopex';
mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
4. 导入数据库脚本
cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy
mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
5. 配置数据库密码
> /etc/zabbix/zabbix_proxy.conf
DBPassword=alopex
6. 启动zabbix-proxy
systemctl restart zabbix-proxy
systemctl enable zabbix-proxy
工作模式
与
zabbix agent
定位类似
- 主动模式:
proxy
周期性主动发送数据给server
,大幅降低server
的压力。(推介使用
) - 被动模式:
server
通过发送监控项指令向proxy
请求数据
主动模式
zabbix server | zabbix proxy | zabbix agent (被监控主机) |
---|---|---|
192.168.100.136 | 192.168.100.34 | 192.168.100. |
proxy文件
前端配置后,需要重启proxy
grep -v '^#\|^$' /etc/zabbix/zabbix_proxy.conf
ProxyMode=0 # 开启主动模式(默认)
Server=192.168.100.136 # zabbix server IP地址
Hostname=zabbix-proxy-active # proxy的名称,需和前端配置一致
LogFile=/var/log/zabbix/zabbix_proxy.log # 日志文件路径
LogFileSize=0
PidFile=/run/zabbix/zabbix_proxy.pid
SocketDir=/run/zabbix
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=alopex
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1,192.168.100.0/24 # 允许接受的agent网段
agent文件
grep -Ev '^#|^$' /etc/zabbix/zabbix_agentd.conf
PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.100.136,192.168.100.34
ServerActive=192.168.100.136,192.168.100.34
Hostname=192.168.100.77
Timeout=20
Include=/etc/zabbix/zabbix_agentd.d/*.conf
前端配置
验证监控
被动模式
zabbix server | zabbix proxy | zabbix agent (被监控主机) |
---|---|---|
192.168.100.136 | 192.168.100.34 | 192.168.100. |
proxy数据库修改
mysql -uroot
# 被动模式需要zabbix server主动连接,数据库不能仅由proxy访问
UPDATE mysql.user
SET Host = 'localhost'
WHERE User = 'zabbix';
grant all privileges on zabbix_proxy.* to zabbix@'192.168.100.%';
select host,user from mysql.user;
proxy文件
grep -v '^#\|^$' /etc/zabbix/zabbix_proxy.conf
ProxyMode=1 # 开启被动模式
Server=192.168.100.136 # zabbix server 主机IP
Hostname=zabbix-proxy-passive # 代理服务器名称,被动模式不要求和后面Web管理页的agent代理程序名称相同
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_proxy.pid
SocketDir=/run/zabbix
DBHost=192.168.100.34 # 修改为Proxy数据库 IP地址
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=alopex
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1,192.168.100.0/24
agent文件
grep -Ev '^#|^$' /etc/zabbix/zabbix_agentd.conf
PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.100.136,192.168.100.34 # 设置Proxy代理IP
Hostname=192.168.100.77
Timeout=20
Include=/etc/zabbix/zabbix_agentd.d/*.conf
前端配置
sudo grep -Ev '^#|^$' /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_server.pid
SocketDir=/run/zabbix
DBName=zabbix
DBUser=zabbix
DBPassword=alopex
JavaGateway=192.168.100.121
StartJavaPollers=10
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
FpingLocation=/usr/bin/fping
Fping6Location=/usr/bin/fping6
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1,192.168.100.0/24 # 配置可通信IP地址段
验证监控
参考
一键zabbix agent脚本
#!/bin/bash
# 安装agent
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
sed -i 's!http://repo.zabbix.com!https://mirrors.aliyun.com/zabbix!' /etc/apt/sources.list.d/zabbix.list
apt update
apt install zabbix-agent
# 主动被动二选一
## 被动模式配置修改
if [ $# -ne 1 ]
then
echo "Usage: bash script.sh <zabbix-server>"
exit -1
fi
ZABBIX=${1}
sed -i "s/^Server=127.0.0.1/Server=${ZABBIX}/" /etc/zabbix/zabbix_agentd.conf
## 主动模式配置修改
#if [ $# -ne 2 ]
#then
# echo "Usage: bash script.sh <zabbix-server> <Hostname>"
# exit -1
#fi
#ZABBIX=${1}
#HOSTNAME=${2}
## sed -i "s/^Server=127.0.0.1/Server=${ZABBIX}/" /etc/zabbix/zabbix_agentd.conf
## sed -i "s/^ServerActive=127.0.0.1/ServerActive=${ZABBIX}/" /etc/zabbix/zabbix_agentd.conf
## sed -i "s/^Hostname=.*/Hostname=${HOSTNAME}/" /etc/zabbix/zabbix_agentd.conf
systemctl restart zabbix-agent
一键zabbix api添加zabbix agent
api_create (被动模式)
#!/bin/bash
HOST=$(hostname -I | awk '{print $1}')
ZABBIX_SERVER='my_zabbix.com'
nginx_URL="http://${ZABBIX_SERVER}/api_jsonrpc.php"
apache_URL="http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php"
# 选择web服务器类型指定URL
URL=$nginx_URL
token=$(curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' $URL | cut -d ',' -f2 | cut -d '"' -f4)
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'$HOST'",
"name": "'API-$HOST'",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'$HOST'",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 1,
"auth": "'$token'"
}' $URL | python3 -m json.tool
api_create (主动模式)
#!/bin/bash
if [[ $# -ne 1 ]]
then
echo "usage: bash script.sh <HOSTNAME>"
exit -1
fi
HOST=$(hostname -I | awk '{print $1}')
HOSTNAME=${1}
ZABBIX_SERVER='my_zabbix.com'
nginx_URL="http://${ZABBIX_SERVER}/api_jsonrpc.php"
apache_URL="http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php"
# 选择web服务器类型指定URL
URL=$nginx_URL
token=$(curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' $URL | cut -d ',' -f2 | cut -d '"' -f4)
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'$HOSTNAME'",
"name": "'$HOST'",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'$HOST'",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10343"
}
]
},
"id": 1,
"auth": "'$token'"
}' $URL | python3 -m json.tool