资讯详情

资讯详情

网络质量监控选型:CentOS 7安装Smokeping全记录

简介这是一份面向网络运维工程师、系统管理员及开发者的 CentOS 7 下 Smokeping 快速部署手册。资源以 yum 安装方式为主线先说明需要启用 EPEL 源再依次讲解 /etc/smokeping/config 中监控主机、探测器与图表等配置以及通过 systemctl 启动 smokeping 和 httpd 服务的完整过程并补充 Smokeping 基于 ICMP 的探测原理、延迟/丢包/抖动监控能力以及可集成 Nagios、Zabbix 等监控系统的扩展特性。包体为单个 docx 文档大小 166KB内容组织紧凑命令与配置说明均可直接对照执行也便于在服务器本地保存查阅。已有 804 人学习下载适合希望快速搭建网络延迟监控、避免手动编译源码的运维与开发人员同时适用于数据中心、企业园区及运营商等网络环境的监控参考。文档既覆盖安装到启动的全流程又简述监控原理与典型应用场景可帮助读者在短时间内完成部署并为后续扩展留出清晰思路是日常网络维护中值得收藏的实用速查资料。1. 网络质量监控为什么我先装 smokeping一次半夜告警换来的选型结论半夜收到告警网站间歇性打不开从应用日志到数据库翻了一圈没结果最后在链路测试才发现丢包率已到 20%。那次之后我决定用 yum 方式在 CentOS 7 上把 smokeping 装起来用 fping 持续探测目标 ICMP 延迟和丢包把每一跳的变化画成时间轴图。问题发生在几点、持续多久、是否周期性一眼就能看清不用再半夜盲猜。这篇笔记就是 CentOS 7 下 yum 安装 smokeping 的完整落地过程覆盖 EPEL 源配置、目录骨架、探针参数、告警触发和五个常见翻车现场适合负责网络和服务器的运维、网管也适合刚入门想给办公室网络做质量记录的读者。2. yum 源准备EPEL 与国内镜像避开 No package 的两条路smokeping 不在 CentOS 7 的 base 仓库里它在 EPEL 仓库。所以安装的第一步不是直接yum install smokeping而是先把仓库源弄对。这一步做不好后面所有命令都会卡在 No package 或下载超时上。2.1 装之前先确认两件事系统版本和网络连通性先登录服务器执行cat /etc/redhat-release确认是 CentOS Linux release 7.x。同时执行uname -m看架构x86_64 和 arrch64ARM 架构的 yum 源配置不一样网上很多教程默认 x86_64ARM 机器照抄会失败。ip addr show | grep inet ifconfig -aifconfig由 net-tools 提供新装的最小化系统未必有。没有就yum install -y net-tools或者直接用ip addr。经常有人问 CentOS 7 虚拟机怎么获取到和宿主机同网段的 IP其实就是检查网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33 里的 BOOTPROTO 和 ONBOOT改成BOOTPROTOdhcp和ONBOOTyes后重启 network 服务。网络连通性测试要注意很多人在这里翻车虚拟机装完 CentOS 7 后 ping 不通百度。常见原因有三个网卡没启用、网关配错、DNS 没写。先用ping -c 4 114.114.114.114测纯 IP 连通能通说明网关和路由没问题再ping -c 4 www.baidu.com如果不能解析域名就是 /etc/resolv.conf 里缺nameserver配置。这两步过了再继续配 yum 源。如果连纯 IP 都不通优先查 VMware 虚拟网络编辑器里的 NAT 网段是否和虚拟机一致这个坑比想象中多。2.2 安装 EPEL为什么 smokeping 一定要它CentOS 7 自带源分为 base、extras、updates里面没有 smokeping。EPEL 是 Fedora 项目维护的企业级 Linux 扩展仓库smokeping、fping、echoping 这些网络监控工具都在这里。装 EPEL 有两种方式第一种是直接通过 extras 源装yum install -y epel-release装完后 /etc/yum.repos.d/ 下会出现 epel.repo 和 epel-testing.repo。但 CentOS 7 已经停止维护默认 epel.repo 里的 mirrorlist 经常返回空列表表现为yum install卡很久然后报 404。我一般建议先把 base 源切到国内镜像再装 EPEL。sed -e s|^mirrorlist|#mirrorlist|g \ -e s|^#baseurlhttp://mirror.centos.org/centos|baseurlhttps://mirrors.aliyun.com/centos|g \ -i.bak /etc/yum.repos.d/CentOS-Base.repo yum clean all yum makecache这条 sed 命令的含义是把 mirrorlist 行注释掉把 baseurl 那行从官方镜像切到阿里云镜像。-i.bak 表示原地修改并保留备份 CentOS-Base.repo.bak后悔药随时有。执行完用yum repolist看输出如果 base 源显示包数量正常再安装 EPELyum install -y https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm直接指定阿里云上的 EPEL rpm 包比装完再改源更省事。离线内网环境则用本地 yum 源挂载 CentOS 7 ISO写一个只有[base]的 repo 文件指向挂载点EPEL 包也可以提前下载好放到本地目录yum install -y /path/to/epel-release-latest-7.noarch.rpm也能装。这是唯一不依赖外网的路径。换完阿里云源后记得看 /etc/yum.repos.d/ 下有没有残留的其他 repo 文件比如官方 CentOS-CR.repo、CentOS-SCLo-scl.repo这些仓库可能引用已经不存在的 mirrorlist。处理方式是给不用的 repo 改后缀.repo.bak只保留 Base、EPEL 和 Extras。yum 装包时如果发现多个仓库竞态导致版本冲突优先确认这几个文件。2.3 验证 smokeping 是否已经可安装仓库配好后先确认系统能看到这个包。这一步 10 秒钟但能省后面很多排查时间yum search smokeping yum info smokepingyum search会列出和 smokeping 相关的包名yum info显示版本、大小、仓库来源。看到 Repository : epel 就说明 EPEL 生效了。如果这里报错先yum clean all再yum makecache一般能解决。确认后再装依赖一条命令把绘图、Web、探针全带上yum install -y httpd rrdtool fping echoping smokeping逐个说下为什么需要它们httpd 提供 Web 展示层rrdtool 是 smokeping 的数据存储和绘图引擎曲线上的每个点都写进 round-robin 数据库fping 是默认探针的底层工具支持一次对多个目标发 ICMP 包echoping 用来测 TCP/UDP 端口比如监控某个数据库端口是否可达smokeping 是主程序。如果只关心 ICMPechoping 可以不装但后面想加端口监控时又得回来补不如一次装齐。3. 装完先认目录骨架七个关键路径与 Web 暴露yum 安装的最大好处是权限和目录都是现成的不像编译安装那样还要手工创建用户和数据目录。但目录结构如果搞不清楚配置时容易改错文件或者不知道日志去哪看。3.1 安装后有哪些关键文件和目录yum 安装完成后第一件事不是急着改配置而是把目录关系捋清楚。smokeping 的设计里配置、数据、网页是三个独立目录互相通过配置文件的路径字段关联。搞错任何一个表现都是网页能看到但没数据或者数据在写但图表不显示。下面这张表的路径是 CentOS 7 yum 安装后的默认值我照着这个去排查过好多次。路径作用/etc/smokeping/config主配置包含 General、Probes、Alerts、Targets 段/etc/smokeping/config.d/Probes探针定义文件/etc/smokeping/config.d/Targets监控目标定义文件最常改/etc/smokeping/config.d/Alerts告警规则/var/lib/smokeping/RRD 数据根目录按 Targets 树生成子目录/usr/share/smokeping/www/Web 静态资源和 CGI 脚本/etc/httpd/conf.d/smokeping.confApache 把 /smokeping 映射到 www 目录/var/log/smokeping/smokeping.log探针日志排查数据不更新首选用rpm -ql smokeping | head -30能列出安装的完整文件清单rpm -qc smokeping则只列配置文件。实际操作中记住上面这张表就够了。这里容易混淆的是 /usr/share/smokeping/www 和 /var/www/html。smokeping.conf 里用 Alias 把 URL 路径 /smokeping 指到了 /usr/share/smokeping/www所以不需要自己往 /var/www/html 里复制文件。如果你在 /var/www/html 下新建了 smokeping 目录还配了软链反而可能和 conf.d 里的 Alias 冲突导致访问时两种内容互相干扰。3.2 主配置里的关键路径参数smokeping 用 /etc/smokeping/config 作为主入口它通过 include 把 config.d 下的文件合进来。文件末尾能看到这几行include /etc/smokeping/config.d/Probes include /etc/smokeping/config.d/Targets include /etc/smokeping/config.d/Alerts所以日常改监控目标不用动主配置只改 Targets 文件。新手常犯的错误是把 Targets 里的内容直接贴到主配置的 General 段后面导致smokeping --check报错。记住一个原则主配置只负责全局路径和服务参数探针、目标、告警各归各的文件。打开主配置先改 General 段*** General *** owner root contact rootlocalhost mailhost localhost sendmail /usr/sbin/sendmail imgcache /var/lib/smokeping/.cache imgurl /cache datadir /var/lib/smokeping piddir /var/run cgiurl http://192.168.1.10/smokeping/smokeping.cgiowner 和 contact 会显示在页面底部用于标识这套监控归谁管。cgiurl 是最容易忽略的安装后默认值是http://127.0.0.1/smokeping/smokeping.cgi如果你不改页面上的图表链接会全部指向本机回环地址远程访问时点图表出来的 URL 打开的是你自己电脑的 localhost而不是监控服务器。改成实际 IP 或域名即可。imgcache 和 imgurl 是图表缓存的目录和 URL 前缀保持默认就行不要手动改到不存在的路径。datadir 指向 RRD 数据根目录如果要迁移数据盘改这里。改完先检查语法smokeping --check这条命令会读取主配置校验每段的语法和路径是否存在。输出 OK 才继续报错的话会精确到行号照着改。启动 smokeping 时如果日志里报 Could not create /var/run/smokeping.pid 之类通常是 /var/run 权限问题CentOS 7 默认 /var/run 是 /run 的软链属主 root正常情况下 systemd 服务文件里的 User 和 PIDFile 已指定好yum 安装不会出现。如果出现了检查 /etc/systemd/system/multi-user.target.wants/smokeping.service 里的 User 是否是 smokeping以及 /var/run 有没有异常的权限变更。3.3 启动服务、放行防火墙、访问界面配置检查通过后启动两个服务systemctl enable --now httpd smokeping systemctl status httpd --no-pager systemctl status smokeping --no-pagerenable --now 是开机自启并立即启动。CentOS 7 默认开 firewalld不放行 http 的话远程浏览器打不开firewall-cmd --add-servicehttp --permanent firewall-cmd --reload临时排查时可以systemctl stop firewalld但生产环境我强烈不建议关防火墙放行 80 端口就够了。然后浏览器访问http://服务器IP/smokeping/smokeping.cgi。第一次打开页面自带一组示例 Target包括本机网关和一些公网 IP。如果配置没问题5 分钟后图表会开始出现数据点。等 10 分钟再刷新看到平滑的曲线就说明整个链路通了。如果页面能打开但全灰直接跳到第 5 章对照排查。4. 把目标写进配置探针、Targets 层级与三条告警规则smokeping 默认示例可以看但不能直接用你需要把自己的网络节点填进去。这一步要理解三个概念探针决定用什么方式探测Targets 决定探测谁Alerts 决定什么时候通知你。4.1 探针类型和参数怎么选打开 /etc/smokeping/config.d/Probes默认内容类似*** Probes *** FPing binary /usr/local/bin/fping第一行 FPing声明一个名为 FPing 的探针binary 指向 fping 可执行文件。yum 安装后 fping 在 /usr/bin/fping所以要把这里改掉否则启动时找不到二进制目标全部失败。主要探针对比探针原理适用场景FPing一次调用 fping 批量探测多目标默认选择目标多、效率高Ping循环调用系统 ping目标少或需要兼容老旧设备EchoPing建立 TCP 连接测端口监控 Web、数据库等业务端口DNS/HTTP/SSH对应应用层探测按业务类型选用FPing 下的三个参数要理解到位 FPing binary /usr/bin/fping step 300 pings 10step 单位是秒表示每个探测周期间隔默认 300 秒即 5 分钟pings 是每个周期发几个 ICMP 包默认 10 个丢包率就是这 10 个包中丢失的比例。这两个值共同决定曲线密度。想提高频率把 step 改成 60pings 改成 5图表会更灵敏但 rrd 文件写入频率变高目标多时要注意磁盘 IO一般监控 50 台以内机器5 分钟间隔完全够用。改完探针参数后执行smokeping --check能看到参数是否被接受。一个常见误用是有人把 pings 改成 100 想让曲线更平滑结果每个周期探测耗时过长下一个周期的 step 还没开始就被跳过图上出现规律的锯齿。保持 pings 在 20 以内step 不小于 60对绝大多数场景都合适。4.2 Targets 层级树形结构决定页面布局Targets 文件是 smokeping 配置的核心也是新手最容易懵的地方。它的层级规则是每多一个号就多一层缩进对应 Web 左边的树形菜单和右边的分层图表。*** Targets *** probe FPing menu Top title 网络延迟监控总览 办公室 menu 办公室 title 办公室网络 网关 menu 网关 title 办公室网关 host 192.168.10.1 核心交换 menu 核心交换机 title 核心交换机 host 192.168.10.2 专线 menu 专线 title 到机房的专线质量 对端网关 menu 对端网关 title 机房对端网关 host 10.0.0.1*** Targets ***下面顶格写的probe FPing是全体的默认探针menu Top和title定义页面顶部名称。每个节点只有两个属性必须给menu 是左边菜单显示的文字title 是图表区显示的文字host 写在叶子节点 这层。host 可以是 IP也可以是域名域名解析失败会直接反映到图表上。叶子节点还能覆盖全局探针参数。比如专线重点监控加大频率 对端网关 menu 对端网关 title 机房对端网关 host 10.0.0.1 step 60 pings 5step 最小只能 30再小 smokeping 会拒绝启动并报错。覆盖参数只对当前节点生效其他目标保持全局 300 秒。这个特性很实用重点链路和普通链路不用分开建两套配置。如果 Target 数量上到几百个建议用 include 拆文件。常见的做法是在 Targets 里加一行include /etc/smokeping/config.d/Targets.办公室把每个机房的 target 单独维护改动某个机房时不会影响全局配置也方便给不同团队分配维护权限。4.3 告警触发别让丢包轰炸你的邮箱监控数据画出来只是第一步丢包发生在凌晨两点没人盯页面就白搭。Alerts 段做的是这个事*** Alerts *** loss type loss pattern 50% comment 丢包率超过 50% to opsexample.com rtt type rtt pattern 150, 200 comment 延迟超过 150ms 持续 200 秒 to opsexample.comtype 最常用的是 loss 和 rtt。loss 的 pattern 写法是 50%表示连续探测周期内丢包率超过 50% 触发rtt 的 pattern 写法是 150, 200前一个数是延迟阈值毫秒后一个数是持续秒数只有延迟超过 150ms 且持续 200 秒才告警。这样能过滤掉瞬时抖动避免半夜被一条尖峰吵醒。Alerts 里 to 的收件人可以是多个邮箱逗号分隔即可。生产环境把告警收件人分成 ops 和 oncall 两组告警级别不同发不同组。这一步在 yum 安装时没有任何默认值不配 Alerts 段 smokeping 也能正常工作只是没人通知你。告警的实际投递依赖本机 sendmail 或外部 SMTP 中继。最省事的做法yum install -y postfix mailx然后在 /etc/postfix/main.cf 里配relayhost [smtp.公司邮箱.com]启动 postfix 后 smokeping 调用 sendmail 命令把告警发出去。如果公司没有现成 SMTP 中继可以先用 mailx 配合某个邮箱的 SMTP 授权码发信但 smokeping 默认走 sendmail改 SMTP 需要额外装 Msmtp 之类的工具那是另一个话题不展开。5. 避坑记录CentOS 7 上装 smokeping 的五个翻车现场yum 安装看起来简单实际踩坑点都藏在细节里。我把遇到过的和帮别人排查过的五类问题整理出来每条都按现象、原因、解决写。5.1 yum 提示 No package smokeping available现象执行yum install smokeping终端直接回 No package smokeping available。原因EPEL 仓库没装或者装了但源失效。CentOS 7 停止维护后官方 mirrorlist 经常返回空列表EPEL 源失效的典型表现是网络请求卡很久后报 404。解决先yum install -y epel-release再yum clean all yum makecache。如果还不行直接用阿里云的 EPEL rpm 包覆盖安装yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm装完用yum info smokeping验证能看到包信息和仓库来源才算落地。5.2 Web 页面返回 403 或 404现象浏览器访问 http://IP/smokeping/smokeping.cgi 打不开Apache 日志里报 403 或 404。原因403 大多是 SELinux 拦截了 Apache 读取 /usr/share/smokeping/www 目录404 大多因为 httpd 没启动或者 smokeping.conf 没有被加载。解决先用systemctl status httpd确认服务状态再临时放行 SELinux 验证setenforce 0如果能打开说明就是 SELinux。生产环境不要只靠 setenforce 0要让修改持久化setsebool -P httpd_can_network_connect 1 restorecon -Rv /usr/share/smokeping/www第一条是允许 Apache 发网络请求因为 smokeping 的 CGI 脚本要调用 fping 往外发包第二条是恢复目录的 SELinux 上下文。恢复完可以setenforce 1再实测。5.3 图表全灰刷新没有新数据现象页面能打开但图表区域一片灰色刷新后没有任何变化。原因smokeping 进程没起来或者 rrd 数据目录权限不对探针结果写不进去。解决先看进程和日志systemctl status smokeping --no-pager tail -n 50 /var/log/smokeping/smokeping.log日志里如果反复出现 Permission denied就是数据目录属主不对。yum 安装时 smokeping 用户和目录权限通常是好的但手动改过 datadir 或恢复过备份就会出现chown -R smokeping:smokeping /var/lib/smokeping systemctl restart smokeping改完等一个 step 周期再看。5.4 图表出现大段空档或时间轴错位现象曲线中途突然断掉空出一块灰色区域恢复后图形形状怪异横移。原因服务器系统时间没有同步rrdtool 对写入数据的时间戳校验很严格写入时间比当前时间晚数据点会被拒绝或错位。解决装 chrony 做时间同步yum install -y chrony systemctl enable --now chronyd chronyc sources -vsources -v能列出当前同步源和状态看到^*开头的行说明同步正常。如果是离线环境没有外部 NTP手动date -s 2025-01-01 00:00:00校正后一定重启 smokeping 进程让 rrd 的时间基准重新对齐。5.5 所有目标红叉日志显示 fping 失败现象Web 上目标长时间显示红叉smokeping.log 里报 fping 相关错误。原因两类。一类是目标主机禁 ICMP 或中间链路不放行另一类是 fping 二进制丢了 setuid 权限无法用 root 权限发包。解决先手动执行fping 192.168.1.1看输出。如果提示 socket: Operation not permitted说明 setuid 权限异常重装修复yum reinstall -y fping rpm -V fping如果手动 fping 正常而 smokeping 里失败那就是网络策略问题用ping和traceroute从监控机发起链路检查确认 ICMP 在整个路径上是否被过滤。6. 验证与追踪三条命令判断 smokeping 是否真的在工作装完不是终点smokeping 默认 5 分钟一个数据周期跑一天才发现没数据就晚了。我每次装完都先不看网页直接在服务器上跑三条命令把配置、进程、数据三点对齐。第一条是smokeping --check校验主配置语法和所有路径。第二条是systemctl status smokeping --no-pager看进程是否 active (running)。前面两条过了只能说明配置没写错、进程起来了不能说明数据在流动所以第三条最关键find /var/lib/smokeping -name *.rrd -mmin -10这条命令列出最近 10 分钟内更新过的 rrd 文件。smokeping 默认 step 是 300 秒一个正常目标的数据文件一定会在输出里。如果输出为空说明探针没有把数据写进去回头看日志。想确认单个目标最后写入的时间点用 rrdtool 查rrdtool last /var/lib/smokeping/办公室/gateway.rrd | xargs -I {} date -d {}rrdtool last 返回 Unix 时间戳date 转成可读时间。和当前时间对比超过 step 的两三倍就是不正常。注意这里的目标名和文件名可能带中文转义编码路径不好猜先用 find 找到真实文件名再传参。从那以后我每次在 CentOS 7 上装完 smokeping 都会强制走一遍这三条命令配置、进程、数据三点对齐再去看网页图表。图表是结果不是判断依据。希望帮到你。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →