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的瓶頸。

這都是須要多年的經驗總結才能得到的,我仍是菜鳥一枚,再接再礪。

相關文章
相關標籤/搜索