Aller au contenu

监视 DumbMonit 自身

Ce contenu n’est pas encore disponible dans votre langue.

谁来监视监视者?DumbMonit 的回答分为两部分:

  • 一个外发心跳,用于它从内部无法看到的情况:主机宕机、容器停止、 引擎卡住;
  • 针对自身健康状况的内置规则,用于它能看到的情况:数据卷快满、 指标数据库不断循环重启、轮询停滞、写入失败、数据库异常增长。

两者都位于设置 → 系统 → DumbMonit 自身,该页面还会显示引擎当前的 状态。

DumbMonit 会按固定间隔(默认 60 秒)调用你提供的 URL,而且只在引擎 健康时才调用:

  • 调度器正在运行(最近两分钟内完成了一轮);
  • SQLite 数据库有应答;
  • VictoriaMetrics 有应答。

只要其中之一失败,就什么也不发送。“死人开关”(dead man’s switch)服务 会等待这些调用,并在它们停止时提醒你,无论原因是整台主机、容器还是 某个组件。

  1. 在你选择的服务上创建一个检查,并复制它的 ping URL:
    • Healthchecks.io(或自托管的 Healthchecks):周期等于该间隔、 宽限时间略长一些的检查(https://hc-ping.com/<uuid>);
    • Uptime Kuma:Push 类型的监控项 (https://kuma.example.com/api/push/<token>?status=up&msg=OK&ping=);
    • Better Stack:一个心跳(https://uptime.betterstack.com/api/v1/heartbeat/<token>);
    • 任何接受普通 GET 并在调用不再到来时发出告警的服务 (Cronitor、Dead Man’s Snitch……)。
  2. 在设置 → 系统 → DumbMonit 自身中,粘贴该 URL,选择间隔 (30 到 3600 秒),开启发送心跳并保存。
  3. 点击测试:一次调用会立即发出,并显示结果。该服务应将此检查标记 为正常。

该调用是一个超时为 10 秒的 GET。它遵循与通知渠道相同的防护:绝不会 发往 DumbMonit 自己的网页界面或它的 VictoriaMetrics。

默认情况下,出问题的引擎只是停止调用,服务会在宽限时间过后发出告警。 开启报告故障后,会改为调用故障 URL,服务会立即报告:

服务故障 URL
Healthchecks.io、Better Stack在路径后添加 /fail:https://hc-ping.com/<uuid>/fail
Uptime Kuma查询参数中的 status=up 替换为 status=down

对任何其他服务请保持关闭:末尾带 /fail 的未知 URL 很可能应答 404, 这看起来与什么也没发送无异。

ping URL 通常包含它自己的令牌:任何知道它的人都能让你的检查看起来 正常。DumbMonit 用实例密钥加密保存它,绝不通过 API 返回它(只显示其 主机),并且不会写入日志和错误消息。要更改它,请输入新的;要保留它, 请让该字段留空。移除 URL 会遗忘它并关闭心跳。

该设置不属于加密的配置包:恢复到新实例后请重新设置。

DumbMonit 每分钟会向 VictoriaMetrics 写入几项关于自身的测量值,DumbMonit 自身组的内置规则读取它们。它们的行为与其他规则一样:相同的渠道、相同的 静默、告警 → 规则中相同的按规则阈值。

规则触发条件默认值
DumbMonit 数据卷快满存放 /data 的卷剩余空间不足 10%15 分钟,warning
DumbMonit 指标数据库循环重启内嵌的 VictoriaMetrics 在 30 分钟内重启了 3 次或更多1 分钟,critical
DumbMonit 调度器停滞超过两分钟没有调度轮次5 分钟,critical
DumbMonit 轮询延迟在 15 分钟内,每一轮之后监控项仍然逾期15 分钟,warning
DumbMonit 指标写入失败最近 15 分钟内有批次被 VictoriaMetrics 拒绝,或有样本被丢弃5 分钟,warning
DumbMonit 数据库快速增长dumbmonit.db 一天内增长超过一倍,且超过 100 MB1 小时,warning
DumbMonit 备份未运行两天内没有成功的本地备份(详情)1 小时,warning

这些规则需要 VictoriaMetrics 才能评估。当 VictoriaMetrics 本身长时间宕机, 或整台主机宕机时,没有任何规则能触发:这就是心跳的工作。

指标含义
dumbmonit_instance_data_free_bytes存放 /data 的卷上,非特权用户可用的剩余空间。
dumbmonit_instance_data_size_bytes该卷的大小。
dumbmonit_instance_database_bytesdumbmonit.db 及其预写日志的大小。
dumbmonit_instance_scheduler_lag_seconds距调度器上次完成一轮的秒数(通常小于 2)。
dumbmonit_instance_scheduler_backlog上一轮之后仍待探测的监控项。
dumbmonit_instance_sample_writes_failed_total自服务器启动以来,VictoriaMetrics 拒绝或未应答的批次。
dumbmonit_instance_samples_dropped_total自服务器启动以来,在到达写入缓冲区之前被丢弃的样本。
dumbmonit_instance_vm_restarts_total自服务器启动以来内嵌 VictoriaMetrics 的重启次数(仅限内嵌)。

它们不带 target 标签:它们引发的告警不附属于某个监控项。对于你自己的 Prometheus,GET /metrics 会暴露同类数据,参见 抓取 DumbMonit。

方法路由
GET/api/self-monitoring引擎状态、数据卷、数据库大小、心跳设置和上一次心跳。
PUT/api/self-monitoring/heartbeat{ "enabled", "interval_seconds", "send_fail", "url" }。省略 url 表示保留,"" 表示清除。
POST/api/self-monitoring/heartbeat/test立即调用一次,发往 { "url" } 或已保存的 URL。

这两个写入操作面向管理员(或具有 write 范围的令牌)。