
简介这份手册面向需要在 CentOS 7 上快速搭建网络延迟监控环境的运维人员与网络管理员聚焦用 yum 方式完成 Smokeping 的安装、配置与启动全流程帮助读者解决依赖源缺失、服务无法正常提供图表等常见问题。资源包共 1 个文件为 docx 格式的图文手册整体约 166KB内容紧凑、便于随查随用。手册围绕 yum 安装、epel 源启用、/etc/smokeping/config 配置、systemctl 启动 smokeping 与 httpd 等关键环节展开并补充了 Smokeping 基于 ICMP 探测实现延迟、丢包率与抖动监控的基本原理以及其简单易用、灵活性强、可集成 Nagios 与 Zabbix 等监控系统的特点同时列举数据中心、企业、运营商及家庭网络等典型应用场景。目前已有 804 人学习下载适合希望以最短路径掌握 Smokeping 部署与基础排错思路的读者参考。1. 从一台刚装好的 CentOS 7 说起为什么我还在用 yum 装 smokeping上周帮朋友排查一条跨机房的专线抖动对方丢过来一句“你 ping 一下不就完了”。真到现场才发现单点 ping 只能告诉你“通或不通”告诉你不了“过去两小时里到底丢了多少、什么时候丢的、是持续劣化还是偶发抽风”。这种时候我一般会掏 smokeping——它把 fping 的探测结果按时间轴画成图丢包、延迟、抖动全在一张图里比盯着一串 ping 输出靠谱得多。这份《CentOS7 yum 安装 smokeping 最简明手册》解决的就是“在一台干净的 CentOS 7 上用 yum 把 smokeping 跑起来”这件事。它不追求花哨走的是系统包管理器路线适合运维、网络、IDC 值班这类需要长期盯链路质量的人。CentOS 7 虽然已经进入维护尾声但大量存量机器还在跑yum 源、依赖、SELinux 这些老问题一个没少所以这份手册的价值恰恰在于“老系统上少踩坑”。下面我按自己复现的流程拆一遍参数和坑都标出来。2. 装之前先把地基打平yum 源、EPEL 与依赖链2.1 为什么 smokeping 不能只靠 base 源smokeping 本体不在 CentOS 7 的 base 仓库里它躺在 EPELExtra Packages for Enterprise Linux里。很多人yum install smokeping直接报 “No package smokeping available”第一反应是命令写错了其实是没启用 EPEL。EPEL 是 Fedora 社区为 RHEL/CentOS 维护的附加包集合smokeping 及其依赖 rrdtool、fping、echoping 基本都能从这里拿到。另一个容易被忽略的是 yum 源本身。国内机器直连官方 mirror 经常慢到怀疑人生downloading packages卡在/var/cache/yum/x86_64/7/centos-sclo-rh/packages/...这种路径上半天不动是典型症状。常见做法是先换成国内镜像源再装 EPEL。换源脚本网上很多但我不建议无脑跑一键脚本手动改/etc/yum.repos.d/下的 repo 文件更可控。# 备份原有源避免改坏后无法回滚 mkdir -p /etc/yum.repos.d/bak mv /etc/yum.repos.d/CentOS-*.repo /etc/yum.repos.d/bak/ # 以阿里云为例写入 base 源CentOS 7 已停更用 vault 归档地址更稳 cat /etc/yum.repos.d/CentOS-Base.repo EOF [base] nameCentOS-7 - Base baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled1 [updates] nameCentOS-7 - Updates baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled1 EOF # 清理缓存并重建确认源可用 yum clean all yum makecache这里几个参数值得说清楚baseurl指向centos-vault而不是常规的centos是因为 CentOS 7 已 EOL常规地址会 404gpgcheck1保留签名校验别为了图快关掉$basearch会自动替换成 x86_64 或 aarch64。yum makecache成功后会看到 “Metadata cache created”如果卡住或报错先ping一下镜像域名再检查 DNS。2.2 装 EPEL 并补齐依赖base 源通了之后装 EPEL 就一行。但要注意 EPEL 的版本要和系统大版本对齐CentOS 7 对应epel-release-7。# 安装 EPEL 仓库 yum install -y epel-release # 验证 EPEL 是否生效能列出 smokeping 即成功 yum --disablerepo* --enablerepoepel list smokeping # 一次性把 smokeping 及常用依赖装上 yum install -y smokeping fping rrdtool perl-Time-HiResfping是 smokeping 的探测后端没有它 smokeping 起不来rrdtool负责把探测数据写进环形数据库并绘图perl-Time-HiRes提供高精度时间函数缺了它某些 Perl 模块会报错。yum --disablerepo* --enablerepoepel list smokeping这个技巧很实用——它临时屏蔽其他源只查 EPEL能快速判断包到底在不在 EPEL 里避免被其他源的报错干扰。装完可以用rpm -qa | grep -E smokeping|fping|rrdtool确认三个包都在。如果 fping 版本太老低于 3.xsmokeping 的某些探测模式会异常CentOS 7 的 EPEL 一般给的是 3.10 以上够用。3. 配置 smokeping从 targets 到 Apache 的完整链路3.1 认识配置文件的分工smokeping 的配置集中在/etc/smokeping/下核心是config和Targets两个文件。config管全局探测间隔、数据目录、日志、Web 服务对接Targets管“探测谁”——把目标按分组写进去。很多人装完直接改config却忘了Targets里还有示例目标结果图出来了但全是 localhost白高兴一场。先看config里几个必须确认的项# 查看关键配置确认路径和权限 grep -E ^(step|pings|datadir|cgiurl|imgcache|imgurl) /etc/smokeping/config典型输出里step 300表示每 300 秒一轮探测pings 20表示每轮发 20 个包。这两个值决定了图的粒度和精度step 越小图越细但 IO 压力越大pings 越多丢包率越准但探测耗时越长。我一般保持默认链路抖动明显的场景会把 pings 提到 30。datadir默认/var/lib/smokepingimgcache默认/var/cache/smokeping这两个目录的属主必须是运行 smokeping 的用户通常是smokeping或apache否则图生成失败但日志不一定报得明显。3.2 写 Targets分组、探测类型与告警Targets的语法是层级式的开头是分组menu是菜单显示名title是图标题host是目标地址。下面是我常用的一个模板包含 ICMP 和 DNS 两类探测cat /etc/smokeping/config.d/Targets EOF *** Targets *** probe FPing menu Top title Network Latency remark 链路质量监控 IDC menu IDC title IDC Links Beijing menu Beijing title Beijing Node host 10.0.0.1 alerts lossdetect Shanghai menu Shanghai title Shanghai Node host 10.0.0.2 DNS menu DNS title DNS Servers AliDNS menu AliDNS title AliDNS 223.5.5.5 host 223.5.5.5 probe FPing EOFprobe FPing是默认探测方式走 ICMP如果要监控 DNS 响应可以定义DNS类型的 probe但需要额外配置。alerts lossdetect引用的是config里定义的告警规则丢包超过阈值就发邮件。这里有个细节的层级决定菜单嵌套是的子项写错层级菜单会乱。改完配置别急着重启先做语法检查# 检查配置语法有错会直接指出行号 /usr/sbin/smokeping --check输出 “OK” 才算过。如果报 “unknown variable” 或 “syntax error”八成是缩进或层级问题。3.3 对接 Apache 与启动服务smokeping 自带 CGI需要 Web 服务器托管。CentOS 7 上一般用 Apachehttpd。EPEL 装的 smokeping 通常已经带了/etc/httpd/conf.d/smokeping.conf确认它被 include 即可。# 启动 httpd 和 smokeping并设为开机自启 systemctl enable --now httpd systemctl enable --now smokeping # 查看状态确认没有反复重启 systemctl status smokeping --no-pager如果 smokeping 状态是activating然后掉回failed先看/var/log/smokeping/smokeping.log。常见原因是datadir权限不对或者Targets里写了不存在的 probe。Apache 侧如果访问 403检查/etc/httpd/conf.d/smokeping.conf里的Require规则和 SELinux。提示CentOS 7 默认 SELinux 是 enforcingsmokeping 写imgcache可能被拦。临时排查可以setenforce 0但生产环境建议用semanage放行对应目录而不是直接关 SELinux。4. 避坑与排查那些让我重启了三次服务的问题4.1 现象图一直是空的日志无报错原因Targets里host写的是域名但机器 DNS 解析不了fping 探测直接失败smokeping 不一定会把解析失败写进主日志。解决先用fping 目标域名手动验证解析不通就换 IP 或修/etc/resolv.conf。4.2 现象yum install smokeping报 No package available原因EPEL 没装或没启用也可能 base 源指向了已失效的地址导致makecache失败连带 EPEL 元数据也拉不下来。解决先yum repolist看 EPEL 是否在列表里不在就重装epel-releasebase 源 404 就按第 2 章的 vault 地址改。4.3 现象Web 页面能打开但图片全是红叉原因imgcache目录权限不对CGI 进程apache 用户没有写权限图生成失败。解决chown -R apache:apache /var/cache/smokeping并确认config里imgcache路径和实际一致。4.4 现象smokeping 服务启动后几秒就退出原因Targets里引用了未定义的alerts或者probe名称拼错。解决跑/usr/sbin/smokeping --check它会精确指出哪一行有问题改完再systemctl restart smokeping。4.5 现象探测间隔明明是 300 秒图却半天不更新原因step改了但 RRD 文件是旧粒度创建的新数据写不进旧结构。解决停服务删掉datadir下对应的.rrd文件重启让它按新step重建。这个操作会丢历史数据改step前想清楚。5. 进阶用 SmokePing 的告警与多探针把链路盯死基础跑通只是开始真正让 smokeping 有价值的是告警和多点探测。单台机器只能看到“本机到目标”的质量如果本机所在机房本身有问题图会误导你。常见做法是在两个不同机房各部署一台 smokeping用slave模式把数据汇总到 master这样能区分“目标挂了”还是“我这边挂了”。告警配置在config的*** Alerts ***段下面是一个丢包告警的写法*** Alerts *** to opsexample.com from smokepingexample.com lossdetect type loss pattern 0%,0%,0% comment 连续三轮丢包type loss表示按丢包率触发pattern里三个值对应最近三轮0%表示只要有一轮丢包就告警。实际用的时候别设这么敏感否则网络轻微抖动就邮件轰炸我一般设成5%,5%,5%。to和from要填真实可用的邮件地址服务器本身得能发信装mailx或配postfix。验证告警是否生效可以临时把某个 target 的host改成一个不存在的 IP等一轮探测后看是否收到邮件。收到后记得改回来。另一个技巧是用smokeping --debug前台跑能实时看到每轮探测的原始输出排查“为什么这个目标没数据”特别快。从那以后我每次部署完 smokeping都会先--check再--debug跑一轮确认数据真的写进 RRD 了才放心交给值班同事。这套流程在 CentOS 7 上跑了几年换源、EPEL、SELinux 这三个坎迈过去后面基本就是加 target 的事。希望帮到你。本文还有配套的精品资源点击获取