LHIDC

为日本独立服务器设置监控告警,哪些指标能识别故障前兆并减少误报

本文梳理日本独立服务器的外部可用性、CPU、内存、磁盘I/O、网络及硬件指标,说明如何结合持续时间、历史基线和关联条件识别故障前兆、降低误报,并提供告警后的排查顺序与修复验证方法。

为日本独立服务器设置监控告警,哪些指标能识别故障前兆并减少误报

单一阈值为什么容易漏报,也容易误报

把 CPU 使用率超过 80% 直接设为故障告警,是常见但不够可靠的做法。批处理任务可能让 CPU 短时满载,却不影响业务;反过来,磁盘延迟、连接队列或硬件错误已经恶化时,CPU 使用率仍可能很低。监控需要区分三类信号:用户能否访问的故障现象、资源是否接近饱和的前兆,以及硬件和内核报告的异常证据。

为日本独立服务器建立告警时,可以按以下优先级观察:先用外部探测确认端口、HTTP 和业务接口是否可用,再检查 CPU、内存、磁盘 I/O、文件系统和网络是否饱和,随后查看内核、磁盘健康、温度和 ECC 等硬件事件。告警不要只判断“瞬时值是否超过阈值”,而应同时考虑持续时间、变化速度、历史基线和多个指标之间的关联。

哪些指标真正具有故障前兆价值

外部可用性和应用响应

外部探测是最接近用户体验的一层。仅监控服务器上的进程并不够:进程可能仍在运行,但监听端口、反向代理、证书、DNS 或上游接口已经异常。

建议至少覆盖:

  • ICMP 或 TCP 探测:判断主机或服务端口是否可达。
  • HTTP 状态码:识别 5xx、重定向异常和错误页面。
  • 响应时间:观察总耗时以及 DNS、连接、TLS、首字节等阶段。
  • 业务接口成功率:使用不会修改数据的健康检查接口。
  • TLS 证书剩余有效期:避免证书到期造成突发中断。
  • 多地点探测:区分服务器故障、单一运营商路径故障和监控节点自身异常。

对于日本独立服务器,至少应有一个接近实际访问来源的探测点。如果用户分布跨地区,可以再配置独立探测点进行交叉判断。只有一个远程探测点失败,不应立即认定服务器宕机;多个地点同时失败,或者外部失败同时伴随服务器端口异常,才更适合作为高优先级告警。

ICMP 丢包也不能单独作为业务中断依据。部分网络设备会限制 ICMP 响应,但不会同等影响 TCP 和 HTTP。更稳妥的方式是把 ICMP、TCP 建连和应用请求放在一起判断。

CPU:关注饱和,而不是只看使用率

CPU 使用率高并不一定代表故障,真正需要关注的是任务是否开始等待 CPU,以及高负载是否影响应用延迟。

关键指标包括:

  • 非空闲 CPU 使用率。
  • 每核平均负载,即系统 load average 除以逻辑 CPU 数量。
  • 运行队列长度。
  • CPU Pressure Stall Information(PSI)。
  • iowait,用于辅助识别磁盘等待。
  • steal time,主要用于存在虚拟化层的环境;独立服务器一般不应把它作为首要指标。
  • 应用请求延迟和超时数量。

可以把“CPU 超过 85% 持续 10 分钟”作为示例起点,但不应直接照搬到所有业务。更可靠的高优先级条件是:CPU 长时间处于高位,同时运行队列、CPU PSI 或应用响应时间上升。若 CPU 很高但请求正常、队列没有堆积,它更可能是正常计算任务。

Prometheus 查询示例:

100 * (
  1 - avg by (instance) (
    rate(node_cpu_seconds_total{mode="idle"}[5m])
  )
)

CPU 使用率恢复后还要检查请求队列是否已经消化,不能仅凭 CPU 曲线下降就关闭事件。

内存:Available、换页和 OOM 要一起看

Linux 中的空闲内存很低并不等于内存不足,因为系统会使用空闲内存作为缓存。判断内存压力时应优先查看 MemAvailable,并关联以下信号:

  • 可用内存比例持续下降。
  • swap 使用量持续增加。
  • pswpinpswpout 出现持续活动。
  • 内存 PSI 上升。
  • 内核出现 OOM Killer 记录。
  • 应用因内存限制被终止或频繁重启。

示例查询:

100 * node_memory_MemAvailable_bytes
/
node_memory_MemTotal_bytes

“可用内存低于 10% 持续 10 分钟”可以作为初始预警,但最好附加换页速率或内存 PSI 条件。文件缓存占用造成的低 Available,和持续换页造成的内存争用,处理优先级不同。

发现 OOM 后不要立即通过重启掩盖问题,应先确定被终止的进程、内存增长速度和触发时间:

journalctl -k --since "2 hours ago" | grep -Ei 'out of memory|oom-killer|killed process'

该命令适用于使用 systemd-journald 的 Linux 系统,查看内核日志通常需要 root 或日志读取权限。没有 journalctl 的环境应检查发行版对应的内核日志文件。

磁盘容量和 inode:不仅要看当前剩余量

磁盘告警至少要同时覆盖容量、inode、只读状态和增长趋势。只配置“磁盘使用率超过 90%”会遗漏两类问题:大量小文件耗尽 inode,以及日志快速增长导致磁盘在两次检查之间被写满。

推荐观察:

  • 文件系统可用空间比例。
  • inode 可用比例。
  • 最近数小时或数天的空间消耗速度。
  • 文件系统是否被重新挂载为只读。
  • 日志、缓存、临时文件和数据库目录的增长来源。

趋势预测示例:

predict_linear(node_filesystem_avail_bytes[6h], 24 * 3600) < 0

该表达式表示按最近 6 小时的线性趋势预测,未来 24 小时内可用空间是否可能降到零。它只适合增长相对连续的目录;备份、日志轮转和批量导入会造成明显跳变,容易产生误报。因此,预测告警应与当前剩余空间、业务周期和历史增长模式结合。

Linux 上可以使用以下只读命令核对:

df -hT
df -ih
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS

如果文件系统变成只读,应优先检查内核日志和磁盘错误,不要直接尝试强制重新挂载为可写,否则可能扩大文件系统损坏。

磁盘 I/O:延迟通常比吞吐量更早暴露问题

磁盘吞吐量达到某个数值不一定有问题,因为顺序读写和随机读写的性能表现不同。更值得告警的是:

  • 读写请求延迟持续高于业务基线。
  • I/O 队列长度持续增加。
  • 设备繁忙度长期接近饱和。
  • 应用 fsync、数据库提交或文件读取延迟上升。
  • 内核出现 I/O error、timeout、reset 等记录。
  • SMART 或 NVMe 健康信息发生恶化。

安装了 sysstat 后,可使用:

iostat -xz 1 5

重点查看 await、队列和设备利用情况。不同发行版及 sysstat 版本的字段可能不同,不能把某个固定的 await 数值视为所有磁盘的统一故障线。NVMe、本地 SATA 磁盘和 RAID 设备应分别建立基线。

磁盘健康检查属于只读操作,但执行前仍应确认设备名称:

lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS,MODEL
sudo smartctl -a /dev/sdX
sudo nvme smart-log /dev/nvme0

smartctl 通常来自 smartmontoolsnvme 来自 nvme-cli。不要把示例中的 /dev/sdX 直接复制执行。RAID 控制器后的磁盘可能需要使用控制器专用工具或指定设备类型。

SMART 原始值的含义与磁盘厂商有关,不宜仅凭单个原始数字告警。更有效的规则是关注健康状态失败、不可校正错误、介质错误以及错误计数是否持续增加。

网络:区分链路异常、拥塞和应用连接问题

网络监控不能只看总流量。故障前兆往往出现在接口错误、丢弃、重传和连接队列中。

建议监控:

  • 接口接收和发送错误计数。
  • 接口丢弃包速率。
  • TCP 重传比例。
  • TCP 建连失败和超时。
  • 监听队列溢出。
  • conntrack 使用率,前提是系统启用了相关功能。
  • 带宽利用率及突发流量。
  • 外部探测的连接时间和丢包变化。

Linux 上可以先执行:

ip -s link
ss -s
nstat -az | grep -E 'TcpRetransSegs|TcpOutSegs|ListenOverflows|ListenDrops'

计数器自服务器启动以来会持续累积,所以告警应计算单位时间内的增量,而不是判断累计值是否非零。TCP 重传也应结合总发送段数计算比例,低流量时一个重传就可能形成很高的百分比,必须设置最小流量条件。

如果只有某一个外部探测点延迟或丢包升高,而日本独立服务器本机接口没有错误、其他探测点正常,问题更可能位于特定访问路径。此时可以使用 mtr 或 TCP 探测辅助定位,但中间节点不回应 ICMP 并不等于该节点丢弃业务流量,最终判断仍应以目标端到端结果为准。

硬件和内核事件:适合做高置信度告警

独立服务器的硬件告警不应依赖操作系统内的监控代理。操作系统死机时,代理也会停止上报,因此有条件时应通过带外管理接口独立采集:

  • CPU、主板和磁盘温度。
  • 风扇状态。
  • 电源状态。
  • ECC 可纠正和不可纠正错误。
  • RAID 降级、重建和缓存保护状态。
  • 系统事件日志。
  • 意外重启、Machine Check Exception 和 watchdog 事件。

Linux 内核日志可以辅助检查:

journalctl -k --since "24 hours ago" \
  | grep -Ei 'error|timeout|reset|read-only|mce|edac|hardware error|I/O error'

这类关键词匹配可能包含无关信息,应结合设备名称、时间和业务故障点确认。温度阈值也应采用硬件厂商给出的规格或带外管理系统的传感器状态,不能为不同处理器、磁盘和机箱统一设置一个温度值。

用关联条件代替孤立告警

以下规则可以作为设计入口,具体阈值需要根据业务基线调整。

监控对象 前兆指标 更可靠的告警条件 常见误报来源
外部可用性 探测失败、响应时间升高 多地点失败,或外部失败与端口异常同时出现 单个探测点故障、ICMP 限速
CPU 使用率、运行队列、CPU PSI 高使用率持续存在,并伴随排队或应用延迟升高 批处理、压缩、短时发布任务
内存 Available、换页、内存 PSI 可用内存低且持续换页,或出现 OOM 正常文件缓存
文件系统 空间、inode、增长速度 剩余量低且按趋势将在处理窗口内耗尽 备份、日志轮转造成跳变
磁盘 I/O 延迟、队列、错误 延迟持续高于基线,并伴随队列或内核错误 批量导入、定时备份
网络 错误、丢弃、重传 增量持续上升,并影响 TCP 或 HTTP 成功率 低流量下比例失真
硬件 SMART、ECC、温度、RAID 健康状态异常或错误计数持续增加 传感器读取异常、厂商原始值差异
应用 5xx、超时、队列、进程重启 错误率超过基线并消耗错误预算 发布、健康检查配置错误

Prometheus 告警规则可以利用 for 过滤瞬时尖峰。下面只展示写法,阈值是示例起点:

groups:
  - name: host-resource-alerts
    rules:
      - alert: HostCpuSustainedHigh
        expr: |
          100 * (
            1 - avg by (instance) (
              rate(node_cpu_seconds_total{mode="idle"}[5m])
            )
          ) > 85
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "服务器 CPU 持续高负载"
          description: "{{ $labels.instance }} CPU 使用率持续超过示例阈值,请关联运行队列、PSI 和应用延迟判断。"

      - alert: FilesystemMayFillSoon
        expr: |
          (
            node_filesystem_avail_bytes{
              fstype!~"tmpfs|overlay|squashfs"
            }
            /
            node_filesystem_size_bytes{
              fstype!~"tmpfs|overlay|squashfs"
            } < 0.15
          )
          and
          (
            predict_linear(
              node_filesystem_avail_bytes{
                fstype!~"tmpfs|overlay|squashfs"
              }[6h],
              24 * 3600
            ) < 0
          )
        for: 15m
        labels:
          severity: warning
        annotations:
          summary: "文件系统可能在未来处理窗口内耗尽"
          description: "{{ $labels.instance }} 的 {{ $labels.mountpoint }} 剩余空间较低且增长趋势异常。"

上线规则前应使用 Prometheus 自带的校验工具检查语法。实际命令取决于安装方式和版本,例如:

promtool check rules /path/to/alert-rules.yml

不要直接覆盖生产环境规则文件。应先备份原配置,在测试环境加载,并确认标签匹配、文件系统过滤和时间窗口符合当前采集配置。

减少误报的六个具体办法

1. 使用持续时间和恢复迟滞

瞬时越过阈值不代表故障。CPU、延迟和流量类告警通常应设置持续时间。恢复条件还可以低于触发条件,例如超过 85% 触发、低于 75% 持续一段时间后恢复,避免在阈值附近反复开关。

Prometheus 原生告警通常通过表达式、for 和 Alertmanager 的重复通知策略实现;如果需要不同的恢复阈值,可使用记录规则或状态化处理。

2. 以历史基线替代统一阈值

工作日和周末、白天和夜间的负载可能不同。日本服务器的面板、维护窗口和通知时间应明确使用 JST,或统一保存 UTC 后在展示层转换,避免因时区混乱把正常定时任务识别成异常。

基线至少应区分:

  • 相同小时或相同业务周期。
  • 发布、备份、报表和批处理时间。
  • 平均值、P95 与峰值。
  • 正常增长速度和突发变化。

3. 给比例告警设置最小样本量

错误率、丢包率和重传率在低流量时容易失真。只有当请求数、发送包数或连接数达到最低样本量后,再判断比例是否异常。低流量场景可以改用绝对失败次数加持续时间。

4. 用症状告警通知值班人员,用原因告警辅助定位

“HTTP 大面积失败”属于需要立即处理的症状告警;“CPU 偏高”通常是原因候选。值班通知应以用户影响为中心,资源告警可以作为关联信息附加,避免同一次故障产生十几条重复通知。

5. 对依赖关系做告警抑制

服务器离线后,运行在其上的进程、端口和采集任务都会失败。此时应由“主机不可达”抑制下游告警。类似地,磁盘故障已经触发高优先级告警时,可以合并由它引起的应用延迟和日志写入失败通知。

6. 告警必须对应可执行动作

每条告警至少应包含:

  • 受影响的实例和服务。
  • 触发值、持续时间和基线对比。
  • 相关仪表盘与日志入口。
  • 首要检查命令。
  • 可能影响的业务。
  • 静默条件、维护窗口和负责人。

如果收到告警后无法判断由谁处理、先看什么、如何确认恢复,这条规则更适合作为仪表盘指标,而不是值班通知。

告警触发后的优先检查顺序

  1. 确认是否影响真实请求:检查多地点探测、HTTP 成功率、错误率和业务响应时间。只有单一探测点失败时,先排除探测端和访问路径问题。
  2. 确认主机与关键端口状态:判断是整机不可达、单个端口失败,还是应用返回错误。不要在原因不明时直接重启服务器。
  3. 检查资源是否饱和:查看 CPU、运行队列、Available、swap、磁盘空间、inode、I/O 延迟和网络错误。一个指标异常但业务正常时,应继续关联其他信号。
  4. 检查应用和系统日志:将日志时间与告警时间对齐,重点关注 OOM、I/O error、连接超时、进程退出和文件系统只读。
  5. 检查硬件与带外事件:若操作系统无响应、磁盘持续报错或出现非预期重启,查看 RAID、SMART、ECC、温度和系统事件日志。
  6. 检查变更和周期任务:核对发布、备份、扫描、日志轮转及配置调整。确认是预期负载后,应调整维护窗口或告警条件,而不是长期手工静默。

修复后的验证与判断边界

修复完成后,至少观察一个完整告警窗口,确认外部探测恢复、应用错误率回落、积压队列被处理,并且资源指标不再继续恶化。磁盘和硬件问题还要确认错误计数没有新增,文件系统保持可写,RAID 状态正常;网络问题则需从多个探测位置重新验证 TCP 和 HTTP,而不是只执行一次 ping。

阈值没有适用于所有日本独立服务器的固定答案。硬件规格、应用模型、访问来源和业务周期不同,正常区间也会不同。可以先用示例阈值建立低优先级观察规则,积累一到数周基线后再调整持续时间、样本量和通知级别。最终应让高优先级告警同时具备三个条件:能够反映用户影响、有足够证据排除瞬时波动,并且值班人员收到后可以立即执行明确的检查动作。

上一篇 PHP-FPM是进程管理器还是PHP解释器:作用范围与判断边界解析

LHIDC 产品中心

继续查看可购买的海外服务器产品

文章用于辅助选型,最终价格、库存与配置请以产品详情页和下单页面展示为准。

查看产品 查看方案