小阿轩yx-案例:Zabbix企业级高级应用
前言
- 随着业务的越发复杂,对软件系统的要求越来越高,这意味着我们需要随时掌控系统的运行情况。
- 因此,对系统的实时监控以及可视化展示,就成了基础架构的必须能力。
Zabbix 可视化
Grafana 简介
- 是一个开源的指标量监测和可视化工具
- 官方网站 https://grafana.com
- 安装非常简单,官方就有软件仓库可以直接使用,也可以通过 docker 镜像等方式直接本地启动
- 还可以直接下载 rpm 包、二进制包进行安装
- 可以帮助用户将数据源中的数据进行图形化展示和实时监控,便于用户能够更加直观理解数据
可以从 https://grafana.com/grafana/download 下载 rpm 安装包
支持多种数据源包括
- Graphite
- Rlasticsearch
- InfluDB
- Prometheus
也支持多种展示方式
如
- 图表
- 仪表盘
- 地图
- 日历
主要作用包括
- 数据可视化:通过 Grafana,用户可以将复杂的数据转化成易于理解的图表和仪表盘,并在一个界面中集中展示多个数据源的数据。
- 实时监控:Grafana 支持实时监控,可以帮助用户实时了解系统状态、性能等指标的变化情况。
- 告警与通知:Grafana 可以设置告警规则,当某些指标达到预设的阈值时,会自动发送通知,提醒用户关注和处理。
- 可扩展性:Grafana 支持插件式的开发模式,用户可以通过插件扩展功能,满足自己的特定需求。
总之,Grafana 是一款功能强大的数据可视化工具,可以帮助用户更好地理解数据,提高数据分析效率,提升工作效率。
Grafana 的特点
展示方式
- grafana 拥有快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,让复杂的数据展示的美观而优雅。
插件比如
- 热图
- 折线图
- 图表
数据源
- Grafana 支持许多不同的时间序列数据(数据源)存储后端。
- 每个数据源都有一个特定査询编辑器。
- 官方支持以下数据源
- Graphite
- infloxdb
- opensdb
- prometheus
- elasticsearch
- cloudwatch
- 每个数据源的查询语言和功能明显不同。
- 可以将来自多个数据源的数据组合到一个仪表板上,但每个面板都要绑定到属于特定组织的特定数据源。
通知提醒
- Grafana 中的警报允许您将规则附加到仪表板面板上。
- 保存仪表板时,Gravana 会将警报规则提取到单独的警报规则存储中,并安排它们进行评估。
- 报警消息还能通过钉钉、邮箱等推送至移动端。
- 但目前 grafana 只支持 graph 面板的报警。
混合展示
- Grafana 使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记。
注释
- Grafana 使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
过滤器
- Grafana 使用 Ad-hoc 过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。
Grafana 实现 Zabbix 可视化
安装 Grafana
下载并安装
本案例使用的 grafana-enterprise-10.2.2的版本,可以使用下面连接进行下载
https://dl.grafana.com/oss/release/grafana-enterprise-10.2.2-1.x86_64.rpm
如果需要其它版本,可登录 Grafana 官方网站,下载其它版本。
[root@zbx ~]# yum -y install grafana-enterprise-10.2.2-1.x86_64.rpm
启动服务
[root@zbx ~]# systemctl start grafana-server
[root@zbx ~]# systemctl enable grafana-server
查看服务状态
[root@zbx ~]# systemctl status grafana-server
Grafana 的配置文件位于/etc/grafana/grafana.ini,一般情况下无需修改配置文件。
插件安装
Grafana 插件简介
- Grafana 是实现 Grafana 各项功能的重要组成部分
插件类型有三种
- Panel Plugin:支持添加可视化图表、支持图表参数的配置
- Data source Plugin:支持配置数据源,支持添加数据源配置,支持使用数据源配置,支持后台数据源,分为前台(frontend)数据源插件和后台(backend)数据源插件。
- frontend source Plugin
- backend source Plugin
- App Plugin,支持创建应用,创建自定义页面
安装 grafana-zabbix 插件
- grafana 和 zabbix 的集成是通过插件方式实现的,因此,需要先安装 grafana-zabbix 插件
- grafana官方已经包含了这个插件,直接使用即可。
在 grafana 上查询插件
[root@zbx ~]# grafana-cli plugins list-remotegrep zabbix
id: alexanderzobnin-zabbix-app version:4.1.5
安装插件
方法一:在线安装
[root@zbx ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
- 安装成功之后会提示我们需要重启 grafana 服务,以使插件生效。
方法二:离线安装
如果无法在线下载,可以使用离线安装包。本案例使用此方法。
如果没有 unzip 解压缩工具要先下载一下
[root@zbx ~]# yum -y install unzip
解压
[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
重启 grafana
- 所有需要的插件安装完成后,执行命令重启 grafana 服务
[root@zbx ~]# systemctl restart grafana-server
登录 grafana
- http://192.168.10.108:3000
默认账号:admin
默认密码:admin
配置 zabbix 数据源
- 要使得 Grafana 能够展示数据,必须有一个数据来源
比如 zabbix、ELK 等都可以为 Grafana 提供数据
添加数据源的步骤
打开 Administration 项
点击 Plugins
进入如下界面,显示的是默认 Grafana 自带的数据源
搜索 zabbix 插件,并 Signed(签署)插件
- 我们要添加 zabbix,那么 zabbix 是以插件形式存在的,搜索 zabbix
启用 zabbix 插件
- 这里点击 “Enable”,启用这个插件。
再次查看并添加数据源
- 启用 zabbix 插件之后,选择 “Add your first data source ” 标签
点击 zabbix,进入参数配置界面
设置 zabbix 数据源参数
- 点击 Select 按钮之后,会进入到参数设置页面
- 填写 zabbix 链接和 zabbix 账号密码
- http://192.168.10.108/api_jsonrpc.php
配置完成之后,点击最下面的“Save &Test”,如果配置有问题会报错提示,如果没有问题会提示成功。
通过添加 Grafana 图像创建 Dashboard
新建 Dashboard 添加图形
添加 visualization(可视化)界面
- 出现如下所示界面后点击 Add visualization,并选择前面添加的 zabbix 数据源。
添加要监控的数据
保存
- 填写标题并保存
回到 home 界面查看结果
添加监控对象图形
- 点击上图中 “我的监控” ,进入监控图形界面
- 点 Add,再添加一个 visualzation
- 其它监控项都是这个方法
通过导入模板创建 Dashboard
- 想要获取更多模板,可以前往官方获取
https://grafana.com/grafana/dashboards/
在 home 界面点击 “Create your first dashboard”
在当前界面点击导入按钮
输入面板 ID 并点击 Load 按钮
- 5363
选择 zabbix 数据源并点击 import 按钮进行导入
修改面板
- 导入后的面板可能没有数据显示,只有一个框架,可以具体调整每一个图形。
- 点击对应的图形右上角的三个点
- 如果看不见这三个点,可以将鼠标移动到此图形中,就可以看见了。
点击 edit 进入编辑界面
修改参数并保存
查看修改结果
钉钉告警设置
- zabbix 的告警机制中,除了前面讲过的邮箱告警之外,另一个常用的告警方式是钉钉告警
- 可以将同一个运维组的人员加入到同一个钉钉工作群中,当有异常出现后,Zabbix 将告警信息发送到钉钉的群里面,群里所有的运维人员都能在第一时间看到这则告警详细。
- Zabbix 监控系统默认没有开箱即用的对接钉钉的结构,需要利用 Zabbix 监控系统的脚本定制化的方式扩展钉钉告警的实现。
webhook 的定义
- 是一个 API 概念,是微服务 API 的使用范式之一,也被称为反向 API,即前端不主动发送请求,完全由后端推送;
- 比如你的好友发了一条朋友圈,后端将这条消息推送给所有其他好友的客户端,就是 Webhook 的典型场景。
- 简单说 Webhook 就是一个接收 HTTP POST(或 GET、PUT、DELETE)的 URL,一个实现了 webhook 的 API 提供商就是在当事件发生的时候会向这个配置好的 URL 发送一条信息,与请求-响应式不同,使用 Webhook 可以实时接收到变化。
- 钉钉中,我们可以为群创建一个 webhook,Zabbix 就是通过 webhook 向这个钉钉群发送信息的。
为钉钉群创建 webhook
- 钉钉机器人是全局唯一的应用,即无论是在单聊场景中还是群聊场景中,都可以用来推送应用的通知和用来对用户进行对话式服务,机器人 ID 都可以是唯一的。
- 意味着开发者既可以选择仅创建一个机器人,而后将其放在各个应用场景下使用,也可以创建多个机器人,然后分别部署在不同场景下。
设置钉钉机器人
- 群设置 --> 智能群助手
- 添加自定义群机器人
多添加一些关键字
- 报警
- 告警
- 问题
- 故障
- 恢复
生成 webhook
- 记下这个 webhook,只要这个钉钉机器人不删除,这个 webhook 就一直可以使用。
测试
- 使用命令在 Linux 系统中发送测试信息
[root@zbx ~]# curl 'https://oapi.dingtalk,com/robot/send?access token=6d07ddc122c69d0bb23a6212f2378b4da45c750ac09a2910f653cd5d324556cd' -H 'Content-Type: application/json' -d '{"msgtype": "text","text": {"content":"报警"}}'
设置 zabbix 告警方式
创建报警媒介
- “告警” --> “媒介”,创建媒介类型
参数部分设置
- Message: {ALERT.MESSAGE}
- To: {ALERT.SENDTO}
- URL: https://oapi.dingtalk.com/robot/send?access_token
删除其它参数
将本案例提供的脚本粘贴进去
消息模板设置
- 在消息模板页面,消息的类型主要设置两个:问题和问题恢复
消息类型问题的消息模板填写
主题:
- 【告警】<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>
选项部分的设置
为以后添加报警媒介
创建触发器动作
- 在被监控主机上安装一个 httpd。
- 为该主机添加一个 Apache by zabbix agent 的模板
- 在 “告警” --> “动作” 中创建一个 “触发器动作”,并设置操作和恢复操作。
验证
- 停止掉 httpd 服务,观察钉钉消息
利用 SNMP 协议监控网络设备
SNMP 协议
- 简单网络管理协议(SNMP)是一种网络协议
- 用于管理和监视 Internet 协议网络中的网络连接设备。
- SNMP 协议嵌入在多个本地设备中
例如
- 路由器
- 交换机
- 服务器
- 防火墙
- 可使用其 IP 地址访问的无线接入点
- SNMP 为网络设备在单一和多供应商 LAN 或 WAN 环境中中继管理信息提供了一种通用机制。
- 它是 OSI 模型框架中的一个应用层协议。
SNMP 管理信息库(简称 MIB)
- 是定义可以从本地设备收集什么以及可以更改和配置什么的数据结构。
- 有许多由 IETF 和 ISO 等标准机构定义的 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 3418 中引入的。
案例环境设置
- 使用 GNS3 搭建此实验环境,将路由器的接口连接到 Host 主机的 Vnet8 的接口。
- 因为实验环境使用的 VMware,用的是默认的网络连接方式 --NAT 模式,在此模式中,虚拟机实际连接的就是 net8。
- 因此在 GNS3 中只要将设备的接口连接到 VMnet8,此设备就可以和虚拟机通信了。
配置路由器开启 SNMP 协议
R1#conf t
R1(config)# int fo/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
配置 Zabbix 监控信息
创建主机群组
- “数据采集” → “主机群组” → “创建主机群组”,创建群组
- 本案例设置的群组名为 net device
创建主机
- “数据采集” → “主机”,创建主机。
- 按照图中设置,其他保持默认即可。
- 本案例中的模板使用 Cisco lOS by SNMP,也可以使用其他模板,只要该设备型号和改模板对应即可
例如模板
- Cisco loS versions 12.0_3_T-12.2_3.5 by SNMP
添加宏
- 宏是一个变量,宏解析为一个特殊的值。
- 有效地使用宏可以节省时间,并使 zabbix 变地更加高效
- 此处在设置时,需要填写路由器中设置的共同体名称
本案例中使用的名称是 public
在主机列表中查看结果
查看图形信息
小阿轩yx-案例:Zabbix企业级高级应用