翼度科技»论坛 云主机 LINUX 查看内容

机器硬件监控,最简单的方案,没有之一

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
之前新东方的老师分享了他们通过 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类型节点进行采集。
  1. # 单值节点
  2. [[inputs.snmp.field]]
  3. name="uptime"
  4. oid=".1.3.6.1.2.1.1.3.0"
  5.   
  6. # 多值节点,table类型
  7. [[inputs.snmp.table]]
  8. oid = ".1.3.6.1.2.1.31.1.1"
  9. 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命令看下取值:
  1. #正常节点
  2. snmpwalk -v3  1.1.1.1 INSPUR-MIB::serverSystemHealthTable
  3. INSPUR-MIB::serverCurPowerState."" = STRING: "Power On"
  4. INSPUR-MIB::serverUIDState."" = STRING: "UID Off"
  5. INSPUR-MIB::serverCPUState."" = STRING: "OK"
  6. INSPUR-MIB::serverMemoryState."" = STRING: "OK"
  7. INSPUR-MIB::serverHDDState."" = STRING: "OK"
  8. INSPUR-MIB::serverFANState."" = STRING: "OK"
  9. INSPUR-MIB::serverPSUState."" = STRING: "OK"
  10. INSPUR-MIB::serverRAIDState."" = STRING: "OK"
  11. INSPUR-MIB::serverTempState."" = STRING: "OK"
  12. INSPUR-MIB::serverHealthState."" = STRING: "OK"
  13. #异常节点
  14. snmpwalk -v3  2.2.2.2 INSPUR-MIB::serverSystemHealthTable
  15. INSPUR-MIB::serverCurPowerState."" = STRING: "Power On"
  16. INSPUR-MIB::serverUIDState."" = STRING: "UID Off"
  17. INSPUR-MIB::serverCPUState."" = STRING: "OK"
  18. INSPUR-MIB::serverMemoryState."" = STRING: "WARNING"
  19. INSPUR-MIB::serverHDDState."" = STRING: "OK"
  20. INSPUR-MIB::serverFANState."" = STRING: "OK"
  21. INSPUR-MIB::serverPSUState."" = STRING: "OK"
  22. INSPUR-MIB::serverRAIDState."" = STRING: "OK"
  23. INSPUR-MIB::serverTempState."" = STRING: "OK"
  24. INSPUR-MIB::serverHealthState."" = STRING: "WARNING"
  25. INSPUR-MIB::serverCPUStandardStatus."" = STRING: "Normal"
  26. INSPUR-MIB::serverMemoryStandardStatus."" = STRING: "Warning"
  27. INSPUR-MIB::serverHDDStandardStatus."" = STRING: "Normal"
  28. INSPUR-MIB::serverFANStandardStatus."" = STRING: "Normal"
  29. INSPUR-MIB::serverPSUStandardStatus."" = STRING: "Normal"
  30. INSPUR-MIB::serverRAIDStandardStatus."" = STRING: "Normal"
  31. INSPUR-MIB::serverTempStandardStatus."" = STRING: "Normal"
  32. 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,样例如下:
  1. [[instances]]
  2. command = "/path/to/sfilter-scripts/system-health.sh"
  3. # # script timeout
  4. timeout = "10s"
  5. # check rule name
  6. check = "Check system health state"
  7. # support glob
  8. filter_include = ["*WARNING*", "*CRITICAL*"]
  9. filter_exclude = []
  10. # # gather interval
  11. interval = "30s"
  12. [instances.alerting]
  13. ## Enable alerting or not
  14. enabled = true
  15. ## Same functionality as Prometheus keyword 'for'
  16. for_duration = 0
  17. ## Minimum interval duration between notifications
  18. repeat_interval = "5m"
  19. ## Maximum number of notifications
  20. repeat_number = 3
  21. ## Whether notify recovery event
  22. recovery_notification = true
  23. ## Choice: Critical, Warning, Info
  24. default_severity = "Warning"
复制代码
3. 编写脚本

system-health.sh 脚本是需要我们准备的,比如就简单的探测一下 192.168.3.4 机器的系统健康状态(以浪潮机器举例),脚本内容如下:
  1. #!/bin/sh
  2. snmpwalk -v2c -c public 192.168.3.4 INSPUR-MIB::serverSystemHealthTable
复制代码
4. 配置事件推送地址

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

把截图中这个 URL 配置到 catpaw 的 config.toml 中。
5. 启动 catpaw
  1. nohup ./catpaw --configs conf.d &> catpaw.log &
复制代码
如果服务器有硬件故障,就会产生告警了,完活!enjoy…make a better world :)

来源:https://www.cnblogs.com/ulricqin/p/17480805.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具