刷新了本地监控工具的故事

我之前使用了一个名为Cacti的基于SNMP+RRDTool的监控工具来进行监视。

从 Prometheus 和 Grafana 迁移到长期保存存储的故事。

Cacti 是指仙人掌。

使用SNMP进行监控的工具主要用于网络监视等。在0.8x版本中,有一个名为Weathermap的插件,可以绘制网络图,并可视化显示从哪里到哪里的通信最多,非常方便。但是在1.0版本中,不再支持并且无法使用。数据存储方面使用RRDTool。

RRDTool是什么?

用于时间序列数据的数据库工具。最近的数据可以细分,而旧数据可以进行聚合并粗略保存,这是一个高性能的工具。通过对旧数据进行聚合,可以将长时间的数据压缩保存。

普羅米修斯(Prometheus)是指

用于监控和警报的工具。
能够处理时间序列数据。

格拉納是什麼意思?

仪表板工具。可视化Prometheus的数据。

为什么进行了迁移?

在公司内部,除了Cacti之外,还有多个监控工具在运行,独立运维这些工具很麻烦,所以希望统一起来。作为统一的选择,Prometheus似乎是个不错的选项。(因此,在本文中我们将以Cacti为目标进行讨论,但我们已经迁移了一些其他的监控工具。)

通过为了添加监视对象进行请求,并进行设置。这种方法需要花费时间,并且需要一定的前期时间。现在使用Prometheus,将配置文件进行git管理,并提交pull request进行审查和合并,可以实现自动应用。这样,添加监视对象所需的时间和前期时间就减少了。

过渡步骤

    1. 洗出每台机器通过SNMP获取的信息。

这可以通过查看Cacti的设置来实现。

确定所需的监视项目。

由于可能存在不需要的项目,所以不要忘记检查,并添加缺少的项目。

引入SNMP Exporter。

由于可能存在通信限制,因此需要从正在进行SNMP监视的设备上执行。

确认在prometheus中获取数据。

在grafana中可视化数据,并整理必要的仪表板。

使用prometheus的远程写入功能将数据复制到长期保存的存储。

确认Cacti和prometheus获取的数据没有差异后,停止从Cacti获取数据。

不要忘记向用户传达新数据现在在prometheus中的事实。

由于从Cacti迁移数据很麻烦,保留Cacti以只读模式。

考虑是否可以从SNMP监视切换到其他exporter。

如果是Linux,则可以使用node_exporter。

对于自定义SNMP度量指标,寻找合适的exporter。

如果成功迁移至其他exporter并没有问题,则从snmp_exporter中删除相应内容。

在grafana或Alertmanager中设置警报。

转变后有哪些好事发生了?

    • データ取得が速くなった

 

    • snmpはデータ取得にそこそこ時間がかかっていたが、snmpの利用をかなり縮小できて、結果、速くなった

 

    • 冗長化できた

 

    • proemtheusを2台動かして、両方から同じデータを取得しており、片方が止まっても大丈夫になった

 

    • Cactiは設定がデータベースにあるため、設定の同期が大変で冗長化できていなかった

 

    • ダッシュボードがモダナイズされた。

 

    • 見た目が今風なのはとてもいい。

 

    • 初見でもわりとダッシュボードが作れる(proemtheusへのクエリを少し覚える必要はあるけれど)

 

    • 権限管理が楽になった

 

    • SAMLやgoogleログインが可能なので、ユーザ管理が楽

 

    • 監視が民主化された

 

    上記2点の結果でもあるのだけれど、誰でもダッシュボードやアラートが設定できるようになったので

经历了困难的时刻

監控目标的筛选和所需项目的筛选非常困难。

首先,在Cacti中已经存在不再运行的监视对象,而且数量本来就非常庞大。

在对监视项目进行审查时,对于那些已经获取但未使用的项目,要决定停止获取是件困难的事情。

因为之前一直获取了,所以暂时想要(但没有查看)。对这种想法进行反击相当困难。

困难的地方 de

由于Prometheus本身只保留大约两周的数据,而且也不推荐延长这个时间,所以需要准备另一个数据存储系统来进行长期保存。

作为数据存储,有Thanos、cortex、victoriametrics、Mimir等选项。

由於數據存儲庫中存在具有聚合功能和沒有聚合功能的選項,我們需要尋找符合自己需求的選項。實際上,我們選擇了一個沒有聚合功能並且保存期限比Cacti時代的兩年更短的數據存儲庫。

据说一台Proemetheus很难处理大量的数据。在这种情况下,需要运行多台Proemetheus并分散数据获取的目标。
因为这仅限于本地使用,所以并没有成为一个大问题。
作为一个大规模的案例,有LINE的案例。

bannerAds