Zabbix

Zabbix 概述

基本介绍

  • 创始人:Alexei Vladishev,当前由 Zabbix SIA 开发维护
  • 定位:企业级开源分布式监控解决方案
  • 监控范围:网络参数、服务器 / 虚拟机 / 应用程序 / 服务 / 数据库 / 网站 / 云平台等的健康状态和完整性
  • 核心功能:灵活告警机制(邮件告警)、报表生成、数据可视化(支持容量规划)
  • 数据采集:支持轮询和捕获两种方式
  • 访问方式:基于 Web 的前端界面,可随时随地评估网络和服务器状态
  • 适用场景:小型组织到大型企业的 IT 基础设施监控
  • 授权协议:GNU 通用公共许可证 version 2,源代码开源免费

架构组件

组件 职责说明
服务器(Zabbix Server) 核心组件,接收 Agent 上报的可用性、完整性信息及统计指标;存储所有配置数据、统计数据和运行数据
数据库存储 存储所有配置信息和 Zabbix 收集的数据
Web 界面 基于 Web 的访问入口,通常与服务器部署在同一物理机器(非必须)
Proxy 可选组件,代表 Server 收集性能和可用性数据,分担 Server 负载
Agent 部署在监控目标上,主动监控本地资源和应用程序并上报数据;分为 Zabbix Agent(C 语言编写,轻量多平台)和 Zabbix Agent2(Go 语言编写,灵活可扩展)

数据流逻辑

创建告警的流程:创建主机 → 创建监控项(如 CPU 监控)→ 设置触发器(CPU 过高激活)→ 配置动作(发送邮件告警),支持通过模板简化配置

搭建LNMP 架构

环境规划

zabbix-server通过Centos-7-template模板克隆产生

mysql001通过mysql01克隆产生

主机名 IP 功能
zabbix-server 192.168.108.50 安装 Zabbix 服务
mysql001 192.168.108.51 被监控主机(数据库服务)

安装nginx

#准备仓库源
[root@zabbix-server ~]# rm -rf /etc/yum.repos.d/*
[root@zabbix-server ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/artifactory/os-conf/centos/centos-7.repo

[root@zabbix-server ~]#  wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

#安装nginx
[root@zabbix-server ~]# yum install -y nginx

#开启服务开机自启动
[root@zabbix-server ~]# systemctl start nginx 
[root@zabbix-server ~]# systemctl enable nginx

#设置防火墙永久放行http
[root@zabbix-server ~]# firewall-cmd --add-service=http --zone=public
success
[root@zabbix-server ~]# firewall-cmd --add-service=http --zone=public --permanent
success
[root@zabbix-server ~]# firewall-cmd --reload 
success

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安装mariadb

配置yum源

#配置Mariadb10.5 yum源(zabbix6.0必须使用该版本,低版本不支持)
[root@zabbix-server ~]# vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.6/centos7-amd64/
enabled = 1
gpgcheck = 0

下载mariadb

[root@zabbix-server ~]# yum -y install mariadb-server mariadb 
[root@zabbix-server ~]# systemctl enable mariadb --now

[root@zabbix-server ~]# mysql
MariaDB [(none)]> select user,host from mysql.user;
+-------------+---------------+
| User        | Host          |
+-------------+---------------+
|             | localhost     |
| mariadb.sys | localhost     |
| mysql       | localhost     |
| root        | localhost     |
|             | zabbix-server |
+-------------+---------------+

MariaDB [(none)]> delete from mysql.user where user='';

MariaDB [(none)]> alter user root@localhost identified by 'root123';

MariaDB [(none)]> exit

#连接数据库测试
[root@zabbix-server ~]# mysql -uroot -p123

安装php

[root@zabbix-server ~]# yum install -y epel-release
[root@zabbix-server ~]# sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo 
[root@zabbix-server ~]# sed -i "s/metalink/#metalink/g" /etc/yum.repos.d/epel.repo 
[root@zabbix-server ~]# sed -i "s@https\?://download.[a-z]*\.\?[a-z]*/pub@https://repo.huaweicloud.com@g" /etc/yum.repos.d/epel.repo

[root@zabbix-server ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

[root@zabbix-server ~]#  yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-ldap php72w-bcmath

配置nginx支持php

# 1. 修改 PHP-FPM 运行用户
[root@zabbix-server ~]# vim /etc/php-fpm.d/www.conf
user = nginx
group = nginx

# 2. 配置 Nginx 支持 PHP 首页
[root@zabbix-server ~]# vim /etc/nginx/conf.d/default.conf
index index.php index.html index.htm;

# 3. 配置 PHP 请求转发(取消注释并修改)
location ~ \.php$ {
    root /usr/share/nginx/html;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

配置php

# 1. 编辑 PHP 配置文件
[root@zabbix-server ~]# vim /etc/php.ini
short_open_tag = On  # 支持 PHP 短标签
expose_php = Off     # 隐藏 PHP 版本
max_execution_time = 300  # 执行时间
max_input_time = 300      # 接收数据等待时间
memory_limit = 128M       # 每个脚本占用内存
post_max_size = 16M       # POST 数据大小
upload_max_filesize = 2M  # 上传文件大小
always_populate_raw_post_data = -1  # 添加该配置
date.timezone = Asia/Shanghai  # 时区

# 2. 启动 PHP-FPM 并设置开机自启
[root@zabbix-server ~]# systemctl enable php-fpm --now

# 3. 重启 Nginx
[root@zabbix-server ~]# systemctl restart nginx

PHP测试

# 1. 测试 PHP 环境
[root@zabbix-server ~]# vim /usr/share/nginx/html/info.php
<?php
phpinfo();
?>
# 访问 http://192.168.108.50/info.php,显示 PHP 信息即为成功

# 2. 测试数据库连接
[root@zabbix-server ~]# vim /usr/share/nginx/html/info.php
<?php
$link=mysqli_connect('127.0.0.1','root','root123');
if ($link) echo "success";
else echo "fail";
?>
# 访问 http://192.168.108.50/info.php,显示 "success" 即为成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建 Zabbix 数据库及账号

[root@zabbix-server ~]# mysql -uroot -proot123
MariaDB [(none)]> CREATE DATABASE zabbix character set utf8 collate utf8_bin;  #  COLLATE 用于字符排序比较
MariaDB [(none)]> GRANT all privileges ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix123';
MariaDB [(none)]> GRANT all privileges ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix123';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

# 测试 Zabbix 数据库连接
[root@zabbix-server ~]# vim /usr/share/nginx/html/info.php
<?php
$link=mysqli_connect('127.0.0.1','zabbix','zabbix123');
if ($link) echo "Zabbix数据库连接成功";
else echo "Zabbix数据库连接失败";
?>
# 访问 http://192.168.108.50/info.php,显示连接成功即为完成

导入 Zabbix 数据库

# 1. 解压 Zabbix 安装包(假设已下载 zabbix-6.0.6.tar.gz)
[root@zabbix-server ~]# tar zxvf zabbix-6.0.6.tar.gz

# 2. 导入数据库脚本
[root@zabbix-server ~]# cd /root/zabbix-6.0.6/database/mysql/
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < schema.sql
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < images.sql
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < data.sql
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < double.sql
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < history_pk_prepare.sql

# 3. 验证数据表(应显示 178 张表)
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix
MariaDB [zabbix]> show tables;

安装 Zabbix Server

# 1. 安装依赖包
[root@zabbix-server ~]# yum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel libcurl-devel fping gcc gcc-c++ make

# 2. 创建 Zabbix 用户
[root@zabbix-server ~]# useradd -s /sbin/nologin -M zabbix

# 3. 配置编译参数
[root@zabbix-server ~]# export CFLAGS="-std=gnu99"
[root@zabbix-server ~]# cd zabbix-6.0.6/
[root@zabbix-server zabbix-6.0.6]# ./configure --sysconfdir=/etc/zabbix/ --enable-server --with-mysql --with-net-snmp --with-libxml2 --with-ssh2 --with-openipmi --with-zlib --with-libpthread --with-libevent --with-openssl --with-ldap --with-libcurl --with-libpcre

# 4. 编译安装
[root@zabbix-server zabbix-6.0.6]# make install

# 5. 验证版本
[root@zabbix-server ~]# zabbix_server --version

配置 Zabbix Server

# 1. 修改配置文件
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix_server.log  # 日志文件路径
DBPassword=zabbix123                # 数据库密码

# 2. 创建日志文件并授权
[root@zabbix-server ~]# touch /var/log/zabbix_server.log
[root@zabbix-server ~]# chown zabbix.zabbix /var/log/zabbix_server.log

# 3. 创建 systemctl 服务文件
[root@zabbix-server ~]# vim /usr/lib/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target mysqld.service
[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server
User=zabbix
[Install]
WantedBy=multi-user.target

# 4. 启动 Zabbix Server
[root@zabbix-server ~]# systemctl start zabbix-server
[root@zabbix-server ~]# netstat -ntap | grep 10051  # 验证 10051 端口监听

部署 Zabbix 前端页面

# 1. 复制前端文件到 Nginx 站点目录
[root@zabbix-server ~]# cp -r /root/zabbix-6.0.6/ui/* /usr/share/nginx/html/
[root@zabbix-server ~]# chown -R nginx:nginx /usr/share/nginx/html/

# 2. 访问前端安装页面
http://192.168.108.50

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

默认登陆用户名:Admin

默认登陆密码:zabbix

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

被监控端部署

安装agent

通过前面mysql章节的mysql01克隆mysql001

[root@mysql001 ~]# systemctl stop firewalld.service  # 关闭防火墙
[root@mysql001 ~]# setenforce 0  # 关闭 SELinux
[root@mysql001 ~]# hostnamectl set-hostname mysql001  # 设置主机名
[root@mysql001 ~]# yum update ca-certificates -y  # 更新 CA

# 1. 配置 Zabbix 源
[root@mysql001 ~]# rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm

# 2. 安装 Agent2
[root@mysql001 ~]# yum install zabbix-agent2 -y

# 3. 配置 Agent2
[root@mysql001 ~]# vim /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=192.168.108.50  # 指向 Zabbix Server IP
ServerActive=192.168.108.50  # 指向 Zabbix Server IP
Hostname=mysql001  # 主机名(需与 Zabbix 控制台配置一致)
Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf

# 4. 启动 Agent2 并设置开机自启
[root@mysql001 ~]# systemctl enable zabbix-agent2.service --now
[root@mysql001 ~]# systemctl restart zabbix-agent2

zabbix管理

http://192.168.108.50

zabbix首页登录后

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

监控主机

配置->模板

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

定义模板新名称

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加数据库信息

$MYSQL.DSN 写被监控端数据库IP

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置->主机->创建主机

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

群组>选择

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

模板>选择

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

被监控主机配置

Inteerfaces: 添加>客户端

端口是10050,是zabbix客户端插件监听端口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加后直接生成

可用性:绿色正常,一开始灰色等一会

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

邮件服务

用自己的邮件账号,获取SMTP/IMAP授权码

在zabbix-server服务器上安装邮箱服务

[root@zabbix-server ~]# yum install mailx -y

配置邮箱服务

root@zabbix-server ~]# vim /etc/mail.rc----文件末尾新增--
set from=*****@qq.com                         
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=*****@qq.com
set smtp-auth-password=lmsbtquhuzhqcage         
#用自己的邮箱
#用自己的邮箱授权码
set smtp-auth=login
#set smtp-use-starttls 这里是不需要配置的,很多地方没说明,配置了反而会验证失败,所以我注释掉;
set ssl-verify=ignore
set nss-config-dir=/root/.certs     
set nss-config-dir=/etc/pki/nssdb/
#制定的存放QQ邮箱SSL证书的位置。
[root@zabbix-server ~]# chmod -R 755 /etc/pki/nssdb/

因为需要QQ邮箱的SSL证书,所以我们还需要手动的获取QQ邮箱的证书保存到本地指定的目录里以备调用和验证,具体命令如下:

[root@zabbix-server ~]# mkdir -p /root/.certs/
[root@zabbix-server ~]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
 root@zabbix-server ~]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@zabbix-server ~]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@zabbix-server ~]# certutil -L -d /root/.certs

为了防止出现前文所说的发送邮件警告提示,还需要进入邮箱SSL证书存放目录 /root/.certs 里执行如下命令:

[root@zabbix-server ~]# cd /root/.certs/
[root@zabbix-server .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt

返回如下提示即可:

Notice: Trust flag u is set automatically if the private key is present.

这是为了信任证书的标记操作。

至此,已经完成了mailx结合QQ邮箱发送系统邮件的部署了,通过命令行发送测试邮件试试吧:

# 执行命令后,进入交互式编辑,输入正文后按 Ctrl+D 结束并发送
[root@zabbix-server ~]# mailx -s "邮箱测试" *****@qq.com
你真帅啊
哈哈哈
EOT                           
#ctrl_d 退出

前往QQ邮箱查收测试邮件

创建脚本目录,并重启zabbix服务

[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
548 AlertScriptsPath=/usr/lib/zabbix/alertscripts
[root@zabbix-server ~]# mkdir -p /usr/lib/zabbix/alertscripts
[root@zabbix-server ~]# chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts
[root@zabbix-server ~]# systemctl restart zabbix-server.service

编写邮件发送脚本

[root@zabbix-server ~]# vim /usr/lib/zabbix/alertscripts/ mailx.sh
#!/bin/bash
#send mail
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1

权限设置

[root@zabbix-server ~]# touch /tmp/mailx.log 
[root@zabbix-server ~]# chown -R zabbix.zabbix /tmp/mailx.log 
[root@zabbix-server ~]# chmod +x /usr/lib/zabbix/alertscripts/mailx.sh

测试脚本发送邮件

[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server alertscripts]# ./mailx.sh *****@qq.com "hello mailx.sh" "This is test"

已收到邮件

告警服务

管理->报警媒介类型>创建媒体类型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建媒体类型

脚本参数

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

管理->用户

点击Admin进入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击Admin进入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择报警媒介

添加

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

类型选择刚刚创建的mail-test

设置完成后点击添加

收件人:填写自己邮箱地址 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一定要进行更新

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置->动作->Trigger actions

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

先删除默认动作,然后创建动作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

定义操作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

主题 : {TRIGGER.STATUS}:{TRIGGER.NAME}
消息:
告警主机:{HOST.NAME}
告警  IP:{HOST.IP}
告警时间:{EVENT.DATE}-{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}:{ITEM.VALUE}
事件  ID:{EVENT.ID}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

主题 : {TRIGGER.STATUS}:{TRIGGER.NAME}
消息:
恢复主机:{HOST.NAME}
恢复  IP:{HOST.IP}
恢复时间:{EVENT.DATE}-{EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息:{TRIGGER.NAME}:{ITEM.VALUE}
恢复  ID:{EVENT.ID}

恢复操作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后点击添加

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

动作添加完成

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

监视主页面仪表盘

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在被监控端关闭数据库服务

[root@mysql001 ~]# systemctl stop mysqld

等待一段时间后

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

检查接收告警邮件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐