手把手教你用夜莺监控机器
前言
从重要性而言,首要监控的指标应该是业务北极星指标,其次是应用的RED(Request、Error、Duration)指标,但是要想快速体验一个监控系统,显然从机器监控开始更容易。本文将手把手教你如何用夜莺监控机器,快速体验夜莺的监控功能。
环境介绍
- OS:Ubuntu 22.04.4 LTS
- CPU Architecture:aarch64
这是我本机的的虚拟机,arm64 架构,你也可以使用 x86 架构的 CPU。
架构介绍
机器监控数据的采集有很多种工具,比如 Telegraf、Node-Exporter、Datadog-agent 等,夜莺可以和这些采集器对接,但最为丝滑的采集器仍然是 Categraf,所以本文会使用 Categraf 来采集机器监控数据。
每台机器部署 Categraf,采集 CPU、内存、磁盘、IO、进程等监控数据,然后将数据上报到夜莺,夜莺不直接存储监控数据,而是将数据存储到时序数据库,比如 Prometheus、VictoriaMetrics 等,上图画的是 Prometheus,我们就以 Prometheus 为例。
安装 Prometheus
从 Prometheus 的官网下载最新版本的 Prometheus,解压之后直接运行即可:
nohup ./prometheus --config.file prometheus.yml --storage.tsdb.path=./data9090 --web.enable-lifecycle --query.lookback-delta=1m --web.listen-address="0.0.0.0:9090" --web.enable-remote-write-receiver &> stdout.log &
如果你已经部署过 Prometheus,可以跳过这一步。上例只是一个演示,直接使用 nohup 启动,实际生产环境中需要使用 systemd 等工具来管理进程。
🔴 注意:夜莺是通过 remote write 协议写数据到 Prometheus,Prometheus 要通过命令行参数开启 remote write 接口,即
--web.enable-remote-write-receiver
。这是 Prometheus v2 版本的参数,如果是 Prometheus v3 版本,参数名字不同,可以通过./prometheus --help | grep receiver
查看自己参数的具体命名方式。
安装夜莺
从夜莺的 github releases 页面下载最新版本的夜莺,解压之后直接运行即可:
mkdir -p /opt/nightingale
tar zxvf n9e-v8.0.0-beta.6-linux-arm64.tar.gz -C /opt/nightingale
cd /opt/nightingale
nohup ./n9e &> stdout.log &
🔴 注意:我这里采用的版本是 v8.0.0-beta.6,你看到这个文章的时候可能已经有更新的版本了,届时使用最新的版本即可。
这里我们直接使用 nohup 启动,实际生产环境中需要使用 systemd 等工具来管理进程。夜莺的默认配置,直接使用 sqlite 和 miniredis 存储数据,测试环境 ok 的,如果是生产环境,还是需要改用 mysql 和 redis 来存储数据。
查看 stdout.log 中的日志,可以看到夜莺的默认用户名和密码:root / root.2020
,也可以看到夜莺默认监听的端口 17000
,通过浏览器访问 http://your-ip:17000
即可看到夜莺的登录页面。
在 集成中心-数据源
页面添加 Prometheus 数据源,填写 Prometheus 的地址即可,如下图所示:
夜莺可以接入多个不同的数据源,比如 Loki、ElasticSearch、Prometheus 等,这里我们只接入 Prometheus,所以只有一个数据源,核心配置就是 Prometheus 的地址:
添加了数据源之后,就可以在即时查询查到监控数据了:
不过,目前还查不到机器监控数据,因为还没有部署 Categraf。在部署 Categraf 之前我们先来配置一下夜莺。
配置夜莺转发数据到 Prometheus
categraf 推送数据给夜莺,夜莺转发数据给 Prometheus,那夜莺怎么知道 Prometheus 的地址?这个配置在夜莺的 etc/config.toml
文件中,找到 [[Pushgw.Writers]]
配置项,在 Url 那填写 Prometheus 的 remote write 地址即可:
...
[[Pushgw.Writers]]
Url = "http://127.0.0.1:9090/api/v1/write"
...
如果想把监控数据同时发给多个时序数据库,可以添加多个 [[Pushgw.Writers]]
配置项。比如:
...
# write to prometheus
[[Pushgw.Writers]]
Url = "http://127.0.0.1:9090/api/v1/write"
# write to vminsert
[[Pushgw.Writers]]
Url = "http://127.0.0.1:8480/insert/0/prometheus/api/v1/write"
...
部署 Categraf
到 categraf 的 github releases 页面下载最新版本的 categraf 并解压:
wget https://github.com/flashcatcloud/categraf/releases/download/v0.4.3/categraf-v0.4.3-linux-arm64.tar.gz
tar zxvf categraf-v0.4.3-linux-arm64.tar.gz
编辑 categraf 的配置文件:conf/config.toml,修改其中的 127.0.0.1:17000,改成你的夜莺的地址,然后启动 categraf:
nohup ./categraf &> stdout.log &
检查 stdout.log 确保进程正常启动。
查看监控数据
稍等个 30s 左右,就可以在夜莺的即时查询页面看到机器监控数据了:
cpu_usage_active 表示 CPU 使用率。
夜莺内置了仪表盘和告警规则,可以去仪表盘列表页面导入机器相关的仪表盘:
点击导入,选择 Linux 组件:
勾选机器常用指标,点击导入即可。
「机器常用指标 - 所有机器」,这个仪表盘点开就可以看到监控数据了,会看到所有机器的监控数据。样例如下:
「机器常用指标 - 只展示业务组内的机器」,这个仪表盘点开看不到监控数据,因为这个仪表盘只展示业务组内的机器,而此时业务组下还没有机器
修改机器所属的业务组:
把机器加入到「Default Busi Group」这个业务组,然后再刷新「机器常用指标 - 只展示业务组内的机器」就可以看到机器监控数据了。
导入告警规则
告警规则可能会很多,需要分组管理,所以告警规则要归属于某个业务组下。我们进入「告警规则」菜单,选中 Default Busi Group,然后导入告警规则:
导入之后的效果:
如果有机器的监控数据异常,就会产生告警事件,到 告警管理-活跃告警
下面可以看到。为了快速看到效果,你也可以修改某个告警规则的阈值,尽快触发告警。
这里我修改一下 「CPU利用率较高」这个规则,把 cpu_usage_active 的阈值改成 > 0
,这样很快就可以看到告警事件了。
告警通知
这里我们先配置一个最简单的钉钉通知,之后再配置更多的通知方式。钉钉机器人有多种认证方式,我们使用最简单的关键字认证方式,关键字写成 20
,因为告警通知中肯定会有时间,所以肯定会包含 20
这两个字符。
然后把回调地址填到告警规则的回调地址中即可:
最近也在优化告警通知的逻辑。下个版本就会改造完成,等下个版本发版之后我再具体介绍。
总结
本文手把手教你如何用夜莺监控机器,快速体验夜莺的监控功能,希望对你有帮助。