手把手教你用夜莺监控机器

使用 Categraf、Prometheus 和夜莺搭建主机监控的完整教程,覆盖数据采集、remote write 转发、仪表盘导入、告警规则导入和钉钉通知配置。

作者 巴辉特

前言

从生产稳定性的优先级看,首要监控对象通常是业务北极星指标,其次是应用的 RED 指标,即 Request、Error、Duration。但是,如果目标是快速验证一套监控系统是否可用,从机器监控入手最直接:采集器容易部署,指标容易理解,仪表盘和告警也容易看到效果。

本文以 Prometheus 作为时序库、Categraf 作为采集器、夜莺作为监控告警平台,完整演示一台机器从采集、入库、查询、看图到告警通知的配置流程。

核心要点

  • 采集链路:Categraf 采集机器指标,推送给夜莺,夜莺再通过 remote write 转发到 Prometheus。
  • 夜莺职责:夜莺负责数据源管理、即时查询、仪表盘、告警规则和通知流程,不直接存储监控时序数据。
  • 快速体验:测试环境可以使用 nohup、sqlite 和 miniredis 快速启动;生产环境建议使用 systemd、MySQL 和 Redis。
  • 告警验证:可以临时调低告警阈值,确认告警事件与通知链路是否打通。

环境介绍

  • OS:Ubuntu 22.04.4 LTS
  • CPU Architecture:aarch64

这是我本机的虚拟机,arm64 架构,你也可以使用 x86 架构的 CPU。后文命令里的安装包名称需要按你的 CPU 架构替换。

架构介绍

机器监控数据的采集工具很多,比如 Telegraf、Node-Exporter、Datadog-agent 等。夜莺可以和这些采集器对接,但如果希望少做适配、快速体验夜莺的内置仪表盘和告警规则,Categraf 是更顺手的选择,所以本文使用 Categraf 采集机器监控数据。

夜莺架构

每台机器部署 Categraf,采集 CPU、内存、磁盘、IO、进程等监控数据,然后将数据上报到夜莺。夜莺不直接存储监控数据,而是将数据写入时序数据库,比如 Prometheus、VictoriaMetrics 等。上图画的是 Prometheus,下面也以 Prometheus 为例。

组件 本文中的作用
Categraf 部署在被监控机器上,负责采集主机指标
夜莺 接收 Categraf 数据,提供查询、仪表盘、告警和通知能力
Prometheus 作为时序数据库,接收夜莺转发的 remote write 数据

安装 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 启动。夜莺默认配置会使用 sqlite 和 miniredis 存储数据,适合测试环境;如果用于生产环境,建议改用 MySQL 和 Redis,并用 systemd 等工具管理进程。

查看 stdout.log 中的日志,可以看到夜莺的默认用户名和密码:root / root.2020,也可以看到夜莺默认监听的端口 17000,通过浏览器访问 http://your-ip:17000 即可看到夜莺的登录页面。

集成中心-数据源 页面添加 Prometheus 数据源,填写 Prometheus 的地址即可,如下图所示:

夜莺可以接入多个不同的数据源,比如 Loki、ElasticSearch、Prometheus 等,这里我们只接入 Prometheus,所以只有一个数据源,核心配置就是 Prometheus 的地址:

添加了数据源之后,就可以在即时查询查到监控数据了:

此时可以验证数据源连通性,但还查不到机器监控数据,因为 Categraf 尚未部署。在部署 Categraf 之前,需要先配置夜莺把收到的数据转发到 Prometheus。

配置夜莺转发数据到 Prometheus

Categraf 推送数据给夜莺,夜莺再转发给 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,确认 Categraf 进程正常启动,并且没有连接夜莺失败的错误。

查看监控数据

等待约 30 秒,就可以在夜莺的即时查询页面看到机器监控数据:

cpu_usage_active

cpu_usage_active 表示 CPU 使用率。

夜莺内置了仪表盘和告警规则,可以去仪表盘列表页面导入机器相关的仪表盘:

点击导入,选择 Linux 组件:

勾选机器常用指标,点击导入即可。

「机器常用指标 - 所有机器」,这个仪表盘点开就可以看到监控数据了,会看到所有机器的监控数据。样例如下:

夜莺机器仪表盘

「机器常用指标 - 只展示业务组内的机器」这个仪表盘点开后可能看不到监控数据,原因是它只展示业务组内的机器,而此时业务组下还没有机器。

修改机器所属的业务组:

把机器加入到「Default Busi Group」这个业务组,然后再刷新「机器常用指标 - 只展示业务组内的机器」就可以看到机器监控数据了。

导入告警规则

告警规则通常需要分组管理,所以规则要归属于某个业务组。进入「告警规则」菜单,选中 Default Busi Group,然后导入机器相关告警规则:

导入之后的效果:

如果机器监控数据触发了规则条件,就会产生告警事件,可以在 告警管理-活跃告警 下查看。为了快速验证链路,也可以临时修改某个告警规则的阈值,让它尽快触发。

这里我修改一下 「CPU利用率较高」这个规则,把 cpu_usage_active 的阈值改成 > 0,这样很快就可以看到告警事件了。

告警通知

这里先配置一个最简单的钉钉通知,验证告警通知是否能送达。钉钉机器人有多种认证方式,示例使用关键字认证,关键字写成 20,因为告警通知中通常会包含时间字段。

然后把回调地址填到告警规则的回调地址中即可:

如果后续需要更复杂的值班、升级、分派和通知模板,可以在告警规则、通知规则和通知媒介中继续扩展。

总结

本文完成了一条最小可用的主机监控链路:Prometheus 负责存储,夜莺负责查询、仪表盘、告警和通知,Categraf 负责采集机器指标。验证时建议按顺序检查四件事:Prometheus remote write 是否开启、夜莺 Pushgw.Writers 是否指向正确地址、Categraf writers 是否指向夜莺、业务组内是否已经关联机器和告警规则。

FAQ

Q1:夜莺是否必须和 Prometheus 一起使用? A:不是。本文为了演示使用 Prometheus,夜莺也可以把数据写入 VictoriaMetrics 等时序数据库。

Q2:为什么仪表盘里没有数据? A:常见原因有三类:Categraf 没有成功上报,夜莺没有成功转发到 Prometheus,或者仪表盘按业务组过滤而机器还没有加入对应业务组。

Q3:测试环境可以直接使用默认 sqlite 和 miniredis 吗? A:可以用于快速体验。生产环境建议使用 MySQL 和 Redis,并用 systemd 等方式托管夜莺、Prometheus 和 Categraf 进程。

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

标签 夜莺监控
快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云