Zabbix
安装部署
1.1 安装软件包
# 添加 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-scl1.2 创建数据库
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 数据库初始化
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix1.4 相关配置
为 Zabbix server 配置数据库:
# /etc/zabbix/zabbix_server.conf
DBPassword=zabbix配置前端PHP:
# /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
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm1.6 客户端部署
yum install -y zabbix-agent编辑客户端配置文件:
# /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.71启动
systemctl restart zabbix-agent
systemctl enable zabbix-agent数据库拆分
企业zabbix高并发场景使用
2.1 准备数据库服务器
yum -y install mariadb-server
systemctl start mariadb
mysqlcreate database zabbix character set utf8 collate utf8_bin;
create user 'zabbix'@'%' identified by 'zabbix';
grant all privileges on zabbix.* to 'zabbix'@'%';2.2 数据库导出/导入
mysqldump -uroot -B zabbix > zabbix.sql
cat zabbix.sql |mysql -h 172.16.1.52 -uzabbix -pzabbix zabbix2.3 配置连接数据库信息
systemctl stop mariadb# /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';# /etc/zabbix/zabbix_server.conf
DBHost=172.16.1.52
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix2.4 重启服务
systemctl restart zabbix-server httpd自定义监控
3.1 客户端自定义监控项
新建用户自定义配置 os.conf:
# /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}'测试自定义监控项:
zabbix_agentd -p重启服务:
systemctl restart zabbix-agent3.2 服务端测试
安装测试工具:
yum install -y zabbix-get测试获取监控项:
zabbix_get -s 172.16.1.7 -k login_user3.3 Zabbix中添加监控项
在配置->主机->监控项->创建监控项中添加自定义监控项。
自定义告警
4.1 配置报警媒介
管理->媒介 中设置。
4.2 配置动作触发器
配置->动作中设置。
4.3 配置收件人
在用户管理中配置收件人信息。
4.4 测试内存使用率
dd if=/dev/zero of=/dev/null bs=700M count=10244.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用户提权:
# /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: ALL允许远程执行命令:
# /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1重启:
systemctl restart zabbix-agent4.7 微信告警
通过脚本测试消息是否正常发送
测试 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)移动脚本并添加权限:
mv weixin.py /usr/lib/zabbix/alertscripts/
chmod +x /usr/lib/zabbix/alertscripts/weixin.py在zabbix报警媒介中添加微信告警:
{ALERT.SENDTO} # 发给谁
{ALERT.SUBJECT} # 报警标题
{ALERT.MESSAGE} # 报警内容监控Nginx状态
5.1 Nginx 配置
location /nginx_status {
stub_status;
}# /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配置
# /etc/php-fpm.d/www.conf
pm.status_path = /status6.2 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 监控项说明
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协议
# /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
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-gateway7.3 配置zabbix-server
# /etc/zabbix/zabbix_server.conf
JavaGateway=172.16.1.8
JavaGatewayPort=10052
StartJavaPollers=3systemctl restart zabbix-server然后在前端中添加主机即可。
监控MySQL
8.1 监控示例
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服务
# 客户端
yum install -y net-snmp
# 服务端
yum install -y net-snmp-utils9.2 修改配置文件
# /etc/snmp/snmpd.conf
com2sec notConfigUser default public # 连接使用的自定义团体名称
view systemview included .1 # 从/开始取值9.3 启动服务
systemctl start snmpd
systemctl enable snmpd9.4 取值测试
snmpwalk -v2c -c public 172.16.1.7 .1.3.6.1.2.1.1.5.0-v:指定SNMP客户端版本-c:指定团体名称
自动发现
Zabbix server 通过扫描地址段的方式自动发现存活的服务器。
缺点:
- 扫描速度慢,Server 压力较大;
- 所有扫描到的客户端只能使用统一模板,具有局限性
10.1 配置自动发现
配置自动发现的IP范围。
10.2 配置发现动作
在发现动作中设置相关条件和关联模板等。
自动注册
客户端主动将自身信息上传给 Zabbix server 来减少服务端的压力。
修改客户端配置:
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
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配置数据库:
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';导入数据库:
zcat /usr/share/doc/zabbix-proxy-mysql-5.0.47/schema.sql.gz |mysql -uzabbix -pzabbix zabbix13.3 配置 proxy
# /etc/zabbix/zabbix_proxy.conf
Server=10.0.0.71
Hostname=sh_proxy
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix启动:
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
netstat -tnulp|grep 1005113.4 添加主机
在 管理->Proxy 中添加 proxy,然后添加主机中选择 proxy。
Zabbix优化
- 硬件配置扩容
- 网络带宽扩容
- 优化SQL语句
- Zabbix agent 改为主动上报模式
- 跨区域、服务器数量多使用proxy代理模式
- 系统自带监控项优化,调整获取数据频率
- 进程优化
- 缓存优化
Grafana
15.1 安装Grafana
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 300015.2 安装Zabbix插件
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
然后在数据源中导入默认模板。