关于运维:机器硬件监控最简单的方案没有之一

5次阅读

共计 3791 个字符,预计需要花费 10 分钟才能阅读完成。

之前新东方的老师分享了他们通过 Telegraf、Loki、Nightingale 等工具来监控机器硬件状态的计划,具备很强的灵活性、平台性。本文会介绍一个绝对轻量的形式,只须要一个二进制 + 一个脚本即可搞定,给各位朋友提供一种新的抉择。

新东方的计划

物理机能够通过带外开启 SNMP,通过 SNMP 能够获取各个硬件模块的衰弱状态,Telegraf 提供了很多 input、output 插件,咱们能够应用 Telegraf 的 snmp input 插件采集硬件状态信息,应用 loki output 插件写入 Loki,而后应用 Nightingale 做告警规定配置(Loki 兼容 Prometheus 的 Querying 接口),产出告警事件,之后能够发给钉钉、企微,或者发给 FlashDuty 做告警聚合降噪、排班、认领、降级等后续解决。

实操步骤

1. snmp 插件筹备

snmp 监控次要通过各种 oid 节点获取对应信息,分为 get(单值)、walk(多值),telegraf 的 snmp 插件默认是取单值,如果须要多值,能够找对应的 table 类型节点进行采集。

# 单值节点
[[inputs.snmp.field]]
name="uptime"
oid=".1.3.6.1.2.1.1.3.0"
  
# 多值节点,table 类型
[[inputs.snmp.table]]
oid = ".1.3.6.1.2.1.31.1.1"
name = "interface"

2. OID 节点查找

不同型号的物理机,oid 节点不同,能够通过对应型号的 MIB 文件进行查找。除了独自查找每个硬件的状态 oid 外,MIB 文件中个别还能找到服务器整体状态的 OID 节点,能够间接取这个值,以下例子为浪潮服务器:

失常取值为 ”OK”、”Normal”,有报警的话取值为 ”WARNING”、”CRITICAL”。

采集 OID=’INSPUR-MIB::serverSystemHealthTable’(转换数字为 ’.1.3.6.1.4.1.37945.2.1.2.13.1’),能够先用 snmpwalk 命令看下取值:

# 失常节点
snmpwalk -v3  1.1.1.1 INSPUR-MIB::serverSystemHealthTable
INSPUR-MIB::serverCurPowerState.""= STRING:"Power On"INSPUR-MIB::serverUIDState."" = STRING: "UID Off"
INSPUR-MIB::serverCPUState.""= STRING:"OK"INSPUR-MIB::serverMemoryState."" = STRING: "OK"
INSPUR-MIB::serverHDDState.""= STRING:"OK"INSPUR-MIB::serverFANState."" = STRING: "OK"
INSPUR-MIB::serverPSUState.""= STRING:"OK"INSPUR-MIB::serverRAIDState."" = STRING: "OK"
INSPUR-MIB::serverTempState.""= STRING:"OK"INSPUR-MIB::serverHealthState."" = STRING: "OK"

#异样节点
snmpwalk -v3  2.2.2.2 INSPUR-MIB::serverSystemHealthTable
INSPUR-MIB::serverCurPowerState.""= STRING:"Power On"INSPUR-MIB::serverUIDState."" = STRING: "UID Off"
INSPUR-MIB::serverCPUState.""= STRING:"OK"INSPUR-MIB::serverMemoryState."" = STRING: "WARNING"
INSPUR-MIB::serverHDDState.""= STRING:"OK"INSPUR-MIB::serverFANState."" = STRING: "OK"
INSPUR-MIB::serverPSUState.""= STRING:"OK"INSPUR-MIB::serverRAIDState."" = STRING: "OK"
INSPUR-MIB::serverTempState.""= STRING:"OK"INSPUR-MIB::serverHealthState."" = STRING: "WARNING"
INSPUR-MIB::serverCPUStandardStatus.""= STRING:"Normal"INSPUR-MIB::serverMemoryStandardStatus."" = STRING: "Warning"
INSPUR-MIB::serverHDDStandardStatus.""= STRING:"Normal"INSPUR-MIB::serverFANStandardStatus."" = STRING: "Normal"
INSPUR-MIB::serverPSUStandardStatus.""= STRING:"Normal"INSPUR-MIB::serverRAIDStandardStatus."" = STRING: "Normal"
INSPUR-MIB::serverTempStandardStatus.""= STRING:"Normal"INSPUR-MIB::serverHealthStandardStatus."" = STRING: "Warning"

通过采集状态能够看出 2.2.2.2 这个机子 memory 为报警状态。具体如何配置 Telegraf,如何配置夜莺和 Loki 对接,请参看文章:新东方老师教你应用 Telegraf + Loki + Nightingale 实现硬件监控。

既然 snmpwalk 能够拿到具体内容了,也晓得要告警的关键字是 WARNING、CRITICAL,理论不必这么简单也能够告警。上面咱们介绍应用 catpaw 的计划。

catpaw 的计划

catpaw 是一个事件监控工具,提供了多种插件,从 v0.4.0 版本开始,提供了 sfilter 插件,具体逻辑是:通过执行脚本或命令获取输入(stdout),而后对输入的内容做字符串匹配,如果匹配到了,就能够产生告警事件。把告警事件推给 FlashDuty 即可。

1. 装置 catpaw

catpaw 的装置非常简单,只须要下载二进制文件即可,下载地址:https://download.flashcat.cloud/catpaw-v0.4.0-linux-amd64.tar.gz,目前提供的是 linux-amd64 的安装包,如果有其余平台的安装包的需要,能够分割我。

2. 配置 sfilter 插件

sfilter 插件的配置在 conf.d/p.sfilter/sfilter.toml,样例如下:

[[instances]]
command = "/path/to/sfilter-scripts/system-health.sh"
# # script timeout
timeout = "10s"
# check rule name
check = "Check system health state"

# support glob
filter_include = ["*WARNING*", "*CRITICAL*"]
filter_exclude = []

# # gather interval
interval = "30s"

[instances.alerting]
## Enable alerting or not
enabled = true
## Same functionality as Prometheus keyword 'for'
for_duration = 0
## Minimum interval duration between notifications
repeat_interval = "5m"
## Maximum number of notifications
repeat_number = 3
## Whether notify recovery event
recovery_notification = true
## Choice: Critical, Warning, Info
default_severity = "Warning"

3. 编写脚本

system-health.sh 脚本是须要咱们筹备的,比方就简略的探测一下 192.168.3.4 机器的零碎衰弱状态(以浪潮机器举例),脚本内容如下:

#!/bin/sh
snmpwalk -v2c -c public 192.168.3.4 INSPUR-MIB::serverSystemHealthTable

4. 配置事件推送地址

catpaw 只负责产生事件,不负责事件的后续解决(告警聚合降噪、认领降级、排班、多渠道触达等),这些性能交由 FlashDuty,在 FlashDuty 的合作空间中创立一个自定义事件的集成,点击就能够看到推送地址了:

把截图中这个 URL 配置到 catpaw 的 config.toml 中。

5. 启动 catpaw

nohup ./catpaw --configs conf.d &> catpaw.log &

如果服务器有硬件故障,就会产生告警了,完活!enjoy…make a better world :)

正文完
 0