最近对devOps这个话题有点兴趣,所以研究了一下monitor相关的开源项目,翻到medium上的一篇文章,而且实际项目中也曾看到devOps组的同事搭过类似的监控,就想过把瘾,了解一下监控可视化。
被监控服务配置
本地正好有spring-boot的项目,并且也依赖了jolokia
(主要就是为了把JMX的mbean通过HTTP暴露出去)
项目配置也少不了
1 | endpoints: |
访问一下URL看看是不是ok
1 | http://localhost:8080/jolokia/read/org.springframework.boot:name=metricsEndpoint,type=Endpoint/Data |
搭建监控系统
如果能看到数据,说明server端配置没问题了,下面我们怎么搭建Telegraf + InfluxDB + Grafana呢,这个三个组件是这么配合的,Telegraf实际就是收集信息的,比如每隔10s访问一次上面那个URL得到metrics,收集到的数据存到InfluxDB,然后Grafana做数据可视化。
但是如果纯手动安装实在太麻烦,求助万能的github,找到一个非常棒的项目(https://github.com/samuelebistoletti/docker-statsd-influxdb-grafana), 直接fork然后修改一些配置就可以为自己的项目服务了。如果你不了解相关配置可以先直接run起来,然后通过ssh进去一探究竟。
1 | ssh root@localhost -p 22022 |
配置方面,主要是要修改Telegraf的,因为它是对接不同项目的,你需要收集什么样的信息,比如cpu,disk,net等等都要在Telegraf里配。简单起见,我只设置了三个输入。
1 | # /etc/telegraf/telegraf.conf |
其实就是spring-boot标准的metrics以及tomcat的Threads。
完成之后重启服务/etc/init.d/telegraf restart
查看监控数据
我们访问InfluxDB看看有数据了没有http://localhost:3004/
,切换数据库到Telegraf。输入以下命令试试吧
1 | SHOW MEASUREMENTS |
比如输入SELECT * FROM jolokia
就能看到spring-boot暴露了哪些数据,从time列也可以看出Telegraf是每隔10s收集一次,太频繁了对server也是压力。
上面基本涵盖了cpu,内存和存储的一些metrics。
其实也可以配置网络相关的,感兴趣的可以看官方的telegraf.conf,里面有配置[[inputs.net]]的例子。
数据可视化
数据有了,下一步就是可视化。
按照Github上面说的进入http://localhost:3003/
,
- Using the wizard click on
Add data source
- Choose a
name
for the source and flag it asDefault
- Choose
InfluxDB
astype
- Choose
direct
asaccess
- Fill remaining fields as follows and click on
Add
without altering other fields
1 | Url: http://localhost:8086 |
添加好InfluxDB后,新建一个Dashboard,然后快速的ADD几个Graph来。
为了演示,我添加了三个,分别使用下面三组查询语句来渲染出三张图表
1 | SELECT MEAN(usage_system) + MEAN(usage_user) AS cpu_total FROM cpu WHERE $timeFilter GROUP BY time($interval) |
第一张是CPU占用率;第二张是内存占用情况,绿线是Total,黄线是Used;第三张是jolokia提供的jvm heap的使用,可以到看到GC的情况。
刚才还配置了Tomcat的收集,想看Tomcat的Thread情况也是妥妥的。
1 | SELECT mean("tomcat_max_threads") FROM "jolokia" WHERE $timeFilter GROUP BY time($interval) fill(null) |
小结
可以看到搭建这样一套环境其实很快,原理也并不复杂,监控数据可视化的难点在于
- 哪些metrics需要监控
- 哪些metrics需要配合起来可以判断问题,比如diskio+net是不是可以判断系统整体IO的瓶颈。
这都是需要多年的经验总结才能获得的,我还是菜鸟一枚,再接再厉。