服务器硬盘寿命看不到?如何用smartctl+Zabbix监控香港节点NVMe盘的健康状态?

服务器硬盘寿命看不到?如何用smartctl+Zabbix监控香港节点NVMe盘的健康状态?

几个月前,我维护的一台香港节点裸金属服务器突然宕机。分析日志后发现,根因竟是 NVMe 系统盘发生了不可恢复的写入错误,而这块盘在系统监控中却毫无异常预警。我一度以为硬盘寿命只能“靠猜”,直到深入研究了 smartctl 和 Zabbix 联动方案,才彻底掌握了 NVMe 健康状态的可视化手段。这篇文章就是我从硬盘黑盒到精细监控的完整实践路径。

一、监控目标与部署环境说明

目标:对香港节点服务器的 NVMe 硬盘进行健康监控,包括寿命剩余、温度、错误计数等关键 SMART 指标,并接入 Zabbix 告警。

服务器环境:

  • 系统:CentOS 7.9 / AlmaLinux 8
  • 硬盘:Intel D7-P5520 NVMe 1.6TB / Samsung PM983
  • Zabbix Agent:v6.0 LTS
  • Zabbix Server 部署地点:同样位于香港,内网可达,便于低延迟数据采集。

二、smartmontools 安装与配置

首先安装 smartmontools,这是 Linux 下查看 SMART 信息的核心工具:

yum install -y smartmontools

启用对 NVMe 的支持,smartctl 需要 7.0+ 版本以上。在 CentOS 下可以编译最新版:

wget https://downloads.sourceforge.net/project/smartmontools/smartmontools/7.4/smartmontools-7.4.tar.gz
tar zxvf smartmontools-7.4.tar.gz
cd smartmontools-7.4
./configure && make && make install

三、手动验证 NVMe SMART 输出

执行以下命令查看硬盘状态:

smartctl -a /dev/nvme0

输出关键字段包括:

Percentage Used:             4%
Media and Data Integrity Errors:  0
Temperature:                 41 Celsius
Power On Hours:              2048
Unsafe Shutdowns:            3
Critical Warning:            0x00

重点监控字段解释如下:

指标名称 说明
Percentage Used 硬盘寿命已使用百分比(越低越好)
Temperature 当前工作温度
Data Units Written 写入的数据块数量
Media and Data Errors 介质或数据错误计数
Unsafe Shutdowns 未正常关机次数

四、将 SMART 指标接入 Zabbix

1. 创建本地采集脚本

创建脚本 /usr/local/zabbix/scripts/nvme_smart.sh:

#!/bin/bash

DEVICE="/dev/nvme0"

case "1" in
  health)
    smartctl -H "DEVICE" | grep "SMART overall-health" | awk '{print NF}'
    ;;
  temp)
    smartctl -a "DEVICE" | grep -i temperature | grep -Eo '[0-9]+(?= Celsius)' | head -1
    ;;
  usage)
    smartctl -a "DEVICE" | grep "Percentage Used" | awk '{print3}' | tr -d '%'
    ;;
  media_errors)
    smartctl -a "DEVICE" | grep "Media and Data Integrity Errors" | awk '{printNF}'
    ;;
  unsafe_shutdowns)
    smartctl -a "DEVICE" | grep "Unsafe Shutdowns" | awk '{printNF}'
    ;;
  *)
    echo "Usage: $0 {health|temp|usage|media_errors|unsafe_shutdowns}"
    exit 1
esac

赋予执行权限:

chmod +x /usr/local/zabbix/scripts/nvme_smart.sh

2. 修改 Zabbix Agent 配置文件

编辑 /etc/zabbix/zabbix_agentd.d/nvme_smart.conf:

UserParameter=nvme.health,/usr/local/zabbix/scripts/nvme_smart.sh health
UserParameter=nvme.temp,/usr/local/zabbix/scripts/nvme_smart.sh temp
UserParameter=nvme.usage,/usr/local/zabbix/scripts/nvme_smart.sh usage
UserParameter=nvme.media_errors,/usr/local/zabbix/scripts/nvme_smart.sh media_errors
UserParameter=nvme.unsafe_shutdowns,/usr/local/zabbix/scripts/nvme_smart.sh unsafe_shutdowns

重启 Agent:

systemctl restart zabbix-agent

3. Zabbix Server 端测试取值

zabbix_get -s <agent_ip> -k nvme.usage

成功返回百分比数值即配置无误。

五、Zabbix 图表与告警触发器设计

1. 创建监控项(Items)

名称 键值 类型 单位 更新间隔
NVMe 温度 nvme.temp Zabbix agent °C 60s
寿命使用百分比 nvme.usage Zabbix agent % 60s
媒体错误数 nvme.media_errors Zabbix agent 60s
异常关机次数 nvme.unsafe_shutdowns Zabbix agent 60s

2. 创建触发器(Triggers)

NVMe温度过高:

{hostname:nvme.temp.last()}>65

使用寿命接近终点:

{hostname:nvme.usage.last()}>90

出现媒体错误:

{hostname:nvme.media_errors.diff()}>0

六、进阶:多块 NVMe + 自动发现

对于多 NVMe 环境,可以配合 LLD(Low Level Discovery)规则自动发现:

  • 写一个输出 JSON 格式的 discovery 脚本;
  • 动态生成 key,例如 nvme.temp[/dev/nvme1];
  • 在 Zabbix 中使用原型监控。
  • 可参考 nvme list + jq 提取设备路径。

七、总结与收益

通过 smartctl + Zabbix 的组合,我不仅实现了对香港服务器 NVMe 盘的实时可视化监控,还能通过触发器提前预警寿命耗尽、温度异常或写入失败问题。相较于传统只靠系统日志或人工检测的方法,这一方案大大提高了稳定性和预测性。

这类监控策略,特别适用于部署高价值业务的香港服务器场景——尤其是我们自建的裸金属节点或高 I/O 视频回源节点,不容忽视的硬件健康管理,必须做到“有据可查、自动告警、实时应对”。

如需进一步集成 Grafana 可视化或结合 Prometheus exporter 实现更高维度的集群健康监控,也可以在此基础上扩展实现。

未经允许不得转载:A5数据 » 服务器硬盘寿命看不到?如何用smartctl+Zabbix监控香港节点NVMe盘的健康状态?

相关文章

contact