Zabbix 7.0LTS教程
一、环境介绍
操作系统:Rocky Linux 9.5
软件版本:7.0LTS
二、系统搭建
2.1 yum安装方式
官网:Zabbix:企业级开源监控解决方案
点击右上角的下载ZABBIX
选择对应的环境:
选择之后往下拉会看到相应的部署步骤:
2.1.1 软件源配置
按照文档提示:
如果有epel.repo源码,需要先注释里面的zabbix源,默认是没有的:
[epel]
...
excludepkgs=zabbix*
[root@localhost ~]# rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
[root@localhost ~]# dnf clean all
0 files removed
[root@localhost ~]# dnf makecache
安装Zabbix server,Web前端,agent:
[root@localhost ~]# dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
安装过程看网速,一般是有点慢,因为是美国的网站。
2.1.2 初始化数据库
这里由于文档中未介绍,需要自己安装MySQL或者PostgreSQL,安装方法见我写的其它文章,这里我们直接使用dnf安装MySQL8.0:
参考MySQL Linux通用版安装方法:MySQL管理篇 - 国杰响当当 - 博客园
参考PostgreSQL源码编译安装方法:PostgreSQL - 随笔分类 - 国杰响当当 - 博客园
查看可安装的mysql版本:
[root@localhost ~]# dnf --showduplicates list mysql-server
Last metadata expiration check: 0:17:50 ago on Mon 10 Mar 2025 02:19:07 AM EDT.
Available Packages appstream
mysql-server.x86_64 8.0.41-2.el9_5
只有一个MySQL 8.0.41,直接安装它:
[root@localhost ~]# dnf -y install mysql-server.x86_64
创建相关的数据库:
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# mysql -uroot -p
Enter password:
# 创建数据库zabbix
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
# 创建用户zabbix并设置密码为password,只允许从localhost登录。
mysql> create user zabbix@localhost identified by 'password';
# 将数据库zabbix授权给zabbix用户
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
默认root的密码是空的。
导入初始架构和数据,系统将提示您输入新创建的密码,密码上面设置的password:
[root@localhost ~]# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
Enter password:
导入数之后重新禁用log_bin_trust_function_creators:
[root@localhost ~]# mysql
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
2.1.3 配置zabbix
为Zabbix server配置数据库
编辑配置文件 /etc/zabbix/zabbix_server.conf
DBPassword=password
取消注释并添加密码
为Zabbix前端配置PHP
编辑配置文件 /etc/nginx/conf.d/zabbix.conf
listen 8080;
设置监听端口,取消注释
2.1.4 启动zabbix
启动Zabbix server和agent进程
启动Zabbix server和agent进程,并为它们设置开机自启:
[root@localhost ~]# systemctl restart zabbix-server zabbix-agent nginx php-fpm
[root@localhost ~]# systemctl enable zabbix-server zabbix-agent nginx php-fpm
2.2 docker安装
2.2.1 安装MySQL
# 数据卷
[root@zabbix ~]# mkdir -p /data/mysql/{conf,data,logs}
# 配置文件
[root@zabbix ~]# cat <
[mysql]
default-character-set=utf8mb4
[mysqld]
user=mysql
port=3306
collation_server=utf8mb4_general_ci
character-set-server=utf8mb4
default-authentication-plugin=caching_sha2_password
EOF
# 拉镜像
[root@zabbix ~]# docker pull registry.cn-hangzhou.aliyuncs.com/guojie-ns/mysql:8.0.37 #这里有可能拉不下来,我是从自己的仓库拉取的。
# 运行容器
[root@zabbix ~]# cd /data/mysql/
[root@zabbix mysql]# docker run --name zabbix-mysql -itd \
-p 3306:3306 \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="password" \
-e MYSQL_ROOT_PASSWORD="password" \
--network host \
registry.cn-hangzhou.aliyuncs.com/guojie-ns/mysql:8.0.37
2.2.2 安装 Zabbix Java 网关
# 获取镜像,这里是我的私人仓库,需要登录
[root@zabbix mysql]# docker pull registry.cn-hangzhou.aliyuncs.com/guojie-ns/zabbix-java-gateway:alpine-7.0-latest
[root@zabbix mysql]# docker run --name zabbix-java-gateway -itd \
--network host \
registry.cn-hangzhou.aliyuncs.com/guojie-ns/zabbix-java-gateway:alpine-7.0-latest
2.2.3 安装 zabbix server
# 拉取镜像,这里是我的私人仓库,需要登录
[root@zabbix ~]# docker pull registry.cn-hangzhou.aliyuncs.com/guojie-ns/zabbix-server-mysql:alpine-7.0-latest
# 运行容器
[root@zabbix ~]# docker run --name zabbix-server-mysql -itd \
-v zabbix_server:/etc/zabbix \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="password" \
-e MYSQL_ROOT_PASSWORD="password" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network host \
registry.cn-hangzhou.aliyuncs.com/guojie-ns/zabbix-server-mysql:alpine-7.0-latest
2.2.4 启动 zabbix web 容器
# 拉取镜像
[root@zabbix ~]# docker pull registry.cn-hangzhou.aliyuncs.com/guojie-ns/zabbix-web-nginx-mysql:alpine-7.0-latest
# 启动容器
[root@zabbix ~]# docker run --name zabbix-web-nginx-mysql -itd \
-e PHP_TZ="Asia/Shanghai" \
--privileged=true \
-e ZBX_SERVER_HOST="127.0.0.1" \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="password" \
-e MYSQL_ROOT_PASSWORD="password" \
--network host \
--restart=unless-stopped \
registry.cn-hangzhou.aliyuncs.com/guojie-ns/zabbix-web-nginx-mysql:alpine-7.0-latest
三、软件配置
3.1 开放防火墙端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
嫌麻烦也可以直接关闭防火墙。
浏览器访问:
3.2 无法选择中文的问题
但是默认系统最小化安装它不带中文包,还需要手动安装一下,我们可以使用dnf search 查看中文包:
安装它:
[root@localhost ~]# dnf install -y langpacks-zh_CN.noarch
[root@localhost ~]# locale -a
如果这里还是无法显示zh_CN.utf8,可能还需要其它的依赖包:
[root@localhost ~]# dnf install -y glibc-locale-source glibc-langpack-zh
设置成中文:
[root@localhost ~]# localectl set-locale LANG=zh_CN.utf8
刷新页面就有了
3.3 完成相关配置并登录
设置成中文之后下一步到检查必要条件,必要条件都是正常的:
下一步到设置数据库,按照环境填写相关参数:
下一步填写主机名:
检查配置:
完成:
登录:
默认用户名/密码是:Admin/zabbix
四、配置ssl证书加密
4.1 生成自签证书
# 创建证书存放路径
[root@localhost ~]# mkdir /etc/nginx/ssl
[root@localhost ~]# cd /etc/nginx/ssl
# 生成rsa私钥,过程会要求输入加密语
[root@localhost ssl]# openssl genrsa -des3 -out server.key 2048
# 查看生成的私钥
[root@localhost ssl]# openssl rsa -text -in server.key
# 查看生成密钥
[root@localhost ssl]# cat server.key
# 创建证书签名请求CSR文件,过程会要求输入刚刚的加密语,国家、省份、组织、邮箱等等,最后两部要求证书密码,可以不输回车
[root@localhost ssl]# openssl req -new -key server.key -out server.csr
# 如上步骤之后会生成以下两个文件
[root@localhost ssl]# ll
total 24
-rw-r--r--. 1 root root 1045 Apr 24 10:38 server.csr
-rw-------. 1 root root 1862 Apr 24 10:36 server.key
# 生成CA证书
[root@localhost ssl]# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
# 剥离PEM pass phrase,不然每次重启nginx要输入密码
[root@localhost ssl]# openssl rsa -in server.key -out server.key.unsecure
# 如果需要生成客户端证书,与生成ca证书相似
[root@localhost ssl]# openssl genrsa -out client.key 2048
[root@localhost ssl]# openssl req -new -key client.key -out client.csr
[root@localhost ssl]# openssl x509 -req -days 3650 -in client.csr -signkey client.key -out client.crt
4.2 nginx配置ssl
[root@localhost ssl]# cd /etc/nginx/conf.d/
[root@localhost conf.d]# cp zabbix.conf zabbix.bak
[root@localhost conf.d]# vi zabbix.conf
修改原来的server,并添加443端口的server:
配置如下:
server {
listen 80;
server_name localhost;
return 301 https://localhost$request_uri;
}
server {
listen 443 ssl;
ssl_certificate ssl/server.crt; #证书文件
#ssl_certificate_key ssl/server.key; #密钥文件
ssl_certificate_key ssl/server.key.unsecure; #剥离密码的密钥文件,如果没有对密钥加密,直接使用server.key
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全连接的可选加密协议
ssl_prefer_server_ciphers on; #使用服务器的首选算法
root /usr/share/zabbix;
index index.php;
location = /favicon.ico {
log_not_found off;
}
location / {
try_files $uri $uri/ =404;
}
location /assets {
access_log off;
expires 10d;
}
location ~ /\.ht {
deny all;
}
location ~ /(api\/|conf[^\.]|include|locale) {
deny all;
return 404;
}
location /vendor {
deny all;
return 404;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/run/php-fpm/zabbix.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param DOCUMENT_ROOT /usr/share/zabbix;
fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
检查配置是否有问题:
[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 重启nginx
[root@localhost conf.d]# nginx -s reload
[root@localhost conf.d]# systemctl restart nginx
防火墙开启443端口之后访问即可转为https:
[root@localhost conf.d]# firewall-cmd --zone=public --add-port=80/tcp --permanent
[root@localhost conf.d]# firewall-cmd --zone=public --add-port=443/tcp --permanent
[root@localhost conf.d]# firewall-cmd --zone=public --remove-port=8080/tcp --permanent
[root@localhost conf.d]# firewall-cmd --reload
五、仪表显示乱码修复
安装完成之后由于字体问题会显示乱码,需要拷贝电脑上的字体到服务器上设置。
打开本地的文件资源管理器,在地址栏输入C:\Windows\Fonts复制楷体到桌面:
注意:把它的名字改成小写,我试了大写的不行.
把它上传到服务器上的/usr/share/zabbix/assets/fontsl路径:
然后修改配置文件/usr/share/zabbix/include/defines.inc.php
[root@localhost ~]# vi /usr/share/zabbix/include/defines.inc.php
# 搜索ZBX_GRAPH_FONT_NAME,把原来的graphfont改成字体文件名称stkaiti
define('ZBX_GRAPH_FONT_NAME', 'stkaiti'); // font file name
保存退出之后刷新页面乱码即可恢复正常:
六、agent安装
10050:用于被动模式下服务端主动获取数据。
10051:接受来自agent的监控数据。
6.1 软件下载
这里方便通用使用二进制方式安装,选择到Zabbix Agent,选择对应的版本。
复制下载链接:
到监控主机上下载它,这里以CentOS7为例
[root@localhost ~]# wget https://cdn.zabbix.com/zabbix/binaries/stable/7.0/7.0.10/zabbix_agent-7.0.10-linux-3.0-amd64-static.tar.gz
6.2 环境配置
创建管理用户:
[root@localhost ~]# groupadd zabbix
[root@localhost ~]# useradd -g zabbix zabbix -s /sbin/nologin
解压软件:
[root@localhost ~]# mkdir /opt/zabbix_agent
[root@localhost ~]# tar -zxvf zabbix_agent-7.0.10-linux-3.0-amd64-static.tar.gz -C /opt/zabbix_agent/
日志存放路径:
[root@localhost ~]# mkdir /var/log/zabbix_agentd
[root@localhost ~]# touch /var/log/zabbix_agentd/zabbix_agentd.log
[root@localhost ~]# chown -R zabbix.zabbix /var/log/zabbix_agentd
添加执行脚本:
[root@localhost ~]# cat >/opt/zabbix_agent/sbin/agent_start.sh<<'EOF'
#/bin/bash
usage() {
echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef |grep zabbix_agent|grep -v "grep" |awk '{print $2}'`
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "agent2 is already running. pid=${pid} ."
else
/opt/zabbix_agent/sbin/zabbix_agentd -c /opt/zabbix_agent/conf/zabbix_agentd.conf >/dev/null 2>&1 &
echo "agent2 start success"
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "agent2 is not running"
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"restart")
restart
;;
*)
usage
;;
esac
EOF
[root@localhost ~]# chmod +x /opt/zabbix_agent/sbin/agent_start.sh
准备置文件:
[root@localhost ~]# cp /opt/zabbix_agent/conf/zabbix_agentd.conf /opt/zabbix_agent/conf/zabbix_agentd.bak
[root@localhost ~]# egrep -v '^$|^#' /opt/zabbix_agent/conf/zabbix_agentd.bak > /opt/zabbix_agent/conf/zabbix_agentd.conf
[root@localhost ~]# vi /opt/zabbix_agent/conf/zabbix_agentd.conf
LogFile=/var/log/zabbix_agentd/zabbix_agentd.log #日志路径
Server=10.1.1.5 #服务端地址
ServerActive=10.1.1.5 #服务端地址
Hostname=Zabbix server #主机名
启动:
[root@localhost ~]# /opt/zabbix_agent/sbin/agent_start.sh start
agent2 start success
查看日志提示连接到服务端的10051端口失败,原因是我们防火墙没开放该端口:
服务端上开放端口:
[root@localhost ~]# firewall-cmd --zone=public --add-port=10051/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
客户端重启agent:
[root@localhost ~]# /opt/zabbix_agent/sbin/agent_start.sh restart
之后登录Web上添加资产,这里我们看到服务端还需要连接到客户端的10050端口,需要确保客户端要开放10050端口:
[root@localhost ~]# firewall-cmd --zone=public --add-port=10050/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
稍等一会儿主机就会显示被监控主机:
七、snmp监控网络设备
7.1 设备上配置snmp对接zabbix
华为CE6800为例:
[huawei]snmp-agent
[huawei]snmp-agent sys-info version v3
[huawei]snmp-agent group v3 group-admin privacy
[huawei]snmp-agent usm-user v3 user-admin
[huawei]snmp-agent usm-user v3 user-admin group group-admin
[huawei]snmp-agent usm-user v3 user-admin authentication-mode sha \\输入密码,两次
[huawei]snmp-agent usm-user v3 user-admin privacy-mode aes128 \\输入密码,两次
[huawei]snmp-agent protocol source-interface <管理口/管理vlanif>
[huawei]snmp-agent trap enable
[huawei]snmp-agent trap source <管理口/管理vlanif>
其中user-admin和group-admin是我这里的用户名和组名,用户可以自行修改。
zabbix上添加主机:
宏(可以理解为就是变量):
等待一会之可用性变绿之后点击自动发现:
点击主机之后立即执行,它会马上去采集数据:
这里有个问题就是交换机上温度数据采集到的一直是0℃,然后会一直报警说温度太低,低于5摄氏度,应该是数据采集不到的bug,我们可以先调节阈值让它不告警。首先找到模板,找到华为vrp的监控模板。
把宏里面的低温值从5改成0。
你可能要把主机删了重新加,不然这个告警一直在。
7.2 绘制top图
7.2.1 调整尺寸
找到监测→top图,默认自带一个Local Network,点击属性,修改它的宽和高,根据自身电脑分辨率做调整。我这里是1650x860。
7.2.2 绘制top
点击名称进入top图。
点击左上角的编辑top图。
添加地图元素,点击之后会出来一个设备。
点击新添加的地图元素,做如下配置之。
依次添加两个设备之后可以给它连上线,选中两个设备图标之后在上边链接出点击添加按钮,之后会生成链接。
如上点击链接里的动作的编辑,在标签栏加入表达式,就可以显示指标。
表达式为:
标签:{?last(/主机名称/监控项)}
speed:{?last(/S7706/net.if.speed[ifHighSpeed.180])}
↑{?last(/S7706/net.if.in[ifHCInOctets.180])}
↓{?last(/S7706/net.if.out[ifHCOutOctets.180])}
监控项查询:如图,找到数据采集中对应主机的监控项并点击它。
复制对应的键只替换表达式。
八、配置简单ping检查
8.1 监控模板
有些设备自己写snmp监控模板比较困难,而且我们也不需要做太复杂的监控,只需要知道设备是否在线,可以配置zabbix定时适用ICMP协议定期去检查设备是否在线。
模板下载(默认它是自带的):
点击zabbix上的集成按钮:
搜索Ping
8.2 添加主机
九、报警
9.1 企业微信群集群人报警
9.1.1 企业账号申请
需要注册一个企业微信:企业微信
9.1.2 创建部门并添加成员
9.1.3 创建一个自建应用
在群里创建一个报警机器人,得到webhook地址
:
# 构建消息体
json_text = {
"msgtype": "text",
"text": {
"content": text
}
}
# 发送 POST 请求
response = requests.post(api_url, json=json_text, headers=headers)
# 检查响应状态码
if response.status_code == 200:
print("Message sent successfully.")
else:
print(f"Failed to send message. Status code: {response.status_code}")
# 主函数
if __name__ == '__main__':
# 检查命令行参数是否正确
if len(sys.argv) < 2:
print("Usage: python3 wechat.py
sys.exit(1)
# 获取命令行参数中的消息内容
text = sys.argv[1]
# 调用发送消息函数
send_message(text)
EOF
# 给执行权限
[root@network alertscripts]# chmod +x wechat.py
# 我这里测试脚本发送的时候是正常的,但是zabbix调用脚本的时候是错误的,大概是将 Windows 格式的文本文件转换为 Unix/Linux 格式的工具。我是windows传上去的脚本,如果遇到这种情况可能要尝试和我如下一样的解决方法
[root@network alertscripts]# dnf provides dos2unix
[root@network alertscripts]# dnf -y install dos2unix
[root@network alertscripts]# dos2unix wechat.py
脚本测试:
9.3 zabbix上配置告警
9.3.1 创建告警媒介
9.3.2 告警动作
告警-动作-触发器动作-创建动作
告警操作:
消息模板:
【告警】
告警设备:{HOST.NAME}
告警内容:{EVENT.NAME}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警严重性:{EVENT.SEVERITY}
当前状态:{EVENT.STATUS}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
再添加一个告警恢复操作:
消息模板:
【告警解除】
告警设备:{HOST.NAME}
告警内容:{EVENT.NAME}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警严重性:{EVENT.SEVERITY}
当前状态:{EVENT.RECOVERY.STATUS}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.RECOVERY.ID}
9.4 告警用户配置
可以把监控改到信息,然后修设备名称之类的出发告警测试。
十、监控模板下载
https://www.alipan.com/s/H5eL49JoWZi