Spring boot监控初探

最近对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 restartc#

查看监控数据

咱们访问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

  1. Using the wizard click on Add data source
  2. Choose a name for the source and flag it as Default
  3. Choose InfluxDB as type
  4. Choose direct as access
  5. Fill remaining fields as follows and click on Add without altering other fields
Url: 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)

图片描述

小结

能够看到搭建这样一套环境其实很快,原理也并不复杂,监控数据可视化的难点在于

  • 哪些metrics须要监控
  • 哪些metrics须要配合起来能够判断问题,好比diskio+net是否是能够判断系统总体IO的瓶颈。

这都是须要多年的经验总结才能得到的,我仍是菜鸟一枚,再接再砺。

相关文章
相关标签/搜索