(一)zabbix7.0(安装、自定义监控、告警)

文章目录

监控分类与选型

监控分类 具体监控内容 对应核心工具 工具能力说明
硬件监控 1. 远程控制卡(Dell iDRAC、HP ILO、IBM IMM); 2. IPMI 监控(物理机温度、硬盘故障); 3. 路由器 / 交换机(端口、光衰)、打印机 zabbix 提供硬件设备预定义模板,支持 IPMI 协议采集物理设备状态
系统监控 CPU、内存、硬盘使用率 / IO、系统负载、进程数、Kernel 参数 zabbix、prometheus zabbix:传统系统监控模板丰富;prometheus:适配容器化系统的轻量指标采集
服务监控 Nginx、Apache、php-fpm、MySQL、Memcache、Redis、Tomcat、JVM、TCP 连接数 zabbix、prometheus zabbix:主流服务模板全覆盖;prometheus:通过专属 exporter 采集服务运行指标
性能监控 网站性能、服务器性能、数据库性能、存储性能 zabbix、prometheus、skywalking zabbix/prometheus:资源性能采集;skywalking:应用代码级性能追踪
日志监控 系统日志、应用访问 / 错误日志、服务运行日志 ELK(采集存储)+ grafana ELK 负责日志采集 / 检索;grafana 实现日志数据的可视化展示
安全监控 1. 用户登录数、passwd 文件变化、本地文件改动;2. WAF 攻击类型统计 zabbix(自定义)+ ELK+grafana zabbix 可监控文件变化;WAF 日志通过 ELK 采集后,grafana 展示攻击统计(需搭配专业安全工具)
网络监控 IP / 端口 / URL 可用性、ping 包、IDC 带宽 / 流量(入 / 出速率、使用率)、SMTP/POP3 zabbix、prometheus zabbix:网络设备 / 带宽监控模板;prometheus:通过网络 exporter 采集流量指标
中间件及基础设施监控 1. Web 容器(Tomcat、Jetty);2. 消息中间件(Kafka、RabbitMQ);3. 数据库 / 缓存(MySQL、Redis);4. 存储(NFS、Ceph) prometheus、zabbix prometheus:中间件专属 exporter 覆盖广;zabbix:部分中间件模板支持
应用层监控(APM) 代码级性能、故障快速定位、应用状态追踪 skywalking 提供分布式链路追踪,实现应用代码级性能监控与故障定位
业务层监控 QPS、DAU(日活)、转化率、订单量、登录 / 注册 / 支付接口数 skywalking + prometheus/zabbix + grafana skywalking 关联业务接口;prometheus/zabbix 采集业务指标;grafana 搭建业务监控大屏

Zabbix基本概念

zabbix官方文档

zabbix介绍

用通俗易懂的话来说,Zabbix是一个监控系统,它可以帮助我们实时检查设备的状态,比如服务器、网络设备等。当设备出现问题时,它会及时通知我们,让我们可以采取措施来解决。同时,它还可以把收集到的数据转化成图表和报告,让我们更直观地了解设备的运行情况

zabbix功能

官方文档:https://www.zabbix.com/documentation/5.0/zh/manual/introduction/features

功能分类 核心功能说明
数据采集 采集历史 / 趋势数据;支持 SNMP/IPMI/JMX/VMware 等协议;自定义检查;按间隔采集;通过 Server/Proxy/Agents 执行
阈值与告警 灵活定义触发器(告警阈值);自定义告警通知(接收者 / 媒介 / 宏变量);自动操作(远程执行命令)
可视化能力 实时图形;Web 监控(模拟鼠标点击查功能 / 响应);含自定义图表、拓扑图、仪表盘、报表、业务视图等可视化选项
历史数据存储 数据存于数据库;支持历史配置;内置数据管理机制
配置管理 添加主机即可采集数据;模板支持分组检查、模板关联继承
网络发现 自动发现网络设备;Agent 自动注册;自动发现文件系统 / 网络接口 / SNMP OIDs
Web 界面 PHP 前端,支持异地访问;可自定义操作;含审计日志记录
Zabbix API 可编程接口,用于批量操作、第三方软件集成
权限管理 安全身份验证;按权限范围控制用户视图
Zabbix Agent 跨 Linux/Windows 部署;C 语言编写(高性能低内存);易移植
分布式监控 通过 Zabbix Proxy 实现分布式远程监控

zabbix架构(CS架构)

CS架构:(客户端 / 服务器)需安装专属客户端

BS 架构(浏览器 / 服务器)依赖浏览器访问

组件 / 模块 核心定位 关键特性 / 功能
Zabbix Agent 被监控端数据采集工具 部署在目标设备; 监控本地资源 / 应用; 向 Server 发送数据; 5.0 后支持 Agent2 版本
Zabbix Server Zabbix 核心中枢 接收 Agent 上报数据;存储配置 / 统计 / 操作信息; 作为告警中心发送异常通知; 功能分解为 Server、Web 前端、数据库三部分; 配置更改需 1-2 分钟同步(缓存机制)
数据库 数据持久存储中心 存储所有配置信息和采集数据; 支持 MySQL、PostgreSQL 等多种数据库
Web 界面 可视化配置与展示入口 属于 Server 一部分,可与 Server 分机部署; 基于 Apache (Nginx)+PHP;5.0 后支持 LNMP,早期仅支持 LAMP
内部配置数据流 告警触发的核心逻辑链 配置顺序:主机→监控项→触发器→动作; 模板可简化操作;支持灵活配置自定义告警(如 CPU 负载过高通知)

zabbix启动进程

进程类型(英文 / 中文) 核心功能 适用范围
alerter / 报警器 发送报警通知 服务器端
configuration syncer / 配置同步器 将配置文件中的配置信息同步到内存缓存 服务器端
data sender / 数据发送器 发送采集到的数据 仅代理端(服务器端无)
db watchdog / 数据库看门狗 监视数据库状态,数据库不可用时发送警告 仅服务器端(代理端无)
discoverer / 自动发现器 自动发现网络设备 服务器端
escalator / 步骤处理器 处理动作中的相关步骤 服务器端
heartbeat sender / 心跳发送器 发送心跳信息 仅代理端(服务器端无)
history syncer / 历史数据同步器 将采集数据写入历史数据表 服务器端
housekeeper / 管家 清理过期的历史数据 服务器端
http poller / HTTP 轮询器 轮询 Web 类型的监控项 服务器端
icmp pinger / Ping 检查器 定期执行 ICMP PING 检查(监控设备连通性) 服务器端
ipmi poller / IPMI 轮询器 定期检查 IPMI 类型监控项 服务器端
java poller / Java 轮询器 轮询 Java 类型监控项 服务器端
node watcher / 分布式节点看守器 在分布式节点间同步历史数据和配置更新信息 服务器端(分布式场景)
poller / 轮询器 轮询普通被动监控项 服务器端
proxy poller / 代理轮询器 轮询代理端的被动监控项 代理端
self-monitoring / 自我监控 收集 Zabbix 系统内部的监控信息 服务器端
timer / 定时器 处理触发器中时间相关函数,管理维护模式 服务器端
trapper / 陷入器 处理主动采集数据、陷入数据,以及分布式节点 / 代理端的通信 服务器端
unreachable poller / 不可到达轮询器 轮询已标记为 "不可到达" 的设备 服务器端
vmware collector / VMware 收集器 从 VMware 服务进程中收集监控数据 仅服务器端(代理端无)

zabbix术语

术语名称(含英文) 核心定义
被监控 Zabbix 监控的主机或设备
监控项(Item) Zabbix 监控的具体指标,如 CPU 利用率、内存使用率、TCP 连接数等
应用集(Application) 用于归类同类型监控项的集合,方便管理众多监控项
Ping 检查器(icmp pinger) 定期执行 ICMP PING 检查的组件
ipmi 轮询器(ipmi poller) 定期进行 ipmi 监控项目检查的组件
java 轮询器(java poller) 用于轮询 java 监控项目的组件
分布式节点看守器(node watcher) 在不同分布式节点间发送历史数据和配置信息更新的进程
轮询器(poller) 用于普通被动监控项目轮询的组件
服务器代理轮询(proxy poller) 用于服务器代理被动轮询的组件
自我监控(self-monitoring) 收集 Zabbix 系统内部监控信息的组件
定时器(timer) 处理触发器中时间相关函数和维护模式的进程
陷入器(trapper) 处理主动采集、陷入以及分布式节点间或服务器代理通信的组件
不可到达轮询器(unreachable poller) 用于轮询不可到达设备的组件
vmware 收集器(vmware collector) 从 vmware 服务进程收集数据的组件(服务器代理端不支持)
mode 参数 可选值:avg(指定类型进程平均值)、count(指定类型进程数量)、max(最大值)、min(最小值)
state 参数 可选值:busy(繁忙状态进程)、idle(空闲状态进程)
触发器(Trigger) 触发告警的条件表达式(如磁盘利用率超过 80%),满足条件会产生触发事件
动作(Action) 触发器触发后的响应行为,如发送短信 / 微信 / 邮件、重启服务等
告警 触发器与动作的结合机制,触发条件满足后执行预设响应,方便运维及时处理问题
Web 监测 对 WEB 服务的检测,如验证指定网站是否可正常访问
模板(Template) 包含监控项、应用集、触发器等实体的集合,可批量应用于多主机,支持嵌套继承,简化 Zabbix 配置

安装Zabbix

zabbix产品周期官方文档:https://www.zabbix.com/cn/life_cycle_and_release_policy

部署要求:https://www.zabbix.com/documentation/7.0/zh/manual/installation/requirements

安装Zabbix Server方法

KylinV10SP3编译安装zabbix7.0

官方文档:https://www.zabbix.com/documentation/7.0/zh/manual/installation/install

官方文档:zabbix7.0要求

搭建LNMP环境

  • nginx 1.28
  • mysql 8.4
  • php 8.4

nginx1.28安装

shell 复制代码
#1.添加nginx官方仓库源
cat > /etc/yum.repos.d/nginx.repo <<'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/8/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/8/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
#2.安装nginx1.28(可以使用 yum provides nginx 来查看官方源有哪些nginx版本)
yum install -y nginx-1:1.28.0-1.el8.ngx.x86_64
#3.修改nginx用户为www
sed  -i 's/user  nginx;/user  www;/g' /etc/nginx/nginx.conf 
#4.创建www用户
groupadd -g 1999 www
useradd -u 1999 -g www -s /sbin/nologin www
#3.启动nginx
systemctl enable --now nginx.service && systemctl is-active nginx.service
#4.防火墙放行80端口
ss -tulnp |grep 80
firewall-cmd --add-port=80/tcp --permanent 
firewall-cmd --reload

mysql8.4安装

shell 复制代码
#1.下载mysql源
mkdir -p /download ;yum install -y wget && cd /download ; wget https://dev.mysql.com/get/mysql84-community-release-el7-2.noarch.rpm && yum localinstall -y mysql84-community-release-el7-2.noarch.rpm
#2.安装mysql
yum install -y mysql-community-server  mysql-community-devel
#3.开启mysql
systemctl enable mysqld --now
#4.查看端口
ss -tulnp |grep 3306
#5.从日志中获取登录密码
grep -i password /var/log/mysqld.log
#6.登录mysql修改密码,登录密码就是日志中获取的登录密码,复制粘贴即可登录
mysql -uroot -p
#7.进入数据库后修改密码,不修改密码啥也做不了
alter user 'root'@'localhost' identified by 'Abc@1234';
exit;
#8.再次登录mysql,测试修改密码是否成功
mysql -uroot -pAbc@1234

安装php8.4

shell 复制代码
#1.下载编译依赖
yum install -y re2c \
bison \
autoconf \
make \
libtool \
ccache \
libxml2-devel \
curl-devel \
openssl-devel \
bzip2-devel \
libcurl-devel \
libpng-devel \
libwebp-devel \
libjpeg-devel \
oniguruma-devel \
libzip-devel \
freetype-devel \
sqlite-devel \
gettext-devel \
wget

#2.下载php8.4编译包
wget https://www.php.net/distributions/php-8.4.14.tar.xz -P /download

#3.解压php8.4编译包
tar -Jxvf /download/php-8.4.14.tar.xz -C /download/

#4.进入编译目录编译
cd /download/php-8.4.14/

#5.编译前的配置,指定安装目录,和配置文件目录
./configure \
  --prefix=/usr/local/php-8.4.14 \
  --with-config-file-path=/usr/local/php-8.4.14/etc \
  --enable-fpm \
  --with-fpm-user=www \
  --with-fpm-group=www \
  --enable-mbstring \
  --with-curl \
  --with-openssl \
  --with-zlib \
  --with-mysqli \
  --with-pdo-mysql \
  --enable-gd \
  --with-jpeg \
  --with-webp \
  --with-freetype \
  --with-zip \
  --with-gettext \
  --with-bz2
  
#6.编译 源代码-->可执行文件(命令) 
make  -j `nproc`  && echo $? 

#7.安装 创建目录,复制文件
make install  && echo $? 

#8.添加软链接简化路径
ln -s  /usr/local/php-8.4.14/ /usr/local/php

#9. 添加系统用户
useradd -r  -M -s /sbin/nologin www

#10.将配置文件复制到正确的位置(很多情况下修改配置不生效就是配置文件地址没搞对)
#复制PHP配置文件
cp /download/php-8.4.14/php.ini-production /usr/local/php/etc/php.ini
#复制PHP-FPM配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

#11.配置环境变量
echo 'export PATH=${PATH}:/usr/local/php/bin:/usr/local/php/sbin' >> /etc/profile
source /etc/profile

#12.查看php版本号
php -m && php -v

#13.配置php服务启动文件
cat > /usr/lib/systemd/system/php-fpm.service <<'EOF'
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
EOF
#重新加载php服务配置文件并启动php服务器
systemctl daemon-reload
systemctl enable --now php-fpm
#查看服务状态
systemctl status php-fpm

Zabbix7部署

官方zabbix源码下载地址:Download Zabbix sources

shell 复制代码
#0.编译依赖
yum install -y net-snmp-devel mysql-community-devel libevent-devel pcre-devel
#1.创建zabbix用户
groupadd -g 2000 zabbix
useradd -g zabbix -u 2000 -s /sbin/nologin zabbix
#2.下载源码包并解压到/download目录下
wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.21.tar.gz -P /download
tar -zxvf /download/zabbix-7.0.21.tar.gz  -C /download/
cd /download/zabbix-7.0.21
#3.进入编译目录
##编译前的配置,指定安装目录,和配置文件目录
./configure \
  --prefix=/usr/local/zabbix_server_7_21 \
  --enable-server \
  --enable-agent \
  --with-mysql \
  --with-net-snmp \
  --with-libcurl \
  --with-ssl
#选项说明
--prefix=/usr/local/zabbix_server_7_21 #指定安装目录
--enab1e-server   #安装zabbix server
--enab1e-agent    #启用zabbix agent
--enable-agent2   #启用zabbix agent2(需要go环境)
--enab1e-proxy    #启用proxy的支持
--enable-java     #启用java-gateway支持
--with-mysql      #使用 MySQL 客户端库
--with-net-snmp   #启用Net-SNMP包
--with-libcurl    #启用curl包
--with-libxml     #启用libxml2客户端库
--with-ssl        #SSL 支持(加密传输)

##编译 源代码-->可执行文件(命令) 
make  -j `nproc`  && echo $? 
##安装 创建目录,复制文件
make install  && echo $?

#4.添加软链接简化路径
ln -s /usr/local/zabbix_server_7_21/ /usr/local/zabbix

#5.设置zabbix安装目录属主和属组为zabbix
chown zabbix:zabbix -R /usr/local/zabbix_server_7_21/

#6.查看zabbix安装目录
[root@m03 /usr/local/zabbix]# tree /usr/local/zabbix
/usr/local/zabbix
├── bin #客户端工具
│   ├── zabbix_get
│   ├── zabbix_js
│   └── zabbix_sender
├── etc   #主配置
│   ├── zabbix_agentd.conf
│   ├── zabbix_agentd.conf.d
│   ├── zabbix_server.conf
│   └── zabbix_server.conf.d
├── lib #扩展模块目录
│   └── modules
├── sbin #服务守护进程目录
│   ├── zabbix_agentd
│   └── zabbix_server
└── share #官方手册目录
    ├── man
    │   ├── man1
    │   │   ├── zabbix_get.1
    │   │   └── zabbix_sender.1
    │   └── man8
    │       ├── zabbix_agentd.8
    │       └── zabbix_server.8
    └── zabbix
        ├── alertscripts
        └── externalscripts
        
#7.配置数据库
mysql -uroot -pAbc@1234
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'Abc@1234';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
set global log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;
exit;

#8.导入初始架构和数据
##源码目录
cd /download/zabbix-7.0.21/database/mysql/
##导入数据
mysql -uzabbix -pAbc@1234 zabbix < schema.sql
mysql -uzabbix -pAbc@1234 zabbix < images.sql
mysql -uzabbix -pAbc@1234 zabbix < data.sql

#9.配置zabbix server
egrep -v '^($|#)' /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log #指定 Zabbix Server 日志文件路径
DBName=zabbix      #指定 Zabbix Server 连接的 MySQL 数据库名
DBUser=zabbix      #指定连接 MySQL 数据库的用户名
DBPassword=Abc@1234  #指定 MySQL 数据库用户的密码
Timeout=4     #通信超时时间(Server 与 Agent 通信超时,Server 与数据库通信超时,脚本 / 外部检查执行超时)
LogSlowQueries=3000 #记录慢 SQL 查询的阈值(单位:毫秒),Zabbix Server 执行的 SQL 语句超过该阈值时,会写入日志
StatsAllowedIP=127.0.0.1 #指定允许访问 Zabbix Server 统计信息(运行状态、进程、缓存、连接数等)的 IP 白名单
EnableGlobalScripts=0 #启用 / 禁用 Zabbix 的「全局脚本」功能(全局脚本是 Zabbix 中可被所有主机、监控项调用的脚本)
PidFile=/usr/local/zabbix/run/zabbix_server.pid  #存储 Zabbix Server 主进程的 PID 号
Include=/usr/local/zabbix/etc/zabbix_server.conf.d/*.conf

#10.创建日志目录
mkdir  /var/log/zabbix/
mkdir /usr/local/zabbix/run/
chown -R zabbix:zabbix /var/log/zabbix/
chown -R zabbix:zabbix /usr/local/zabbix/run/

#10.配置zabbix Agent
egrep -v '^($|#)' /usr/local/zabbix/etc/zabbix_agentd.conf
LogFile=/var/log/zabbix/zabbix_agentd.log
PidFile=/usr/local/zabbix/run/zabbix_agentd.pid
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf



#11.配置zabbix server systemctl启动文件
cat > /lib/systemd/system/zabbix_server.service <<'EOF'
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target mysqld.service  #设置依赖于mysqld 不设置重启zabbix会启动不了卡住
[Service]
Environment="CONFFILE=/usr/local/zabbix/etc/zabbix_server.conf"
EnvironmentFile=-/usr/local/zabbix
Type=forking
PIDFile=/usr/local/zabbix/run/zabbix_server.pid
ExecStart=/usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf
ExecStop=/usr/bin/kill  $MAINPID
Restart=always
RestartSec=5
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
EOF

#12.配置zabbix agent 启动文件
cat > /lib/systemd/system/zabbix_agent.service <<'EOF'
[Unit]
Description=Zabbix Agent 
After=syslog.target
After=network.target mysqld.service #设置依赖于mysqld 不设置重启zabbix会启动不了卡住
[Service]
Environment="CONFFILE=/usr/local/zabbix/etc/zabbix_agentd.conf"
EnvironmentFile=-/usr/local/zabbix
Type=forking
PIDFile=/usr/local/zabbix/run/zabbix_agentd.pid
ExecStart=/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf
ExecStop=/usr/bin/kill  $MAINPID
Restart=always
RestartSec=5
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
EOF

#13.启动zabbix server、zabbix agent
systemctl enable --now zabbix_server.service zabbix_agent.service

#14.配置web前端页面
cat > /etc/nginx/conf.d/zabbix.chenshiquan.xyz.conf <<'EOF'
server {
        listen          80;
        server_name     zabbix.chenshiquan.xyz;
        access_log  /var/log/nginx/zabbix_access.log main;
        error_log   /var/log/nginx/zabbix_error.log notice;
        root        /app/code/zabbix/;  # 实际站点目录
        index       index.php;  # 默认首页

        # 忽略 favicon.ico 不存在的日志
        location = /favicon.ico {
                log_not_found   off;
        }

        # 静态资源默认匹配规则
        location / {
                try_files       $uri $uri/ =404;
        }

        # 静态资源(assets目录)
        location /assets {
                access_log      off;
                expires         10d;
        }

        # 禁止访问 .htaccess 类文件
        location ~ /\.ht {
                deny            all;
        }

        # 禁止访问敏感目录
        location ~ /(api\/|conf[^\.]|include|locale) {
                deny            all;
                return          404;
        }

        # 禁止访问 vendor 目录
        location /vendor {
                deny            all;
                return          404;
        }

        # PHP 脚本解析核心配置
        location ~ [^/]\.php(/|$) {
                #如果你使用的是 socket unix:/var/run/php-fpm/www.sock
                fastcgi_pass    127.0.0.1:9000;
                
                fastcgi_split_path_info ^(.+\.php)(/.+)$;  
                fastcgi_index   index.php;  

                fastcgi_param   DOCUMENT_ROOT   /app/code/zabbix;
                fastcgi_param   SCRIPT_FILENAME /app/code/zabbix$fastcgi_script_name;
                fastcgi_param   PATH_TRANSLATED /app/code/zabbix$fastcgi_script_name;

                include fastcgi_params;  # 加载 Nginx 内置 fastcgi 参数
                # 传递核心请求参数
                fastcgi_param   QUERY_STRING    $query_string;
                fastcgi_param   REQUEST_METHOD  $request_method;
                fastcgi_param   CONTENT_TYPE    $content_type;
                fastcgi_param   CONTENT_LENGTH  $content_length;

                # PHP 连接/超时优化
                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;
        }
}
EOF
##配置站点目录
mkdir -p /app/code/zabbix/
##复制源码包内的站点目录文件到/app/code/zabbix/
cp -rf /download/zabbix-7.0.21/ui/* /app/code/zabbix/
##将nginx站点目录属主和属组为www用户
chown -R www:www /app/code/zabbix/
#15.检查nginx语法,重新加载nginx配置文件
nginx -t
systemctl reload nginx

#16.配置zabbix命令环境变量
echo 'export PATH=${PATH}:/usr/local/zabbix/bin:/usr/local/zabbix/sbin' >> /etc/profile && source /etc/profile

访问zabbix web页面

修改php配置文件

shell 复制代码
#1.在php.ini中修改相关内容改为要求的值
post_max_size = 16M      #控制 POST 请求的最大数据量
max_execution_time = 300 #PHP 脚本的最大执行时间(秒)
max_input_time = 300     #接收请求数据的最大时间
#2.重启php服务
systemctl restart php-fpm

安装缺失的PHP扩展bcmath、sockets、ldap

  • bcmath
shell 复制代码
#1. 进入扩展源码目录
cd /download/php-8.4.14/ext/bcmath/
#2.生成编译配置(phpize)
/usr/local/php/bin/phpize
#3.配置编译参数并编译并安装
./configure --with-php-config=/usr/local/php/bin/php-config  && echo $?
make  &&  make install
#4.启用扩展(修改 php.ini)
echo "extension=bcmath.so" >>  /usr/local/php/etc/php.ini
  • sockets
shell 复制代码
#1. 进入扩展源码目录
cd /download/php-8.4.14/ext/sockets/
#2.生成编译配置(phpize)
/usr/local/php/bin/phpize
#3.配置编译参数并编译并安装
./configure --with-php-config=/usr/local/php/bin/php-config  && echo $?
make  &&  make install
#4.启用扩展(修改 php.ini)
echo "extension=sockets.so" >>  /usr/local/php/etc/php.ini
  • ldap(可选)

用于连接 LDAP 服务器(如企业级用户认证、Active Directory 集成等场景),Zabbix 非必需,仅需 LDAP 认证时安装。

shell 复制代码
#0.安装依赖
yum install -y openldap-devel
#1. 进入扩展源码目录
cd /download/php-8.4.14/ext/ldap/
#2.生成编译配置(phpize)
/usr/local/php/bin/phpize
#3.配置编译参数并编译并安装
./configure \
  --with-php-config=/usr/local/php/bin/php-config 
###若报错configure:error: Cannot find ldap libraries in /usr/lib
cp -frp  /usr/lib64/libldap* /usr/lib/
make  &&  make install
#4.启用扩展(修改 php.ini)
echo "extension=ldap.so" >>  /usr/local/php/etc/php.ini
  • 配置完重启php-fpm
shell 复制代码
systemctl restart php-fpm && systemctl status php-fpm

再次刷新

数据库主机localhost不能连接数据库,127.0.0.1能连接数据库本质原因

  • localhost是本地 socket 文件通信,要求 PHP 知道文件放在哪(socket 路径),但你没告诉 PHP 正确的路径,所以失败;
  • 127.0.0.1 是TCP/IP 网络通信(端口 3306),要求 PHP 知道IP + 端口和授权
shell 复制代码
#PHP 按配置的路径去找 mysql.sock 文件,但没找到
#1.原因 PHP 配置的 socket 路径和实际路径不一致
#重新编辑 php.ini
cat >> /usr/local/php-8.4.14/etc/php.ini <<EOF
mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock
pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
EOF
#2.检查语法,重新加载php-fpm
php-fpm -t
systemctl reload php-fpm

zabbix Agent

shell 复制代码
#1.安装客户端agent
yum install -y https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/7/x86_64/zabbix-agent-7.0.21-release2.el7.x86_64.rpm
#2.修改zabbix_agent配置文件
egrep -v  '^($|#)' /etc/zabbix/zabbix_agentd.conf 
#修改如下内容
PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.1.118
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/*.conf
#3.开启zabbix_agent并开机自启
systemctl enable --now zabbix-agent.service
#4.查看客户端agent端口是否开放
ss -tulnp |grep 10050 |wc -l

添加主机

参考下文

编译参考文章:

【LDAP安装】在已编译安装的PHP环境下安装LDAP模块 - 简书

Kylin_Server银河麒麟服务器版Zabbix7源码编译搭建部署_银河麒麟安装zabbix-CSDN博客

yum/apt安装Zabbix Server

官方包仓库:https://repo.zabbix.com/

阿里云镜像源:https://mirrors.aliyun.com/zabbix/

清华镜像源:https://mirrors.tuna.tsinghua.edu.cn/zabbix/

相关二进制包介绍

shell 复制代码
zabbix-server-mysql    #Zabbix Server服务器包
zabbix-frontend-php    #Zabbix 前端Web服务包,本质为LAP
abbix-apache-conf      #Zabbix 前端Web服务配置包,本质为LAP
zabbix-agent           #Zabbix 客户端包
zabbix-agent2          #Zabbix 客户端包
zabbix-get             #Zabbix 服务测试包

Zabbix Server

Ubuntu2204安装mysql

shell 复制代码
#1.下载mysql仓库源
wget https://dev.mysql.com/get/mysql-apt-config_0.8.36-1_all.deb
#2.安装mysql仓库源
dpkg -i mysql-apt-config_0.8.36-1_all.deb
#3.更新索引
apt update
#4.安装mysql并开启
apt install mysql-server -y  && systemctl enable mysql --now

#5.登陆mysql
mysql -uroot -pAbc@1234
#创建zabbix库
create database zabbix character set utf8mb4 collate utf8mb4_bin;
#创建zabbix用户
create user zabbix@localhost identified by 'Abc@1234';
##查看用户是否创建成功
SELECT user, host FROM mysql.user;
#将zabbix库授权给zabbix用户
grant all privileges on zabbix.* to zabbix@localhost;
##查看是否授权成功
SELECT user, host FROM mysql.user WHERE user = 'zabbix';
#允许在开启二进制日志的环境中,创建/修改存储函数、存储过程或触发器
set global log_bin_trust_function_creators = 1;

Ubuntu2204安装

shell 复制代码
#1.下载ubuntu2204 Zabbix7 阿里源仓库
wget  https://mirrors.aliyun.com/zabbix/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu22.04_all.deb

#2.下载zabbix7 仓库源
dpkg -i zabbix-release_latest_7.0+ubuntu22.04_all.deb

#3.更新索引
apt update

#4.安装Zabbix server,Web前端,agent2
apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2  zabbix-get

#5.导入初始架构和数据,系统将提示您输入zabbix用户的密码
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

#6.导入数据库模式后关闭log_bin_trust_function_creators选项
mysql -uroot -pAbc@1234 -e "set global log_bin_trust_function_creators = 0;"

#7.为Zabbix server配置数据库
#编辑配置文件 /etc/zabbix/zabbix_server.conf
sed  -i  's/# DBPassword=/DBPassword=Abc@1234/g' /etc/zabbix/zabbix_server.conf

#8.为Zabbix配置前端
#编辑配置文件 /etc/zabbix/nginx.conf
listen 80;
server_name zabbix.chenshiquan.xyz;

#9.安装中文包
apt install language-pack-zh-hans language-pack-zh-hans-base
locale -a | grep zh_CN

#10.启动Zabbix server、zabbix-agent2、php、nginx
systemctl enable  zabbix-server nginx php8.1-fpm zabbix-agent2
systemctl restart  zabbix-server nginx php8.1-fpm zabbix-agent2

windows hosts解析,10.0.0.118 zabbix.chenshiquan.xyz

浏览器访问zabbix,chenshiquan.xyz

默认登陆账号 Admin 密码 zabbix

Zabbix Agent2

Ubuntu2204安装

shell 复制代码
#1.安装Zabbix 阿里源仓库
wget https://mirrors.aliyun.com/zabbix/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu22.04_all.deb
dpkg -i zabbix-release_latest_7.0+ubuntu22.04_all.deb
apt update
#2.下载Zabbix agent2
apt install -y zabbix-agent2
#2.修改配置文件Server行
egrep -v '^($|#)' /etc/zabbix/zabbix_agent2.conf 
###输出如下
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
#172.16.1.138 是zabbix服务IP
Server=172.16.1.138
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf

#3.启动或重启
systemctl enable --now zabbix-agent2.service
#4.检查端口
ss -tulnp |grep zabbix

添加主机

参考下文

乱码和不能选中文

乱码

当前系统有些监控项部分显示有乱码,是由于web界面显示为中文但是系统没有相关字体,因此需要准备相关字体文件才能正常显示

shell 复制代码
#1.Zabbix 前端的字体资源目录
[root@m03 /usr/share/zabbix/assets/fonts]# ll /usr/share/zabbix/assets/fonts/
total 11708
drwxr-xr-x 2 root root      144 Nov 28 11:01 ./
drwxr-xr-x 5 root root       44 Nov 28 09:59 ../
lrwxrwxrwx 1 root root       38 Nov 28 10:00 graphfont.ttf -> /etc/alternatives/zabbix-frontend-font
-rw-r--r-- 1 root root 11787328 May  6  2022 simkai.ttf  #上传的字体资源
-rw-r--r-- 1 root root   149851 Nov  3 18:51 zabbix-icons.svg
-rw-r--r-- 1 root root    22072 Nov  3 18:51 zabbix-icons.ttf
-rw-r--r-- 1 root root    11716 Nov  3 18:51 zabbix-icons.woff
-rw-r--r-- 1 root root     9756 Nov  3 18:51 zabbix-icons.woff2
#2.修改Zabbix 前端配置文件
sed -i.bak 's/graphfont/simkai/g' /usr/share/zabbix/include/defines.inc.php
#3.修改完成再次刷新

不能选中文

安装zh_CN语言包

shell 复制代码
#红帽系列
dnf install langpacks-zh_CN.noarch
#ubuntu系列
apt install language-pack-zh-hans language-pack-zh-hans-base

安装glibc-common实现对语言包的识别

shell 复制代码
dnf reinstall glibc-common

测试安装是否成功,如果看到zh_CN语言已安装,则表示成功

shell 复制代码
locale -a | grep zh_CN

安装完成后,回到web页面刷新,可以看到中文语言已可以选中

容器安装

Zabbix Server

shell 复制代码
#1.拉取镜像
docker pull zabbix/zabbix-web-nginx-mysql:7.0.9-ubuntu
docker pull zabbix/zabbix-server-mysql:7.0.9-ubuntu
docker pull zabbix/zabbix-java-gateway:7.0.9-ubuntu
docker pull zabbix/zabbix-proxy-mysql:7.0.9-ubuntu
docker pull mysql:8.0-debian
#2.编写docker-compose.yaml
cat >  docker-compose.yml  <<'EOF'
#version: "3.8"
services:  
  db:  
    image: mysql:8.0-debian
    container_name: zbx_db
    networks:   
      - zabbix_net  
    restart: always   
    volumes:  
      - ./zbx_db/:/var/lib/mysql/
    environment:  
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
      MYSQL_DATABASE: "${MYSQL_DATABASE}"   
      MYSQL_USER: "${MYSQL_USER}" 
      MYSQL_PASSWORD: "${MYSQL_PASSWORD}" 
    command:  
      - --character-set-server=utf8  
      - --collation-server=utf8_bin  
      - --default-authentication-plugin=mysql_native_password  

  zbx_server:
    image: zabbix/zabbix-server-mysql:7.0.9-ubuntu
    container_name: zabbix-server-mysql-7.0
    networks:   
      - zabbix_net  
    restart: always   
    ports:  
      - 10051:10051
    depends_on:
      - db
    environment:  
      DB_SERVER_HOST: "db"
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
      MYSQL_DATABASE: "${MYSQL_DATABASE}"   
      MYSQL_USER: "${MYSQL_USER}" 
      MYSQL_PASSWORD: "${MYSQL_PASSWORD}" 

  zbx_web:
    image: zabbix/zabbix-web-nginx-mysql:7.0.9-ubuntu
    container_name: zabbix-web-nginx-mysql
    networks:   
      - zabbix_net  
    restart: always   
    ports:  
      - 80:8080
    depends_on:
      - db
      - zbx_server
    environment:  
      ZBX_SERVER_HOST: "zbx_server"
      DB_SERVER_HOST: "db"
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
      MYSQL_DATABASE: "${MYSQL_DATABASE}"   
      MYSQL_USER: "${MYSQL_USER}" 
      MYSQL_PASSWORD: "${MYSQL_PASSWORD}" 

  
networks:  
  zabbix_net:  
    driver: bridge  
    ipam:  
      config:  
        - subnet: 172.100.0.0/16  
          ip_range: 172.100.1.0/24  
          gateway: 172.100.1.1
EOF

#3.编写变量文件
cat  > .env  <<EOF
MYSQL_ROOT_PASSWORD=Abc@1234
MYSQL_DATABASE=zabbix
MYSQL_USER=zabbix
MYSQL_PASSWORD=Abc@1234
EOF

#4.启动docker-compose.yaml
docker-compose up -d

浏览器访问

用户名:Admin

密码:zabbix

Zabbix Agent2

shell 复制代码
#1.安装客户端
yum install -y https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/7/x86_64/zabbix-agent2-7.0.16-release1.el7.x86_64.rpm
#2.修改配置文件Server行
egrep -v '^($|#)' /etc/zabbix/zabbix_agent2.conf 
###输出如下
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
#172.100.1.0/24 是容器指定的网段
#172.16.1.118 是zabbix服务IP
Server=172.100.1.0/24,172.16.1.118
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf

#3.启动或重启
systemctl enable --now zabbix-agent2.service
#4.检查端口
ss -tulnp |grep zabbix
#5.测试
docker exec -it zabbix-server-mysql-7.0 bash
zabbix_get -s 172.16.1.118 -k system.hostname

添加主机

参考上文

zabbix_get工具

官方文档:https://www.zabbix.com/documentation/7.0/zh/manpages/zabbix_get

zabbix_get工具测试zabbix Agent是否正常

参数 全称 说明 示例
-s --host 必选:Zabbix Agent 的 IP 或主机名(需能被当前机器访问) -s 192.168.1.100
-k --key 必选:监控项键值(系统内置 / 自定义,含参数需写完整) -k custom.port.check[80] 或 -k system.cpu.load[all,avg1]
-p --port 可选:Agent 监听端口(默认 10050,Agent2 默认 10050) -p 10050
-I --source-address 可选:指定本地出口 IP(多网卡场景用) -I 192.168.1.200
-t --timeout 可选:超时时间(默认 3 秒,单位秒) -t 10(超时 10 秒)
-r --raw 可选:显示原始数据(不截断换行符,适合多行返回的监控项) -r -k custom.log.get[/var/log/messages]
-z --server-port 可选:Zabbix Server 端口(仅主动式 Agent 场景用,默认 10051) -z 10051
-x --debug 可选:调试模式(输出通信细节,排查连接 / 权限问题) -x -s 192.168.1.100 -k custom.port.check[80]
-h --help 可选:查看帮助信息 zabbix_get -h
-V --version 可选:查看版本 zabbix_get -V

少量主机自定义监控Linux主机

添加主机

图形化操作

  1. 监测->主机->创建主机
  1. 配置主机
  1. 如下是新添加的主机
  1. 在zabbix_server测试能否获取客户端数据
shell 复制代码
#1.获取主机名
zabbix_get -s 172.16.1.102 -k system.hostname
#2.获取内核信息
zabbix_get -s 172.16.1.102 -k system.uname
  1. 再次刷新zabbix页面,可用性变为绿色

自定义监控------监控项

监控僵尸进程数量

命令行操作

shell 复制代码
#1.获取僵尸进程的命令
top -bn1 | awk 'NR==2{print $(NF-1)}'
#2.添加客户端子配置文件/etc/zabbix/zabbix_agent2.d/sys.conf
cat > /etc/zabbix/zabbix_agent2.d/sys.conf <<EOF
UserParameter=proc.zombie,top -bn1 | awk 'NR==2{print $(NF-1)}'
EOF
#3.重启agent2
systemctl restart zabbix-agent2.service 
#4.服务端使用zabbix_get命令测试
zabbix_get -s 172.16.1.102 -k proc.zombie

图形化页面操作

  1. 数据采集->主机->选择nfs01主机添加监控项
  1. 选择创建监控项
  1. 配置监控项

带※是必填项

  1. 查看监控项的最新数据

监测->最新数据->选择要查看的主机->监控项名称

监控用户是否从JumpServer登陆(传参)

shell 复制代码
#1.编写脚本传参
cat > /server/scripts/jmp_server.sh <<'EOF'
#!/bin/bash
user=$1
jumpserver_ip=$2
login_user=`lastlog | awk 'NR==1{print $3}'`
if [ ${login_user} = "${jumpserver_ip}" ];then
	echo 1
else
	echo 0
fi
EOF
#2.修改sys.conf子配置文件
cat > /etc/zabbix/zabbix_agent2.d/sys.conf <<EOF
UserParameter=proc.zombie,top -bn1 | awk 'NR==2{print $(NF-1)}'
UserParameter=user.jumpserver.login[*],sudo bash /server/scripts/jmp_server.sh $1 $2
EOF
#3.重启agent2
systemctl restart zabbix-agent2.service 

自定义监控------触发器

  • 监控项获取到的数值是否反映着系统异常

  • 触发器触发后一般会进行告警操作(邮件,微信,OA)

图形化操作步骤

  1. 点击nfs01添加触发器
  1. 点击右上角创建触发器
  1. 配置触发器,配置完成点添加

自定义监控---------图形

图形化操作

数据采集->主机->选择要创建图形的主机,点击图形->创建图形

自定义监控------模版

图形化操作

  1. 数据采集->模板->创建模板,输出模板名称,新建模板组
  1. 新模板默认没有内容,点击数据采集->主机->将之前创建主机的监控项、触发器、图形都复制给新建的模板
  1. 将zabbix server关联刚创建的模板

  1. 此时模板还是不能用的
  1. 需要在zabbix server添加键值才可以(添加键值操作可以查看上文),添加完键值后

添加多台主机自定义监控

Ansible批量安装zabbix Agent并分发键值

Ansible(安装、相关文件、命令、常用模块)_ansible命令-CSDN博客

shell 复制代码
#1.编写playbook
cat > install.yaml <<EOF
- hosts: all
  tasks:
    - name: "0.清除缓存"
      shell: yum clean packages
      when: ansible_distribution is match("Kylin")
    - name: "1.Kylin安装zabbix客户端agent"
      yum:
        name: https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/7/x86_64/zabbix-agent-7.0.21-release2.el7.x86_64.rpm
        disable_gpg_check: yes
        state: present
      when: ansible_distribution is match("Kylin")
    - name: "0.清除缓存"
      shell: yum clean packages
      when: ansible_distribution is match("Rocky")
    - name: "1.Rocky 安装zabbix客户端agent"
      yum:
        name: https://mirrors.aliyun.com/zabbix/zabbix/7.0/rocky/9/x86_64/zabbix-agent-7.0.21-release2.el9.x86_64.rpm
        disable_gpg_check: yes
        state: present
      when: ansible_distribution is match("Rocky")
    - name: "0.Ubuntu下载 Zabbix Agent源"
      get_url:
        url: "https://mirrors.aliyun.com/zabbix/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu22.04_all.deb"
        dest: "/tmp/zabbix-release.deb"
      when: ansible_distribution is match("Ubuntu")
    - name: "1.ubuntu安装zabbix客户端agent源"
      apt:
        deb: "/tmp/zabbix-release.deb"
        state: present
        update_cache: true
      when: ansible_distribution is match("Ubuntu")
    - name: "1.5ubuntu安装zabbix客户端agent"
      apt:
        name: zabbix-agent
        state: present
      when: ansible_distribution is match("Ubuntu")
    - name: "2.修改zabbix客户端文件"
      lineinfile:
        path: /etc/zabbix/zabbix_agentd.conf
        regexp: "^Server="
        line: "Server=172.16.1.118"
        state: present
        #添加分发键值内容
    - name: "3.分发自定义监控键值"
      copy:
        src: sys.conf
        dest: /etc/zabbix/zabbix_agentd.d/sys.conf
      when: ansible_distribution is match("Kylin|Rocky")
    - name: "Ubuntu3.分发自定义监控键值"
      copy:
        src: sys.conf
        dest: /etc/zabbix/zabbix_agentd.conf.d/
      when: ansible_distribution is match("Ubuntu")
    - name: "4.开启zabbix客户端"
      systemd:
        name: zabbix-agent.service
        enabled: true
        daemon_reload: true
        state: restarted
EOF
#2.运行playbook
ansible-playbook install.yaml
####注意防火墙放行10050端口

自动发现

发现方法 说明 应用场景
自动发现 服务端主动扫描指定的网段添加主机 (安装客户端,修改配置文件。) 配置简单,zbx 自动发现有很多监控。 一般,不经常的添加机器
自动注册 客户端主动连接服务端提交信息注册。 经常,频繁添加.
  • anible批量部署客户端+配置文件+启动或重启
  • 目标:web前端页面如何批量自动化添加主机,关联模板,启动主机

配置自动发现规则

图形化操作

  1. 点击步骤:数据采集->自动发现->修改默认的自动发现规则
  1. 配置:配置自动发现规则
  1. 查看已经被监测的主机:点击监测->自动发现

配置发现动作

  1. 配置发现动作:告警->动作->发现动作,配置默认的发现动作
  1. 配置默认的发现动作,接收到的值就是自动发现规则的检查功能

操作

  1. 循环添加ubuntu、rocky系统
  1. 查看主机群组

自动注册

自动注册,主要是Agent主动向zabbix server注册;

自动注册主要分为两个步骤:

  • 自动注册,客户端必须开启主动模式,并设定主机名

  • 在zabbix web的告警-->动作-->自动注册动作,创建一个动作

  • 需要防火墙开放10051端口

shell 复制代码
Server=<Zabbix Server IP>
ServerActive=<Zabbix Server IP> #客户端主动模式是实现自动注册的前提条件
Hostname=<agent IP>
#HostnameItem=system.hostname    
HostMetadata==<key>           #非必须项,可以做为添加主机的验证标识和分类,或者实现加入主机的验证功能
HostMetadataItem=<监控项Item>  #非必须项,监控项的值可以做为添加主机的验证标识和分类


#需要的改的项目
Hostname=客户端IP
Server=172.16.1.118
ServerActive=172.16.1.118
HostMetadataItem=system.uname  #元数据键值

Ansible批量修改zabbix agent配置文件并分发键值

shell 复制代码
cat > install.yaml <<EOF
- hosts: all
  tasks:
    - name: "0.清除缓存"
      shell: yum clean packages
      when: ansible_distribution is match("Kylin")
    - name: "1.Kylin|Centos安装zabbix客户端agent"
      yum:
        name: https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/7/x86_64/zabbix-agent-7.0.21-release2.el7.x86_64.rpm
        disable_gpg_check: yes
        state: present
      when: ansible_distribution is match("Kylin")
    - name: "0.清除缓存"
      shell: yum clean packages
      when: ansible_distribution is match("Rocky")
    - name: "1.Rocky 安装zabbix客户端agent"
      yum:
        name: https://mirrors.aliyun.com/zabbix/zabbix/7.0/rocky/9/x86_64/zabbix-agent-7.0.21-release2.el9.x86_64.rpm
        disable_gpg_check: yes
        state: present
      when: ansible_distribution is match("Rocky")
    - name: "0.Ubuntu下载 Zabbix Agent源"
      get_url:
        url: "https://mirrors.aliyun.com/zabbix/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu22.04_all.deb"
        dest: "/tmp/zabbix-release.deb"
      when: ansible_distribution is match("Ubuntu")
    - name: "1.ubuntu安装zabbix客户端agent源"
      apt:
        deb: "/tmp/zabbix-release.deb"
        state: present
        update_cache: true
      when: ansible_distribution is match("Ubuntu")
    - name: "1.5ubuntu安装zabbix客户端agent"
      apt:
        name: zabbix-agent
        state: present
      when: ansible_distribution is match("Ubuntu")
    - name: "2.1修改zabbix客户端文件Server"
      lineinfile:
        path: /etc/zabbix/zabbix_agentd.conf
        regexp: "^Server="
        line: "Server=172.16.1.118"
        state: present
    - name: "2.2修改zabbix客户端文件ServerActive"
      lineinfile:
        path: /etc/zabbix/zabbix_agentd.conf
        regexp: "^ServerActive="
        line: "ServerActive=172.16.1.118"
        state: present
    - name: "2.3修改zabbix客户端文件Hostname"
      lineinfile:
        path: /etc/zabbix/zabbix_agentd.conf
        regexp: "^Hostname"
        line: "Hostname={{ ansible_ens34.ipv4.address }}"
        state: present
      when: ansible_distribution is match("Kylin|Ubuntu")
    - name: "2.4修改zabbix客户端文件Hostname"
      lineinfile:
        path: /etc/zabbix/zabbix_agentd.conf
        regexp: "^Hostname"
        line: "Hostname={{ ansible_ens192.ipv4.address }}"
        state: present
      when: ansible_distribution is match("Rocky")
    - name: "2.5修改zabbix客户端文件"
      lineinfile:
        path: /etc/zabbix/zabbix_agentd.conf
        regexp: "^# HostMetadataItem="
        line: "HostMetadataItem=system.uname"
        state: present
    - name: "3.开启zabbix客户端"
      systemd:
        name: zabbix-agent.service
        enabled: true
        daemon_reload: true
        state: restarted
EOF

配置自动注册动作

图形化操作

  1. 配置自动注册动作
  1. 元数据包括4.19就添加主机设置主机群组为kylin,添加模板

  1. 如法炮制创建ubuntu、rocky
  1. 再次查看主机

监控失败

  1. zabbix_get连接到这个节点(测试内置键值,测试自定义键值)
shell 复制代码
zabbix_get -s 172.16.1.102 -k system.hostname 
  1. 命令或脚本执行时间过长 默认不超过3秒
  2. 用户与权限问题
shell 复制代码
#1. zabbix客户端修改用户root
#2. 配置sudo权限 zabbix ALL=(ALL) NOPASSWD: ALL

配置告警

报警媒介类型 对应方案 应用场景说明
发邮件 企业邮箱 用企业邮箱,免费使用
企业微信报警应用(机器人) 机器人 需使用企业微信,免费
OA 系统(钉钉、飞书等) 机器人 关联阿里云,免费
短信接口(短信网关) - 收费,阿里云短信约 0.045 元 / 条
电话接口 - 收费
第三方工具 onealert(告警) 配置平台信息 免费(有限制),收费;需配置该平台信息,对应网址https://aiops.com/
云监控与告警 - -

邮件告警

全流程

  • 个人邮箱/企业邮箱
  • 开启个人邮箱 smtp功能 获取授权码
  • 发件人:配置zabbix 报警媒介类型
  • 收件人:配置 用户 接收报警
  • 发件条件:配置触发器(trigger)动作(条件判断)

(1)个人邮箱准备

获取邮箱授权码

(2)配置发件人

  1. 配置发件人-报警媒介,修改默认的报警媒介

shell 复制代码
##问题模板
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

告警主机:{HOSTNAME1}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}


##恢复模板
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

告警主机:{HOSTNAME1}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

(3)配置用户的报警媒介

(4)配置触发器动作

可以配置触发哪些警报发送给哪些用户

(5)制造故障

shell 复制代码
#1.制造僵尸进程
cat  > zombie.c <<'EOF'
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/*
 *   desc: 用于模拟僵尸进程.代码. oldboyedu.com
 *   
*/
int main(int argc, char *argv[])
{
pid_t pid;
pid = fork();
if (pid == 0) {
int iPid = (int)getpid();
fprintf(stderr,"I am child,%d\n",iPid);
sleep(1);
fprintf(stderr, "Child exits\n");
return EXIT_SUCCESS;
}
int iPid = (int)getpid();
fprintf(stderr,"I am parent,%d\n",iPid);
fprintf(stderr, "sleep....\n");
sleep(600);
fprintf(stderr, "parent exits\n");
return EXIT_SUCCESS;
}
EOF
#2.编译为二进制文件
gcc zombie.c -o zombie
###后台执行
nohup ./zombie &

#3.恢复
pkill zombie

企业微信告警

微信API参考文档:https://developer.work.weixin.qq.com/document/path/91039

  • 微信报警,短信,电话,钉钉(OA) 自定义脚本报警

  • 通过脚本(py,shell),调用对方api接口(输入接口需要的信息,访问与使用api接口)

  • 方法:

    • 复杂:添加企业机器人(全局),获取企业id,机器人的id,key,secret,域名,备案,访问机器人的IP
    • 简单:在企业微信(OA)的群里,添加机器人,通过机器人的api接口+token令牌

流程

  • 企业微信创建群组,设置消息推送
  • 使用脚本(shell/python)调用群组中机器人的API接口:信息
  • 发件人:报警媒介(告警机器人)
  • 收件人:个人 媒体类型
  • 动作:已经完成

(1)企业微信创建群组

(2)使用脚本调用群组中机器人的API接口信息

python脚本

shell 复制代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
#author: oldboyedu
#desc: 调用企业微信群中机器人进行发送消息
#desc: 调用钉钉机器人进行发送消息
#desc: 调用各种OA系统的群机器人(webhook)方式 通用的

#导入python 函数库(包)
#request http请求(curl/wget命令)
import requests
import json
#sys 系统功能函数库 
import sys

# 机器人的webhook地址 群里添加群机器人后可以获取 
#支持企业微信,钉钉,飞书.

WEBHOOK_URL = "api"

# HTTP请求头部信息
HEADERS = {
    'Content-Type': 'application/json;charset=utf-8'
}

# 定义发送消息的函数
def send_msg(text):
    #text变量就是要传输的数据.

    # 构建消息体
    texts = {
        "msgtype": "text",
        "text": {
            "content": text
        }
    }
    # 发送HTTP POST请求
    response = requests.post(WEBHOOK_URL, json=texts, headers=HEADERS)
    # 打印响应内容(一般用于调试)
    print(response.content)

# 如果该文件被直接执行,则从命令行接收一个参数并将其发送到机器人的webhook地址
if __name__ == '__main__':
    # $# -ne 2 
    if len(sys.argv) != 2:
        print("Usage: python3 all_app_webhook.py <text>")
        sys.exit(1)
    text = sys.argv[1]  # 获取命令行参数 $1
    send_msg(text)  # 发送消息

shell脚本

shell 复制代码
#!/bin/bash
# -*- coding: utf-8 -*-
# author: oldboyedu
# desc: 调用企业微信群中机器人进行发送消息
# desc: 调用钉钉机器人进行发送消息
# desc: 调用各种OA系统的群机器人(webhook)方式 通用的

# 机器人的webhook地址 群里添加群机器人后可以获取
# 支持企业微信,钉钉,飞书
WEBHOOK_URL="api接口"

# 定义发送消息的函数
send_msg() {
    local text="$1"
    # 构建JSON消息体
    local json_data=$(jq -n \
        --arg msgtype "text" \
        --arg content "$text" \
        '{msgtype: $msgtype, text: {content: $content}}')
    
    # 发送HTTP POST请求(使用curl替代requests)
    curl -s -X POST \
        -H "Content-Type: application/json;charset=utf-8" \
        -d "$json_data" \
        "$WEBHOOK_URL"
}

# 主程序入口
if [ $# -ne 1 ]; then
    echo "Usage: bash all_app_webhook.sh <text>"
    exit 1
fi

# 获取命令行参数并发送消息
text="$1"
send_msg "$text"

# 打印换行(优化输出格式)
echo

(3)配置告警媒介

shell 复制代码
#1.脚本放置位置
/usr/local/zabbix/share/zabbix/alertscripts/

(4)配置用户的报警媒介

(5)设置触发器动作(发送至媒体类型)

(6)制造故障

相关推荐
gis分享者2 小时前
如何在 Shell 脚本中使用管道(pipeline)实现数据传递?(容易)
linux·pipeline·shell·脚本·管道·数据传递
model20052 小时前
Alibaba linux 3安装LAMP(2)
linux·运维·服务器
喵了meme2 小时前
Linux学习日记16:守护进程
linux·服务器·学习
一匹电信狗2 小时前
【Linux我做主】进程实践:手动实现Shell
linux·运维·服务器·c++·ubuntu·小程序·开源
BUG_MeDe2 小时前
Linux 下VRF的简单应用
linux·运维·服务器
Sleepy MargulisItG3 小时前
Linux 基础指令详解(常用)
linux
python百炼成钢3 小时前
解决——windows和ubuntu之间无法复制粘贴
linux
暮光6293 小时前
Ubuntu 20.04 文件管理器图标卡死
linux·运维·ubuntu
猫猫的小茶馆3 小时前
【ARM】内核移植(编译)
linux·arm开发·stm32·单片机·嵌入式硬件·mcu·pcb工艺