夜莺监控(Nightingale)中的对象列表
上图是夜莺的对象列表,很多小伙伴会比较奇怪,这个页面没有新增按钮,这些数据是怎么来的呢?为何要设计这个功能,出发点是什么?这一篇文章我们来简单聊聊这个问题。
简介
其实,从标识这一列可以看到,都是机器名,说明这个表里的数据都是机器信息。你会发现,部署了 Categraf、Telegraf、Grafana-Agent、Datadog-agent 这些采集器的机器,都会出现在这个表里,但是如果你使用 node-exporter 来拉取监控数据,node-exporter 所在的机器不会出现在这里。
原理
agent 采集了监控数据之后上报给 n9e-server,n9e-server 会从监控数据中解析出机器标识信息,然后写入DB的targets表,你就可以在这个表里看到了。换言之,如果数据没有流经 n9e-server,即 n9e-server 无法解析监控数据,那也就不会出现在这里。典型的就是 node-exporter,node-exporter 的数据是PULL模式,你可能直接使用 Prometheus 做了一个抓取器来抓取这些 exporter 的数据,Prometheus 抓了数据之后直接写入时序库了,所以数据并没有流经 n9e-server,也就不会出现在这个表里。
用处
第一个用处:给机器打标签,做分类。机器只属于一个业务组,但是只用业务组来划分,颗粒度太粗了,想要更细粒度的划分,则要通过标签来做,这部分内容可以参考《Nightingale|夜莺监控机器分组的设计逻辑》。机器一旦打了标签,机器相关的监控数据上报的时候,就会自动为时序数据附上这些标签。比如给 host1 打了一个标签 service=a
,过一会(20s左右)去查看 host1 的时序数据,比如 mem_available_percent,就会发现 metric 上面多了 service=a
这个标签。如此一来,我们后面即使不用夜莺看图,用Grafana等UI工具,也可以使用service=a
标签来做过滤,非常方便。
第二个用处:给机器划分业务组,做权限控制。因为告警自愈功能需要去机器上跑脚本,这个要有强管控,哪些人可以对哪些机器执行脚本,就需要依赖业务组和机器的对应关系,同样参考《Nightingale|夜莺监控机器分组的设计逻辑》。
第三个用处:显示机器基本利用率数据。表格里红红绿绿的区块,实际展示的是监控指标的数据,哪些监控指标?可以参考 webapi.conf 的如下配置:
[TargetMetrics]
TargetUp = '''max(max_over_time(target_up{ident=~"(%s)"}[%dm])) by (ident)'''
LoadPerCore = '''max(max_over_time(system_load_norm_1{ident=~"(%s)"}[%dm])) by (ident)'''
MemUtil = '''100-max(max_over_time(mem_available_percent{ident=~"(%s)"}[%dm])) by (ident)'''
DiskUtil = '''max(max_over_time(disk_used_percent{ident=~"(%s)", path="/"}[%dm])) by (ident)'''
吆西,实际就是这么几个 PromQL,PromQL里有两个变量,一个是 %s
,未来就是填充为多台机器,|
分隔,%d
是时间段,默认是2
,即最近2分钟。有些人朋友说表格里没数据,大概的原因可能有:
- 机器时间没有校准,尤其是浏览器所在的PC电脑和服务端时序库的时间不一致
- 上报的监控数据滞后了,即2min内没有新数据上来,所以上面的PromQL也查不到数据
自行注册
如果我们想自行往 target 表里注册数据,怎么做呢?两个办法:
- 直接上报监控数据到 n9e-server,监控数据里带有 ident 标签,n9e-server 就会取 ident 标签的值作为机器标识写入 target 表
- 直接写DB中的target表
对象列表内容缺失的影响
比如我们使用 Prometheus 或 vmagent 作为抓取器,直接抓取 node-exporter 的数据,写入时序库,数据没有流经 n9e-server,此时对象列表为空。对象列表为空有问题么?有点问题,但是问题不大,既不影响告警规则配置,也不影响监控看图,就是没法做告警自愈了而已,很多公司其实没有使用告警自愈的功能,所以,还好吧
关于作者
本文作者秦晓辉,Flashcat合伙人,文章内容是我们技术团队共同沉淀的结晶,作者做了编辑整理,我们会持续输出监控、稳定性保障相关的技术文章,文章可转载,转载请注明出处,尊重技术人员的成果。