<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Alpine on HiDa</title><link>https://www.0niu.cn/tags/alpine/</link><description>Recent content in Alpine on HiDa</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Wed, 25 Mar 2026 14:43:00 +0800</lastBuildDate><atom:link href="https://www.0niu.cn/tags/alpine/index.xml" rel="self" type="application/rss+xml"/><item><title>Alpine Linux 部署 SmokePing 网络监控</title><link>https://www.0niu.cn/posts/alpine-linux-smokeping%E9%83%A8%E7%BD%B2/</link><pubDate>Wed, 25 Mar 2026 14:43:00 +0800</pubDate><guid>https://www.0niu.cn/posts/alpine-linux-smokeping%E9%83%A8%E7%BD%B2/</guid><description>&lt;p>本文介绍如何在 Alpine Linux 系统上部署 SmokePing 网络延迟监控工具，使用 Caddy 作为 Web 服务器，FCGIWrap 处理 CGI 脚本。&lt;/p>
&lt;h2 id="系统要求">系统要求&lt;/h2>
&lt;ul>
&lt;li>Alpine Linux 3.18+&lt;/li>
&lt;li>2GB+ RAM（推荐 4GB+）&lt;/li>
&lt;li>20GB+ 磁盘空间&lt;/li>
&lt;li>网络连接正常&lt;/li>
&lt;/ul>
&lt;h2 id="安装步骤">安装步骤&lt;/h2>
&lt;h3 id="1-安装必要软件包">1. 安装必要软件包&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 更新软件包索引&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>apk update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 安装 SmokePing 及相关组件&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>apk add fcgiwrap fcgiwrap-openrc caddy smokeping smokeping-openrc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 创建 fcgiwrap 服务用户&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>useradd -r fcgiwrap-openrc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-创建数据目录">2. 创建数据目录&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 创建 SmokePing 数据目录&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mkdir -p /var/lib/smokeping/Ping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mkdir -p /var/lib/smokeping/DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 设置权限&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chown smokeping:smokeping /var/lib/smokeping/Ping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chown smokeping:smokeping /var/lib/smokeping/DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod &lt;span style="color:#ae81ff">777&lt;/span> /var/lib/smokeping/images/Ping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod &lt;span style="color:#ae81ff">777&lt;/span> /var/lib/smokeping/images/DNS
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-配置-caddy-web-服务器">3. 配置 Caddy Web 服务器&lt;/h3>
&lt;p>创建 Caddy 配置文件 &lt;code>/etc/caddy/Caddyfile&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-caddyfile" data-lang="caddyfile">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">log&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">output&lt;/span> &lt;span style="color:#e6db74">file&lt;/span> &lt;span style="color:#e6db74">/var/log/caddy/access.log&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">roll_size&lt;/span> &lt;span style="color:#e6db74">100MB&lt;/span>&lt;span style="color:#75715e"> # 单个日志文件最大 100MB
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">roll_keep&lt;/span> &lt;span style="color:#ae81ff">10&lt;/span>&lt;span style="color:#75715e"> # 保留最近 10 个日志文件
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">roll_keep_for&lt;/span> &lt;span style="color:#ae81ff">720h&lt;/span>&lt;span style="color:#75715e"> # 保留 30 天（720 小时）
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">format&lt;/span> &lt;span style="color:#e6db74">console&lt;/span>&lt;span style="color:#75715e"> # 易读的格式，也可改用 json 格式（format json）
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://192.168.1.100 {&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"> # 处理静态资源
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">handle&lt;/span> &lt;span style="color:#a6e22e">/js/*&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">root&lt;/span> &lt;span style="color:#a6e22e">*&lt;/span> &lt;span style="color:#e6db74">/usr/share/webapps/smokeping/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">file_server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">handle&lt;/span> &lt;span style="color:#a6e22e">/css/*&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">root&lt;/span> &lt;span style="color:#a6e22e">*&lt;/span> &lt;span style="color:#e6db74">/usr/share/webapps/smokeping/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">file_server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">handle&lt;/span> &lt;span style="color:#a6e22e">/imgcache/*&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">root&lt;/span> &lt;span style="color:#a6e22e">*&lt;/span> &lt;span style="color:#e6db74">/usr/share/webapps/smokeping/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">file_server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">handle_path&lt;/span> &lt;span style="color:#a6e22e">/images/*&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">root&lt;/span> &lt;span style="color:#a6e22e">*&lt;/span> &lt;span style="color:#e6db74">/var/lib/smokeping/images&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">file_server&lt;/span> &lt;span style="color:#e6db74">browse&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"> # 处理 CGI 请求
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">handle&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">root&lt;/span> &lt;span style="color:#a6e22e">*&lt;/span> &lt;span style="color:#e6db74">/usr/share/webapps/smokeping/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">reverse_proxy&lt;/span> &lt;span style="color:#e6db74">unix//run/fcgiwrap/fcgiwrap.sock&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">transport&lt;/span> &lt;span style="color:#e6db74">fastcgi&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">env&lt;/span> &lt;span style="color:#e6db74">SCRIPT_FILENAME&lt;/span> &lt;span style="color:#e6db74">/usr/share/webapps/smokeping/smokeping.cgi&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">split&lt;/span> &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="4-配置-smokeping">4. 配置 SmokePing&lt;/h3>
&lt;p>创建配置文件 &lt;code>/etc/smokeping/config&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">***&lt;/span> General &lt;span style="color:#f92672">***&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>owner &lt;span style="color:#f92672">=&lt;/span> Demo User
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>contact &lt;span style="color:#f92672">=&lt;/span> admin&lt;span style="color:#960050;background-color:#1e0010">@&lt;/span>example&lt;span style="color:#f92672">.&lt;/span>com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mailhost &lt;span style="color:#f92672">=&lt;/span> mail&lt;span style="color:#f92672">.&lt;/span>example&lt;span style="color:#f92672">.&lt;/span>com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sendmail &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>usr&lt;span style="color:#f92672">/&lt;/span>sbin&lt;span style="color:#f92672">/&lt;/span>sendmail
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># NOTE: do not put the Image Cache below cgi-bin&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># since all files under cgi-bin will be executed ... this is not&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># good for images.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>imgcache &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>&lt;span style="color:#66d9ef">var&lt;/span>&lt;span style="color:#f92672">/&lt;/span>lib&lt;span style="color:#f92672">/&lt;/span>smokeping&lt;span style="color:#f92672">/&lt;/span>images
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>imgurl &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>images
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>datadir &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>&lt;span style="color:#66d9ef">var&lt;/span>&lt;span style="color:#f92672">/&lt;/span>lib&lt;span style="color:#f92672">/&lt;/span>smokeping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>piddir &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>run&lt;span style="color:#f92672">/&lt;/span>smokeping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cgiurl &lt;span style="color:#f92672">=&lt;/span> http:&lt;span style="color:#f92672">//&lt;/span>&lt;span style="color:#ae81ff">192.168&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#ae81ff">1.100&lt;/span>&lt;span style="color:#f92672">/&lt;/span>smokeping&lt;span style="color:#f92672">.&lt;/span>cgi
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>smokemail &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>etc&lt;span style="color:#f92672">/&lt;/span>smokeping&lt;span style="color:#f92672">/&lt;/span>smokemail
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tmail &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>etc&lt;span style="color:#f92672">/&lt;/span>smokeping&lt;span style="color:#f92672">/&lt;/span>tmail
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># specify this to get syslog logging&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>syslogfacility &lt;span style="color:#f92672">=&lt;/span> local0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># each probe is now run in its own process&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># disable this to revert to the old behaviour&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># concurrentprobes = no&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="5-配置告警规则">5. 配置告警规则&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Alerts ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>to = admin@example.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>from = smokeping@example.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># 定义各种告警规则
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+hostdown
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># in percent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern ==0%,==0%,==0%, ==U
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 对端无响应
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+bigloss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># in percent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern ==0%,==0%,==0%,==0%,&amp;gt;20%,&amp;gt;20%,&amp;gt;20%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 连续3次采样-丢包率超过20%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+lossdetect
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># in percent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern ==0%,==0%,==0%,==0%,&amp;gt;0%,&amp;gt;0%,&amp;gt;0%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 连续3次采样-存在丢包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+someloss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># in percent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern &amp;gt;0%,*12*,&amp;gt;0%,*12*,&amp;gt;0%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 间断性丢包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+rttdetect
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = rtt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># in milli seconds
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern &amp;lt;100,&amp;lt;100,&amp;lt;100,&amp;lt;100,&amp;lt;100,&amp;lt;150,&amp;gt;150,&amp;gt;150,&amp;gt;150
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 连续3次采样延迟增大-超过150ms
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="6-配置数据库设置">6. 配置数据库设置&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Database ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>step = 300
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pings = 20
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># consfn mrhb steps total
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>AVERAGE 0.5 1 28800
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>AVERAGE 0.5 12 9600
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> MIN 0.5 12 9600
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> MAX 0.5 12 9600
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>AVERAGE 0.5 144 2400
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> MAX 0.5 144 2400
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> MIN 0.5 144 2400
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="7-配置显示模板">7. 配置显示模板&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Presentation ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>template = /etc/smokeping/basepage.html
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>htmltitle = yes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>graphborders = no
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># If enabled, treat all filter menu queries as literal strings instead of regex
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>literalsearch = no
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+ charts
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = Charts
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = The most interesting destinations
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ stddev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sorter = StdDev(entries=&amp;gt;4)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = Top Standard Deviation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = Std Deviation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>format = Standard Deviation %f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ max
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sorter = Max(entries=&amp;gt;5)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = Top Max Roundtrip Time
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = by Max
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>format = Max Roundtrip Time %f seconds
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sorter = Loss(entries=&amp;gt;5)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = Top Packet Loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = Loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>format = Packets Lost %f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ median
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sorter = Median(entries=&amp;gt;5)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = Top Median Roundtrip Time
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = by Median
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>format = Median RTT %f seconds
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="8-配置探针">8. 配置探针&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Probes ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+ FPing
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>binary = /usr/sbin/fping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+ DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>binary = /usr/bin/dig
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>lookup = g.cn
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pings = 5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>step = 180
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="9-配置主从模式可选">9. 配置主从模式（可选）&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Slaves ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>secrets=/etc/smokeping/smokeping_secrets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+boomer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>display_name=boomer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>color=0000ff
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+slave2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>display_name=another
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>color=00ff00
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="10-配置监控目标">10. 配置监控目标&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Targets ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>alerts = someloss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>probe = FPing
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = Top
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = Network Latency Grapher
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>remark = Welcome to the SmokePing website of &amp;lt;b&amp;gt;Example Company&amp;lt;/b&amp;gt;. \
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Here you will learn all about the latency of our network.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+ Ping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = Ping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = 10.0.0.14 Pings
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>alerts = hostdown,bigloss,lossdetect,someloss,rttdetect
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ server1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = 192.168.1.50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>host = 192.168.1.50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ server2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = 192.168.1.51
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>host = 192.168.1.51
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+ DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>probe = DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>alerts = hostdown,bigloss,lossdetect,someloss,rttdetect
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ dns-server
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = 192.168.1.200
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>host = 192.168.1.200
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="启动服务">启动服务&lt;/h2>
&lt;h3 id="1-启动并启用服务">1. 启动并启用服务&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 启动 Caddy 服务&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service caddy start
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service caddy add
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 启动 SmokePing 服务&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service smokeping start
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service smokeping add
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 启动 fcgiwrap 服务&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service fcgiwrap start
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service fcgiwrap add
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-检查服务状态">2. 检查服务状态&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查 Caddy 状态&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service caddy status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查 SmokePing 状态&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service smokeping status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查 fcgiwrap 状态&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service fcgiwrap status
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="验证部署">验证部署&lt;/h2>
&lt;p>访问 &lt;code>http://192.168.1.100/smokeping.cgi&lt;/code> 验证 SmokePing 是否正常工作。&lt;/p></description><content>&lt;p>本文介绍如何在 Alpine Linux 系统上部署 SmokePing 网络延迟监控工具，使用 Caddy 作为 Web 服务器，FCGIWrap 处理 CGI 脚本。&lt;/p>
&lt;h2 id="系统要求">系统要求&lt;/h2>
&lt;ul>
&lt;li>Alpine Linux 3.18+&lt;/li>
&lt;li>2GB+ RAM（推荐 4GB+）&lt;/li>
&lt;li>20GB+ 磁盘空间&lt;/li>
&lt;li>网络连接正常&lt;/li>
&lt;/ul>
&lt;h2 id="安装步骤">安装步骤&lt;/h2>
&lt;h3 id="1-安装必要软件包">1. 安装必要软件包&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 更新软件包索引&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>apk update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 安装 SmokePing 及相关组件&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>apk add fcgiwrap fcgiwrap-openrc caddy smokeping smokeping-openrc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 创建 fcgiwrap 服务用户&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>useradd -r fcgiwrap-openrc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-创建数据目录">2. 创建数据目录&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 创建 SmokePing 数据目录&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mkdir -p /var/lib/smokeping/Ping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mkdir -p /var/lib/smokeping/DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 设置权限&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chown smokeping:smokeping /var/lib/smokeping/Ping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chown smokeping:smokeping /var/lib/smokeping/DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod &lt;span style="color:#ae81ff">777&lt;/span> /var/lib/smokeping/images/Ping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod &lt;span style="color:#ae81ff">777&lt;/span> /var/lib/smokeping/images/DNS
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-配置-caddy-web-服务器">3. 配置 Caddy Web 服务器&lt;/h3>
&lt;p>创建 Caddy 配置文件 &lt;code>/etc/caddy/Caddyfile&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-caddyfile" data-lang="caddyfile">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">log&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">output&lt;/span> &lt;span style="color:#e6db74">file&lt;/span> &lt;span style="color:#e6db74">/var/log/caddy/access.log&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">roll_size&lt;/span> &lt;span style="color:#e6db74">100MB&lt;/span>&lt;span style="color:#75715e"> # 单个日志文件最大 100MB
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">roll_keep&lt;/span> &lt;span style="color:#ae81ff">10&lt;/span>&lt;span style="color:#75715e"> # 保留最近 10 个日志文件
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">roll_keep_for&lt;/span> &lt;span style="color:#ae81ff">720h&lt;/span>&lt;span style="color:#75715e"> # 保留 30 天（720 小时）
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">format&lt;/span> &lt;span style="color:#e6db74">console&lt;/span>&lt;span style="color:#75715e"> # 易读的格式，也可改用 json 格式（format json）
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http://192.168.1.100 {&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"> # 处理静态资源
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">handle&lt;/span> &lt;span style="color:#a6e22e">/js/*&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">root&lt;/span> &lt;span style="color:#a6e22e">*&lt;/span> &lt;span style="color:#e6db74">/usr/share/webapps/smokeping/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">file_server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">handle&lt;/span> &lt;span style="color:#a6e22e">/css/*&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">root&lt;/span> &lt;span style="color:#a6e22e">*&lt;/span> &lt;span style="color:#e6db74">/usr/share/webapps/smokeping/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">file_server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">handle&lt;/span> &lt;span style="color:#a6e22e">/imgcache/*&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">root&lt;/span> &lt;span style="color:#a6e22e">*&lt;/span> &lt;span style="color:#e6db74">/usr/share/webapps/smokeping/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">file_server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">handle_path&lt;/span> &lt;span style="color:#a6e22e">/images/*&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">root&lt;/span> &lt;span style="color:#a6e22e">*&lt;/span> &lt;span style="color:#e6db74">/var/lib/smokeping/images&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">file_server&lt;/span> &lt;span style="color:#e6db74">browse&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"> # 处理 CGI 请求
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">handle&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">root&lt;/span> &lt;span style="color:#a6e22e">*&lt;/span> &lt;span style="color:#e6db74">/usr/share/webapps/smokeping/&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">reverse_proxy&lt;/span> &lt;span style="color:#e6db74">unix//run/fcgiwrap/fcgiwrap.sock&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">transport&lt;/span> &lt;span style="color:#e6db74">fastcgi&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">env&lt;/span> &lt;span style="color:#e6db74">SCRIPT_FILENAME&lt;/span> &lt;span style="color:#e6db74">/usr/share/webapps/smokeping/smokeping.cgi&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">split&lt;/span> &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="4-配置-smokeping">4. 配置 SmokePing&lt;/h3>
&lt;p>创建配置文件 &lt;code>/etc/smokeping/config&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">***&lt;/span> General &lt;span style="color:#f92672">***&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>owner &lt;span style="color:#f92672">=&lt;/span> Demo User
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>contact &lt;span style="color:#f92672">=&lt;/span> admin&lt;span style="color:#960050;background-color:#1e0010">@&lt;/span>example&lt;span style="color:#f92672">.&lt;/span>com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mailhost &lt;span style="color:#f92672">=&lt;/span> mail&lt;span style="color:#f92672">.&lt;/span>example&lt;span style="color:#f92672">.&lt;/span>com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sendmail &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>usr&lt;span style="color:#f92672">/&lt;/span>sbin&lt;span style="color:#f92672">/&lt;/span>sendmail
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># NOTE: do not put the Image Cache below cgi-bin&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># since all files under cgi-bin will be executed ... this is not&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># good for images.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>imgcache &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>&lt;span style="color:#66d9ef">var&lt;/span>&lt;span style="color:#f92672">/&lt;/span>lib&lt;span style="color:#f92672">/&lt;/span>smokeping&lt;span style="color:#f92672">/&lt;/span>images
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>imgurl &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>images
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>datadir &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>&lt;span style="color:#66d9ef">var&lt;/span>&lt;span style="color:#f92672">/&lt;/span>lib&lt;span style="color:#f92672">/&lt;/span>smokeping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>piddir &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>run&lt;span style="color:#f92672">/&lt;/span>smokeping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cgiurl &lt;span style="color:#f92672">=&lt;/span> http:&lt;span style="color:#f92672">//&lt;/span>&lt;span style="color:#ae81ff">192.168&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#ae81ff">1.100&lt;/span>&lt;span style="color:#f92672">/&lt;/span>smokeping&lt;span style="color:#f92672">.&lt;/span>cgi
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>smokemail &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>etc&lt;span style="color:#f92672">/&lt;/span>smokeping&lt;span style="color:#f92672">/&lt;/span>smokemail
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tmail &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">/&lt;/span>etc&lt;span style="color:#f92672">/&lt;/span>smokeping&lt;span style="color:#f92672">/&lt;/span>tmail
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># specify this to get syslog logging&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>syslogfacility &lt;span style="color:#f92672">=&lt;/span> local0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># each probe is now run in its own process&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># disable this to revert to the old behaviour&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># concurrentprobes = no&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="5-配置告警规则">5. 配置告警规则&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Alerts ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>to = admin@example.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>from = smokeping@example.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># 定义各种告警规则
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+hostdown
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># in percent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern ==0%,==0%,==0%, ==U
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 对端无响应
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+bigloss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># in percent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern ==0%,==0%,==0%,==0%,&amp;gt;20%,&amp;gt;20%,&amp;gt;20%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 连续3次采样-丢包率超过20%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+lossdetect
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># in percent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern ==0%,==0%,==0%,==0%,&amp;gt;0%,&amp;gt;0%,&amp;gt;0%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 连续3次采样-存在丢包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+someloss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># in percent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern &amp;gt;0%,*12*,&amp;gt;0%,*12*,&amp;gt;0%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 间断性丢包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+rttdetect
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = rtt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># in milli seconds
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern &amp;lt;100,&amp;lt;100,&amp;lt;100,&amp;lt;100,&amp;lt;100,&amp;lt;150,&amp;gt;150,&amp;gt;150,&amp;gt;150
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 连续3次采样延迟增大-超过150ms
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="6-配置数据库设置">6. 配置数据库设置&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Database ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>step = 300
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pings = 20
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># consfn mrhb steps total
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>AVERAGE 0.5 1 28800
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>AVERAGE 0.5 12 9600
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> MIN 0.5 12 9600
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> MAX 0.5 12 9600
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>AVERAGE 0.5 144 2400
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> MAX 0.5 144 2400
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> MIN 0.5 144 2400
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="7-配置显示模板">7. 配置显示模板&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Presentation ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>template = /etc/smokeping/basepage.html
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>htmltitle = yes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>graphborders = no
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># If enabled, treat all filter menu queries as literal strings instead of regex
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>literalsearch = no
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+ charts
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = Charts
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = The most interesting destinations
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ stddev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sorter = StdDev(entries=&amp;gt;4)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = Top Standard Deviation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = Std Deviation
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>format = Standard Deviation %f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ max
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sorter = Max(entries=&amp;gt;5)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = Top Max Roundtrip Time
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = by Max
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>format = Max Roundtrip Time %f seconds
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sorter = Loss(entries=&amp;gt;5)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = Top Packet Loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = Loss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>format = Packets Lost %f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ median
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sorter = Median(entries=&amp;gt;5)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = Top Median Roundtrip Time
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = by Median
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>format = Median RTT %f seconds
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="8-配置探针">8. 配置探针&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Probes ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+ FPing
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>binary = /usr/sbin/fping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+ DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>binary = /usr/bin/dig
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>lookup = g.cn
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pings = 5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>step = 180
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="9-配置主从模式可选">9. 配置主从模式（可选）&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Slaves ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>secrets=/etc/smokeping/smokeping_secrets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+boomer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>display_name=boomer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>color=0000ff
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+slave2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>display_name=another
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>color=00ff00
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="10-配置监控目标">10. 配置监控目标&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>*** Targets ***
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>alerts = someloss
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>probe = FPing
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = Top
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = Network Latency Grapher
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>remark = Welcome to the SmokePing website of &amp;lt;b&amp;gt;Example Company&amp;lt;/b&amp;gt;. \
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Here you will learn all about the latency of our network.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+ Ping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = Ping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>title = 10.0.0.14 Pings
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>alerts = hostdown,bigloss,lossdetect,someloss,rttdetect
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ server1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = 192.168.1.50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>host = 192.168.1.50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ server2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = 192.168.1.51
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>host = 192.168.1.51
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+ DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>probe = DNS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>alerts = hostdown,bigloss,lossdetect,someloss,rttdetect
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>++ dns-server
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = 192.168.1.200
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>host = 192.168.1.200
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="启动服务">启动服务&lt;/h2>
&lt;h3 id="1-启动并启用服务">1. 启动并启用服务&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 启动 Caddy 服务&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service caddy start
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service caddy add
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 启动 SmokePing 服务&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service smokeping start
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service smokeping add
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 启动 fcgiwrap 服务&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service fcgiwrap start
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service fcgiwrap add
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-检查服务状态">2. 检查服务状态&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查 Caddy 状态&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service caddy status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查 SmokePing 状态&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service smokeping status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查 fcgiwrap 状态&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service fcgiwrap status
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="验证部署">验证部署&lt;/h2>
&lt;p>访问 &lt;code>http://192.168.1.100/smokeping.cgi&lt;/code> 验证 SmokePing 是否正常工作。&lt;/p>
&lt;h2 id="常见问题">常见问题&lt;/h2>
&lt;h3 id="1-caddy-启动失败">1. Caddy 启动失败&lt;/h3>
&lt;p>&lt;strong>症状&lt;/strong>：&lt;code>rc-service caddy start&lt;/code> 失败
&lt;strong>解决&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查配置文件语法&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>caddy validate --config /etc/caddy/Caddyfile
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查端口占用&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>netstat -tlnp | grep &lt;span style="color:#ae81ff">80&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>netstat -tlnp | grep &lt;span style="color:#ae81ff">443&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-smokeping-无法生成图表">2. SmokePing 无法生成图表&lt;/h3>
&lt;p>&lt;strong>症状&lt;/strong>：访问 CGI 脚本显示空白或错误
&lt;strong>解决&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查 fcgiwrap 服务&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service fcgiwrap status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查 CGI 脚本权限&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ls -la /usr/share/webapps/smokeping/smokeping.cgi
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查数据目录权限&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ls -la /var/lib/smokeping/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-权限问题">3. 权限问题&lt;/h3>
&lt;p>&lt;strong>症状&lt;/strong>：无法创建数据或图片
&lt;strong>解决&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 确保所有目录权限正确&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chown -R smokeping:smokeping /var/lib/smokeping/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod -R &lt;span style="color:#ae81ff">755&lt;/span> /var/lib/smokeping/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod -R &lt;span style="color:#ae81ff">777&lt;/span> /var/lib/smokeping/images/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="4-网络连接问题">4. 网络连接问题&lt;/h3>
&lt;p>&lt;strong>症状&lt;/strong>：SmokePing 无法 ping 目标主机
&lt;strong>解决&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 测试 fping 命令&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fping -c &lt;span style="color:#ae81ff">5&lt;/span> 10.0.0.14
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 检查防火墙设置&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>iptables -L -n
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="日志管理">日志管理&lt;/h2>
&lt;h3 id="1-caddy-日志">1. Caddy 日志&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 查看 Caddy 访问日志&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tail -f /var/log/caddy/access.log
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 查看系统日志&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tail -f /var/log/messages | grep caddy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-smokeping-日志">2. SmokePing 日志&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 查看 SmokePing 日志&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tail -f /var/log/messages | grep smokeping
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 查看进程日志&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>journalctl -u smokeping -f
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="定期维护">定期维护&lt;/h2>
&lt;h3 id="1-数据清理">1. 数据清理&lt;/h3>
&lt;p>SmokePing 会自动管理数据文件，但如果需要手动清理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 查看磁盘使用情况&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>du -sh /var/lib/smokeping/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 清理旧的图片文件（如果需要）&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>find /var/lib/smokeping/images -type f -mtime +90 -delete
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-服务重启">2. 服务重启&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 重启所有服务&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service caddy restart
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service fcgiwrap restart
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rc-service smokeping restart
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-配置备份">3. 配置备份&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 备份配置文件&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tar -czf /backup/smokeping-config-&lt;span style="color:#66d9ef">$(&lt;/span>date +%Y%m%d&lt;span style="color:#66d9ef">)&lt;/span>.tar.gz &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> /etc/caddy/Caddyfile &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> /etc/smokeping/smokeping.config
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="扩展功能">扩展功能&lt;/h2>
&lt;h3 id="1-添加更多监控目标">1. 添加更多监控目标&lt;/h3>
&lt;p>在配置文件的 &lt;code>*** Targets ***&lt;/code> 部分添加新的目标：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>+ new-host
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>menu = New Host
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>host = 192.168.1.100
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>alerts = hostdown,bigloss
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-配置自定义告警">2. 配置自定义告警&lt;/h3>
&lt;p>根据业务需求自定义告警规则：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>+ custom-alert
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>type = rtt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pattern &amp;gt;1000,&amp;lt;1000,&amp;lt;1000,&amp;lt;1000,&amp;lt;1000,&amp;lt;1000,&amp;gt;2000
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>comment = 延迟异常增高
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="性能优化">性能优化&lt;/h2>
&lt;h3 id="1-调整采样间隔">1. 调整采样间隔&lt;/h3>
&lt;p>根据网络状况调整 &lt;code>step&lt;/code> 参数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>step = 600 # 10 分钟采样一次，减少资源占用
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-限制并发探针">2. 限制并发探针&lt;/h3>
&lt;p>如果资源有限，可以禁用并发探针：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span># disable concurrent probes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>concurrentprobes = no
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>通过以上配置，您将在 Alpine Linux 上成功部署一个功能完整的 SmokePing 网络监控系统，提供实时的网络延迟、丢包率和抖动监控。&lt;/p>
&lt;h2 id="参考资料">参考资料&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://www.cnblogs.com/thatsit/p/6395506.html">自定义smokeping告警(邮件+短信)&lt;/a> - 详细的配置参数和优化建议&lt;/li>
&lt;/ul></content></item><item><title>在alpine Linux上运行 besttrace</title><link>https://www.0niu.cn/posts/run-besttrace-on-alpine-linux/</link><pubDate>Thu, 11 Mar 2021 13:51:01 +0800</pubDate><guid>https://www.0niu.cn/posts/run-besttrace-on-alpine-linux/</guid><description>&lt;p>在 alpine Linux上运行 besttrace时，报错&lt;code>no such file or directory&lt;/code>,应该是缺少库文件，安装gcompat解决。&lt;/p></description><content>&lt;p>在 alpine Linux上运行 besttrace时，报错&lt;code>no such file or directory&lt;/code>,应该是缺少库文件，安装gcompat解决。&lt;/p>
&lt;p>&lt;img loading='lazy' src="error.png" alt="" />
&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>➜ ~ ldd .local/bin/besttrace
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> /lib64/ld-linux-x86-64.so.2 &lt;span style="color:#f92672">(&lt;/span>0x7f5d21e16000&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> libpthread.so.0 &lt;span style="color:#f92672">=&lt;/span>&amp;gt; /lib64/ld-linux-x86-64.so.2 &lt;span style="color:#f92672">(&lt;/span>0x7f5d21e16000&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> libc.so.6 &lt;span style="color:#f92672">=&lt;/span>&amp;gt; /lib64/ld-linux-x86-64.so.2 &lt;span style="color:#f92672">(&lt;/span>0x7f5d21e16000&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>➜ ~ apk search ld-linux
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>gcompat-1.0.0-r1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>➜ ~ apk add gcompat
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">(&lt;/span>1/3&lt;span style="color:#f92672">)&lt;/span> Installing musl-obstack &lt;span style="color:#f92672">(&lt;/span>1.1-r1&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">(&lt;/span>2/3&lt;span style="color:#f92672">)&lt;/span> Installing libucontext &lt;span style="color:#f92672">(&lt;/span>1.0-r0&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">(&lt;/span>3/3&lt;span style="color:#f92672">)&lt;/span> Installing gcompat &lt;span style="color:#f92672">(&lt;/span>1.0.0-r1&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>OK: &lt;span style="color:#ae81ff">272&lt;/span> MiB in &lt;span style="color:#ae81ff">171&lt;/span> packages
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#doas setcap cap_net_raw,cap_net_admin+eip .local/bin/besttrace&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>➜ ~ besttrace g.cn
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>traceroute to g.cn &lt;span style="color:#f92672">(&lt;/span>113.108.239.162&lt;span style="color:#f92672">)&lt;/span>, &lt;span style="color:#ae81ff">30&lt;/span> hops max, &lt;span style="color:#ae81ff">32&lt;/span> byte packets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ae81ff">1&lt;/span> 192.168.7.1 0.57 ms * 局域网
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 192.168.7.1 0.57 ms * 局域网
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 192.168.7.1 0.58 ms * 局域网
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></content></item></channel></rss>