最近对devOps这个话题有点兴趣,因此研究了一下monitor相关的开源项目,翻到medium上的一篇文章,并且实际项目中也曾看到devOps组的同事搭过相似的监控,就想过把瘾,了解一下监控可视化。git
本地正好有spring-boot的项目,而且也依赖了jolokia
(主要就是为了把JMX的mbean经过HTTP暴露出去)
项目配置也少不了github
endpoints: enabled: true jmx: enabled: true jolokia: enabled: true management: security: enabled: false
访问一下URL看看是否是okspring
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/samuelebis... 直接fork而后修改一些配置就能够为本身的项目服务了。若是你不了解相关配置能够先直接run起来,而后经过ssh进去一探究竟。docker
ssh root@localhost -p 22022
配置方面,主要是要修改Telegraf的,由于它是对接不一样项目的,你须要收集什么样的信息,好比cpu,disk,net等等都要在Telegraf里配。简单起见,我只设置了三个输入。数据库
# /etc/telegraf/telegraf.conf [[inputs.jolokia]] context = "/jolokia" [[inputs.jolokia.servers]] name = "springbootapp" host = "{app ip address}" port = "8080" [[inputs.jolokia.metrics]] name = "metrics" mbean = "org.springframework.boot:name=metricsEndpoint,type=Endpoint" attribute = "Data" [[inputs.jolokia.metrics]] name = "tomcat_max_threads" mbean = "Tomcat:name=\"http-nio-8080\",type=ThreadPool" attribute = "maxThreads" [[inputs.jolokia.metrics]] name = "tomcat_current_threads_busy" mbean = "Tomcat:name=\"http-nio-8080\",type=ThreadPool" attribute = "currentThreadsBusy"
其实就是spring-boot标准的metrics以及tomcat的Threads。
完成以后重启服务/etc/init.d/telegraf restart
c#
咱们访问InfluxDB看看有数据了没有http://localhost:3004/
,切换数据库到Telegraf。输入如下命令试试吧tomcat
SHOW MEASUREMENTS SELECT * FROM jolokia SELECT * FROM cpu SELECT * FROM mem SELECT * FROM diskio
好比输入SELECT * FROM jolokia
就能看到spring-boot暴露了哪些数据,从time列也能够看出Telegraf是每隔10s收集一次,太频繁了对server也是压力。springboot
上面基本涵盖了cpu,内存和存储的一些metrics。
其实也能够配置网络相关的,感兴趣的能够看官方的telegraf.conf,里面有配置[[inputs.net]]的例子。网络
数据有了,下一步就是可视化。
按照Github上面说的进入http://localhost:3003/
,app
Add data source
name
for the source and flag it as Default
InfluxDB
as type
direct
as access
Add
without altering other fieldsUrl: http://localhost:8086 Database: telegraf User: telegraf Password: telegraf
添加好InfluxDB后,新建一个Dashboard,而后快速的ADD几个Graph来。
为了演示,我添加了三个,分别使用下面三组查询语句来渲染出三张图表
SELECT MEAN(usage_system) + MEAN(usage_user) AS cpu_total FROM cpu WHERE $timeFilter GROUP BY time($interval) SELECT mean("total") as "total" FROM "mem" WHERE $timeFilter GROUP BY time($interval) fill(null) SELECT mean("used") as "used" FROM "mem" WHERE $timeFilter GROUP BY time($interval) fill(null) SELECT mean("metrics_heap.used") as "heap_usage" FROM "jolokia" WHERE $timeFilter GROUP BY time($interval) fill(null)
第一张是CPU占用率;第二张是内存占用状况,绿线是Total,黄线是Used;第三张是jolokia提供的jvm heap的使用,能够到看到GC的状况。
刚才还配置了Tomcat的收集,想看Tomcat的Thread状况也是妥妥的。
SELECT mean("tomcat_max_threads") FROM "jolokia" WHERE $timeFilter GROUP BY time($interval) fill(null) SELECT mean("tomcat_current_threads_busy") FROM "jolokia" WHERE $timeFilter GROUP BY time($interval) fill(null)
能够看到搭建这样一套环境其实很快,原理也并不复杂,监控数据可视化的难点在于
这都是须要多年的经验总结才能得到的,我仍是菜鸟一枚,再接再砺。