01-企业级Zabbix监控平台
监控的意义
我们如何及时的获得这些应用的运行状态信息,在出现问题时能够及时知道,这就是监控要做的事情
监控的对象
通常情况下,我们可以将监控对象这么来分:1.服务器监控,主要监控服务器如:CPU 负载、内存使用率、磁盘使用率、登陆用户数、进程状态、网卡状态等。2.应用程序监控,主要监控该应用程序的服务状态,吞吐率和响应时间,因为不同应用需要监控的对象不同,这里不一一列举。3.数据库监控,只所以把数据库监控单独列出来,足以说明它的重要性,一般监控数据库状态,数据库表或者表空间的使用情况,是否有死锁,错误日志,性能信息等等。4.网络监控,主要监控当前的网络状况,网络流量,端口,连接等。
监控软件
- zabbix
- prometheus
- nagios
- ganglia
- open-falcon
- cacti
1.nagios图形不是特别好,也可以安装图形插件,但是仍然不够直观 2.nagios一般情况下如果需要图形可以和cacti配合使用 3.cacti的监控是轮询监控,效率低,图形相对nagios比较好看 4.zabbix和nagios因为是并发监控,对cpu的要求更高 5.zabbix在性能和功能上都强大很多 6.zabbix的图形相当漂亮 7.支持多种监控方式 zabbix-agent snmp 等等 8.支持分布式监控,能监控的agent非常多 9.zabbix有图形的web配置界面,配置简洁 10.zabbix支持自动发现功能
Zabbix应用手册
1、Zabbix介绍
Zabbix 是一种企业级的分布式开源监控解决方案。
Zabbix 是一款能够监控众多网络参数和服务器的健康度和完整性的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的警报。这样可以快速相应服务器问题。Zabbix 基于存储的数据提供出色的报告和数据可视化。这些功能使得 Zabbix 成为容量规划的理想选择。
Zabbix 支持轮询和被动捕获。所有的 Zabbix 报告、统计信息和配置参数都可以通过基于 Web 的前端页面进行访问。基于 Web 的前端页面确保您的网络状态和服务器健康状况可以从任何地方进行评估。在经过适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于拥有少量服务器的小型组织,还是拥有大量服务器的大型公司而言,同样适用。
Zabbix 是免费的。Zabbix 是根据 GPL 通用公共许可证的第二版编写和分发的。这意味着它的源代码是免费分发的,并且可供公共使用。
Zabbix 优点
- 开源,无软件成本投入
- Server 对设备性能要求低
- 支持设备多,自带多种监控模板
- 支持分布式集中管理,有自动发现功能,可以实现自动化监控
- 当监控项比较多,服务器队列比较大时可以采用被动模式,被监控端主动从监控端去下载需要监控的item 然后取数据上传到监控端。 这种方式对监控端的负载比较小。
- Api接口的支持,方便与其他系统结合
Zabbix 缺点
zabbix-server zabbix-agent
- 需在被监控主机上安装 agent,所有数据都存在数据库里, 产生的数据据很大,瓶颈主要在数据库。
- 项目批量修改不方便
- 社区虽然成熟,但是中文资料相对较少,服务支持有限;
- 系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;并且自定义的项目报警需要自己设置,过程比较繁琐;
- 缺少数据汇总功能,如无法查看一组服务器平均值,需进行二次开发;
2、Zabbix功能
- 可用性和性能采集;
- 支持 SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware 监控;
- 自定义检查;
- 按照自定义的时间间隔采集需要的数据;
- 通过 Server/Proxy 和 Agents 来执行数据采集。
- 您可以定义非常灵活的告警阈值,称之为触发器,触发器从后端数据库获得参考值。
- 可以根据递增计划、接收者、媒介类型自定义发送告警通知;
- 使用宏变量可以使告警通知变得更加高效有益;
- 自动动作包含远程命令。
- 使用内置图形功能可实以将监控项绘制成图形。
- Zabbix 可以追踪模拟鼠标在 Web 网站上的点击操作,来检查 Web 网站的功能和响应时间。
- 能够创建可以将多个监控项组合到单个视图中的自定义图形;
- 网络拓扑图;
- 以仪表盘样式展示自定义聚合图形和幻灯片演示;
- 报表;
- 监控资源的高层次(业务)视图。
- 存储在数据库中的数据;
- 可配置的历史数据;
- 内置数据管理机制(housekeeping)。
- 将被监控设备添加为主机;
- 主机一旦添加到数据库中,就会采集主机数据用于监控;
- 将模板用于监控设备。
- 在模板中分组检查;
- 模板可以关联其他模板,获得继承。
- 自动发现网络设备;
- Zabbix Agent 发现设备后自动注册;
- 自动发现文件系统、网络接口和 SNMP OIDs 值。
- 基于 PHP 的 Web 前端;
- 可以从任何地方访问;
- 您可以定制自己的操作方式;
- 审计日志。
- Zabbix API 为 Zabbix 提供可编程接口,用于批量操作、第三方软件集成和其他用途。
- 安全的用户身份验证;
- 将特定用户限制于访问特定的视图。
- 部署于被监控对象上;
- 完美支持 Linux 和 Windows ;
- 为了更好的性能和更少的内存占用,采用 C 语言编写;
- 便于移植。
使用 Zabbix Proxy 代理,可以轻松实现分布式远程监控。
3、ZABBIX 概述
架构
SERVER
Zabbix server 是 Zabbix agent 向其报告可用性、系统完整性信息和统计信息的核心组件。是存储所有配置信息、统计信息和操作信息的核心存储库。
数据库
所有配置信息以及 Zabbix 收集到的数据都被存储在数据库中。
WEB 界面
为了从任何地方和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
PROXY
Zabbix proxy可以替 Zabbix server 收集性能和可用性数据。Zabbix proxy 是 Zabbix 环境部署的可选部分;然而,它对于单个 Zabbix server 负载的分担是非常有益的。
AGENT
Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
数据流
此外,重要的是,需要回过头来了解下 Zabbix 内部的整体数据流。首先,为了创建一个采集数据的监控项,您就必须先创建主机。其次,必须有一个监控项来创建触发器。最后,您必须有一个触发器来创建一个动作,这几个点构成了一个完整的数据流。因此,如果您想要收到 CPU load it too high on Server X 的告警,您必须首先为 Server X 创建一个主机条目,其次创建一个用于监视其 CPU 的监控项,最后创建一个触发器,用来触发 CPU is too high 这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,其实并不复杂。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。
4、Zabbix定义
主机(host)
你想要监控的联网设备,有IP/DNS。
主机组(host group)
主机的逻辑组;可能包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。
监控项(item)
你想要接收的主机的特定数据,一个度量/指标数据。
值预处理(value preprocessing)
转化/预处理接收到的指标数据 存入数据库之前
触发器(trigger)
一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式
当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回“OK”的状态。
事件(event)
一次发生的需要注意的事情,例如触发器状态改变、发现/监控代理自动注册
事件标签(event tag)
提前设置的事件标记可以被用于事件关联,权限细化设置等。
事件关联(event correlation)
自动灵活的、精确的关联问题和解决方案
比如说,你可以定义触发器A告警的异常可以由触发器B解决,触发器B可能采用完全不同的数据采集方式。
异常(problems)
一个处在“异常”状态的触发器
异常更新(problem update)
Zabbix提供的问题管理选项,例如添加评论、确认异常、改变问题级别或者手动关闭等。
动作(action)
预先定义的应对事件的操作
一个动作由操作(例如发出通知)和条件(什么时间进行操作)组成
升级(escalation)
一个在动作内执行操作的自定义方式; 发送通知/执行远程命令的顺序安排。
报警媒介(media)
发送告警通知的方式;传送途径
通知(notification)
关于事件的信心,将通过选设定的媒介途径发送给用户。
远程命令(remote command)
一个预定义好的,满足特定条件的情况下,可以在被监控主机上自动执行的命令。
模版(template)
一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合
模版的应用使得主机上的监控任务部署快捷方便;也可以使监控任务的批量修改更加简单。模版是直接关联到每台单独的主机上。
应用(application)
一组监控项组成的逻辑分组
Web场景(web scenario)
检查网站可浏览性的一个或多个HTTP请求
前端(frontend)
Zabbix提供的web界面
Zabbix API
-Zabbix API允许用户使用JSON RPC协议来创建、更新和获取Zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务
Zabbix server
Zabbix监控的核心程序,主要功能是与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等
Zabbix agent
部署在监控对象上的,能够主动监控本地资源和应用的程序
Zabbix proxy
一个帮助Zabbix Server收集数据,分担Zabbix Server的负载的程序
加密(encryption)
支持Zabbix组建之间的加密通讯(server, proxy, agent, zabbix_sender 和 zabbix_get 程序)使用TLS(Transport Layer Security )协议。
5、Zabbix监控架构
a.分布式监控 (企业常用) server-proxy-agent
b.server-anget(点对点监控)
监控报警流程图:
5、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
- 网络: 网络环境(内网环境,外网环境) SNMP———————————————————————————————————————————————————————————————-
IPMI:智能平台管理接口(Intelligent Platform Management Interface)IPMI 能够横跨不同的操作系统、固件和硬件平台,可以智能的监视、控制和自动回报大量服务器的运作状况,以降低服务器系统成本。
SNMP:网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机等)的一种标准协议,它是一种应用层协议。
6、Zabbix监控方式
被动模式
被动检测:相对于agent而言;agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
主动模式
主动检测:相对于agent而言;agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
- 主动监控能极大节约监控server 的资源。Zabbix由几个主要的软件组件构成,这些组件的功能如下。
Zabbix 架构
安装和配置 Zabbix 服务
实验准备
centos7.4 系统服务器3台、 一台作为监控服务器, 两台台作为被监控节点, 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信。1)所有机器关闭防火墙和selinux
setenforing 0 (修改配置文件关闭)
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/‘ /etc/selinux/config
systemctl stop firewalld.service
2)根据架构图,实验基本设置如下:
机器名称 | IP配置 | 服务角色 | 备注 |
---|---|---|---|
server | 192.168.153.147 | zabbix-server | 开启 |
node1 | 192.168.153.178 | zabbix-agent-node1 | 开启 |
node2 | 192.168.153.179 | zabbix-agent-node2 | 开启 |
1. 安装 Zabbix 存储库
文档
[root@zabbix-server ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zabbix-server ~]# yum clean all
2. 安装 Zabbix 服务器和代理
[root@zabbix-server ~]# yum install zabbix-server-mysql zabbix-agent -y
3. 安装 Zabbix 前端
文档
启用红帽软件集合
[root@zabbix-server ~]# yum install centos-release-scl -y
编辑文件 /etc/yum.repos.d/zabbix.repo 并启用 zabbix-frontend 存储库。
[zabbix-frontend]
…
enabled=1
…
安装 Zabbix 前端包
[root@zabbix-server ~]# yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl
zabbix-apache-conf-scl :apache的Zabbix前端配置 (scl 版本)
zabbix-web-mysql-scl : 用于MySQL数据库的Zabbix web前端包 (scl 版本
4. 创建初始数据库
文档
确保您已启动并运行数据库服务器。这里我使用的是Mysql5.7版本
[root@zabbix-server ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
[root@zabbix-server ~]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm
打开/etc/yum.repos.d的mysql-community.repo
打开5.7源地址,关闭8.0源地址,确保下载的数据库是mysql5.7;这里换位mariadb也可以
[root@zabbix-server ~]# yum -y install mysql-community-server
如果下载过程报下面错误:
然后重新下载即可
因为mysql5.7启动,root用户会生成随机密码,可以进行修改
[root@zabbix-server ~]# systemctl start mysqld
[root@zabbix-server ~]# grep ‘password’ /var/log/mysqld.log
[root@zabbix-server ~]# mysqladmin -uroot -p’U84zCRrlt0=c’ password ‘FeiGe@2021’
在您的数据库主机上运行以下命令。
[root@zabbix-server ~]# mysql -uroot -p’FeiGe@2021’
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all on zabbix. to zabbix@localhost identified by ‘Zabbix@2021’;
mysql> flush privileges;
mysql> quit;
在 Zabbix 服务器主机上导入初始模式和数据。系统将提示您输入新创建的密码。
[root@zabbix-server ~]# zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix
Enter password: //此处输入上面创建用户时,设置的密码,回车导入数据;
可再次进去到数据库,确认zabbix库中有数据生成;
mysql> show databases;
+——————————+
| Database |
+——————————+
| information_schema |
| mysql |
| performance_schema |
| sys |
| zabbix |
+——————————+
mysql> use zabbix
5. 为 Zabbix 服务器配置数据库
编辑文件 /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=Zabbix@2021
6. 为 Zabbix 前端配置 PHP
编辑文件/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf,取消注释并为您设置正确的时区。
php_value[date.timezone] = Asia/Shanghai
7. 启动 Zabbix 服务器和代理进程
启动 Zabbix 服务器和agent代理进程并使其在系统启动时启动。
[root@zabbix-server ~]# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
[root@zabbix-server ~]# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
8. 配置 Zabbix 前端
连接到您新安装的 Zabbix 前端:
http:// 192.168.153.147/zabbix按照 Zabbix 文档中描述的步骤: 安装前端
出现以下登录界面,
Zabbix监控平台有默认管理员用户;
默认用户名Admin,密码为zabbix;
页面显示为英文,可以设置为中文
Admin用户,可以设置任何用户的语言
设置自己的语言如下图
设置其他用户的语言如下图:
修改为如下,即可:
配置被监控zabbix-agent
当我们把监控端配置启动以后,我们需要来设置一下我们的被监控端,我们在被监控的主机安装好zabbix-agent,设置好他的所属的监控端server,并把他添加到server端,就能将其纳入我们的监控系统中去了。
1)安装 zabbix 源
[root@zabbix-agent-node1 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zabbix-agent-node1 ~]# yum install zabbix-agent zabbix-sender -y
zabbix_sender是一个命令行工具,可以用来发送Zabbix服务器处理性能数据。该工具通常用于长时间运行的用户脚本,用于定期发送可用性和性能数据。
2)修改配置文件
对配置文件做一个备份,然后去修改配置文件:
[root@zabbix-agent-node1 ~]# cd /etc/zabbix/
[root@zabbix-agent-node1 zabbix]# cp zabbix_agentd.conf zabbix_agentd.bak
[root@zabbix-agent-node1 zabbix]# ls
zabbix_agentd.bak zabbix_agentd.conf zabbix_agentd.d
[root@zabbix-agent-node1 zabbix]# vim zabbix_agentd.conf ——修改如下
Server=192.168.153.147 zabbix服务端的地址
ServerActive=192.168.153.147 主动模式 zabbix-server-ip
Hostname=zabbix-agent-none1
UnsafeUserParameters=1 是否限制用户自定义 keys 使用特殊字符 1是可以启用特殊字符 0是不可以启用特殊字符
EnableRemoteCommands=1 是否允许别人执行远程操作命令,默认是禁用的,打开的话会有安全风险.
是否允许别人执行远程操作命令,默认是禁用的,打开的话会有安全风险.
修改完成之后,我们保存退出。然后就可以启动服务了:
[root@zabbix-agent-node1 zabbix]# systemctl start zabbix-agent
[root@zabbix-agent-node1 zabbix]# systemctl enable zabbix-agent
3)创建主机群组
可以看到Zabbix本身就有很多默认的主机群组。暂时不用理会
4)创建主机
5)创建应用集
应用集,可以认为是监控项的分类
应用集可以有多个,我们再创建2个,这里不再给予创建过程;
6)创建监控项
要在Zabbix管理页面创建一个监控项,请执行以下操作:
- 进入到: 配置 → 主机
- 在主机所在的行单击 监控项
- 点击屏幕右上角的创建监控项
- 输入表单中监控项的参数
你也可以打开一个已经存在的监控项,点击克隆 按钮,然后重命名保存。
任何一个被监控项,如果想要能够被监控,一定要在zabbix-server端定义了能够连接至zabbix-agent端,并且能够获取命令。或者在agent端定义了能够让server端获取命令。一般都是内建的命令,都对应的有其名字,被我们称之为key。
a.创建1个不带参数的监控项:
监控系统已启动的时间
关于键值(key值),我们可以直接在网页上设置(服务器自动执行),
但是最好提前使用命令行命令(手动执行)来获取,确保此监控项的键值能取到监控数据,也就意味着能监控到此指标;
[root@zabbix-server ~]# zabbix_get -s 192.168.153.178 -k system.uptime -p 10050
8429
如果能获取到值,就可以点击添加了;等待一会儿,点击“监测”—>“最新数据”
即可看到被监控端node1的已运行时间;
也可点击自带的“图形”,看到整体情况
b.创建1个带参数的监控项
案例2:监控文件的大小
被监控端node1先创建出1G文件
[root@zabbix-agent-node1 ~]# dd if=/dev/zero of=/home/test.txt bs=1M count=1024
[root@zabbix-agent-node1 ~]# ll -h /home/
-rw-r—r—. 1 root root 1.0G 6月 10 11:22 test.txt
去监控平台,创建监控项:
点击“最新数据”
案例3:监控cpu负载
关于key值,我们可以直接在网页上设置(服务器自动执行),也可以使用命令行命令(手动执行)来获取:
[root@zabbix-server ~]# zabbix_get -s 192.168.153.178 -k system.cpu.load[all,avg5] -p 10050
0.060000
案例4:监控tcp的80端口是否被占用
被监控端,先下载占用80端口的服务,比如httpd或者nginx,tcp协议占用80端口的应用,都可以;
[root@zabbix-agent-node1 ~]# yum -y install httpd
[root@zabbix-agent-node1 ~]# systemctl start httpd
来到监控平台,创建对应监控项:
然后去“最新数据”中,查看
点击“图形”
7)删除监控项
如果有一个监控项,我们用不上了,就可以删除掉。但是如果你直接删除的话,默认数据是会留下的,所以我们要先清除数据,然后再删除。
- 历史数据(history)和趋势数据(trends)是Zabbix中存储收集到的数据的两种方式。
- 历史数据:每一个收集到的监控数据
- 趋势数据:按小时统计计算的平均值数据
强烈建议将历史数据保留时长设置得尽可能的小。这么做可以让数据库不会因存储了大量的历史数据,导致超负荷运行。
可以选择长时间的保留趋势数据,来替代长期需要的历史数据。例如:设置成保留14天历史数据和5年的趋势数据。
作业:监控cpu的平均负载,平均1分钟,5分钟,15分钟
8)创建触发器(trigger)
触发器就是来判断监控项监控到的数据,是否处于合理区间的;
① 简介
当我们的采集的值定义完了以后,就可以来定义触发器了。 我们触发器的定义是:界定某特定的监控项采集到的数据的非合理区间或非合理状态。通常为逻辑表达式。
一般,我们评定采样数值是否为合理区间的比较稳妥的方法是——根据最后N次的平均值来判定结果;这个最后N次通常有两种定义方式:
1. 最近N分钟所得结果的平均值
2. 最近N次所得结果的平均值
注:能用数值保存的就不要使用字符串
② 触发器表达式
基本的触发器表达式格式如下所示
{
- server:主机名称;
- key:主机上关系的相应监控项的key;
- function:评估采集到的数据是否在合理范围内时所使用的函数,目前触发器所支持的函数有avg(平均)、count(计数)、change(变化)、date(日期)、dayofweek(星期)、delta(增量)、diff、iregexp、last()、max(最大值)、min(最小值)、nodata(无数据)、now(现在)、sum(总和)等
- parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用“#”做为前缀,则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;
配置一个触发器,进行下面步骤:
- 进入: 配置 → 主机
- 点击主机一行的 触发器
- 点击右上角的 创建触发器 (或者点击触发器名称去修改一个已存在的触发器)
- 在窗口中输入触发器的参数
测试触发器是否生效
被监控端停止httpd服务,意味着80端口也会关闭
[root@zabbix-agent-node1 ~]# systemctl stop httpd
9)创建动作(action)
配置动作,步骤如下:
- 转到 配置 - > 操作
- 从页面标题下拉菜单中选择所需的动作类型
- 点击 创建动作
- 给动作命名
- 选择执行操作的 条件
- 选择要执行的 操作
我们可以看出,还需要在虚拟机上进行两项操作,一是修改sudo配置文件使zabbix用户能够临时拥有管理员权限;二是修改zabbix配置文件使其允许接收远程命令。我们进行如下操作:
[root@zabbix-agent-node1 ~]# visudo #相当于“vim /etc/sudoers”
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zabbix ALL=(ALL) NOPASSWD:ALL #添加的一行,表示不需要输入密码
[root@zabbix-agent-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1 #允许接收远程命令
LogRemoteCommands=1 #把接收的远程命令记入日志
[root@zabbix-agent-node1 ~]# systemctl restart zabbix-agent.service
测试动作是否执行:
在被监控端,将httpd服务停止,查看是否会重启
[root@zabbix-agent-node1 ~]# systemctl stop httpd
等待一会儿,可看到,问题已被解决
被监控端查看httpd服务状态,也可看到httpd服务已被重启
刚刚一旦发生问题,我们添加了第一步需要做的事情,也就是重启服务,如果重启不成功怎么办呢?我们就需要来添加第二步:
第二步,可以是发送邮件,让我们及时知道问题仍然存在,然后人工介入紧急处理;
邮箱报警,需要创建媒介
邮箱类型有很多种,比如QQ邮箱,阿里云邮箱,163邮箱等;想用邮箱接收报警,要开启邮箱的SMTP服务
我们这里用QQ邮箱:
开启邮箱POP3/SMTP服务
往下拉取
需要已绑定的手机号码,发送短信开启
10)创建媒介
媒介是Zabbix中用于发送通知和告警的传输通道。
问题发现邮件内容:
问题恢复邮件内容:
测试媒介是否可用:
前往QQ邮箱查看:
然后前往“动作”–>“操作”,进行设置
问题恢复,执行动作
将Admin用户和local_email媒介进行关联
测试:
[root@zabbix-agent-node1 ~]# systemctl stop httpd
一旦停止httpd。zabbix平台就会发现问题,随即执行第1步,重启了httpd,重启成功。不会有第2步
一旦httpd恢复正常,恢复操作会执行第1步,发送邮件,如下图
Zabbix飞书报警
1.创建群聊—>创建自定义机器人
2.准备报警脚本
报警脚本,写在zabbix-server端
[root@zabbix-server alertscripts]# pwd
/usr/lib/zabbix/alertscripts
[root@zabbix-server alertscripts]# cat feishu.py
#!/usr/local/python3/bin/python3
#我的pythone解释器的位置是安装到了上面,根据自己的安装位置指定解释器即可
import requests
import json
import sys
import os
import datetime
url = "https://open.feishu.cn/open-apis/bot/v2/hook/58cae8bb-a9d6-4d7a-8318-b45afaceebff"
def send_message(message):
payload_message = {
"msg_type": "text",
"content": {
"text": message
}
}
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=json.dumps(payload_message))
return response
if __name__ == '__main__':
text = sys.argv[1]
send_message(text)
3.安装python3
这里,我发现用python2.7执行脚本,是会失败的;所以我这里安装了python3.6.5的
[root@zabbix-server ~]# wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
[root@zabbix-server ~]# yum -y install gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
[root@zabbix-server ~]# mkdir /opt/python/
[root@zabbix-server ~]# tar -xvzf Python-3.6.5.tgz -C /opt/python/
cd Python-3.6.5/
[root@zabbix-server ~]# cd /opt/python/Python-3.6.5/
[root@zabbix-server Python-3.6.5]# ./configure --prefix=/usr/local/python3
[root@zabbix-server Python-3.6.5]# make && make install
4.配置python环境变量
[root@zabbix-server Python-3.6.5]# tail -10 /etc/profile
[root@zabbix-server Python-3.6.5]# source /etc/profile
5.测试报警脚本
[root@zabbix-server ~]# pip3 install requests
[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server alertscripts]# python3 feishu.py "主机"
6.配置Zabbix
给主机zabbix-agent1添加监控项
添加触发器
添加报警媒介
问题: {EVENT.NAME}
问题发生时间: {EVENT.TIME} on {EVENT.DATE}
问题: {EVENT.NAME}
主机: {HOST.NAME}
级别: {EVENT.SEVERITY}
数据: {EVENT.OPDATA}
事件: {EVENT.ID}
{TRIGGER.URL}
添加动作
报警模板:
默认接收人:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
默认信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
用户关联媒介
7.验证报警
[root@zabbix-agent1 ~]# systemctl stop httpd
Zabbix电话报警应用
前提条件:
监控端,正在监控被监控端的http 80端口;设置触发器,我这里没有显示而已。
监控内容
使用睿象云
https://www.aiops.com/ 睿象云
应用名称:zabbix
AppKey:82e9d8885eb44fc7b1da61afc81d10a9
一、安装 Agent
1、切换到zabbix脚本目录 (注意查看自己的zabbix存放脚本的目录):
cd /usr/local/zabbix-server/share/zabbix/alertscripts
2、获取Cloud Alert Agent包:
wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-4.0.1.tar.gz
3、解压、安装。
tar -xzf ca_zabbix_release-4.0.1.tar.gz
cd cloudalert/bin
bash install.sh {appKey}
注:1、在安装过程中根据安装提示,输入zabbix管理地址、管理员用户名、密码。
2、zabbix管理地址正确示例:http://zabbix.server.com/zabbix 或是:https://zabbix.server.com/zabbix
4、修改运行zabbix服务权限与cloudalert探针目录权限
请保证运行zabbix服务的权限和cloudalert探针目录的权限保持一致,不一致会导致告警无法正常接入。
5、验证告警集成
产生新的zabbix告警(problem),动作状态为“已送达”表示集成成功。
分配策略
通知策略
Zabbix添加动作
关联触发器
发送到 Cloud Alert User 组 和 Cloud Alert User 用户
测试报警
[root@zabbix-agent1 ~]# systemctl stop httpd
Zabbix结合Grafana图形展示
Grafana简介
Grafana 是 Graphite 和 InfluxDB 仪表盘和图形编辑器。Grafana 是开源的,功能齐全的度量仪表盘和图形编辑器,支持 Graphite,InfluxDB 和 OpenTSDB。 Grafana 主要特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式;多个数据源;Graphite 和 InfluxDB 查询编辑器等等。 因为zabbix本身自带的图形比较少,不能满足我们的需求。所以,我们可以安装grafana来配合zabbix出图,让数据更加直观、形象地体现出来。
Grafana官网:https://grafana.com/
Granfana下载
官网下载方法:https://grafana.com/grafana/download?edition=oss
选择开源版本,我这里和zabbix-server安装在一台虚拟机
[root@zabbix-server ~]# wget https://dl.grafana.com/oss/release/grafana-8.3.4-1.x86_64.rpm
[root@zabbix-server ~]# yum -y install grafana-8.3.4-1.x86_64.rpm
[root@zabbix-server ~]# systemctl start grafana-server
# 日志位置
[root@zabbix-server ~]# tail -f /var/log/grafana/grafana.log
Granfana官网文档:https://grafana.com/docs/grafana/latest/getting-started/getting-started/
首次登录 Grafana:
- 打开您的网络浏览器并转到 http://localhost:3000/。3000除非您配置了不同的端口,否则Grafana 侦听的默认 HTTP 端口是。
- 在登录页面上,输入admin用户名和密码(默认admin)。
- 单击登录。如果登录成功,您将看到更改密码的提示。
- 在提示上单击“确定”,然后更改您的密码。
下载连接zabbix的插件
https://grafana.com/grafana/plugins/?utm_source=new-data-source&search=zabbix
[root@grafana-server ~]# grafana-cli -h
# 是从github上下载,下载失败。多次尝试。不行尝试下载到本地,上传虚拟机。手动解压
# 我就是手动的
第一种方法:
[root@grafana-server ~]# grafana-cli plugins list-remote
[root@grafana-server ~]# grafana-cli plugins list-remote|grep -i zabbix
[root@grafana-server ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
# 第二种方法
[root@grafana-server ~]# cp alexanderzobnin-zabbix-app-4.2.8.zip /var/lib/grafana/plugins/
[root@grafana-server plugins]# unzip alexanderzobnin-zabbix-app-4.2.8.zip
[root@grafana-server ~]# systemctl restart grafana-server
Grafana开启Zabbix插件
配置zabbix数据源
往下拉,自己安装的插件zabbix在最下面
http://192.168.91.134/zabbix/api_jsonrpc.php
Name:自定义一个名称
Type: 下拉框中选择zabbix #如果没有安装zabbix插件,此处则没有zabbix选项
URL:http://zabbix-serverIP/zabbix/api_jsonrpc.php #zabbixAPI接口地址
Access: 默认Server(Default),表示grafana直接到Server取数据,brower表示让每个客户端单独获取,一般不用。
Username:填写你zabbix的用户名
Password: 填写你zabbix用户名的密码
Trends:勾选
Grafana可视化Zabbix数据
如没有以上选项,重启grafana-server,再次测试