# 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)
