Skip to content

Zabbix

安装部署

1.1 安装软件包

bash
# 添加 Zabbix 软件仓库
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

# 安装 Zabbix server 并使用 MySQL 数据库
yum -y install zabbix-server-mysql zabbix-agent mariadb-server

# 安装scl源,解决版本冲突问题
yum -y install centos-release-scl

# 开启前端仓库
vim /etc/yum.repos.d/zabbix.repo

# 安装前端包
yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl

1.2 创建数据库

bash
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;

1.3 数据库初始化

bash
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

1.4 相关配置

为 Zabbix server 配置数据库:

bash
# /etc/zabbix/zabbix_server.conf
DBPassword=zabbix

配置前端PHP:

bash
# /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Shanghai

修复中文字体乱码:

上传字体到 /usr/share/fonts/dejavu/

备份原来的字体,将上传的中文字体改为 DejaVuSans.ttf

1.5 启动 Zabbix Server

bash
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

1.6 客户端部署

bash
yum install -y zabbix-agent

编辑客户端配置文件:

bash
# /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.71

启动

bash
systemctl restart zabbix-agent
systemctl enable zabbix-agent

数据库拆分

企业zabbix高并发场景使用

2.1 准备数据库服务器

bash
yum -y install mariadb-server
systemctl start mariadb
mysql
mysql
create database zabbix character set utf8 collate utf8_bin;
create user 'zabbix'@'%' identified by 'zabbix';
grant all privileges on zabbix.* to 'zabbix'@'%';

2.2 数据库导出/导入

bash
mysqldump -uroot -B zabbix > zabbix.sql
cat zabbix.sql |mysql -h 172.16.1.52 -uzabbix -pzabbix zabbix

2.3 配置连接数据库信息

bash
systemctl stop mariadb
php
# /etc/zabbix/web/zabbix.conf.php
$DB['TYPE']     = 'MYSQL';
$DB['SERVER']   = '172.16.1.52';
$DB['PORT']     = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER']     = 'zabbix';
$DB['PASSWORD'] = 'zabbix';
bash
# /etc/zabbix/zabbix_server.conf 
DBHost=172.16.1.52
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

2.4 重启服务

bash
systemctl restart zabbix-server httpd

自定义监控

3.1 客户端自定义监控项

新建用户自定义配置 os.conf

bash
# /etc/zabbix/zabbix_agentd.d/os.conf
UserParameter=login_user,w|awk 'NR==1{print $(NF-6)}'
UserParameter=ssh_status,netstat -tunlp|grep 22|grep -w tcp|wc -l
UserParameter=mem_use,free|awk 'NR==2{print $3/$2}'

测试自定义监控项:

bash
zabbix_agentd -p

重启服务:

bash
systemctl restart zabbix-agent

3.2 服务端测试

安装测试工具:

bash
yum install -y zabbix-get

测试获取监控项:

bash
zabbix_get -s 172.16.1.7 -k login_user

3.3 Zabbix中添加监控项

配置->主机->监控项->创建监控项中添加自定义监控项。

自定义告警

4.1 配置报警媒介

管理->媒介 中设置。

4.2 配置动作触发器

配置->动作中设置。

4.3 配置收件人

在用户管理中配置收件人信息。

4.4 测试内存使用率

bash
dd if=/dev/zero of=/dev/null bs=700M count=1024

4.5 自定义告警内容

默认标题:
故障: {EVENT.NAME}
消息内容:
报警主机: {HOST.NAME1}
报警服务: {ITEM.NAME}
报警key1: {ITEM.KEY1}: {ITEM.VALUE1}
报警key2: {ITEM.KEY2}: {ITEM.VALUE2}
严重级别: {TRIGGER.SEVERITY}

恢复操作
默认标题:
恢复: {EVENT.NAME}
消息内容:
恢复主机: {HOST.NAME1}
恢复服务: {ITEM.NAME}
恢复key1: {ITEM.KEY1}: {ITEM.VALUE1}
恢复key2: {ITEM.KEY2}: {ITEM.VALUE2}

4.6 远程执行命令

给zabbix用户提权:

bash
# /etc/sudoers
zabbix  ALL=(ALL)   NOPASSWD: ALL

允许远程执行命令:

bash
#  /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1

重启:

bash
 systemctl restart zabbix-agent

4.7 微信告警

通过脚本测试消息是否正常发送

测试 Python 脚本
python
#!/usr/bin/python3

import requests
import sys
import os
import json
import logging

logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
                datefmt = '%a, %d %b %Y %H:%M:%S',
                filename = os.path.join('/tmp','weixin.log'),
                filemode = 'a')

corpid=''
appsecret=''
agentid=1000002
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']

#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken

touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]

params={
        "touser": touser,
#       "toparty": toparty,
        "msgtype": "text",
        "agentid": agentid,
        "text": {
                "content": message
        },
        "safe":0
}

req=requests.post(msgsend_url, data=json.dumps(params))

logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)

移动脚本并添加权限:

bash
mv weixin.py /usr/lib/zabbix/alertscripts/
chmod +x /usr/lib/zabbix/alertscripts/weixin.py

在zabbix报警媒介中添加微信告警:

bash
{ALERT.SENDTO}  # 发给谁
{ALERT.SUBJECT} # 报警标题
{ALERT.MESSAGE} # 报警内容

监控Nginx状态

5.1 Nginx 配置

nginx
location /nginx_status {
    stub_status;
}
bash
# /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=ngxin_connections,curl -s 127.0.0.1/nginx_status|awk 'NR==1{print $NF}'
UserParameter=ngxin_accepts,curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $1}'
UserParameter=ngxin_handled,curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $2}'
UserParameter=ngxin_requests,curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $3}'

监控PHP服务状态

6.1 PHP配置

bash
# /etc/php-fpm.d/www.conf
pm.status_path = /status

6.2 Nginx配置

nginx
location /status {
    fastcgi_pass 127.0.0.1:10.00;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

6.3 监控项说明

bash
pool:                 www                        # pool的名称
process manager:      dynamic                    # 进程管理方式,现今大多都为dynamic,不要使用static
start time:           31/Aug/2026:010.57:00 +09.0 # php-fpm上次启动的时间 
start since:          208                        # php-fpm已运行了多少秒
accepted conn:        1                          # pool接收到的请求数
listen queue:         0                          # 处于等待状态中的连接数,如果不为0,需要增加php-fpm进程数
max listen queue:     0                          # 从php-fpm启动到现在处于等待连接的最大数量
listen queue len:     128                        # 处于等待连接队列的套接字大小
idle processes:       4                          # 处于空闲状态的进程数
active processes:     1                          # 处于活动状态的进程数
total processes:      5                          # 进程总数
max active processes: 1                          # 从php-fpm启动到现在最多有几个进程处于活动状态
max children reached: 0                          # 当pm试图启动更多的children进程时,却达到了进程数的限制,达到一次记录一次,如果不为0,需要增加php-fpm pool进程的最大数
slow requests:        0                          # 当启用了php-fpm slow-log功能时,如果出现php-fpm慢请求这个计数器会增加,一般不当的Mysql查询会触发这个值

监控Java

7.1 Tomcat开启JMX协议

bash
# /usr/local/tomcat/bin/catalina.sh
#!/bin/sh
CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Djava.rmi.server.hostname=172.16.1.5 \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"

启动Tomcat。

7.2 安装java-gateway

bash
yum install -y https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-java-gateway-5.0.47-1.el7.x86_64.rpm
systemctl start zabbix-java-gateway
systemctl enable zabbix-java-gateway

7.3 配置zabbix-server

bash
# /etc/zabbix/zabbix_server.conf
JavaGateway=172.16.1.8
JavaGatewayPort=10052
StartJavaPollers=3
bash
systemctl restart zabbix-server

然后在前端中添加主机即可。

监控MySQL

8.1 监控示例

bash
UserParameter=mysql.[*],mysql -uroot -e 'show global status;'|grep -w $1|awk '{print $NF}'

SNMP监控

SNMP三种版本

  • SNMP v1 最早的SNMP协议,不支持加密算法;
  • SNMP v2 兼容v1版本支持更多数据类型和错误代码,常用版本;
  • SNMP v3 增加了认证和加密功能,避免非法访问,验证效率低。

9.1 安装SNMP服务

bash
# 客户端
yum install -y net-snmp
# 服务端
yum install -y net-snmp-utils

9.2 修改配置文件

bash
# /etc/snmp/snmpd.conf
com2sec notConfigUser  default       public # 连接使用的自定义团体名称

view    systemview    included   .1         # 从/开始取值

9.3 启动服务

bash
systemctl start snmpd
systemctl enable snmpd

9.4 取值测试

bash
snmpwalk -v2c -c public 172.16.1.7 .1.3.6.1.2.1.1.5.0
  • -v:指定SNMP客户端版本
  • -c:指定团体名称

SNMP常用OID列表->

自动发现

Zabbix server 通过扫描地址段的方式自动发现存活的服务器。

缺点:

  1. 扫描速度慢,Server 压力较大;
  2. 所有扫描到的客户端只能使用统一模板,具有局限性

10.1 配置自动发现

配置自动发现的IP范围。

10.2 配置发现动作

发现动作中设置相关条件和关联模板等。

自动注册

客户端主动将自身信息上传给 Zabbix server 来减少服务端的压力。

修改客户端配置:

bash
ServerActive=172.16.1.71
Hostname=web01

重启 Zabbix agent 后在 Zabbix 中添加发现动作,设置关联信息 。

数据上报模式

Zabbix 默认数据上报模式为被动式,即客户端被动向服务端上报信息,为了减轻服务器压力,可以将数据上报模式改为主动。

两种方式:

  • 更换结尾带active的模板
  • 监控项中全选,选择批量更新,类型改为Zabbix客户端(主动式)

分布式监控

13.1 概述

Zabbix proxy 可以代替 Zabbix server 收集客户端数据,统一汇总上报给 Zabbix server,可以减轻 Zabbix server 的压力。

Zabbix proxy 相当于小组长,收集各小组作业,统一上交给老师(Zabbix server)。

Zabbix proxy 仅需要一条 tcp 连接到 Zabbix server,所以防火墙上仅需要添加一条规则即可。

使用场景:

  • 监控远程区域设备
  • 监控本地网络不稳定区域
  • 设备过多
  • 简化分布式监控的维护

13.2 部署 proxy

bash
yum install -y https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-proxy-mysql-5.0.47-1.el7.x86_64.rpm
yum install -y mariadb-server
systemctl start mariadb
systemctl enable mariadb

配置数据库:

mysql
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';

导入数据库:

bash
zcat /usr/share/doc/zabbix-proxy-mysql-5.0.47/schema.sql.gz |mysql -uzabbix -pzabbix zabbix

13.3 配置 proxy

bash
# /etc/zabbix/zabbix_proxy.conf
Server=10.0.0.71
Hostname=sh_proxy
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

启动:

bash
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
netstat -tnulp|grep 10051

13.4 添加主机

管理->Proxy 中添加 proxy,然后添加主机中选择 proxy。

Zabbix优化

  1. 硬件配置扩容
  2. 网络带宽扩容
  3. 优化SQL语句
  4. Zabbix agent 改为主动上报模式
  5. 跨区域、服务器数量多使用proxy代理模式
  6. 系统自带监控项优化,调整获取数据频率
  7. 进程优化
  8. 缓存优化

Grafana

15.1 安装Grafana

bash
yum -y https://dl.grafana.com/enterprise/release/grafana-enterprise-8.2.4-1.x86_64.rpm
systemctl start grafana-server
systemctl enable grafana-server
netstat -tnulp|grep 3000

15.2 安装Zabbix插件

bash
grafana-cli plugins list-remote|grep zabbix
grafana-cli plugins install alexanderzobnin-zabbix-app
systemctl restart grafana-server

去Grafana中开启插件。

15.3 添加数据源

Configuration -> Data Sources -> Add data source

然后在数据源中导入默认模板。