跳转至

Zabbix部署2

一. 被监控端zabbix_agent主机上安装zabbix_agent

1. 安装zabbix_agent

1) 配置阿里云epel源

# 1. 备份
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
# 2. 下载新repo 到/etc/yum.repos.d/
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-9.noarch.rpm
sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

2) 安装依赖工具

yum -y install pcre pcre-devel net-snmp net-snmp-devel curl-devel libssh2-devel libevent libevent-devel curl curl-devel perl-DBI gcc make

3) 创建用户

groupadd zabbix
useradd -M -s /sbin/nologin -g zabbix zabbix

4) zabbix_agent端编译安装

a. 下载zabbix7.0.29

# 1. 下载源码包
wget -O zabbix-7.0.29.tar.gz https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.29.tar.gz

# 2. 下载官方 sha256 校验文件
wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.29.tar.gz.sha256

# 3. 校验:-c 读取 sha256 文件里的值,和同名文件比对,输出 OK 即通过
printf '%s  %s\n' "$(cat zabbix-7.0.29.tar.gz.sha256)" "zabbix-7.0.29.tar.gz" | sha256sum -c -

b. 解压编译安装

# 1. 解压
tar xf zabbix-7.0.29.tar.gz 
# 2. 配置
cd zabbix-7.0.29
./configure --prefix=/usr/local/zabbix --enable-agent
# 3. 编译安装
make && make install

c. 创建软链接

ln -s /usr/local/zabbix/bin/* /usr/local/bin/
ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/

5) 配置zabbix_agent

先备份并修改/usr/local/zabbix/etc/zabbix_agentd.conf

cp /usr/local/zabbix/etc/zabbix_agentd.conf{,.bak}
vi /usr/local/zabbix/etc/zabbix_agentd.conf

我们需要改的行有

# PidFile=/tmp/zabbix_agentd.pid
# 11行。取消注释后修改为PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid
LogFile=/tmp/zabbix_agentd.log
# 30行。修改为LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=127.0.0.1
# 113行。这里写zabbix_server的地址。即Server=192.168.100.103
# ListenPort=10050
# 127行,取消注释
ServerActive=127.0.0.1
# 169行,也是写zabbix_server的地址。ServerActive=192.168.100.103
Hostname=Zabbix server
# 180行。这里同网页的设置。可以写成Hostname=Zabbix_agent
# Timeout=3
# 301行。改为Timeout=15
# Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
# 551行。取消注释

可以使用如下命令

sed -i -e 's@# PidFile=/tmp/zabbix_agentd\.pid@PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid@' \
    -e 's@LogFile=/tmp/zabbix_agentd\.log@LogFile=/usr/local/zabbix/logs/zabbix_agentd.log@' \
    -e 's@Server=127\.0\.0\.1@Server=192.168.100.103@' \
    -e 's@# ListenPort=10050@ListenPort=10050@' \
    -e 's@ServerActive=127\.0\.0\.1@ServerActive=192.168.100.103@' \
    -e 's@Hostname=Zabbix server@Hostname=Zabbix_agent@' \
    -e 's@# Timeout=3@Timeout=15@' \
    -e 's@# Include=/usr/local/etc/zabbix_agentd\.conf\.d/\*\.conf@Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf@' \
    /usr/local/zabbix/etc/zabbix_agentd.conf

或者粘贴进去

PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=192.168.100.103
ListenPort=10050
ServerActive=192.168.100.103
Hostname=Zabbix_agent
Timeout=15
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf

2. 创建数据存放目录,并赋权

mkdir -p /usr/local/zabbix/etc/zabbix_agentd.conf.d
mkdir /usr/local/zabbix/logs
chown -R zabbix:zabbix /usr/local/zabbix/logs

3. 添加zabbix_agent启动脚本,然后启动服务

# 1. 写入启动文件
cat << 'EOF' | tee /lib/systemd/system/zabbix-agent.service
[Unit]
Description=Zabbix Server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/zabbix/logs/zabbix_agentd.pid
User=zabbix
Group=zabbix
ExecStart=/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf
ExecStop=/bin/kill-SIGTERM $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# 2. 重载
systemctl daemon-reload
# 3. 启动服务
systemctl start zabbix-agent.service
# 4. 设置开机自启动
systemctl enable zabbix-agent.service

4. 查看服务

# 查看端口占用
[root@7 zabbix-7.0.29]# ss -tuanp|grep zabbix
tcp   LISTEN 0      4096           0.0.0.0:10050         0.0.0.0:*     users:(("zabbix_agentd",pid=30382,fd=4),("zabbix_agentd",pid=30381,fd=4),("zabbix_agentd",pid=30380,fd=4),("zabbix_agentd",pid=30379,fd=4),("zabbix_agentd",pid=30378,fd=4),("zabbix_agentd",pid=30377,fd=4),("zabbix_agentd",pid=30376,fd=4),
("zabbix_agentd",pid=30375,fd=4),("zabbix_agentd",pid=30374,fd=4),("zabbix_agentd",pid=30373,fd=4),("zabbix_agentd",pid=30372,fd=4),("zabbix_agentd",pid=30371,fd=4),("zabbix_agentd",pid=30370,fd=4))
# 查看进程
[root@7 zabbix-7.0.29]# ps -aux|grep 'zabbix'
zabbix     30370  0.0  0.1   4872  2048 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf
zabbix     30371  0.0  0.1   4872  2048 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix     30372  0.0  0.1   4872  1920 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix     30373  0.0  0.1   4872  1920 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix     30374  0.0  0.1   4872  1920 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix     30375  0.0  0.1   4872  1920 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #4 [waiting for connection]
zabbix     30376  0.0  0.1   4872  1920 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #5 [waiting for connection]
zabbix     30377  0.0  0.1   4872  1920 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #6 [waiting for connection]
zabbix     30378  0.0  0.1   4872  1792 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #7 [waiting for connection]
zabbix     30379  0.0  0.1   4872  1920 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #8 [waiting for connection]
zabbix     30380  0.0  0.1   4872  1920 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #9 [waiting for connection]
zabbix     30381  0.0  0.1   4872  1920 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #10 [waiting for connection]
zabbix     30382  0.0  0.1   4872  2048 ?        S    19:31   0:00 /usr/local/zabbix/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
root       30386  0.0  0.1   6652  2304 pts/0    S+   19:32   0:00 grep --color=auto zabbix

5. 测试zabbix_server端与zabbix_agent端的通信

[root@5 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.100.106 -p 10050 -k system.uname
Linux 7 5.14.0-570.17.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 23 22:47:01 UTC 2025 x86_64

6. 登录zabbix_server的Web界面配置zabbix_agent主机

1) 创建主机

zabbix_server: 192.168.100.103

a. 创建主机

alt text

b. 配置被监控主机的模板和端口

alt text

alt text

二. Zabbix的一些概念

1. 常见进程

默认情况下zabbix包含五个程序: zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选项,需要额外安装,我们下面分别介绍他们各自的作用

(1) zabbix_agentd:

客户端守护进程,此进程收集客户端数据,例如CPU负载、内存、硬盘使用情况等

(2) zabbix_get

zabbix工具,单独使用的命令。通常在server或者proxy端执行获取远程客户端信息的命令。通常用于用户排错。例如在server端获取不到客户端的内存数据,我们可以使用zabbix_get获取客户端的内容方式来做故障排查

(3) zabbix_sender

zabbix工具,用于发送数据给server或者proxy。通常用于耗时比较长的检查。很多检查非常耗时间,会导致zabbix超时。于是我们在脚本执行完毕后,使用sender主动提交数据

(4) zabbix_server

zabbix服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都会提交给server

备注:当然不是所有的数据都主动提交给zabbix_server,也有的是server主动去获取数据

(5) zabbox_proxy

zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要吧收集到的数据提交给server

(6) zabbix_java_gateway

zabbix2.0之后引入的一个功能。顾名思义也就是Java网关,类似于agentd。但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。

2. zabbix监控环境中的基本概念

  1. 主机(host): 要监控的网络设备或主机,可由IP或DNS名称指定
  2. 主机集群(host group): 主机的逻辑容器,可以包含主机和模板
  3. 监控项(item): 一个特定监控指标的相关数据;这些数据来自于被监控的对象;item是zabbix进行数据收集的核心。相对于某个监控对象,每个item都有"key"标识
  4. 触发器(trigger): 一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范畴内,也就是阈值;接受的数据量大于阈值时,触发器状态从"OK"变为"problem",当数据再次恢复到合理范围,优惠转变为"OK"
  5. 事件(event): 触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent自动注册等
  6. 动作(action): 指对于特定事件先定义的处理方法,如发送通知,何时执行操作
  7. 报警升级(escalation): 发送警报或者执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等
  8. 媒介(media): 发送通知的手段或者通道,如Email、Jabber或者SMS等
  9. 通知(notification): 通过特定媒介向用户发送的有关某事件的信息
  10. 远程命令(remote command): 预定义的命令,可在被监控的主机处于特定条件下时自动执行
  11. 模板(template): 用于快速定义被监控的主机的预设条目集合。通常包含了item、trigger、graph、screen、appication以及low-level discovery rule; 模板可以直接链接至某个主机
  12. 应用(application): 一组item的集合
  13. web场景(web scennario): 用于检测web站点可用性的一个或多个HTTP请求
  14. 前端(frontend): Zabbix的web接口。