Bootstrap

zabbix学习笔记——入门篇

目录

一、了解监控

监控的种类

二、zabbix监控

1、介绍zabbix

2、为什么选择zabbix

3、Zabbix可监控对象

4、zabbix监控方式

1.被动监控

2.主动监控

5、zabbix架构

1.zabbix sever

2.zabbix数据库存储

3.Zabbix Web 界面

4.Zabbix Proxy 代理服务器

5.Zabbix Agent 监控代理

6.Zabbix 数据流

6、zabbix常用术语

三、zabbix监控系统部署

1、实验准备

1.关闭所有服务器 防火墙和selinux

2.实验服务器配置

3.检查时间是否同步,各节点是否能互为通信。

 2、zabbix安装

1.获取zabbix源

 2.开始zabbix安装

 3、安装设置数据库

1.创建mariadb.repo源

2.安装mariadb

3.修改其配置文件

4.重启数据库

 5.创建数据库并授权

6.导入 Zabbix 服务表

4、配置server端

1.zabbix-server.conf文件配置监听和采样取数请求ip

2. zabbix-server.conf配置zabbix日志段

 3. zabbix-server.conf数据库相关设置

4.启动服务并查看状态

5、配置web GUI

1.查看web GUI 的配置文件

 2.编辑配置文件相关信息

 3.设置自启动并启动httpd服务80

 4.页面访问并初始化设置

6、配置 agent 端

1. 安装其所需的源

 2.修改配置文件

3.启动服务并查看状态

7、监控过程

1.修改密码及更改语言 

 2.创建主机及主机群

 3.监控项(items)

 4.触发器(trigger)

 5.定义动作(action)

 6.zabbix可视化

 7.模板(template)

8.宏(macro)

五、后续待更新...   


一、了解监控

监控的种类

- Cacti:Cacti 是一套基于 PHP、MySQL、SNMP 及 RRD Tool 开发的监测图形分析工具,Cacti 是使用轮询的方式由主服务器向设备发送数据请求来获取设备上状态数据信息的,如果设备不断增多,这个轮询的过程就非常的耗时,轮询的结果就不能即时的反应设备的状态了。

- Nagios:Nagios 是一款开源的免费网络监控报警服务,能有效监控 Windows、Linux 和 Unix 的主机状态,交换机、路由器和防火墙等网络设置,打印机、网络投影、网络摄像等设备。

- Ganglia:Ganglia 是 UC Berkeley 发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia 的核心包含 gmond、gmetad 以及一个 Web 前端。

- Zabbix:Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

二、zabbix监控

1、介绍zabbix

Zabbix是由Alexei Vladishev开发的一种网络监视、管理系统,基于Server-Client架构。可用于监视各种网络服务、服务器和网络机器等状态。

使用各种Database-end如MySQL, PostgresQL, sQLite, Oracle或 IBM DB2储存资料。Server端基于C语言、Web管理端frontend则是基于PHP所制作的。

Zabbix可以使用多种方式监视。可以只使用Simple Check 不需要安装Client端,亦可基于SMTP或HTTP…各种协议定制监视。

在客户端如UNIX,Windows中安装Zabbix Agent 之后,可监视 CPU Load、网络使用状况、硬盘容量等各种状态。而就算没有安装Agent 在监视对象中,Zabbix也可以经由SNMP、TCP、ICMP、利用IPMI、SSH、 telnet 对目标进行监视。

Zabbbix自带的ltem足够满足普通小公司的监控需求,对于大公司也可以设定自定义的ltem,自动生成报表,也有API可以和其他系统集成。

2、为什么选择zabbix

- 开源,无软件成本投入

- Server 对设备性能要求低

- 支持设备多,自带多种监控模板

- 支持分布式集中管理,有自动发现功能,可以实现自动化监控

- 开放式接口,扩展性强,插件编写容易

- 当监控的 item 比较多服务器队列比较大时可以采用主动状态,被监控客户端主动 从server 端去下载需要监控的 item 然后取数据上传到 server 端。 这种方式对服务器的负载比较小。

- Api 的支持,方便与其他系统结合

- zabbix可以满足理想化的监控系统需求

3、Zabbix可监控对象

- 数据库: MySQL,MariaDB,Oracle,SQL Server    agent

- 应用软件:Nginx,Apache,PHP,Tomcat                 agent

- 集群: LVS,Keepalived,HAproxy,RHCS,F5          agent

- 虚拟化: VMware,KVM,XEN ,docker,k8s             agent

- 操作系统:Linux,Unix,Windows性能参数              agent

- 硬件: 服务器,存储,网络设备 IPMI                   IPMI

- 网络: 网络环境(内网环境,外网环境)             SNMP   

4、zabbix监控方式

1.被动监控

被动检测:相对于agent而言;agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;

2.主动监控

主动检测:相对于agent而言;agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;主动监控能极大节约监控server 的资源。

5、zabbix架构

1.zabbix sever

Zabbix server 是 agent 程序报告系统可用性、系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。

2.zabbix数据库存储

所有配置信息和 Zabbix 收集到的数据都被存储在数据库中。

3.Zabbix Web 界面

为了从任何地方和任何平台都可以轻松的访问Zabbix, 我们提供基于Web的Zabbix界面。该界面是Zabbix Server的一部分,通常(但不一定)跟Zabbix Server运行在同一台物理机器上。

如果使用 SQLite,Zabbix Web 界面必须要跟Zabbix Server运行在同一台物理机器上。

4.Zabbix Proxy 代理服务器

Zabbix proxy 可以替Zabbix Server收集性能和可用性数据。Proxy代理服务器是Zabbix软件可选择部署的一部分;当然,Proxy代理服务器可以帮助单台Zabbix Server分担负载压力。

5.Zabbix Agent 监控代理

Zabbix agents监控代理 部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix Server。

6.Zabbix 数据流

监控方面,为了创建一个监控项(item)用于采集数据,必须先创建一个主机(host)。

告警方面,在监控项里创建触发器(trigger),通过触发器(trigger)来触发告警动作(action)。 因此,如果你想收到Server XCPU负载过高的告警,必须满足

- 为Server X创建一个host并关联一个用于对CPU进行监控的监控项(Item)。

- 创建一个Trigger,设置成当CPU负载过高时会触发

- Trigger被触发,发送告警邮件

6、zabbix常用术语

序号

术语

释义

1

主机 (host)

一台你想监控的网络设备,用IP或域名表示

2

主机组 (host group)

主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。

3

监控项 (item)

你想要接收的主机的特定数据,一个度量数据。

4

触发器 (trigger)

一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式 当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。

5

事件 (event)

单次发生的需要注意的事情,例如触发器状态改变或发现有监控代理自动注册

6

异常 (problem)

一个处在“异常”状态的触发器

7

动作 (action)

一个对事件做出反应的预定义的操作。

一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成

8

升级 (escalation)

一个在动作内执行操作的自定义场景; 发送通知/执行远程命令的序列

9

媒介 (media)

发送告警通知的手段;告警通知的途径

10

通知 (notification)

利用已选择的媒体途径把跟事件相关的信息发送给用户

11

远程命令 (remote command)

一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令

12

模版 (template)

一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLDWeb场景)的集合

模版的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。

13

应用 (application)

一组监控项组成的逻辑分组

14

web 场景 (web scenario)

利用一个或多个HTTP请求来检查网站的可用性

15

前端 (frontend)

Zabbix提供的web界面

16

Zabbix API

Zabbix API允许你使用JSON RPC协议 (是一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容透过 JSON 为主) 来创建、更新和获取Zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务

17

Zabbix server

Zabbix软件实现监控的核心程序,主要功能是与Zabbix proxiesAgents进行交互、触发器计算、发送告警通知;并将数据集中保存等

18

Zabbix agent

一个部署在监控对象上的,能够主动监控本地资源和应用的程序

Zabbix agent 部署在监控的目标上,主动监测本地的资源和应用(硬件驱动,内存,处理器统计等)

Zabbix agent收集本地的操作信息并将数据报告给*Zabbix server用于进一步处理。一旦出现异常 (比如硬盘空间已满或者有崩溃的服务进程), Zabbix server会主动警告管理员指定机器上的异常。. Zabbix agents 的极端高效缘于它可以利用本地系统调用来完成统计数据的收集。

19

被动(passive)和主动(active)检查

Zabbix agents 可以执行被动和主动两种检查方式

1、被动检查(passive check) 模式中 agent 应答数据请求,Zabbix server(或者proxy)询问agent数据,如CPU 的负载情况,然后 Zabbix agent 回送结果。

2、主动检查(Active checks) 处理过程将相对复杂。 Agent 必须首先从 Zabbix sever 索取监控项列表以进行独立处理,然后周期性地发送新的值给server。

执行被动或主动检查是通过选择相应的监测项目类型来配置的。item type. Zabbix agent 处理监控项类型有 Zabbix agent 和 Zabbix agent (active)。

20

Zabbix proxy

一个帮助 Zabbix Server 收集数据,分担Zabbix Server的负载的程序;

Zabbix Proxy 是一个可以从一个或多个受监控设备收集监控数据,并将信息发送到Zabbix sever的进程,基本上是代表 sever工作的。 所有收集的数据都在本地进行缓存,然后传送到 proxy 所属的 Zabbix sever。*部署 Proxy 是可选的,但是可能非常有益于分散单个 Zabbix sever 的负载。 如果只有 proxy 收集数据,sever上的进程就会减少 CPU 消耗和磁盘 I / O 负载。

Zabbix proxy 是完成远程区域、分支机构、没有本地管*理员的网络的集中监控的理想解决方案。

Zabbix proxy需要使用独立的数据库。

三、zabbix监控系统部署

1、实验准备

        系统服务器3台(一台监控,两台被监控节点)、 配置好yum源、 防火墙关闭、 各节点时间服务同步、 各节点之间可以通过主机名互相通信。

1.关闭所有服务器 防火墙和selinux

[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's/SELINNX=enforcing/SELINUX=disbled/' /etc/selinux/config
[root@localhost ~]# systemctl stop firewalld.service

2.实验服务器配置

机器名称 ip配置服务角色备注
server192.168.8.**zabbix-server开启监控
node1192.168.8.**zabbix-agent开启
node2192.168.8.**zabbix-agent开启

注:在/etc/hosts 配置三台服务器的hostname

3.检查时间是否同步,各节点是否能互为通信。

 2、zabbix安装

1.获取zabbix源

(这里使用为aliyun资源)

#获取zabbix源
[root@localhost ~]# wget https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
--2023-01-13 23:26:13--  https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 113.219.178.242, 106.60.72.248, 106.60.72.239, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|113.219.178.242|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:14084 (14K) [application/x-rpm]
正在保存至: “zabbix-release-4.4-1.el7.noarch.rpm”

100%[==========================================================>] 14,084      --.-K/s 用时 0.1s    

2023-01-13 23:26:14 (104 KB/s) - 已保存 “zabbix-release-4.4-1.el7.noarch.rpm” [14084/14084])
[root@localhost ~]# ls zabbix-release-4.4-1.el7.noarch.rpm 
zabbix-release-4.4-1.el7.noarch.rpm
#获取zabbix源后,安装yum库
[root@localhost ~]# rpm -ivh zabbix-release-4.4-1.el7.noarch.rpm 
警告:zabbix-release-4.4-1.el7.noarch.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY
准备中...                          ################################# [100%]
	
......

#下一步更新域名库
[root@localhost ~]# yum repolist 
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                                        | 3.6 kB  00:00:00     
extras                                                                      | 2.9 kB  00:00:00     
updates                                                                     | 2.9 kB  

...........

注:三台服务器都需配置zabbix. repo

 2.开始zabbix安装

(注意安装过程会有提升未安装成功的包)

[root@localhost ~]# yum -y install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql zabbix-web zabbix-web-mysql 
                    
......

完毕!

#注意:安装过程中会提示未安装的软件包(或结果会显示安装成功的包),我这里zabbix-web和zabbix-server-mysql未安装成功
#手动安装未成功的包
#获取zabbix-web和zabbix-server-mysql源
[root@localhost ~]# wget https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-web-4.4.0-1.el7.noarch.rpm

[root@localhost ~]# wget https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-server-mysql-4.4.0-1.el7.x86_64.rpm

#安装zabbix-web和zabbix-server-mysql
[root@localhost ~]# yum -y localinstall zabbix-web-4.4.0-1.el7.noarch.rpm zabbix-web-mysql-4.4.0-1.el7.noarch.rpm 

 3、安装设置数据库

1.创建mariadb.repo源

[root@localhost ~]# vim /etc/yum.repos.d/mariadb.repo
内容写入:
[mariadb]
name = MariaDB 
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64 
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB 
gpgcheck=1

2.安装mariadb

[root@localhost ~]# yum install -y MariaDB-server MariaDB-client

3.修改其配置文件

[root@localhost ~]# vim /etc/my.cnf.d/server.cnf 

在【mysqld】下配置以下内容

[mysqld]
skip_name_resolve = ON          # 跳过主机名解析
innodb_file_per_table = ON      # 开启独立表空间

innodb_buffer_pool_size = 256M  # 缓存池大小
max_connections = 2000          # 最大连接数
log-bin = master-log            # 开启二进制日志

4.重启数据库

[root@localhost ~]# systemctl restart mariadb
#注:这里进行初始化数据库
[root@localhost ~]# mysql_secure_installation 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] y
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

 5.创建数据库并授权

[root@localhost ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.4.27-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>  create database zabbix character set 'utf8';
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> grant all on zabbix.* to 'admin'@'192.168.8.%' identified by 'zabbix';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]>  grant all on zabbix.* to 'admin'@'%' identified by 'zabbix';
Query OK, 0 rows affected, 1 warning (0.001 sec)
#授权zabbix用户“admin”账号和“zabbix”密码

MariaDB [(none)]> flush privileges; 
Query OK, 0 rows affected (0.002 sec)
#刷新授权
MariaDB [(none)]> exit
Bye

6.导入 Zabbix 服务表

- 首先查看zabbix-server-mysql包有什么

[root@localhost ~]#  rpm -ql zabbix-server-mysql
/etc/logrotate.d/zabbix-server
/etc/zabbix/zabbix_server.conf
/usr/lib/systemd/system/zabbix-server.service
/usr/lib/tmpfiles.d/zabbix-server.conf
/usr/lib/zabbix/alertscripts
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-4.4.0
/usr/share/doc/zabbix-server-mysql-4.4.0/AUTHORS
/usr/share/doc/zabbix-server-mysql-4.4.0/COPYING
/usr/share/doc/zabbix-server-mysql-4.4.0/ChangeLog
/usr/share/doc/zabbix-server-mysql-4.4.0/NEWS
/usr/share/doc/zabbix-server-mysql-4.4.0/README
/usr/share/doc/zabbix-server-mysql-4.4.0/create.sql.gz
/usr/share/man/man8/zabbix_server.8.gz
/var/log/zabbix
/var/run/zabbix

 注:我们在此  /usr/share/doc/zabbix-server-mysql-4.4.0/create.sql.gz 路径下是用来生成表的各种脚本。

解压并运行create.sql.gz生成所需表

[root@localhost ~]# gzip -d /usr/share/doc/zabbix-server-mysql-4.4.0/create.sql.gz
[root@localhost ~]# cd /usr/share/doc/zabbix-server-mysql-4.4.0/
[root@localhost zabbix-server-mysql-4.4.30]# ls
AUTHORS  ChangeLog  COPYING  create.sql  double.sql  NEWS  README

 查看表头发现没有创建数据库的命令,这正是手动创建数据库的原因。需在表头添加使用库

[root@localhost zabbix-server-mysql-4.4.0]# vim create.sql 
USE zabbix;
CREATE TABLE `users` (
        `userid`                 bigint unsigned                           NOT NULL,
        `alias`                  varchar(100)    DEFAULT ''                NOT NULL,
        `name`                   varchar(100)    DEFAULT ''                NOT NULL,
        `surname`                varchar(100)    DEFAULT ''                NOT NULL,
        `passwd`                 varchar(60)     DEFAULT ''                NOT NULL,
......

#在表头添加一行 USE zabbix 意为使用zabbix库

把需要的表导入库

[root@localhost zabbix-server-mysql-5.0.30]# mysql -uadmin -p zabbix < create.sql
Enter password:

 完成后,进入数据库查看

root@localhost zabbix-server-mysql-5.0.30]# mysql
MariaDB [(none)]> show databases;    #查看可用库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| zabbix             |
+--------------------+
4 rows in set (0.140 sec)

MariaDB [(none)]> use zabbix;        #进入库       
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [zabbix]> show tables;       #查看表
+----------------------------+
| Tables_in_zabbix           |
+----------------------------+
| acknowledges               |
| actions                    |
| alerts                     |
| application_discovery      |
| application_prototype      |
| application_template       |
.......

 到这里就完成数据导入了。

4、配置server端

数据库准备完成后,对server端的配置文件进行相应的修改。

1.zabbix-server.conf文件配置监听和采样取数请求ip

[root@localhost zabbix]# cd /etc/zabbix/
[root@localhost zabbix]# cp zabbix_server.conf{,.bak}  #对原配置文件进行备份
[root@localhost zabbix]# ll
总用量 64
[root@localhost zabbix]# ls
web                 zabbix_agentd.d     zabbix_server.conf.bak
zabbix_agentd.conf  zabbix_server.conf
root@localhost zabbix]# vim zabbix_server.conf

......

配置文件中,对下面两个参数开放并配置参数:

ListenPort=10051           #默认监听端口

SourceIP=192.168.8.129     #数据请求IP

2. zabbix-server.conf配置zabbix日志段

- 默认存放日志存放在 LogFile=/var/log/zabbix/zabbix_server.log 中,也可以自己设置。

a.关于日志滚动的设置

LogFile=/var/log/zabbix/zabbix_server.log

### Option: LogFileSize
#   Maximum size of log file in MB.
#   0 - disable automatic log rotation.    #可设置数据文件最大到多少时自动滚动
#
# Mandatory: no
# Range: 0-1024
# Default:
# LogFileSize=1                            #logfilesize默认1为滚动,设置0为不滚动

LogFileSize=0

 b.关于日志级别

        一共有6个级别。可以根据自己的需要设置级别。其中0表示输出最少的信息,5表示输出最详细的信息,默认值为3,设置为3的话就表示,0、1、2、3四个级别都显示。

### Option: DebugLevel
#       Specifies debug level:
#       0 - basic information about starting and stopping of Zabbix processes   
#       1 - critical information      
#       2 - error information
#       3 - warnings
#       4 - for debugging (produces lots of information)
#       5 - extended debugging (produces even more information)
#
# Mandatory: no
# Range: 0-5
# Default:
# DebugLevel=3

 3. zabbix-server.conf数据库相关设置

  DBHost=192.168.8.**            #数据库对外的主机

  DBName=zabbix                   #数据库名称

  DBUser=admin                     #数据库用户

  DBPassword=zabbix            #数据库密码

  DBPort=3306                        #数据库启动端口

 配置完成后查看配置文件中关键的配置段

[root@localhost zabbix]# cat zabbix_server.conf | grep -v '#' | grep -v '^$'
ListenPort=10051
SourceIP=192.168.8.**
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBHost=192.168.8.**
DBName=zabbix
DBUser=admin
DBPassword=zabbix
DBPort=3306
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts       #用户定义的脚本存放位置
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

4.启动服务并查看状态

[root@localhost zabbix]# systemctl start zabbix-server      #启动服务
[root@localhost zabbix]# systemctl status zabbix-server     #查看服务运行状态
● zabbix-server.service - Zabbix Server
   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; vendor preset: disabled)
   Active: active (running) since 三 2023-01-18 00:03:16 CST; 9s ago
  Process: 22984 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
 Main PID: 22986 (zabbix_server)
    Tasks: 38
   CGroup: /system.slice/zabbix-server.service
           ├─22986 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
           ├─22989 /usr/sbin/zabbix_server: configuration syncer [synced configuration in 0.05034...
           ├─22996 /usr/sbin/zabbix_server: alert manager #1 [sent 0, failed 0 alerts, idle 5.114...
           ├─22997 /usr/sbin/zabbix_server: alerter #1 started
......
1月 18 00:03:16 localhost.localdomain systemd[1]: Started Zabbix Server.
[root@localhost zabbix]# ss -unltp | grep 10051      #确认服务端口状态
tcp    LISTEN     0      128       *:10051                 *:*                   users:
tcp    LISTEN     0      128    [::]:10051              [::]:*                   users:

5、配置web GUI

1.查看web GUI 的配置文件

[root@localhost ~]#  rpm -ql zabbix-web | less
/etc/httpd/conf.d/zabbix.conf                   #web GUI配置文件路径
/etc/zabbix/web
/etc/zabbix/web/maintenance.inc.php
/etc/zabbix/web/zabbix.conf.php
/usr/share/doc/zabbix-web-4.4.0
/usr/share/doc/zabbix-web-4.4.0/AUTHORS
/usr/share/doc/zabbix-web-4.4.0/COPYING
/usr/share/doc/zabbix-web-4.4.0/ChangeLog
/usr/share/doc/zabbix-web-4.4.0/NEWS
/usr/share/doc/zabbix-web-4.4.0/README
/usr/share/zabbix
......

 2.编辑配置文件相关信息

 a.设置时区

root@localhost ~]# vim /etc/httpd/conf.d/zabbix.conf

Alias /zabbix /usr/share/zabbix

<Directory "/usr/share/zabbix">
    Options FollowSymLinks
    AllowOverride None
    Require all granted

    <IfModule mod_php5.c>
        php_value max_execution_time 300    #最大脚本执行时长
        php_value memory_limit 128M         #内存大小
        php_value post_max_size 16M
        php_value upload_max_filesize 2M
        php_value max_input_time 300
        php_value max_input_vars 10000
        php_value always_populate_raw_post_data -1
        # php_value date.timezone Europe/Riga  #设置时区
        php_value date.timezone Asia/Shanghai
    </IfModule>

同时在php配置相关文件中设置时区:

[root@localhost ~]# vim /etc/php.ini
.......
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
date.timezone = Asia/Shanghai
......

 3.设置自启动并启动httpd服务80

[root@localhost ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl start httpd

 并查看httpd服务端口是否被占用(默认为80监听端口,注意Nginx默认服务端口也是80)

[root@localhost ~]# ss -tunp | grep 80
[root@localhost ~]# netstat -tunlp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      48076/httpd         
udp6       0      0 fe80::8f87:e3b9:f64:123 :::*                                28815/ntpd          

 4.页面访问并初始化设置

在浏览器访问http://192.168.8.**/​​​​​​zabbix 进入开始初始化设置,进入首界面确认下一步next step

 第二个是检查需要的依赖,然后下一步 点击next step

下一步对数据库进行配置,根据自己的设置,确认后 next step(database port 0为默认端口)

 这一步可设置Zabbix服务器详细信息,完成配置后下一步(host主机名/ip均可)

 这里是对前面配置信息再次确认,如果有错点back返回修改,没错继续下一步

 出现此界面,就初始化完成了

点击完成,就会跳转到登录界面,初始化后有一个默认的账户密码(账户:admin 密码:zabbix) 

 

 输入账户密码,登录后就进入到首页界面中

6、配置 agent 端

注:在被监控主机安装agent,设置server,并添加到server端,将其纳入监控中

1. 安装其所需的源

(如果在前面部署zabbix时已经一起装过就不用重复安装,但其他服务器都需安装

#在不确定自己是否已经安装,先确认
[root@localhost ~]# rpm -q zabbix-agent
未安装软件包 zabbix-agent 
[root@localhost ~]# rpm -q zabbix-sender
未安装软件包 zabbix-sender 

#确定未安装后,再下载
#获取源
[root@localhost zabbix]# wget https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.0-1.el7.x86_64.rpm
......
[root@localhost zabbix]# wget https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-sender-4.4.0-1.el7.x86_64.rpm
......

#把服务包进行安装
[root@localhost zabbix]# rpm -ivh zabbix-agent-4.4.0-1.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:zabbix-agent-4.4.0-1.el7         ################################# [100%]
[root@localhost zabbix]# rpm -ivh zabbix-sender-4.4.0-1.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:zabbix-sender-4.4.0-1.el7        ################################# [100%]

 2.修改配置文件

a.确认配置文件

[root@localhost zabbix]# rpm -ql  zabbix-agent
/etc/logrotate.d/zabbix-agent
/etc/zabbix/zabbix_agentd.conf         #配置文件路径 
/etc/zabbix/zabbix_agentd.d
/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
/usr/lib/systemd/system/zabbix-agent.service
/usr/lib/tmpfiles.d/zabbix-agent.conf
/usr/sbin/zabbix_agentd
/usr/share/doc/zabbix-agent-4.4.0
/usr/share/doc/zabbix-agent-4.4.0/AUTHORS
/usr/share/doc/zabbix-agent-4.4.0/COPYING
/usr/share/doc/zabbix-agent-4.4.0/ChangeLog
/usr/share/doc/zabbix-agent-4.4.0/NEWS
/usr/share/doc/zabbix-agent-4.4.0/README
/usr/share/man/man8/zabbix_agentd.8.gz
/var/log/zabbix
/var/run/zabbix

 b.编辑配置文件,修改相关配置需求

[root@localhost zabbix]# cd /etc/zabbix/
[root@localhost zabbix]# cp zabbix_agentd.conf{,.bak}    #备份原始配置文件
[root@localhost zabbix]# vim /etc/zabbix/zabbix_agentd.conf
......
#1.找到server段,配置指明服务器
### Option: Server
#       List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
#       Incoming connections will be accepted only from the hosts listed here.
#       If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
#       and '::/0' will allow any IPv4 or IPv6 address.
#       '0.0.0.0/0' can be used to allow any IPv4 address.
#       Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
#
# Mandatory: yes, if StartAgents is not explicitly set to 0
# Default:
# Server=

#Server=127.0.0.1
Server=192.168.8.**

#2.找listenporrt段,配置监听端口
### Option: ListenPort
#       Agent will listen on this port for connections from the server.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# ListenPort=10050
ListenPort=10050

#3.配置ListenIP监听地址,0.0.0.0表示本机所有地址
### Option: ListenIP
#       List of comma delimited IP addresses that the agent should listen on.
#       First IP address is sent to Zabbix server if connecting to it to retrieve list of active checks.
#
# Mandatory: no
# Default:
# ListenIP=0.0.0.0
ListenIP=0.0.0.0

#4.配置StartAgents用于优化,也可不用管
### Option: StartAgents
#       Number of pre-forked instances of zabbix_agentd that process passive checks.
#       If set to 0, disables passive checks and the agent will not listen on any TCP port.
#
# Mandatory: no
# Range: 0-100
# Default:
# StartAgents=3
StartAgents=3

#5.配置ServerActive作用于主动监控时的服务器
### Option: ServerActive
#       List of comma delimited IP:port (or DNS name:port) pairs of Zabbix servers and Zabbix proxies for active checks.
#       If port is not specified, default port is used.
#       IPv6 addresses must be enclosed in square brackets if port for that host is specified.
#       If port is not specified, square brackets for IPv6 addresses are optional.
#       If this parameter is not specified, active checks are disabled.
#       Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
#
# Mandatory: no
# Default:
# ServerActive=

#ServerActive=127.0.0.1
ServerActive=192.168.8.129

#配置hostname便于server端识别的名称
### Option: Hostname
#       Unique, case sensitive hostname.
#       Required for active checks and must match hostname as configured on the server.
#       Value is acquired from HostnameItem if undefined.
#
# Mandatory: no
# Default:
# Hostname=

Hostname=Zabbix

 完成配置后,wq保存。

3.启动服务并查看状态

[root@localhost zabbix]# systemctl start zabbix-agent
[root@localhost zabbix]# systemctl status zabbix-agent
● zabbix-agent.service - Zabbix Agent
   Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2023-01-19 12:14:05 CST; 13s ago
  Process: 70654 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
 Main PID: 70657 (zabbix_agentd)
    Tasks: 6
   CGroup: /system.slice/zabbix-agent.service
           ├─70657 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
           ├─70658 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
           ├─70659 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
           ├─70660 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
           ├─70661 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
           └─70662 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]

1月 19 12:14:05 localhost.localdomain systemd[1]: Starting Zabbix Agent...
1月 19 12:14:05 localhost.localdomain systemd[1]: Started Zabbix Agent.
[root@localhost zabbix]# ss -tunl | grep 10050
tcp    LISTEN     0      128       *:10050                 *:* 

注:以上就成功启动,可以去server端添加主机了,其他服务器都进行同样的操作配置就行,但配置文件中的 Hostname 要设为对应主机名。

7、监控过程

1.修改密码及更改语言 

 安全起见最好修改密码

 2.创建主机及主机群

1)定义一个主机群

在配置栏下主机群组选项卡下点击“创建主机群组”按钮

 创建一个主机群组,填写完成后更新添加

 2)添加主机

点击主机选项卡,创建主机,根据内容填写后添加

 3.监控项(items)

1)简介 

点击zabbix-server 的监控项,即可创建监控项,首先创建应用集;应用集一般配合监控项使用,是多个同类型的监控项的分类目录。

创建应用集

2) 定义不带参数的监控项

这里添加的是设备(cpu)的中断数

 - 关于key值,可以在网页上设置(服务器自动执行),也可以使用命令来获取

[root@localhost zabbix]# zabbix_get -s 192.168.8.1** -p 10050 -k "system.cpu.intr"
22313501

 在agent端也可以使用命令查看intr的速率变化

[root@localhost zabbix]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1967536   2116 1008404    0    0     2    58   53   92  0  0 100  0  0
 0  0      0 1967536   2116 1008436    0    0     0   192  212  375  0  0 100  0  0
 0  0      0 1967536   2116 1008444    0    0     0  1297  301  646  0  1 99  0  0
 0  0      0 1967412   2116 1008444    0    0     0   140  174  312  0  0 100  0  0
 0  0      0 1967412   2116 1008444    0    0     0   140  212  370  0  0 100  0  0

#in 字段下值就是速率变化

 设置监控项进程

 定义完成,回到所有主机,等待5秒,可以看到,zabbix-server节点后面的选项已经变成绿色

 点击最新数据,选择要查看主机,应用一下,就能看到数据状态

 3)定义带参数的监控项

按照前面步骤到创建监控项(这里添加的监控项为“检查 TCP 端口 是否处于侦听状态”和“网络接口上传流量统计”)

注: [] 就是需要参数的意思,里面的值即为参数;
        <> 为不可省略的

 - 监控项:检查 TCP 端口 是否处于侦听状态

 进程设置(根据key的进程需求设置,监听端口不需要设置进程)

 - 监控项:网络接口上传流量统计

注:key的参数值解释

       if 表示是接口名; 
       <mode> 表示是哪种模式,包括但不限于:packets(包)、bytes(字节)、errors(错误)、dropped(丢包)、overuns等等(上述内容通过 ifconfig 查看)

 进程设置

 通过命令查看

[root@localhost zabbix]# zabbix_get -s 192.168.8.1** -p 10050 -k "net.if.in[eno16777736,packets]"
123613

 通过查看网页的显示情况:检测 ---> 最新数据 ---> Network Interface Stats(图形)

 - 中文乱码问题解决

Zabbix监控图形页面中文显示异常,具体为显示为方块,如图

 解决方法

#找到zabbix安装位置
[root@localhost zabbix]# whereis zabbix
zabbix: /usr/lib/zabbix /etc/zabbix /usr/share/zabbix
[root@localhost zabbix]# ls /usr/share/zabbix/
actionconf.php                 adm.valuemapping.php  chart2.php       correlation.php              host_prototypes.php  items.php        overview.php       setup.php               triggers.php
adm.gui.php                    adm.workingtime.php   chart3.php       discoveryconf.php            host_screen.php      js               queue.php          slideconf.php           usergrps.php
adm.housekeeper.php            api_jsonrpc.php       chart4.php       disc_prototypes.php          hosts.php            jsLoader.php     report2.php        slides.php              zabbix.php
adm.iconmapping.php            app                   chart5.php       favicon.ico                  httpconf.php         jsrpc.php        report4.php        srv_status.php
adm.images.php                 applications.php      chart6.php       graphs.php                   httpdetails.php      latest.php       robots.txt         sysmap.php
adm.macros.php                 assets                chart7.php       history.php                  image.php            local            screenconf.php     sysmaps.php
adm.other.php                  audio                 chart.php        host_discovery.php           imgstore.php         locale           screenedit.php     templates.php
adm.regexps.php                auditacts.php         charts.php       hostgroups.php               include              maintenance.php  screen.import.php  toptriggers.php
adm.triggerdisplayoptions.php  auditlogs.php         conf             hostinventoriesoverview.php  index_http.php       map.import.php   screens.php        tr_events.php
adm.triggerseverities.php      browserwarning.php    conf.import.php  hostinventories.php          index.php            map.php          services.php       trigger_prototypes.php

#注意这里没有fonts目录,查找fonts字体文件目录
[root@localhost zabbix]# find / -name fonts
/boot/grub2/fonts
/etc/fonts
/usr/lib64/libreoffice/share/fonts
/usr/lib64/firefox/fonts
/usr/share/fonts
/usr/share/X11/fonts
/usr/share/httpd/noindex/css/fonts
/usr/share/zabbix/assets/fonts      #此目录下graphfont.ttf文件为字体文件
/usr/share/yelp/mathjax/fonts
/usr/share/yelp/mathjax/jax/output/HTML-CSS/fonts
[root@localhost fonts]# ll
总用量 0
lrwxrwxrwx. 1 root root 33 1月  14 02:02 graphfont.ttf -> /etc/alternatives/zabbix-web-font

 使用xftp等工具把windows中文字体上传到/usr/share/zabbix/assets/fonts/文件夹。选择一个常规的中文字体上传服务器的目录(这里我使用的是仿宋,注意不要花里胡哨的中文字体)

注:如果不知道windows字体所在目录就查找fonts字体文件夹

 上传完成后删除原来的字体链接并创建新的链接

[root@localhost fonts]# ll
总用量 10332
lrwxrwxrwx. 1 root root       33 1月  14 02:02 graphfont.ttf -> /etc/alternatives/zabbix-web-font
#根据链接路径删除旧链接
[root@localhost fonts]# rm -f /etc/alternatives/zabbix-web-font 
#创建新的链接
[root@localhost fonts]# ln -s /usr/share/zabbix/assets/fonts/simfang.ttf /etc/alternatives/zabbix-web-font
#重启zabbix-server服务
[root@localhost fonts]# systemctl restart zabbix-server.service 
[root@localhost fonts]# systemctl status zabbix-server.service 
● zabbix-server.service - Zabbix Server
   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; vendor preset: disabled)
   Active: active (running) since 日 2023-01-29 18:15:58 CST; 35s ago
  Process: 49287 ExecStop=/bin/kill -SIGTERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 49291 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
 Main PID: 49293 (zabbix_server)
    Tasks: 38
   CGroup: /system.slice/zabbix-server.service
           ├─49293 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
           ├─49296 /usr/sbin/zabbix_server: configuration syncer [waiting 60 sec for processes]
           ├─49297 /usr/sbin/zabbix_server: housekeeper [startup idle for 30 minutes]
           ├─49298 /usr/sbin/zabbix_server: timer #1 [updated 0 hosts, suppressed 0 events in 0.103974 sec, idle 59 sec]
           ├─49299 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000441 sec, idle 5 sec]
......

 再次刷新查看界面,中文字体恢复正常

 4)快速定义类似指标

例如:前面添加了一个名为net_if_in_packets 网络接口上传流量统计,我们要添加一个回传流量统计的监控项,就没必要重新填写添加

 又例如把网络接口流量统计模式设置为bytes  同样上传可以按照上述操作把名称改为net_if_in_bytes,修改key为net.if.in[eno16777736,bytes],再修改描述信息server net input bytes /s,完成添加。回传修改同理。

5)删除监控项

 6)监控项存储的值

对于监控项存储的值,老版本只有三种方式:

As is: 不对数据做任何处理(存储的为原始值)

Delta:(simple change)(变化),本次采样减去前一次采样的值的结果

Delta:(speed per second)(速率),本次采样减去前一次采样的值,再除以经过的时长;

在3.4版本后有了更多的形式:

文本、结构化数据、算法、更改、数字系统、Custom scripts、Validation、Throttling等。

 4.触发器(trigger)

 1)简介

当采集的值定义完了以后,就可以来定义触发器了。触发器的定义是:界定某特定的item采集到的数据的非合理区间或非合理状态。通常为逻辑表达式。

逻辑表达式(阈值):通常用于定义数据的不合理区间,其结果如下:

        · OK (不符合条件):正常状态 --> 较老的zabbix版本,其为FALSE;

        · PROBLEM(符合条件):非正常状态 --> 较老的zabbix版本,其为TRUE;

评定采样数值是否为合理区间的比较稳妥的方法是——根据最后N次的平均值来判定结果;这个最后N次通常有两种定义方式:

        · 最近N分钟所得结果的平均值

        · 最近N次所得结果的平均值

触发器存在可调用的函数:

函数释义
nodata()是否采集到数据,采集不到则为异常
last()最近几次
date()时间,返回当前的时间,格式YYYYMMDD
time()返回当前的时间,HHMMSS格式的当前时间
now()返回距离Epoch(1970年1月1日00:00:00UTC)时间的秒数
dayofmonth()返回当前是本月的第几天

注:能用数字的就不要用字符串

2)触发器表达式

基本的触发器表达式格式如下:

{<server>:<key>.<function>(<parameter>)}<operator><constant>

 格式释义:

server:主机名称;

key:主机上关系的相应监控项的key;

function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采取的数据、当前时间及其它因素进行;

parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用“#”做为前缀,则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;

目前触发器所支持的函数有avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum等。此外,avg、count、last、min和max还支持使用第二个参数,用于完成时间限定;例如,max(1h,7d)将返回一周之前的最大值

表达式所支撑的运算符及其功能:

priorityoperatordefinition
1/Division
2*Multiplication
3-Arithmetical minus
4+Arithmetical plus
5<Less than. The operator is defined as: A<B <=>  (A<B+0.000001)
6>More than. The operator is defined as: A>B <=>  (A>B+0.000001)
7#(不等于)Not equal. The operator is defined as: A#B <=> (A<=B-0.000001) | (A>=B+0.000001)
8=Is equal. The operator is defined as: A=B <=> (A=B-0.000001) & (A<B+0.000001)
9&Logical AND
10|Logical OR

 3)定义一个触发器

查看net_if_in_packets的值,以其为标准确定非正常的值

 定义一个触发器:进入:配置 ---> 主机 ---> zabbix-server ---> 触发器 ---> 创建触发器

 监控项这里是net_if_in_packets,功能选择last()...,间隔时间根据监控项设置时长5s,结果因为触发是最大值时所以运算符选择 ">" 值为图形最大值15pkts/sec,得出上图表达式

 触发创建好后再创建一个恢复表达式

 填写完成后,点击添加就创建好了。

 在监控过程中如果有大于15的就会报警

4)触发器的依赖关系

 触发器彼此之间可能会存在依赖关系的,一旦某一个触发器被触发了,那么依赖这个触发器的其余触发器都不需要再报警。

多台主机是通过交换机的网络连接线来实现被监控的。如果交换机出了故障,我们的主机自然也无法继续被监控,如果此时,所有主机统统报警,想想也是一件很可怕的事情。要解决这样的问题,就是定义触发器之间的依赖关系,当交换机挂掉,只有自己报警就可以了,其余的主机就不需要在报警了。这样,也更易于我们判断真正故障所在。

注意:目前zabbix不能够直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义。

定义一个依赖关系:打开任意一个触发器,上面就有依赖关系,我们进行定义即可:

 5.定义动作(action)

1)简介

· 需要基于一个对应的事件作为条件来指明该做什么,一般就是执行远程命令或者发警报。

· 有一个告警升级的机制,所以,当发现问题的时候,一般是先执行一个远程操作命令,如果能够解决问题,就会发一个恢复操作的讯息给接收人,如果问题依然存在,则会执行发警报的操作,一般默认的警报接收人是当前系统中有的 zabbix 用户,所以当有人需要收到警报操作的话,则需要把它加入我们的定义之中。

· 每一个用户也应该有一个接收告警信息的方式,即媒介,就像接收短信是需要有手机号的一样。

· 每一个监控主机,能够传播告警信息的媒介有很多种,就算每一种大的媒介,能够定义出来的实施媒介也有很多种。而对于一个媒介来说,每一个用户都有一个统一的或者不同的接收告警信息的端点,我们称之为目标地或者目的地。

综上为了能够发告警信息

第一,要事先定义一个媒介;

第二,还要定义这个媒介上用户接收消息的端点(当然,在用户上,我们也称之为用户的媒介)

系统内建的媒介类型:

 注意:同一个类型也可以定义多个,以 Email 为例,可以定义一个腾讯的服务器,一个网易的服务器,一个阿里的服务器等等。

2)定义一个媒介(media)

以email为例,创建一个本地邮箱

 基于本地的一个用户给另一用户发邮件无需认证

 注:本地邮箱现在只能发送给本地用户,不能发给公共邮箱了

 媒介定义好后,让用户接收到邮件,比如admin用户接收邮件,具体操作:

进入 管理 ---> 用户 ---> Admin ---> 报警媒介

 添加一条进来:

 注:现在为了放在随意给用户发邮件也祛除了对公有发送邮件的方式,所以像直接添加收件人root@localhost是无效的,只能建其他的,这里添加是为了展示效果。

3)定义一个动作(action)

动作是在某些特定条件下触发的,比如,某个触发器被触发了,就会触发动作。

现在基于redis来定义一个动作。

在 agent 端使用 yum 安装一下 redis

[root@localhost ~]# yum install redis -y

修改配置文件:

[root@localhost ~]# vim /etc/redis.conf 
bind 0.0.0.0        #不做任何认证操作

 启动服务检查端口:

[root@localhost ~]# systemctl start redis
[root@localhost ~]# ss -unltp | grep redis
tcp    LISTEN     0      128       *:6379                  *:*                   users:(("redis-server",pid=98866,fd=4))

 a.定义监控项

进入 配置 ---> 主机 ---> zabbix-server---> 监控项(items)---> 创建监控项

 添加,监控项添加完成后查看值:监测 --> 最新数据 -->redis status

b.定义触发器

 定义好监控项以后,再定义一个触发器,当服务出现问题的时候,才能及时知道。进入 配置 ---> 主机 ---> zabbix-server ---> 触发器(trigger)---> 创建触发器

添加触发器后查看,已成功添加

c.定义动作(action)

进入 配置 ---> 动作 ---> 创建动作(注意选择事件源为触发器)

指定动作

 创建操作

 操作添加

 涉及操作的虚拟机配置

· 修改sudo配置文件使zabbix用户能临时拥有管理员权限;

· 修改zabbix 配置文件使其允许接收远程命令。

[root@localhost ~]# visudo     #相当于 vim /etc/sudoers
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
zabbix    ALL=(ALL)   NOPASSWD: ALL      #加这行表示不需要输入密码

[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf
### Option: EnableRemoteCommands
#       Whether remote commands from Zabbix server are allowed.
#       0 - not allowed
#       1 - allowed
#
# Mandatory: no
# Default:
# EnableRemoteCommands=0
EnableRemoteCommands=1      #允许接收远程命令

### Option: LogRemoteCommands
#       Enable logging of executed shell commands as warnings.
#       0 - disabled
#       1 - enabled
#
# Mandatory: no
# Default:
# LogRemoteCommands=0
LogRemoteCommands=1         #把接收的远程命令记入日志

#重启zabbix-agent服务
[root@localhost ~]# systemctl restart zabbix-agent.service

 第一步创建完成后,接着添加第二个操作

完成动作创建后,手动关闭redis服务来测试

[root@localhost ~]# systemctl stop redis.service

 注:邮箱发送失败是因为现在禁用了公有邮箱发送,发送邮件问题需后续配置。

端口及状态查看,已启动说明动作触发完成

[root@localhost ~]# ss -unltp | grep redis
tcp    LISTEN     0      128       *:6379                  *:*                   users:(("redis-server",pid=109905,fd=4))
[root@localhost ~]# systemctl status redis.service 
● redis.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/redis.service.d
           └─limit.conf
   Active: active (running) since 二 2023-01-31 14:49:50 CST; 6min ago
 Main PID: 109905 (redis-server)
    Tasks: 3
   CGroup: /system.slice/redis.service
           └─109905 /usr/bin/redis-server 0.0.0.0:6379

1月 31 14:49:50 localhost.localdomain systemd[1]: Starting Redis persistent key-value database...
1月 31 14:49:50 localhost.localdomain systemd[1]: Started Redis persistent key-value database.

 6.zabbix可视化

1)简介

zabbix 提供了众多的可视化工具直观展示,如 graph、screen 及 map 等。前面也看到过一些简单的图形展示。如果想要把多个相关的数据定义在同一张图上去查看,就需要去自定义图形。

2)自定义图形(graphs)

自定义图形中可以集中展示多个时间序列的数据流。

支持四种不同形式的图形:

· 线状图(normal)

· 堆叠面积图(stacked)

· 饼图(pie)

· 分离型饼图(exploded)

设置过程如下:进入 配置 ---> 主机 ---> zabbix-server ---> 图形,选择右上角创建图形:

 可预览图形状态

正常

 堆积的

 饼形(pie)

爆发的

 添加完成后也可以在 监测 --> 图形 中查看

3)聚合图形

 创建的自定义图形也可以放在一个聚合图里显示,具体的设置方法: 进入 监测中 ---> 聚合图形 ---> 选择右上角创建聚合图形

添加后进入 编辑聚合图形

 进入 点击更改编辑,选择创建好的图形

 完成更改后展示

 注:因为只编辑了一个图形所以是重复的

4)幻灯片展示(Slide shows)

如果有多个聚合图形想要按顺序展示的话,我们就可以定义一个幻灯片。

步骤:监测 ---> 聚合图形 ---> 右上角选择幻灯片演示 ---> 创建幻灯片

 添加完成后,打开显示就以图1放映5s后切换到图2。

5) 定义拓扑图(Maps)

在拓扑图中,可以定义成一个复杂的网络连接图,可以使用一台主机来连接另一台主机,这样的话,就可以查看出到底是哪个链接出了问题。

步骤: 监测 ---> 拓扑图 ---> 所有地图 ---> Local network(默认就有的)

 · 通过ping和traceroute可以实验上述功能。

 也可以通过编辑拓扑图添加和删除功能

 7.模板(template)

1)创建模板

每一个主机的监控项都很多,一个一个的添加实在是太头疼了,更何况,可能不止一个主机。可以把一个 redis 的监控项添加进一个模板里,这样更方便于我们以后的添加。

步骤:配置 ---> 模板 ---> 选择右上角创建模板

比如添加一个template_Nginx模板

 创建完成后,可以向里面添加应用集、监控项、触发器、图形等等,添加完成以后,后期再有主机需要添加就直接套用模板即可。例如添加监控项

 注:现在添加的是模板,所以不会立即采用数据,只有链接到主机上以后,才会真正生效。

 2)模板的导入与导出

 可以直接导入一个模板,在互联网上可以找到很多,导入的步骤如下

· 导出直接选中要导出的模板点击导出就行了

· 导入把没有的模板导入进来,就点击导入

 3)模板的应用

 点击更新。成功链接至模板,主机数据就会更新了。

注意:一个主机可以链接多个模板,但尽量不要让一个指标被采样两次。

        如果有多个主机,同时这些主机也在一个主机组里,这样的话,只需要在这个主机组里添加模板,就能够让在主机组里的所有主机进行监控

4)移除模板

当一个主机的模板不想要用了,可以移除模板链接;

步骤:配置 ---> 主机 ---> node1 ---> 模板,可以把不需要的模板移除

更新后会提示主机更新,细节提示显示模板已与主机断链,表示模板已被移除

8.宏(macro)

1)简介

宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换。类似地,zabbix基于宏保存预设文本模式,并且在调用时将其替换为其中的文本。

zabbix有许多内置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、{TRIGGER.EVENTS.ACK}等。

· 详细信息请参考官方文档

2)级别

宏一共有三种级别,分别是全局宏、模板宏、主机宏。不同级别的宏的适用范围也不一样。

- 全局宏也可以作用于所有的模板宏和主机宏,优先级最低。
  
- 模板宏则可以作用于所有使用该模板的主机,优先级排在中间。
  
- 主机宏则只对单个主机有效,优先级最高。

3)类型

- 宏的类型分为系统内建的宏和用户自定义的宏。
  
- 为了更强的灵活性,zabbix还支持在全局、模板或主机级别使用用户自定义宏(user macro)。
  
- 系统内建的宏在使用的时候需要`{MACRO}`的语法格式,用户自定义宏要使用`{$MACRO}`这种特殊的语法格式。
  
- 宏可以应用在item keys和descriptions、trigger名称和表达式、主机接口IP/DNS及端口、discovery机制的SNMP协议的相关信息中
  
- 宏的名称只能使用大写字母、数字及下划线。

进一步信息请参考官方文档

4)定义一个宏

如果想要在监控项(items)上使用宏,就要先去定义一个宏,然后去创建监控项,直接引用定义好的宏即可。具体操作步骤:

a.全局宏

步骤:管理 ---> 一般 ---> 右上角选择宏

 2)定义监控项,调用宏

步骤:配置 ---> 主机 ---> 所有主机 ---> 监控项 ---> 右上角创建监控项

 填写完成以后,点击添加。看到这个调用宏的监控项已经添加成功:

 查看监控项现在的状态: 监测 ---> 最新数据

 3)修改宏

如果把zabbix-server节点上的 redis 服务监听端口手动改掉,定义的监控项就不能正常使用了,这样的话,就需要去修改宏。因为只是个例,所以我们不需要去修改全局宏,只用修改模板宏或者主机宏就可以了。

模板宏和主机宏的不同修改操作:

模板宏的修改:配置 ---> 模板 ---> Template_Nginx(相应的模板) ---> 宏

 主机宏的修改:配置 ---> 主机 ---> 所有主机 ---> zabbix-sever ---> 宏

五、后续待更新...   

学习链接:https://www.bilibili.com/video/BV1xA411i7wU/?spm_id_from=333.337.search-card.all.click​​​​​​ 

;