# CentOS 安装 Zabbix 5.0

#### 博客作者：联系请[点击](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)，搬运不易，希望请作者喝咖啡，可以点击联系[博客作者](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)

## 前言

{% hint style="success" %}
说明：本文介绍CentOS 8.3 搭建 Zabbix5.0 监控平台安装及相关要求&#x20;
{% endhint %}

## 一、安装要求&#x20;

### 内存和磁盘&#x20;

Zabbix同时需要物理内存和磁盘空间。刚开始使用Zabbix，建议128MB物理内存和256MB可用磁盘空间。然而, 具体需要的内存大小和磁盘空间要根据主机数量和监控参数而定。如果你计划对监控的参数进行长期保存，你应该考虑至少在数据库中预留几个GB的空间，以用来保留历史数据。 每个Zabbix的守护进程需要与数据库服务器建立多个连接。分配给连接的内存数量，取决于数据库引擎的配置。&#x20;

### CPU&#x20;

根据监控参数及选择的数据库引擎，Zabbix，特别是Zabbix数据库，可能需要大量的CPU资源，

### 其他硬件&#x20;

如果需要启用短信（SMS）通知功能，需要串行通讯口（serial communication port）和串行GSM调制解调器（serial GSM modem）。USB转串行转接器也同样可以工作。

### [具体配置参考官方文档](https://www.zabbix.com/documentation/5.0/zh/manual/installation/requirements)

### 关闭NFtables和SElinux

```
systemctl disable --now firewalld.service
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
```

### &#x20;安装**系统常用软件包**

```python
dnf install -y sysstat traceroute  net-tools telnet  tree  \
net-snmp-utils  vim lrzsz tcpdump wget git zip tar
```

## 二、安装 **Zabbix 服务端**

### Zabbix 官方源

```
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
```

### 替换为阿里云Zabbix源

```
sed -i '3c baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/8/$basearch/' /etc/yum.repos.d/zabbix.repo
```

### 安装 **Z**abbix 服务端

```bash
dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent vim
```

### 安装Apache和MariaDB并启动

```
dnf install -y @httpd @mariadb
systemctl enable --now httpd mariadb
```

### 数据库根用户添加密码及安全设置

```
mysql_secure_installation
```

#### 步骤如下：

> * 要求你配置VALIDATE PASSWORD component（验证密码组件）： 输入y ，回车进入该配置
> * 选择密码验证策略等级， 我这里选择0 （low），回车
> * 输入新密码两次
> * 确认是否继续使用提供的密码？输入y ，回车
> * 移除匿名用户？ 输入y ，回车
> * 不允许root远程登陆？ 不需要输入y，需要远程登陆输入n ，回车
> * 移除test数据库？ 输入y ，回车
> * 重新载入权限表？ 输入y ，回车

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McmQgAqhA5aQcDNFgVK%2F-McmTVNxyPysCAeEFKT5%2Fimage.png?alt=media\&token=cbbd4239-8422-4377-8fbf-c7c9d1298f8e)

#### 查询下root是否可以远程登陆，没有就配置一下

```sql
mysql -uroot -p

use mysql;
select host,user from user;
```

#### 配置远程登陆

```sql
mysql -uroot -p

use mysql;
update user set host='%' where user='root';
flush privileges;
exit
```

#### 关闭MySQL主机查询dns

{% hint style="success" %}
MySQL会反向解析远程连接地址的dns记录，如果MySQL主机无法连接外网，则dns可能无法解析成功，导致第一次连接MySQL速度很慢，所以在配置中可以关闭该功能。
{% endhint %}

#### 给`/etc/my.cnf`文件，添加配置

```bash
echo "[mysqld] 
skip-name-resolve" >> /etc/my.cnf
```

#### 重启服务

```bash
systemctl restart mysqld
```

#### 创建zabbix数据库，在数据库主机上运行以下内容。

```
mysql -uroot -p
```

```sql
create database zabbix character set utf8 collate utf8_bin;
show databases;
create user zabbix@localhost identified by 'password';
flush privileges;
grant all privileges on zabbix.* to zabbix@localhost;
quit;
```

#### 在 Zabbix 服务端主机上导入初始架构和数据。

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

## 三、启动Zabbix Server进程

{% hint style="info" %}
**zabbix\_server.conf 配置说明**

* **ListenPort 监听端口，默认10051**
* **SourceIP 源ip，默认为空，可以写机器ip地址**

  SourceIP=机器ip
* **LogType    日志类型，system\file\console，默认file**
* **LogFile     日志路径，默认/var/log/zabbix/zabbix\_server.log**

  LogFile=/var/log/zabbix/zabbix\_server.log
* **LogFileSize     日志大小，0-1024MB，0禁用自动日志轮换**

  LogFileSize=0
* **DebugLevel    调试级别，0\~5，默认为3显示waring信息**
* **PidFile    pid文件，默认/var/run/zabbix/zabbix\_server.pid**

  PidFile=/var/run/zabbix/zabbix\_server.pid
* **SockerDir    socker文件夹，默认/var/run/zabbix**

  SocketDir=/var/run/zabbix
* **DBHOst    数据库地址，默认127.0.0.1**
* **DBName    数据库名称，默认 zabbix**

  DBName=zabbix
* **DBSchema    数据库dschema，默认 空**
* **DBUser    数据库用户，默认zabbix**

  DBUser=zabbix
* **DBPassword    数据库密码**

  DBPassword=zabbixmysql
* **DBSocket    DBScoket地址**
* **DBPort    数据库端口，默认为空，**
* **HistoryStorageURL    历史存储的HTTP地址**
* **HistoryStorageTypes    用逗号分隔的类型列表，uint\dbl\str\log\text**
* **HistoryStorageDateIndex    是否历史记录预处理 0 disable，1 enable**
* **ExportDir    导出路径**
* **ExportFileSize    导出文件大小1M\~1G，默认1G**
* **StartPollers    预分叉的轮询器实例数，默认5**
* **StartIPMIPollers    IPMI轮询器数量**
* **StartPreprocessors    启动预处理器数量，默认3**
* **StartPollersUnreachable    无法访问是轮询次数**
* **StartTrappers**
* **StartPingers    ICMP预习处理数**
* **StartDiscoverers    发现者预处理数**
* **StartHTTPPollers    HTTP查询器预处理数**
* **StartTimers    计时器数**
* **JavaGateway    zabbix网关ip地址或主机名，仅在启动java轮询器时需要**

  JavaGateway=机器当前ip
* **JavaGatewayPort    zabbix网关的监听端口，默认10052**
* **StartJavaPollers    java轮询器预处理数**

  StartJavaPollers=5
* **StartVMwareCollectors    虚拟收集器的数量**
* **SNMPTrapperFile    SNMPtrapper文件，从snmp守护进程传递到服务器的临时文件**

  SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
* **StartSNMPTrapper    为1，启动SNMPTrapper**
* **ListenIP    trapper监听的端口列表，用逗号分隔**
* **CacheSize    缓存**
* **Timeout    SNMP服务和外部检查超时时间**

  Timeout=4
* **AlertScriptsPath    预警脚本位置**

  AlertScriptsPath=/usr/lib/zabbix/alertscripts
* **ExternalScripts    外部脚本路径**

  ExternalScripts=/usr/lib/zabbix/externalscripts
* **LogSlowQueries    定义数据库慢查询时长，单位毫秒**

  LogSlowQueries=3000
* **StatsAllowedIP    允许访问的ip列表，用逗号分隔0.0.0.0/0代表所有ipv4地址**

  StatsAllowedIP=0.0.0.0/0
  {% endhint %}

### &#x20;**在zabbix\_server.conf中编辑配置**

```bash
vim /etc/zabbix/zabbix_server.conf
ListenPort=10051
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password
```

### &#x20;**编辑Zabbix前端的PHP配置**

{% hint style="info" %}
&#x20;**PHP 优化，如有需要可根据相关参数进行优化**

```
vim /etc/php.ini 
```

* `expose_php = Off`                             # 禁止显示php版本的信息&#x20;
* `short_open_tag = On`           # 取消前面的;，修改为On。表示支持php短标签&#x20;
* `cgi.fix_pathinfo=1`            # 将注释去掉，开启PHP的pathinfo伪静态功能。&#x20;
* `post_max_size = 100M`                     # 单提交的最大数据，此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的，默认8M&#x20;
* `upload_max_filesize = 50M`     #上载文件的最大许可大小 ，默认2M&#x20;
* `max_execution_time = 600`             # 脚本运行的最长时间，默认30秒&#x20;
* `max_input_time = 600`                     # 脚本可以消耗的时间，默认60秒&#x20;
* `memory_limit = 256M`                       # 脚本运行最大消耗的内存，根据你的需求更改数值，默认128M
* `date.timezone = asia/shanghai` #设置时区
  {% endhint %}

```bash
sed -i '$a php_value[date.timezone] = Asia/Shanghai' /etc/php-fpm.d/zabbix.conf
```

### 启动 Zabbix 服务器和代理进程，并设置开机自启动

```
systemctl restart zabbix-server zabbix-agent httpd php-fpm
systemctl enable --now zabbix-server zabbix-agent httpd php-fpm
```

### Zabbix前端可以在浏览器中通过 <http://localhost/zabbix> 进行访问。&#x20;

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McbPujoGDnavRQKzw3D%2F-McbSX-ZtkjB9BSiWFbH%2Fimage.png?alt=media\&token=702c35dc-354f-4536-936c-04616f4164c3)

### 配置 Zabbix 前端

{% hint style="info" %}

1. 输入数据库连接端口，zabbix数据库密码，输入名称&#x20;
2. 默认的用户是Admin，密码为zabbix，该用户是超级用户，输入登录信息后，点击Sign In按钮，进行登录 左下角设置可以切换语言
   {% endhint %}

#### 数据库配置，输入数据库连接端口，zabbix数据库密码

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McbPujoGDnavRQKzw3D%2F-McbSms18BZznhaFOw7N%2Fimage.png?alt=media\&token=38f4bde8-e253-4241-90b4-1c98361589d4)

#### Zabbix Server 配置，输入名称

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McbPujoGDnavRQKzw3D%2F-McbQlmMM_Swoa-GnhWW%2Fimage.png?alt=media\&token=f5268267-d813-487d-8f72-2886fe04d5a4)

#### 确认配置信息

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McbPujoGDnavRQKzw3D%2F-McbSK9DnDTszmZH6K4A%2Fimage.png?alt=media\&token=0a8dc4ad-02ed-4929-81b8-9e998a9a0533)

#### 默认的用户是Admin，密码为zabbix

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-Mc_uccHUimqsULirOqd%2F-Mc_y7ao9x-y_dFZ5Zq2%2Fimage.png?alt=media\&token=072ea7a2-5870-4f69-aa3f-f60ed36c2a23)

#### **更换web页面显示语言，切换为zh\_CN**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McbW46UY2dP_B_9PmcW%2F-MceALcir7bk96q5Cp69%2Fimage.png?alt=media\&token=c6c4d81d-a5e9-4ba7-99c5-d79c1a7d194a)

### **解决Zabbix 图形中文乱码**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McbPujoGDnavRQKzw3D%2F-McbUF-h_mNeTPK7fiN_%2Fimage.png?alt=media\&token=ccfb1d77-3b4f-41e8-8201-e9de06bb76d7)

#### 字体文件目录:

```
zabbix 4.0：/usr/share/zabbix/fonts/
zabbix 4.2：/usr/share/zabbix/assets/fonts/
zabbix5.0：/usr/share/zabbix/assets/fonts
```

#### php 脚本文件位置:

```
/usr/share/zabbix/include/defines.inc.php
```

{% hint style="info" %}
我这里安装的是zabbix5.0，进入到`/usr/share/zabbix/assets/fonts`目录，可以看到一个`graphfont.ttf`软连接，默认指向`/etc/alternatives/zabbix-web-font`这个字体文件，由于php配置文件已经配置好了graphfont.ttf，所以这个软连接指向哪个字体文件就使用哪个文件&#x20;
{% endhint %}

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-Mc_uccHUimqsULirOqd%2F-Mc_z_yUfA1w1eFRBtGN%2Fimage.png?alt=media\&token=a1b8a7b0-3c0c-415a-a04f-5bf0ea539fc7)

#### 下载一个微软雅黑**字体**

```
cd /usr/share/zabbix/assets/fonts
wget https://raw.githubusercontent.com/chenqing/ng-mini/master/font/msyh.ttf
mv -f msyh.ttf /usr/share/fonts/dejavu/DejaVuSans.ttf
systemctl restart zabbix-server 
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McbUKWSaN3qC-0eXVcb%2F-McbUzT7U3myZF0D_MPL%2Fimage.png?alt=media\&token=8c019e9c-9ae9-41a7-8b2a-020f8ade1b6f)

## 四、安装 **Zabbix** 客户端

### 关闭NFtables和SElinux

```
systemctl disable --now firewalld.service
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
```

### &#x20;安装**系统常用软件包**

```python
dnf install -y sysstat traceroute  net-tools telnet  tree  \
net-snmp-utils  vim lrzsz tcpdump wget git zip tar
```

{% hint style="danger" %}
**注意：**&#x8FD9;里需要下载和Zabbix Server版本一致的Zabbix Agent 软件包和Yum源
{% endhint %}

### Zabbix 官方源

```
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
```

### 替换为阿里云Zabbix源

```
sed -i '3c baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/8/$basearch/' /etc/yum.repos.d/zabbix.repo
```

### 安装 **Z**abbix 客户端

```bash
dnf -y install  zabbix-agent zabbix-sender
```

### 配置zabbix\_agent.conf客户端

{% hint style="info" %}

#### zabbix\_agent.conf配置说明

* **PidFile    Pid文件**

  PidFile=/var/run/zabbix/zabbix\_agentd.pid
* **LogType    日志类型，system\file\console，默认file**
* **LogFile      日志文件**

  LogFile=/var/log/zabbix/zabbix\_agentd.log
* **LogFileSize     日志大小，0-1024MB，0禁用自动日志轮换**

  LogFileSize=0
* **DebugLevel    调试级别，0\~5，默认为3显示waring信息**
* **SourceIP 源IP，默认为空，可以写机器IP地址**

  SourceIP=机器IP
* **AllowKey    允许执行的项目键**
* **DenyKey**
* **Server    zabbix-server的IP或名称，列出主机接受传入的连接**

  Server=服务端机器IP
* **ListenPort    监听端口，默认10050**
* **ListenIP    监听IP，zabbix-agent的IP**

  ListenIP=机器IP
* **StartAgents    监听的服务，zabbix-server的IP地址**

  ServerActive=服务端机器IP:10051
* **Hostname    主机名zabbix-agent的IP，在zabbix-web上添加hosts时用这个名称**

  Hostname=机器的名称
* **UnsafeUserParameters=1  默认为0，不允许使用以下字符 ' " \` \* ? \[ ] { } \~ $ ! & ; ( ) < > | # @，此外，不允许换行符，修改为1，表示自定义脚本中可以包含特殊字符。**
* **HostMetadataItem     主机元数据,默认是system.uname，当Agent程序向服务端发送自动注册请求时，会发送其主机名，在某些情况下，Zabbix服务器的主机名不足以区分发现的主机，主机元数据可将其他信息从Agent发送到服务端。**
  {% endhint %}

```
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.186.139           # 服务器IP
ServerActive=192.168.186.139     # 服务器IP
Hostname=hezhiqiang-agent01      # 客户端主机名
UnsafeUserParameters=1           # 默认为0，修改为1，表示自定义脚本中可以包含特殊字符。
HostMetadataItem=system.uname    # 主机元数据
```

### 启动 Zabbix 代理进程，并设置开机自启动

```
systemctl enable --now zabbix-agent.service
```

## 五、Zabbix5.0 监控 Nginx

### **安装 Nginx**

```bash
vim /etc/yum.repos.d/nginx.repo
```

```bash
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$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/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
```

```bash
 dnf makecache timer
 dnf info nginx
 dnf install -y nginx
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-MKtNmAgJL5BzzszObVy%2F-MKtOLheBIdiHJurxSr0%2Fimage.png?alt=media\&token=76722fd9-6d56-46a8-80ff-0a3ca4c6aef9)

```bash
 rm -rf /etc/nginx/conf.d/default.conf
```

### 查看当前Nginx是否已安装内置运行状态模块

```python
nginx -V
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McnDxGHoIRZvRqzTQVa%2F-McnIwjOQu90hKAkfQ3a%2Fimage.png?alt=media\&token=685abb44-ac94-4ddb-bd72-59749f071dce)

从命令返回值中出现“`--with-http_stub_status_module`”这一个模块即代表内置运行状态模块已开启

### 开启运行状态模块，编辑Nginx配置文件

{% hint style="warning" %}
**注意：**&#x73;tub\_status模块只能应用在server或者location下
{% endhint %}

```python
vim /etc/nginx/nginx.conf
 
参考以下内容进行修改：
server {
        location /status {              #定义运行状态页面名称，页面为status
        stub_status on;                 #开启模块
        access_log off;                 #不开启访问日志记录
        allow 127.0.0.1;                #运行127.0.0.1地址访问此网页
        allow 192.168.186.0/24;         #只运行192.168.186.0网段的主机访问此网页
        deny all;                       #其余网段主机不允许访问
 }
}
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McnDxGHoIRZvRqzTQVa%2F-McnLQWGOloaHWRzkxJd%2Fimage.png?alt=media\&token=c365ab7e-4639-4c98-b5e2-02a17efe99f2)

#### 检查配置文件语法是否正确，然后重启nginx服务

```python
nginx -t
systemctl restart nginx
```

#### 浏览器访问运行状态页面

{% hint style="info" %}
[http://IP/status](http://ip/status)

页面内容解析：&#x20;

```
Active connections: 2 
server accepts handled requests
 2 2 1 
Reading: 0 Writing: 1 Waiting: 1 
```

* Active connections：当前活动的客户端连接数有多少（包括在等待阶段的）&#x20;
* accepts：接受的客户端连接总数&#x20;
* handled：已处理的连接总数（通常与accepts数量一致，但存在某些资源限制的情况导致数量不一致）&#x20;
* requests：客户端请求总数（包括接受请求或拒绝请求的）&#x20;
* Reading：nginx正在读取请求标头的当前连接数。&#x20;
* Writing：nginx正在将响应写回到客户端的当前连接数。&#x20;
* Waiting：当前等待请求的空闲客户端连接数。

[具体stub\_status模块信息可查看官方文档](https://nginx.org/en/docs/http/ngx_http_stub_status_module.html)
{% endhint %}

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McnDxGHoIRZvRqzTQVa%2F-McnMKTYfD1B8FwdQVHe%2Fimage.png?alt=media\&token=3f6ef607-7fd7-4510-8b30-5c5a629cbe59)

### 编写监控脚本

```python
mkdir /etc/zabbix/script
vim /etc/zabbix/script/nginx_status.sh
 
#!/bin/bash

#function: monitor nginx1.16 for zabbix5.0
#blog: he.zhiqiang.cloud
#version: 1.0
#date: 2021/6/22

#定义Nginx status页面
ngx_status="http://127.0.0.1/status"

#判断status页面是否存活
ngx_status_code() {
        http_code=`curl -o /dev/null -s -w %{http_code} ${ngx_status}`
        if [ ${http_code} == "200" ];then
                return 1
        else
                echo "Nginx status is not running."
        fi
}

#获取当前活动的客户端连接数
active() {
        ngx_status_code || curl -s ${ngx_status} | grep "Active" | awk '{print $NF}'
}

#获取接收客户端连接的总数量
accepts() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $1}'
}

#获取已处理的连接总数量
handled() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $2}'
}

#获取客户端请求总数量
requests() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $3}'
}

#获取正在读取请求标头的当前连接数量
reading() {
        ngx_status_code || curl -s ${ngx_status} | grep "Reading" | awk '{print $2}'
}

#获取正在将响应写回到客户端的当前连接数量
writing() {
        ngx_status_code || curl -s ${ngx_status} | grep "Writing" | awk '{print $2}'
}

#获取当前正在等待响应的客户端连接数量
waiting() {
        ngx_status_code || curl -s ${ngx_status} | grep "Waiting" | awk '{print $2}'
}

#使用位置变量控制脚本输出
case $1 in
        active)
                active;;
        accepts)
                accepts;;
        handled)
                handled;;
        requests)
                requests;;
        reading)
                reading;;
        writing)
                writing;;
        waiting)
                waiting;;
        *)
                echo "Unknown options"
esac

```

```python
chmod +x /etc/zabbix/script/nginx_status.sh
```

### 创建自定义监控项

{% hint style="success" %}

#### 说明：自定义监控项，格式为：UserParameter=<键值>,<命令>。

{% endhint %}

比如第一个自定义键值为：`nginx.active`，要执行的命令为执行`nginx_status.sh`这个脚本。

```python
vim /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf

UserParameter=nginx.active,bash /etc/zabbix/script/nginx_status.sh active
UserParameter=nginx.accepts,bash /etc/zabbix/script/nginx_status.sh accepts
UserParameter=nginx.handled,bash /etc/zabbix/script/nginx_status.sh handled
UserParameter=nginx.requests,bash /etc/zabbix/script/nginx_status.sh requests
UserParameter=nginx.reading,bash /etc/zabbix/script/nginx_status.sh reading
UserParameter=nginx.writing,bash /etc/zabbix/script/nginx_status.sh writing
UserParameter=nginx.waiting,bash /etc/zabbix/script/nginx_status.sh waiting
```

{% hint style="info" %}

#### 说明：添加完成以后，重启zabbix\_agentd才会生效。

{% endhint %}

## 六、Zabbix Server Web界面添加被监控主机

### 配置——主机群组——创建主机群组——输入组名&#x20;

要在Zabbix页面创建主机组，请执行以下步骤:

* 进入: 配置 → 主机组
* 单击页面右上角的创建主机群组
* 在表单中输入组的相关参数

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-MceWsYQ7CRN3z1CGDvJ%2F-McgTZkYlI1ult7_0DnQ%2Fimage.png?alt=media\&token=08e24cf4-bce8-443b-8a39-dd7ea28e9792)

### **配置——主机——创建主机**

按照以下步骤在Zabbix前端创建一台主机：

* 进入： 配置 → 主机
* 单击页面右上角 创建主机 (或者在主机名上单击以编辑一台已有的主机)
* 在表单中输入主机的相关参数

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McgTlYOgCBarMJ0reRt%2F-McgVgzB4jmJ1RUOud--%2Fimage.png?alt=media\&token=0d2aa174-ec74-4b2a-8275-4f711fa0f464)

### **配置——模板——创建模板**

要创建模板，请执行以下操作：

* 转到配置→模板
* 点击创建模板
* 编辑模板属性

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McnSw_eVfVmSgdeeJ0U%2F-McnW52eHF8SywxxSNvT%2Fimage.png?alt=media\&token=e9d70c19-3a3c-4d43-92cc-72041467a30d)

### **主机——监控项——创建监控项**

要在Zabbix管理页面创建一个监控项，请执行以下操作：

* 进入到: 配置 → 主机
* 在主机所在的行单击 监控项
* 点击屏幕右上角的创建监控项
* 输入表单中监控项的参数

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McnbqATYrir6der372r%2F-McnfPCmqwmrKyKkWkIh%2Fimage.png?alt=media\&token=8bddf82b-2a85-4bc0-9a9f-8bb3932b07ab)

### **主机——触发器——创建触发器**

配置一个触发器，进行下面步骤：

* 进入：配置 → 主机
* 点击主机一行的 触发器
* 点击右上角的 创建触发器（或者点击触发器名称去修改一个已存在的触发器）
* 在窗口中输入触发器的参数

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McksMxrzLr8cSgTV-uj%2F-Mcl1v9q5ypRD_6vAadS%2Fimage.png?alt=media\&token=4f97a0cf-83d0-476a-8f3a-5df796e20eb9)

### **主机——图形——创建图形**

* 前往 配置 → 主机 (或模板) 页；
* 点击所要创建图**形**的主机或模板旁的 图形链接；
* 在跳转的图表页的上，点击创建图表按钮；
* 编辑图表的属性。

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McksMxrzLr8cSgTV-uj%2F-Mcl2sA5380oSTHrcYEz%2Fimage.png?alt=media\&token=134e24a1-18e5-4eca-a4fb-12f26385338f)

## **七、在Zabbix Server 中添加告警媒介**

### **添加企业微信机器人告警脚本**

{% hint style="success" %}
**zabbix\_server.conf 文件中定义脚本目录，这里就选择了默认的目录**

#### AlertScriptsPath=/usr/lib/zabbix/alertscripts

{% endhint %}

#### 进入该定义的脚本存放路径下，创建用来推送告警消息的脚本

```python
vim /usr/lib/zabbix/alertscripts/wechat.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# zabbix企业微信报警
import requests, json, sys, os, datetime

#微信钩子机器人地址
webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxx"

#zabbix传过来的三个变量
user = sys.argv[1]
title = sys.argv[2]
text = sys.argv[3]

#每发送一次报警，就记一次日志
file = r"/var/log/zabbix/send2wechat.log"

#报警的信息
data = {
    "msgtype": "markdown",
    "markdown": {
        "content": title + "\n" + text
    }
}

#请求这个钩子机器人
headers = {'Content-Type': 'application/json'}
x = requests.post(url=webhook, data=json.dumps(data), headers=headers)
if os.path.exists(file):
    f = open(file, "a+")
else:
    f = open(file, "w+")
    f.write(" " + " - -" * 30)
    f.write("\n")

#记录日志
if x.json()["errcode"] == 0:
    f.write(" "+ str(datetime.datetime.now()) + " " + str(user) + " " + "发送成功" + " " + str(title) + "\n")
    f.close()
else:
    f.write(" "+ str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + " " + str(title) + "\n")
    f.close()
```

{% embed url="<https://work.weixin.qq.com/api/doc/90000/90136/91770#markdown%E7%B1%BB%E5%9E%8B>" %}

#### 赋予脚本执行权限

```python
chmod +x /usr/lib/zabbix/alertscripts/wechat.py   
```

#### 安装python3.9版本

```python
dnf -y install python39  
```

#### Python3安装requests模块

```python
pip3 install requests
```

#### 测试脚本，告警推送

```python
python3 /usr/lib/zabbix/alertscripts/wechat.py  您好，监控测试
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McjQ733br07FHqYnISB%2F-McjR5lzVrLn5E0HsRJJ%2Fimage.png?alt=media\&token=5cc35b1d-91fe-471f-a0bd-9733c84fe45a)

### **管理——报警媒介类型——创建媒介类型**

新建一个企业微信的报警，脚本名称就是我们脚本名 `wechat.py`

{% hint style="info" %}
参数：

* {ALERT.SENDTO}
* {ALERT.SUBJECT}
* {ALERT.MESSAGE}
  {% endhint %}

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McjSnLXU4uETuWnpLbB%2F-McjTH_TjoavgP9-EMLV%2Fimage.png?alt=media\&token=db5d2a9a-4e1f-4287-ae76-c3e17456e4d4)

### **管理——报警媒介类型——**&#x4D;essage templates

{% hint style="info" %}

#### 自定义消息模板， 参考[宏使用](https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location?s%5B%5D=alert\&s%5B%5D=sendto) <a href="#zi-ding-yi-xiao-xi-mo-ban" id="zi-ding-yi-xiao-xi-mo-ban"></a>

故障模板：

```python
主题：# 服务故障: <font color="warning">{EVENT.NAME}</font>
消息：
{
> 告警主机: **{HOST.NAME}**
> 主机地址: **{HOST.IP}**
> 监控项目: {ITEM.NAME}
> 当前取值: {ITEM.LASTVALUE}
> 告警等级: {TRIGGER.SEVERITY}
> 告警时间: {EVENT.DATE}-{EVENT.TIME}
> 事件ID: {EVENT.ID}
}
```

{% endhint %}

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McnvZC06ktAIVmQoQEU%2F-McnvrmfQl5sOMRTFEgD%2Fimage.png?alt=media\&token=7ab48c03-7ed2-4607-a728-1ba70d818a67)

#### 效果：

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McnsmLt5IbK3j5XmrSI%2F-Mcnv4UY9Rl-5vPQhzmT%2Fimage.png?alt=media\&token=07a70f87-5926-4f42-a52d-2cc240116c74)

{% hint style="info" %}
恢复故障模板

```python
主题：# 故障恢复: <font color="info">{EVENT.NAME}</font>
消息：
{
> 主机名称: **{HOST.NAME}**
> 主机地址: **{HOST.IP}**
> 告警名称: {EVENT.NAME}
> 持续时长: {EVENT.DURATION}
> 恢复时间: {EVENT.RECOVERY.DATE}-{EVENT.RECOVERY.TIME} 
> 当前状态: {TRIGGER.STATUS}
> 当前取值: {ITEM.LASTVALUE}
> 事件ID: {EVENT.ID}
}
```

{% endhint %}

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McnvZC06ktAIVmQoQEU%2F-Mcnvz_bHIj17sIp9z1J%2Fimage.png?alt=media\&token=15b173da-38e2-4d61-a501-8a2b2538f878)

**效果:**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McnsmLt5IbK3j5XmrSI%2F-McnvC0I0njlf9Ab9Y4p%2Fimage.png?alt=media\&token=7aa344b1-d457-41ea-90fa-4bf6cd62529a)

**管理 --> 报警 --> 媒介类型 --> 企业微信报警 --> Message templates --> 编辑 --> 更新**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-MclAn_6PUPx_ISR_hjM%2F-MclBNbJPGDgoeyDtLoe%2Fimage.png?alt=media\&token=164a43a8-264e-4b0a-8e78-16be1b35dc4c)

### **用户设置——报警媒介——添加媒介类型**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McjSnLXU4uETuWnpLbB%2F-McjU4z8zv9YKOEociij%2Fimage.png?alt=media\&token=23c246cd-2e87-4f1c-a1c0-1f75b34be7f9)

#### 更新告警媒介

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McjUIopnZ0dLZbAniMo%2F-McjUxoJ-t80SWcsBiLG%2Fimage.png?alt=media\&token=73495ac3-78df-4b1e-ba74-9e310698a3d0)

### **配置——动作——创建动作——添加触发器**

#### **配置动作**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-MckjXx3wRFf1ltvmLyg%2F-MckmH3IdW1Q4BzvXIuB%2Fimage.png?alt=media\&token=bde3b3b2-aeac-4bf8-ae6e-9bde2d4cbb96)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-MclBUvG_0tOe605hgdK%2F-MclDUY40Q0qIU9pTl-P%2Fimage.png?alt=media\&token=548dc7da-9689-4532-b088-43858974e5cb)

#### **修改操作 --> 步骤 1-0（无穷大）**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-MclBUvG_0tOe605hgdK%2F-MclDEXNb2XKMSTsP1g-%2Fimage.png?alt=media\&token=b08ea3e6-312f-4263-9ed4-76c600df683c)

## 八、测试故障，查看报表是否已经推送成功

```python
systemctl stop nginx
```

### **报表——动作日志**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-McoHVSOVCIXoAeKjhmn%2F-McoLhNoU687VYOkVbwe%2Fimage.png?alt=media\&token=df6e6d4e-69ce-45a4-a50a-dac9ead475a5)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hezhiqiang.gitbook.io/about-the-author/yun-wei-huan-jing-da-jian/centos-da-jian-zabbix-jian-kong-ping-tai.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
