琼穹之向 發表於 2023-12-9 00:00:00

Prometheus网络监控之Fping-Exporter

<p>
        <strong><span> 简介</span></strong></p>
<p>
        目前线上很多应用都是使用prometheus进行监控。之前是使用smokeping做网络监控,但是,主机一多就容易丢失监控数据,就想着直接使用prometheus进行监控。</p>
<center>
        <img style="max-width:100%!important;height:auto!important;"title="Prometheus网络监控之Fping-Exporter" alt="Prometheus网络监控之Fping-Exporter" src="https://zhuji.jb51.net/uploads/img/202305/fe83ae7e756884e2bb9ea977b7909723.jpg">
</center>
<p>
        <strong><span>exporter</span></strong></p>
<p>
        prometheus 拉取数据数据需要有对应的exporter,github上查了一下,有一个fping-exporter(schweikert/fping-exporter)比较适合。</p>
<p>
        这个exporter是用Go写的,直接git clone下载下来进行编译就可以运行了。</p>
<center>
        <img style="max-width:100%!important;height:auto!important;"title="Prometheus网络监控之Fping-Exporter" alt="Prometheus网络监控之Fping-Exporter" src="https://zhuji.jb51.net/uploads/img/202305/6b4b7074990b7732788680c45f44fd89.jpg">
</center>
<p>
        <strong><span>命令参数</span></strong></p>
<blockquote>
        <p class="alt">
                <span><span>fping-exporter  </span></span></p>
        <p>
                <span> </span></p>
        <p class="alt">
                <span>Application Options: </span></p>
        <p>
                <span>  -l, <span class="comment">--listen=:PORT    Listen address (default: :9605)</span><span> </span></span></p>
        <p class="alt">
                <span>  -p, <span class="comment">--period=SECS           Period in seconds, should match Prometheus scrape interval (default: 60)</span><span> </span></span></p>
        <p>
                <span>  -f, <span class="comment">--fping=PATH            Fping binary path (default: /usr/bin/fping)</span><span> </span></span></p>
        <p class="alt">
                <span>  -c, <span class="comment">--count=N               Number of pings to send at each period (default: 20)</span><span> </span></span></p>
        <p>
                <span>​ </span></p>
        <p class="alt">
                <span>Help Options: </span></p>
        <p>
                <span>  -h, <span class="comment">--help                  Show this help message</span><span> </span></span></p>
</blockquote>
<p>
        这里可以看到,其实需要系统安装fping命令,然后将fping执行程序指定给程序。</p>
<p>
        <strong><span>部署fping-exporter</span></strong></p>
<p>
        我这边使用的CentOS7进行部署,所以可以直接使用yum安装epel-release,然后在epel源里面就有fping。</p>
<center>
        <img style="max-width:100%!important;height:auto!important;"title="Prometheus网络监控之Fping-Exporter" alt="Prometheus网络监控之Fping-Exporter" src="https://zhuji.jb51.net/uploads/img/202305/ab31b455e82c3622fc6d9327df442ac2.jpg">
</center>
<blockquote>
        <p class="alt">
                <span><span>yum -y install epel-release </span></span></p>
        <p>
                <span>yum -y install fping </span></p>
</blockquote>
<p>
        将编译好的二进制文件拷贝到/data/prometheus/fping-exporter,添加systemd服务文件</p>
<blockquote>
        <p class="alt">
                <span><span>vim /usr/lib/systemd/system/fping-exporter.service </span></span></p>
</blockquote>
 
<blockquote>
        <p class="alt">
                <span><span> </span></span></p>
        <p>
                <span>Description=fping-exporter </span></p>
        <p class="alt">
                <span><span class="keyword">After</span><span>=network.target </span></span></p>
        <p>
                <span>​ </span></p>
        <p class="alt">
                <span> </span></p>
        <p>
                <span>Type=simple </span></p>
        <p class="alt">
                <span>WorkingDirectory=/data/prometheus/ </span></p>
        <p>
                <span>ExecStart=/data/prometheus/fping-exporter -f /usr/sbin/fping -p 60 -c 10 -l :9605   </span></p>
        <p class="alt">
                <span>LimitNOFILE=65536 </span></p>
        <p>
                <span>PrivateTmp=<span class="keyword">true</span><span> </span></span></p>
        <p class="alt">
                <span>RestartSec=2 </span></p>
        <p>
                <span>StartLimitInterval=0 </span></p>
        <p class="alt">
                <span>Restart=always </span></p>
        <p>
                <span>​ </span></p>
        <p class="alt">
                <span> </span></p>
        <p>
                <span>WantedBy=multi-<span class="func">user</span><span>.target </span></span></p>
</blockquote>
<p>
        ​启动并设置开机启动</p>
<blockquote>
        <p class="alt">
                <span><span>systemctl daemon-reload  </span></span></p>
        <p>
                <span>systemctl enable fping-exporter </span></p>
        <p class="alt">
                <span>systemctl start fping-exporter </span></p>
</blockquote>
<p>
        <strong><span>配置</span></strong></p>
<p>
        在prometheus添加一个job监听目录,我们就可以在目录底下添加内容,实现动态加载了。</p>
<blockquote>
        <p class="alt">
                <span><span>vim prometheus.yml </span></span></p>
</blockquote>
<br><blockquote>
        <p class="alt">
                <span><span>... </span></span></p>
        <p>
                <span>  - job_name: fping_default </span></p>
        <p class="alt">
                <span>    metrics_path: /probe </span></p>
        <p>
                <span>    scrape_interval: 60s </span></p>
        <p class="alt">
                <span>    file_sd_configs: </span></p>
        <p>
                <span>    - refresh_interval: 61s </span></p>
        <p class="alt">
                <span>      files: </span></p>
        <p>
                <span>        -  /data/prometheus/fping/*.json </span></p>
        <p class="alt">
                <span>    relabel_configs: </span></p>
        <p>
                <span>    - source_labels:  </span></p>
        <p class="alt">
                <span>      target_label: __param_target </span></p>
        <p>
                <span>    - source_labels:  </span></p>
        <p class="alt">
                <span>      target_label: instance </span></p>
        <p>
                <span>    - target_label: __address__ </span></p>
        <p class="alt">
                <span>      replacement: 192.168.1.8:9605  </span></p>
</blockquote>
<p>
        replacement: 192.168.1.8:9605 这个就是我们fping-exporter的地址,</p>
<p>
        重载一些prometheus进程,配置就生效了。</p>
<blockquote>
        <p class="alt">
                <span><span>kill   -HUP   </span></span></p>
</blockquote>
<p>
        <strong><span>配置监控项</span></strong></p>
<blockquote>
        <p class="alt">
                <span><span>mkdir -p /data/prometheus/fping </span></span></p>
        <p>
                <span>vim /data/prometheus/fping/host.json </span></p>
</blockquote>
<br><blockquote>
        <p class="alt">
                <span><span>[ </span></span></p>
        <p>
                <span>     { </span></p>
        <p class="alt">
                <span>       <span class="string">"targets"</span><span>: [ </span></span></p>
        <p>
                <span>           <span class="string">"10.0.4.2"</span><span> </span></span></p>
        <p class="alt">
                <span>       ], </span></p>
        <p>
                <span>       <span class="string">"labels"</span><span>: { </span></span></p>
        <p class="alt">
                <span>           <span class="string">"instance"</span><span>: </span><span class="string">"10.0.4.2"</span><span>, </span></span></p>
        <p>
                <span>           <span class="string">"job"</span><span>: </span><span class="string">"fping_exporter"</span><span> </span></span></p>
        <p class="alt">
                <span>       } </span></p>
        <p>
                <span>   }, </span></p>
        <p class="alt">
                <span>   { </span></p>
        <p>
                <span>       <span class="string">"targets"</span><span>: [ </span></span></p>
        <p class="alt">
                <span>           <span class="string">"10.0.4.3"</span><span> </span></span></p>
        <p>
                <span>       ], </span></p>
        <p class="alt">
                <span>       <span class="string">"labels"</span><span>: { </span></span></p>
        <p>
                <span>           <span class="string">"instance"</span><span>: </span><span class="string">"10.0.4.3"</span><span>, </span></span></p>
        <p class="alt">
                <span>           <span class="string">"job"</span><span>: </span><span class="string">"fping_exporter"</span><span> </span></span></p>
        <p>
                <span>       } </span></p>
        <p class="alt">
                <span>   } </span></p>
</blockquote>
<p>
        这个项目上面就有提供了grafana面板,可以直接导入到grafana里面就可以看到监控数据了。</p>
<center>
        <img style="max-width:100%!important;height:auto!important;"title="Prometheus网络监控之Fping-Exporter" alt="Prometheus网络监控之Fping-Exporter" src="https://zhuji.jb51.net/uploads/img/202305/65cea06ab90f939617a670f668493aca.jpg">
</center>
<p>
        <strong><span>总结</span></strong></p>
<p>
        这个fping-exportere有一个问题,如果监控主机有很多的时候,它都会拼凑在一个命令里面去执行,导致有时候监控数据获取不到。</p>
<p>
        在github上Fork了一个代码进行了修改(Jalright/fping-exporter),如果监控对象比较多,可以使用这个进行编译部署。</p>
頁: [1]
查看完整版本: Prometheus网络监控之Fping-Exporter