Zabbix企业级应用案列
随着业务的越发复杂,对软件系统的要求越来越高,这意味着我们需要随时掌控系统的运行情况。因此,对系统的实时监控以及可视化展示,就成了基础架构的必须能力。
一、zabbix可视化
1.Grafana 简介
Grafana 是一个开源的指标量监测和可视化工具,官方网站为:https://grafana.com/。Grafana的安装非常简单,官方就有软件仓库可以直接使用,也可以通过 docker 镜像等方式直接本地启动。还可以直接下载 rpm 包、二进制包进行安装。
大家可以从 https://grafana.com/grafana/download 下载 rpm 安装包。
Grafana,是一个开源的数据可视化工具,它可以帮助用户将数据源中的数据进行图形化展示和实时监控,以便于用户能够更加直观地理解数据。Grafana 支持多种数据源,包括 Graphite、Elasticsearch、InfluxDB、Prometheus 等,也支持多种展示方式,如图表、仪表盘、地图、日历等。
Grafana 的主要作用包括:
- 数据可视化:通过 Grafana,用户可以将复杂的数据转化成易于理解的图表和仪表盘,并在一个界面中集中展示多个数据源的数据。
- 实时监控:Grafana 支持实时监控,可以帮助用户实时了解系统状态、性能等指标的变化情况。
- 告警与通知:Grafana 可以设置告警规则,当某些指标达到预设的值时,会自动发送通知,提醒用户关注和处理。
- 可扩展性: Grafana 文持插件式的开发模式,用户可以通过插件扩展功能,满足自己的特定需求。
总之,Grafana 是一款功能强大的数据可视化工具,可以帮助用户更好地理解数据,提高数据分析效率,提升工作效率。
2.Grafana 的特点
(1)展示方式
grafana 拥有快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式,让我们复杂的数据展示的美观而优雅。
(2)数据源
Grafana 支持许多不同的时间序列数据(数据源)存储后端。每个数据源都有一个特定査询编辑器。官方支持以下数据源:Graphite、infloxdb、opensdb、prometheus、elasticsearch、cloudwatch.每个数据源的查询语言和功能明显不同。你可以将来自多个数据源的数据组合到一个仪表板上,但每个面板都要绑定到属于特定组织的特定数据源。
(3)通知提醒
Grafana 中的警报允许您将规则附加到仪表板面板上。保存仪表板时,Gravana 会将警报规则提取到单独的警报规则存储中,并安排它们进行评估。报警消息还能通过钉钉、邮箱等推送至移动端。但目前grafana 只支持 graph 面板的报警。
(4)混合展示
Grafana 使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记。
(5)注释
Grafana 使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
(6)过滤器
Grafana 使用 Ad-hoc 过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。
二、Grafana 实现 Zabbix 可视化
1.安装 Grafana
(1)下载并安装
本案例使用的 grafana-enterprise-10.2.2 的版本,可以使用下面连接进行下载,如果需要其它版本,课登录 Grafana 官方网站,下载其它版本。https://dl.grafana.com/oss/release/grafana-enterprise-10.2.2-1.x86 64.rpm
[root@localhost ~l# hostnamectl set-hostname ZBX
[root@ZBX ~]# bash
[root@ZBX ~]# yum -y install grafana-enterprise-10.2.2-1.x86 64.rpm
(2)启动服务
[root@ZBX ~]# systemctl start grafana-server
[root@ZBX ~]# systemctl status grafana-server
[root@ZBX ~]# systemctl enable grafana-server
(3)关闭防火墙
[root@ZBX ~]# systemctl stop firewalld.service
[root@ZBX ~]# systemctl disable firewalld.service
备注:
Grafana 的配置文件位于/etc/grafana/grafana.ini,一般情况下无需修改配置文件。
2.插件安装
(1)Grafana 插件简介
Grafana 是实现 Grafana 各项功能的重要组成部分,其插件类型有如下三种:
- Panel Plugin:支持添加可视化图表、支持图表参数的配置
- Data source Plugin:支持配置数据源,支持添加数据源配置,支持使用数据源配置,支持后台数据源,分为前台(frontend)数据源插件和后台(backend)数据源插件。
- frontend source Plugin
- backend source Plugin
- App Plugin,支持创建应用,创建自定义页面
(1)安装grafana-zabbix 插件
grafana和zabbix的集成是通过插件方式实现的,因此,需要先安装grafana-zabbix插件,grafana官方已经包含了这个插件,直接使用即可。
(2)在 grafana 上查询插件
[root@ZBX ~]# grafana-cli plugins list-remote grep zabbix
id:alexanderzobnin-zabbix-app version:4.1.5
(3)安装插件
方法一:在线安装
[root@ZBX ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
安装成功之后会提示我们需要重启 grafana 服务,以使插件生效。
方法二:离线安装
如果无法在线下载,可以使用离线安装包。本案例使用此方法。
[root@ZBX ~]# unzip alexanderzobnin-zabbix-app-4.4.3.linux amd64.zip
[root@ZBX ~]# mkdir -p /var/lib/grafana/plugins/
[root@ZBX ~]# mv alexanderzobnin-zabbix-app /var/lib/grafana/plugins/
[root@ZBX ~]# systemctl restart grafana-server
注意:
以上两种方法选择其中一种即可。
注意:
可以将插件先下载下来,解压后将插件文件夹拷贝到/var/lib/grafana/plugins/下插件文件夹的名字用插件的名字命名,
例如:/var/lib/grafana/plugins/grafana-clock-panel
(4)重启grafana
所有需要的插件安装完成后,执行如下命令重启grafana 服务:
[root@ZBX ~]# systemctl restart grafana-server
(5)登录grafana
http://192.168.10.108:3000
默认账号:admin
默认密码:admin
3.配置 zabbix 数据源
要使得 Grafana 能够展示数据,必须有一个数据来源,比如 zabbix,ELK 等都可以为 Grafana 提供数据。
添加数据源的步骤如下。
(1)打开Administration 顶
(2)点击Plugins
进入如下界面,显示的是默认 Grafana 自带的数据源:
(3)搜索 zabbix插件,并 signed(签署)插件
我们要添加 zabbix,那么 zabbix 是以插件形式存在的,搜索 zabbix,如下图所示:
(4)启用 zabbix插件
这里点击“Enable”,启用这个插件。
(5)再次查看并添加数据源
启用zabbix插件之后,选择“Add your first data source"标签,如下图所示.
(6)点击zabbix,进入参数配置界面
(7)设置 zabbix 数据源参数
点击 Select 按钮之后,会进入到参数设置页面,如下图所示。
填写 zabbix 链接和 zabbix 账号密码,
http://192.168.10.108/api_jsonrpc.php
配置完成之后,点击最下面的“save &Test”,i如果配置有问题会报错提示,如果没有问题会提示成功。
4.通过添加 Grafana 图像创建 Dashboard
(1)新建 Dashboard,添加图形
(2)添加visualization(可视化)界面
出现如下所示界面后点击 Add visualization,并选择前面添加的 zabbix 数据源。
(3)添加要监控的数据
(4)保存
填写标题并保存
(5)回到home界面查看结果
(6)添加监控对象图形
点击上图中的“我的监控”,进入监控图形界面。点 Add,再添加一个 visualization.
其他监控项都是这个方法。
5.通过导入模板创建 Dashboard
想要获取更多模板,可以前往官方获取。
https://grafana.com/grafana/dashboards/
(1)在 home 界面点击“create your first dashboard’
(2)在如下界面点击导入按钮
(3)输入面板ID,并点Load按钮
备注:
5363
(4)选择zabbix数据源,并点击import按钮进行导入
(5)修改模板
导入后的面板可能没有数据显示,只有一个框架,可以具体调整每一个图形。
点击对应的图形右上角的三个点
如果看不见这三个点,可以将鼠标移动到此图形中,就可以看见了。
(6)点 edit 进入编辑界面
(7)修改参数并保存
(8)查看修改结构
三、钉钉告警设置
在 Zabbix 的告警机制中,除了前面讲过的邮箱告警之外,另一个常用的告警方式是钉钉告警,我们可以将同一个运维组的人员加入到同一个钉钉工作群中,当有异常出现后,zabbix 将告警信息发送到钉钉的群里面,此时,群众所有的运维人员都能在第一时间看到这则告警详细。
Zabbix 监控系统默认没有开箱即用的对接钉钉的结构,需要利用 Zabbix 监控系统的脚本定制化的方式扩展钉钉告警的实现。
1.webhook的定义
Webhook 是一个 API 概念,是微服务 API 的使用范式之一,也被称为反向 API,即前端不主动发送请求,完全由后端推送;举个常用例子,比如你的好友发了一条朋友圈,后端将这条消息推送给所有其他好友的客户端,就是 Webhook 的典型场景。
简单来说,Webhook 就是一个接收 HTTP POST(或 GET,PUT,DELETE)的 URL,一个实现了 Webhook的 API 提供商就是在当事件发生的时候会向这个配置好的 URL 发送一条信息,与请求-响应式不同,使用 webhook 你可以实时接受到变化。
在钉钉中,我们可以为群创建一个 webhook,Zabbix 就是通过 webhook 向这个钉钉群发送信息的。
2.为钉钉群创建 webhook
钉钉机器人是全局唯一的应用,即无论是在单聊场景中还是群聊场景中,都可以用来推送应用的通知和用来对用户进行对话式服务,机器人ID 都可以是唯一的。这意味着开发者既可以选择仅创建一个机器人,而后将其放在各个应用场景下使用,也可以创建多个机器人,然后分别部署在不同场景下。
(1)设置钉钉机器人
群设置--》智能群助手
添加自定义群机器人
注意:多添加一些关键字:报警、告警、问题、故障、恢复
(2)生成webhook
记下这个 webhook,只要这个钉钉机器人不删除,这个 webhook 就一直可以使用。
(3)测试
使用如下命令在 Linux 系统中发送测试信息。
2.设置 zabbix 告警方式
(1)创建报警媒介
“告警”-->“媒介”,创建媒介类型
参数部分设置:
Message:{ALERT.MESSAGE}
TO: {ALERT.SENDTO}
URL:https://oapi.dingtalk.com/robot/send?access token=<你的 token 值>
删掉其他参数
将本案例提供的脚本粘贴进去
(2)消息模板设置
在消息模板页面,消息的类型主要设置两个:问题和问题恢复,如下图所示。
消息类型问题的消息模块填写如下:
主题:
【告警】<font color="comment">{TRIGGER.STATUS}</font>,
服务器: <font color="comment">{HOSTNAME1}</font>故障!
消息:
>告警主机:<font color="comment">{HOSTNAME1}</font>
>告警地址:<font color="comment">{HOST.IP}</font>
>告警时间:<font color="comment">{EVENT.DATE} {EVENT.TIME}</font>
>告警等级:<font color="comment">{TRIGGER.SEVERITY}</font>
>告警信息:<font color="comment">{TRIGGER.NAME}</font>
>告警项目:<font color="comment">{TRIGGER.KEY1}</font>
>问题详情:<font color="comment">{ITEM.NAME}:{ITEM.VALUE}</font>
>当前状态:<font color="comment">{TRIGGER.STATUS}: {ITEM.VALUE1}</font>
>事 件 ID:<font color="comment">{EVENT.ID}</font>
消息类型:问题恢复的消息模版填写如下:
恢复主题:
【恢复】<font color="comment">{TRIGGER.STATUS}</font>,
服务器: <font color="comment">{HOSTNAME1}</font>已恢复!
恢复消息:
>恢复主机:<font color="comment">{HOSTNAME1}</font>
>恢复地址:<font color="comment">{HOST.IP}</font>
>恢复时间:<font color="comment">{EVENT.DATE} {EVENT.TIME}</font>
>告警等级:<font color="comment">{TRIGGER.SEVERITY}</font>
>恢复信息:<font color="comment">{TRIGGER.NAME}</font>
>恢复项目:<font color="comment">{TRIGGER.KEY1}</font>
>问题详情:<font color="comment">{ITEM.NAME}:{ITEM.VALUE} </font>
>当前状态:<font color="comment">{TRIGGER.STATUS}: {ITEM.VALUE1}</font>
>事 件 ID:<font color="comment">{EVENT.ID}</font>
(3)选项部分的设置
(4)为用户添加报警媒介
(5)创建触发器动作
在被监控主机上安装一个 httpd。
为该主机添加一个Apache by Zabbix agent 的模板
在“告警”-->“动作”中创建一个“触发器动作”,并设置操作和恢复操作。
(6)验证
停止掉httpd服务,观察钉钉消息
四、利用 SNMP 协议监控网络设备
1.SNMP 协议
简单网络管理协议(SNMP)是一种网络协议,用于管理和监视Internet 协议网络中的网络连接设备。SNMP 协议嵌入在多个本地设备中,例如路由器、交换机、服务器、防火墙和可使用其 IP 地址访问的无线接入点。SNMP 为网络设备在单一和多供应商 LAN 或 WAN 环境中中继管理信息提供了一种通用机制。它是 OSI 模型框架中的一个应用层协议。
SNMP 管理信息库(简称 MIB)是定义可以从本地设备收集什么以及可以更改和配置什么的数据结构。有许多由 IETF 和 IS0 等标准机构定义的 MIB,以及由 cisco 等特定 IT 设备供应商和 Microsoft和 oracle 等软件供应商定义的专有 MIB。
SNMP 端口通过 UDP 161 用于 SNMP 管理器与 SNMP 代理(即轮询)通信,当代理向 SNMP 管理器发送未经请求的陷阱时使用 UDP 162。
SNMP 有三种不同的版本:
- SNMP 版本 1(SNMPv1)- 这是第一个实现,在结构管理信息规范内运行,并在 RFC 1157 中进行了描述。
- SNMP 版本 2(SNMPv2)-此版本经过改进以支持更有效的错误处理,并在 RFC 1901 中进行了描述。它最初是作为 RFC 1441 引入的。它通常被称为 SNMPv2c。
- SNMP 版本 3(SNMPV3)-此版本提高了安全性和隐私性。它是在 RFC 3410 中引入的。
2.案例环境设置
使用 GNS3 搭建此实验环境,将路由器的接口连接到 Host 主机的 Vnet8 的接口。因为实验环境使用的 Vware,用的是默认的网络连接方式--NAT模式,在此模式中,虚拟机实际连接的就是 vnet8。因此在 GNS3 中只要将设备的接口连接到 VMnet8,此设备就可以和虚拟机通信了。
3.配置路由器开启 SNMP 协议
R1#conf t
R1(config)#int f0/0
R1(config-if)#ip add 192.168.10.110 255.255.255.0
R1(config-if)#no shutdown
R1(config)#snmp-server community public ro
R1(config)#snmp-server enable traps
R1(config)#snmp-server host 192.168.10.101 version 2c public
R1(config)#snmp-server trap-source f0/0
4.配置 Zabbix 监控信息
(1)创建主机群组
“数据采集”→“主机群组”→“创建主机群组”,创建群组,本案例设置的群组名为 net device。
(2)创建主机
“数据采集”→“主机”,创建主机。按照下图设置,其他保持默认即可。
本案例中的模板使用 Cisco lOS by SNMP,也可以使用其他模板,只要该设备型号和改模板对应即可,例如下面的模板:
Cisco lOS versions 12.0 3 T-12.2 3.5 by SNMP
(3)添加宏
宏是一个变量,宏解析为一个特殊的值。有效地使用宏可以节省时间,并使 Zabbix 变地更加高效。
此处在设置时,需要填写路由器中设置的共同体名称,本案例中使用的名称是 public。