文章目录


前言
在生产环境中,FastDFS 作为分布式文件存储系统,其健康状态直接影响业务可用性。
常见问题包括:
- Storage 或 Tracker 进程挂掉
- 端口未监听
- Storage 未 ACTIVE 注册
传统只监控进程或端口容易漏掉 Storage 未注册 ACTIVE 的情况,本文将分享 模板化、宏控制、可扩展的监控实践。
1️⃣ 监控指标设计
关键指标
| 指标 | 说明 | 类型 |
|---|
| Storage 进程数 | fdfs_storaged 是否运行 | proc.num[fdfs_storaged] |
| Tracker 进程数 | fdfs_trackerd 是否运行 | proc.num[fdfs_trackerd] |
| Storage 端口 | Storage 服务是否监听端口 | net.tcp.listen[23000] |
| Tracker 端口 | Tracker 服务是否监听端口 | net.tcp.listen[22122] |
| Storage ACTIVE 数 | Storage 是否 ACTIVE 注册到 Tracker | fastdfs.active.count(脚本统计) |
注意:仅依赖进程和端口不足以保证 Storage 可用,ACTIVE 数监控可覆盖业务实际可用性。
2️⃣ Active count 脚本
使用 fdfs_monitor 解析 Storage ACTIVE 状态:
#!/bin/bashCONF="/etc/fdfs/storage.conf"# 统计 ACTIVE Storage 数ACTIVE=$(fdfs_monitor $CONF 2>/dev/null |grep-v'DEBUG'|grep-c'ACTIVE')# 输出数字echo${ACTIVE:-0}
- 保存为
/usr/local/bin/fastdfs_active.sh - Zabbix UserParameter 配置:
UserParameter=fastdfs.active.count,/usr/local/bin/fastdfs_active.sh
- 脚本返回数字 → 触发器直接判断
<{$FDFS_STORAGE_MIN}
3️⃣ 模板宏设计
| 宏名 | 默认值 | 说明 |
|---|
| {$FDFS_STORAGE_MIN} | 1 | Storage 进程或 ACTIVE 最小值,挂掉触发告警 |
| {$FDFS_TRACKER_MIN} | 1 | Tracker 进程最小值 |
| {$FDFS_STORAGE_PORT} | 23000 | Storage 端口 |
| {$FDFS_TRACKER_PORT} | 22122 | Tracker 端口 |
优点:端口或实例数变动只需修改宏,无需改模板或触发器。
4️⃣ Zabbix 模板触发器设计
| 监控项 | 表达式 | 告警等级 | 说明 |
|---|
| Storage 进程 | last(/fastdfs/proc.num[fdfs_storaged])<{$FDFS_STORAGE_MIN} | Disaster | Storage 进程挂掉 |
| Tracker 进程 | last(/fastdfs/proc.num[fdfs_trackerd])<{$FDFS_TRACKER_MIN} | Disaster | Tracker 进程挂掉 |
| Storage 端口 | last(/fastdfs/net.tcp.listen[{$FDFS_STORAGE_PORT}])=0 | High | Storage 端口未监听 |
| Tracker 端口 | last(/fastdfs/net.tcp.listen[{$FDFS_TRACKER_PORT}])=0 | High | Tracker 端口未监听 |
| ACTIVE count | last(/fastdfs/fastdfs.active.count)<{$FDFS_STORAGE_MIN} | Disaster | Storage ACTIVE 数低于最小值 |
5️⃣ 宏与触发器逻辑表格
| Storage 进程数 | {$FDFS_STORAGE_MIN} | 触发器状态 |
|---|
| 1 | 1 | 不触发 ✅ |
| 0 | 1 | 触发告警 ✅ |
| 1 | 0 | 不触发 ❌ (逻辑不正确) |
| 0 | 0 | 不触发 ❌ |
提示:宏值必须 ≥ 最小正常实例数,才能保证挂掉触发告警。
6️⃣ 生产运维建议
- 主机级宏覆盖
- 不同主机可以覆盖模板默认宏值,支持多实例或端口差异
- 结合业务可用性
- 告警等级设计
- 进程或 ACTIVE 数挂掉 → Disaster
- 端口未监听 → High
7️⃣ 总结
- FastDFS 生产监控不能只看进程和端口
- Active count 脚本 + 宏控制 + 模板化触发器 是最佳实践
- 模板可复用、可扩展,支持多实例、多端口
- 触发器逻辑和宏值表格帮助快速理解告警触发条件
通过这种方式,你可以在 Zabbix 中实现 统一、标准化、生产级中间件监控。
zabbix 模板yaml文件



zabbix_export:version:'7.0'template_groups:-uuid: 5b250e5b377a494e92556c1e7b119187 name: prod templates:-uuid: be9c2c98858140d98bbb29f90d1593f3 template: fastdfs name: fastdfs description: fastdfs监控模板,需要搭配脚本 vendor:name: xmyx version:'1.0'groups:-name: prod items:-uuid: fb5702bae92c4679a4830bdf7dc26519 name:'active count'type: ZABBIX_ACTIVE key: fastdfs.active.count history: 2d trends: 2d triggers:-uuid: c57259b0460f4eea8ab8de69e6d419ce expression:'last(/fastdfs/fastdfs.active.count)<{$FDFS_STORAGE_MIN}'name:'active count'priority: WARNING manual_close:'YES'-uuid: 70be6c9786c4460a9095df0bafbce71e name:'fdfs_storaged port'type: ZABBIX_ACTIVE key:'net.tcp.listen[{$FDFS_STORAGE_PORT}]'history: 2d trends: 2d triggers:-uuid: ec6730a47d7743df9623adfc37dd2e0c expression:'last(/fastdfs/net.tcp.listen[{$FDFS_STORAGE_PORT}])=0'name:'fdfs storage port'priority: WARNING manual_close:'YES'-uuid: 37398fc21154458caf61ba6e080fc52e name:'fdfs_trackerd prot'type: ZABBIX_ACTIVE key:'net.tcp.listen[{$FDFS_TRACKER_PORT}]'history: 2d trends: 2d triggers:-uuid: eb5deb12f7f341a4aba5a230b7eccc86 expression:'last(/fastdfs/net.tcp.listen[{$FDFS_TRACKER_PORT}])=0'name:'fdfs tracker prot'priority: WARNING manual_close:'YES'-uuid: 54b985f59b3942dc9e30f877fac34dee name:'nginx port'type: ZABBIX_ACTIVE key:'net.tcp.listen[{$NGINX_PORT}]'history: 2d trends: 2d triggers:-uuid: 8c5b56acde894ca5adfc09a40bc2e6d9 expression:'last(/fastdfs/net.tcp.listen[{$NGINX_PORT}])=0'name:'fdfs nginx port'priority: WARNING manual_close:'YES'-uuid: 6683f668bccf4b70bb6b93db03742c75 name:'fdfs_storaged process'type: ZABBIX_ACTIVE key:'proc.num[fdfs_storaged]'history: 2d trends: 2d triggers:-uuid: b1755554db084454ba26c51417c2073e expression:'last(/fastdfs/proc.num[fdfs_storaged])<{$FDFS_STORAGE_MIN}'name:'fdfs storage process'priority: WARNING manual_close:'YES'-uuid: bb0ed58f4e3e40d88273c8c5d15559f1 name:'fdfs_trackerd process'type: ZABBIX_ACTIVE key:'proc.num[fdfs_trackerd]'history: 2d trends: 2d triggers:-uuid: 33062b7b35504a31bc5b5cd751af3b0b expression:'last(/fastdfs/proc.num[fdfs_trackerd])<{$FDFS_TRACKER_MIN}'name:'fdfs tracker process'priority: WARNING manual_close:'YES'-uuid: 1b152c0c7c0649b7ac7091bbd1a82ba8 name:'nginx process'type: ZABBIX_ACTIVE key:'proc.num[nginx]'history: 2d trends: 2d triggers:-uuid: 2fc9460d77db445abd0fff8c524b6dd3 expression:'last(/fastdfs/proc.num[nginx])<{$FDFS_NGINX_MIN}'name:'fdfs nginx process'priority: WARNING manual_close:'YES'macros:-macro:'{$FDFS_NGINX_MIN}'value:'1'description: fdfs_nginx进程触发器 -macro:'{$FDFS_STORAGE_MIN}'value:'1'description: fdfs_storaged进程触发器 -macro:'{$FDFS_STORAGE_PORT}'value:'23000'description: fdfs_storaged端口 -macro:'{$FDFS_TRACKER_MIN}'value:'1'description: fdfs_trakerd进程触发器 -macro:'{$FDFS_TRACKER_PORT}'value:'22122'description: fdfs_trackerd端口 -macro:'{$NGINX_PORT}'value:'8888'description: fdfs_nginx端口