钱佩锌 發表於 2023-5-30 00:00:00

使用 Grafana+collectd+InfluxDB 打造现代监控系统

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>安装 InfluxDB</li><li>安装 collectd</li><li>安装 Grafana</li><li>Troubleshooting</li></ul></div><div class="entry"><p>想打造 New Relic 那样漂亮的实时监控系统我们只需要 InfluxDB/collectd/Grafana 这三个工具,这三个工具的关系是这样的:</p><blockquote><p>采集数据(collectd)-&gt; 存储数据(InfluxDB) -&gt; 显示数据(Grafana)。</p></blockquote><ul class=" list-paddingleft-2"><li>InfluxDB 是 Go 语言开发的一个开源分布式时序数据库,非常适合存储指标、事件、分析等数据,看版本号(v0.8.8)就知道这个项目还很年轻;</li><li>collectd 就不用介绍了吧,C 语言写的一个系统性能采集工具;</li><li>Grafana 是纯 Javascript 开发的前端工具,用于访问 InfluxDB,自定义报表、显示图表等。</li></ul><p>下面的安装和配置步骤在 Ubuntu 14.04 Server 64bit 版上完成。升级整个系统后重启:</p><pre class="brush:bash;toolbar:false">$&nbsp;sudo&nbsp;apt-get&nbsp;update
$&nbsp;sudo&nbsp;apt-get&nbsp;upgrade
$&nbsp;sudo&nbsp;reboot</pre><p><br/></p><p class="maodian"></p><h2>安装 InfluxDB</h2><p>InfluxDB 是 Go 写的,不依赖任何其他包或库,很干净。安装很容易:</p><pre class="brush:bash;toolbar:false">$&nbsp;wget&nbsp;https://s3.amazonaws.com/influxdb/influxdb_latest_amd64.deb
$&nbsp;sudo&nbsp;dpkg&nbsp;-i&nbsp;influxdb_latest_amd64.deb</pre><p>启动 InfluxDB:</p><pre class="brush:bash;toolbar:false">$&nbsp;sudo&nbsp;/etc/init.d/influxdb&nbsp;start
Setting&nbsp;ulimit&nbsp;-n&nbsp;65536
Starting&nbsp;the&nbsp;process&nbsp;influxdb&nbsp;[&nbsp;OK&nbsp;]
influxdb&nbsp;process&nbsp;was&nbsp;started&nbsp;[&nbsp;OK&nbsp;]</pre><p>启动后打开 web 管理界面 http://192.168.2.183:8083/ 默认用户名和密码是 root 和 root. InfluxDB 的 Web 管理界面端口是 8083,HTTP API 监听端口是 8086,如果需要更改这些默认设定,修改 InfluxDB 的配置文件重启就可以了。</p><p><img style="max-width:100%!important;height:auto!important;" src="https://zhuji.jb51.net/uploads/img/20230523/80371.png"/></p><p>在刚安装好的 InfluxDB 上创建一个名为 collectd 的数据库,可以用命令行创建,也可以用 Web 管理界面操作:</p><pre class="brush:bash;toolbar:false">$&nbsp;curl&nbsp;&quot;http://192.168.2.183:8086/db?u=root&amp;p=root&quot;&nbsp;-d&nbsp;&quot;{\&quot;name\&quot;:&nbsp;\&quot;collectd\&quot;}&quot;</pre><p><img style="max-width:100%!important;height:auto!important;" src="https://zhuji.jb51.net/uploads/img/20230523/80372.png"/></p><p class="maodian"></p><h2>安装 collectd</h2><p>安装 collectd:</p><pre class="brush:bash;toolbar:false">$&nbsp;sudo&nbsp;apt-get&nbsp;install&nbsp;collectd</pre><p>配置 collectd 为客户端,收集到数据后直接发给 InfluxDB:</p><pre class="brush:bash;toolbar:false">$&nbsp;sudo&nbsp;vi&nbsp;/etc/collectd/collectd.conf
...
LoadPlugin&nbsp;network
...Server&nbsp;&quot;192.168.2.183&quot;&nbsp;&quot;25826&quot;...</pre><p>重启 collectd:</p><pre class="brush:bash;toolbar:false">$&nbsp;sudo&nbsp;/etc/init.d/collectd&nbsp;restart</pre><p>InfluxDB 现在自带一个 collectd 插件来获取 collectd 客户端发来的数据,以前可没这么方便哦,0.8.4 版本以前只能通过 influxdb-collectd-proxy 这样的第三方程序来连接 collectd 和 InfluxDB. 如果你检查一下服务器上打开的端口就会发现 influxdb 插件启动了一个 25826 端口,如果发现 InfluxDB 数据库里没有(收集到)数据,务必检查这个 25826 端口是否正常启动了:</p><pre class="brush:bash;toolbar:false">$&nbsp;sudo&nbsp;netstat&nbsp;-tupln
Active&nbsp;Internet&nbsp;connections&nbsp;(only&nbsp;servers)
Proto&nbsp;Recv-Q&nbsp;Send-Q&nbsp;Local&nbsp;Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foreign&nbsp;Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;State&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PID/Program&nbsp;name
tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;0.0.0.0:22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;622/sshd
tcp6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;:::8086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:::*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;668/influxdb
tcp6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;:::22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:::*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;622/sshd
tcp6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;:::8090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:::*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;668/influxdb
tcp6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;:::8099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:::*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;668/influxdb
tcp6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;:::8083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:::*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;668/influxdb
udp6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;:::25826&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:::*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;668/influxdb</pre><p>InfluxDB 自带的 collectd 插件默认是关闭的,需要手动配置打开 enabled = true,并填上 database = “collectd” 这一行,这里的 “collectd” 就是我们上面创建的那个数据库,更改配置后记得重启 InfluxDB:</p><pre class="brush:bash;toolbar:false">$&nbsp;sudo&nbsp;vi&nbsp;/opt/influxdb/current/config.toml
$&nbsp;sudo&nbsp;vi&nbsp;/opt/influxdb/shared/config.toml
...
&nbsp;&nbsp;#&nbsp;Configure&nbsp;the&nbsp;collectd&nbsp;api
&nbsp;&nbsp;
&nbsp;&nbsp;enabled&nbsp;=&nbsp;true
&nbsp;&nbsp;#&nbsp;address&nbsp;=&nbsp;&quot;0.0.0.0&quot;&nbsp;#&nbsp;If&nbsp;not&nbsp;set,&nbsp;is&nbsp;actually&nbsp;set&nbsp;to&nbsp;bind-address.
&nbsp;&nbsp;#&nbsp;port&nbsp;=&nbsp;25826
&nbsp;&nbsp;database&nbsp;=&nbsp;&quot;collectd&quot;
&nbsp;&nbsp;#&nbsp;types.db&nbsp;can&nbsp;be&nbsp;found&nbsp;in&nbsp;a&nbsp;collectd&nbsp;installation&nbsp;or&nbsp;on&nbsp;github:
&nbsp;&nbsp;#&nbsp;https://github.com/collectd/collectd/blob/master/src/types.db
&nbsp;&nbsp;#&nbsp;typesdb&nbsp;=&nbsp;&quot;/usr/share/collectd/types.db&quot;&nbsp;#&nbsp;The&nbsp;path&nbsp;to&nbsp;the&nbsp;collectd&nbsp;types.db&nbsp;file
...

$&nbsp;sudo&nbsp;/etc/init.d/influxdb&nbsp;restart
Setting&nbsp;ulimit&nbsp;-n&nbsp;65536
Setting&nbsp;ulimit&nbsp;-n&nbsp;65536
influxdb&nbsp;process&nbsp;was&nbsp;stopped&nbsp;[&nbsp;OK&nbsp;]
Setting&nbsp;ulimit&nbsp;-n&nbsp;65536
Starting&nbsp;the&nbsp;process&nbsp;influxdb&nbsp;[&nbsp;OK&nbsp;]
influxdb&nbsp;process&nbsp;was&nbsp;started&nbsp;[&nbsp;OK&nbsp;]</pre><p>现在 InfluxDB 已经准备好接受和处理 collectd 传来的数据了。用命令行或者 Web 管理界面验证一下数据库里是否有数据:</p><pre class="brush:bash;toolbar:false">$&nbsp;curl&nbsp;-G&nbsp;&#39;http://192.168.2.183:8086/db/collectd/series?u=root&amp;p=root&amp;q=list+series&amp;pretty=true&#39;
[
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;name&quot;:&nbsp;&quot;list_series_result&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;columns&quot;:&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;time&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;name&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;points&quot;:&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;192.168.2.183/cpu-0/cpu-idle&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
...
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;}
]</pre><p><img style="max-width:100%!important;height:auto!important;" src="https://zhuji.jb51.net/uploads/img/20230523/80373.png"/></p><p class="maodian"></p><h2>安装 Grafana</h2><p>下载 grafana 后解压发到 web 服务器上就可用。这里省去配置 Nginx/Apache 之类的麻烦,直接用最简单的 Web 服务器 python -m SimpleHTTPServer 驱动:</p><pre class="brush:bash;toolbar:false">$&nbsp;wget&nbsp;http://grafanarel.s3.amazonaws.com/grafana-1.9.1.tar.gz
$&nbsp;tar&nbsp;xzvf&nbsp;grafana-1.9.1.tar.gz
$&nbsp;cd&nbsp;grafana-1.9.1.tar.gz
$&nbsp;cp&nbsp;config.sample.js&nbsp;config.js

$&nbsp;vi&nbsp;config.js
...
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;InfluxDB&nbsp;example&nbsp;setup&nbsp;(the&nbsp;InfluxDB&nbsp;databases&nbsp;specified&nbsp;need&nbsp;to&nbsp;exist)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datasources:&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;influxdb:&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;&#39;influxdb&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;&quot;http://192.168.2.183:8086/db/collectd&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username:&nbsp;&#39;root&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password:&nbsp;&#39;root&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
...

$&nbsp;sudo&nbsp;python&nbsp;-m&nbsp;SimpleHTTPServer</pre><p>用浏览器访问 Grafana,这里的默认端口是 8000:</p><p><img style="max-width:100%!important;height:auto!important;" src="https://zhuji.jb51.net/uploads/img/20230523/80374.png"/></p><p class="maodian"></p><h2>Troubleshooting</h2><p>下面有多个网友评论提到修改配置文件后端口 25826 也无法起来的问题,和 influxdb 启动时候使用的是哪个配置文件有关,用 ps aux | grep influxdb 可以看到当前 influxdb 使用的是哪个配置文件:</p><pre class="brush:bash;toolbar:false">$&nbsp;sudo&nbsp;vi&nbsp;/opt/influxdb/current/config.toml
$&nbsp;sudo&nbsp;vi&nbsp;/opt/influxdb/shared/config.toml

$&nbsp;ps&nbsp;aux&nbsp;|&nbsp;grep&nbsp;influxdb
influxdb&nbsp;&nbsp;&nbsp;668&nbsp;19.1&nbsp;&nbsp;8.1&nbsp;2655964&nbsp;82336&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sl&nbsp;&nbsp;&nbsp;Mar31&nbsp;6375:52&nbsp;/usr/bin/influxdb&nbsp;-pidfile&nbsp;/opt/influxdb/shared/influxdb.pid&nbsp;-config&nbsp;/opt/influxdb/shared/config.toml
...</pre><p>两个配置文件 /opt/influxdb/current/config.toml 和 /opt/influxdb/shared/config.toml 的确很坑爹~</p></div>
頁: [1]
查看完整版本: 使用 Grafana+collectd+InfluxDB 打造现代监控系统