最近對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)
能夠看到搭建這樣一套環境其實很快,原理也並不複雜,監控數據可視化的難點在於
這都是須要多年的經驗總結才能得到的,我仍是菜鳥一枚,再接再礪。