我本是高山 發表於 2020-5-13 14:23:00

Prometheus监控PHP-FPM

<h1>一、概述</h1>
<h2>启用php-fpm状态功能</h2>
<p><code>php-fpm</code>和<code>nginx</code>一样内建了一个状态页,对于想了解php-fpm的状态以及监控php-fpm非常有帮助。为了后续的Prometheus监控,我们需要先了解php-fpm状态页是怎么回事。</p>
<p>在上一篇文章中,已经开启了php-fpm状态,链接 如下:</p>
<p>https://www.cnblogs.com/xiao987334176/p/12918413.html</p>
<div class="cnblogs_code">
<pre>pm.status_path = /fpm_status</pre>
</div>
<p>&nbsp;</p>
<h2>nginx配置</h2>
<p>上篇文章中,也对nginx默认主机添加了配置</p>
<div class="cnblogs_code">
<pre>    location ~ ^/(fpm_status|<span style="color: rgba(0, 0, 0, 1)">health)$ {
      fastcgi_pass </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">31.34</span>:<span style="color: rgba(128, 0, 128, 1)">9000</span><span style="color: rgba(0, 0, 0, 1)">;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
    }</span></pre>
</div>
<p>&nbsp;</p>
<p>访问php-fpm状态页面</p>
<div class="cnblogs_code">
<pre>http://192.168.31.34/fpm_status</pre>
</div>
<p>效果如下:</p>
<p><img src="https://img2020.cnblogs.com/blog/1341090/202005/1341090-20200519175217738-605672081.png" alt=""></p>
<p>&nbsp;</p>
<h2>php-fpm status详解</h2>
<ul>
<li>pool-fpm 池子名称,大多数为www</li>
<li>process manager – 进程管理方式,值:static, dynamic or ondemand. dynamic</li>
<li>start time – 启动日期,如果reload了php-fpm,时间会更新</li>
<li>start since – 运行时长</li>
<li>accepted conn – 当前池子接受的请求数</li>
<li>listen queue –请求等待队列,如果这个值不为0,那么要增加FPM的进程数量</li>
<li>max listen queue – 请求等待队列最高的数量</li>
<li>listen queue len – socket等待队列长度</li>
<li>idle processes – 空闲进程数量</li>
<li>active processes –活跃进程数量</li>
<li>total processes – 总进程数量</li>
<li>max active processes –最大的活跃进程数量(FPM启动开始算)</li>
<li>max children reached -大道进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,请改大一点。</li>
<li>slow requests –启用了php-fpm slow-log,缓慢请求的数量</li>
</ul>
<p>&nbsp;</p>
<h1>二、安装php-fpm-exporter</h1>
<h2>封装docker</h2>
<p>由于在dockerhub里面找的一些php-fpm-exporter都不好使,docker如何使用都没有说明。</p>
<p>所以我决定自己封装一个docker</p>
<p>&nbsp;</p>
<h3>下载php-fpm-exporter</h3>
<div class="cnblogs_code">
<pre>https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/bakins/php-fpm-exporter/releases</span></pre>
</div>
<p>下载二进制文件</p>
<p><img src="https://img2020.cnblogs.com/blog/1341090/202005/1341090-20200520141132461-1956078912.png" alt=""></p>
<p>&nbsp;</p>
<p>注意:不要下载zip文件,需要自己手动用go环境编译。对于go语言不熟悉的人,会编译失败。</p>
<p>所以,下载已经编译好的文件,是比较稳妥的办法。</p>
<p>&nbsp;</p>
<p>创建目录/opt/php-fpm-exporter,结构如下:</p>
<div class="cnblogs_code">
<pre>./<span style="color: rgba(0, 0, 0, 1)">
├── dockerfile
├── php</span>-fpm-<span style="color: rgba(0, 0, 0, 1)">exporter.linux.amd64
└── run.</span><span style="color: rgba(0, 0, 255, 1)">sh</span></pre>
</div>
<p>说明:</p>
<p>php-fpm-exporter.linux.amd64 就是我们下载的二进制文件</p>
<p>run.sh 就是php-fpm-exporter的启动命令。</p>
<p>&nbsp;</p>
<p>dockerfile</p>
<div class="cnblogs_code">
<pre>FROM alpine:<span style="color: rgba(128, 0, 128, 1)">3.10</span><span style="color: rgba(0, 0, 0, 1)">
ADD php</span>-fpm-exporter.linux.amd64 /php-fpm-<span style="color: rgba(0, 0, 0, 1)">exporter
ADD run.</span><span style="color: rgba(0, 0, 255, 1)">sh</span> /<span style="color: rgba(0, 0, 0, 1)">
RUN </span><span style="color: rgba(0, 0, 255, 1)">chmod</span> <span style="color: rgba(128, 0, 128, 1)">755</span> /php-fpm-exporter /run.<span style="color: rgba(0, 0, 255, 1)">sh</span><span style="color: rgba(0, 0, 0, 1)">
EXPOSE </span><span style="color: rgba(128, 0, 128, 1)">9190</span><span style="color: rgba(0, 0, 0, 1)">
ENTRYPOINT [ </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/run.sh</span><span style="color: rgba(128, 0, 0, 1)">"</span> ]</pre>
</div>
<p>&nbsp;</p>
<p>run.sh</p>
<div class="cnblogs_code">
<pre>#!/bin/<span style="color: rgba(0, 0, 255, 1)">sh</span>

/php-fpm-exporter --addr <span style="color: rgba(128, 0, 128, 1)">0.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.0</span>:<span style="color: rgba(128, 0, 128, 1)">9190</span> --endpoint $endpoint</pre>
</div>
<p>&nbsp;</p>
<p>生成镜像</p>
<div class="cnblogs_code">
<pre>docker build -t php-fpm-exporter:v1 .</pre>
</div>
<p>&nbsp;</p>
<h2>运行镜像</h2>
<p>说明:这里只需要传入一个环境变量即可。确保url可以正常访问。</p>
<div class="cnblogs_code">
<pre>docker run -d -it --restart=always --name php-fpm-exporter -e endpoint=http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">192.168.31.34/fpm_status -p 9190:9190 php-fpm-exporter:v1</span></pre>
</div>
<p>&nbsp;</p>
<h2>访问metrics</h2>
<div class="cnblogs_code">
<pre>http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">192.168.31.34:9191/metrics</span></pre>
</div>
<p>&nbsp;</p>
<h1>三、配置Prometheus</h1>
<p>修改你的Prometheus配置文件,最后一行增加</p>
<div class="cnblogs_code">
<pre>- job_name: PHP-<span style="color: rgba(0, 0, 0, 1)">FPM
    static_configs:
      </span>- targets: [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">192.168.31.34:9190</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
      labels:
          instance: localhost</span></pre>
</div>
<p>&nbsp;</p>
<p>访问targets</p>
<p><img src="https://img2020.cnblogs.com/blog/1341090/202005/1341090-20200520141955882-456197050.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;确保状态为UP</p>
<p>&nbsp;</p>
<h1>四、grafana导入dashboards</h1>
<p>模板地址如下:</p>
<p>https://grafana.com/dashboards/3901</p>
<p>&nbsp;</p>
<p>等待一段时候后,效果如下:</p>
<p><img src="https://img2020.cnblogs.com/blog/1341090/202005/1341090-20200520142212526-278575233.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>本文参考链接:</p>
<p>https://blog.csdn.net/u012599988/article/details/103179946</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/xiao987334176/p/12923365.html
頁: [1]
查看完整版本: Prometheus监控PHP-FPM