使用 HertzBeat 對 線程池框架 DynamicTp 進行監控實踐

語言: CN / TW / HK

使用 HertzBeat 對 線程池框架 DynamicTp 進行監控實踐!

線程池框架 DynamicTp 介紹

DynamicTp 是Jvm語言的基於配置中心的輕量級動態線程池,內置監控告警功能,可通過SPI自定義擴展實現。

  • 支持對運行中線程池參數的動態修改,實時生效。
  • 實時監控線程池的運行狀態,觸發設置的報警策略時報警,報警信息推送辦公平台。
  • 定時採集線程池指標數據,配合像 grafana 這種可視化監控平台做大盤監控。

HertzBeat 介紹

HertzBeat 是一款開源,易用友好的實時監控系統,無需Agent,擁有強大自定義監控能力。

  • 支持對應用服務,數據庫,操作系統,中間件,雲原生等監控,閾值告警,告警通知(郵件微信釘釘飛書短信 Slack Discord Telegram)。
  • 其將Http,Jmx,Ssh,Snmp,Jdbc等協議規範可配置化,只需配置YML就能使用這些協議去自定義採集任何您想要採集的指標。您相信只需配置YML就能立刻適配一個K8s或Docker等新的監控類型嗎?
  • HertzBeat 的強大自定義,多類型支持,易擴展,低耦合,希望能幫助開發者和中小團隊快速搭建自有監控系統。

在 HertzBeat 5分鐘搞定監控 DynamicTp

操作前提,您已擁有 DynamicTp 環境和 HertzBeat 環境。

一. 在 DynamicTp 端暴露出DynamicTp指標接口 /actuator/dynamic-tp,它將提供 metrics 接口數據。

  1. 開啟 SpringBoot Actuator Endpoint 暴露出DynamicTp指標接口
management:
  endpoints:
    web:
      exposure:
        include: '*'
  1. 重啟後測試訪問指標接口 ip:port/actuator/dynamic-tp 是否有響應json數據如下:
[
  {
    "poolName": "commonExecutor",
    "corePoolSize": 1,
    "maximumPoolSize": 1,
    "queueType": "LinkedBlockingQueue",
    "queueCapacity": 2147483647,
    "queueSize": 0,
    "fair": false,
    "queueRemainingCapacity": 2147483647,
    "activeCount": 0,
    "taskCount": 0,
    "completedTaskCount": 0,
    "largestPoolSize": 0,
    "poolSize": 0,
    "waitTaskCount": 0,
    "rejectCount": 0,
    "rejectHandlerName": null,
    "dynamic": false,
    "runTimeoutCount": 0,
    "queueTimeoutCount": 0
  },
  {
    "maxMemory": "4 GB",
    "totalMemory": "444 MB",
    "freeMemory": "250.34 MB",
    "usableMemory": "3.81 GB"
  }
]

二. 在 HertzBeat 監控頁面添加 DynamicTp 線程池監控

  1. 點擊新增 DynamicTp 監控

路徑:菜單 -> 中間件監控 -> DynamicTp監控 -> 新增DynamicTp監控

monitor-dynamic-tp-1.png

  1. 配置監控 DynamicTp 所需參數

在監控頁面填寫 DynamicTp 服務IP監控端口(默認8080),最後點擊確定添加即可。
其他參數如採集間隔超時時間等可以參考幫助文檔 https://hertzbeat.com/docs/help/dynamic_tp/

monitor-dynamic-tp-2.png

  1. 完成✅,現在我們已經添加好對 DynamicTp 的監控了,查看監控列表即可看到我們的添加項。

monitor-dynamic-tp-1.png

  1. 點擊監控列表項的操作->監控詳情圖標 即可瀏覽 DynamicTp線程池 的實時監控指標數據。

monitor-dynamic-tp-3.png

  1. 點擊監控歷史詳情TAB 即可瀏覽 DynamicTp線程池 的歷史監控指標數據圖表📈。

monitor-dynamic-tp-4.png

monitor-dynamic-tp-5.png

DONE!完成啦!通過上面幾步,總結起來其實也就只用兩步

  • 第一步暴露 DynamicTp 端metrics端點/actuator/dynamic-tp
  • 第二步在 HertzBeat 監控頁面配置IP端口添加監控即可

通過上面的兩步我們就完成了對 DynamicTp 的監控,我們可以在 HertzBeat 隨時查看監控詳情指標信息來觀測其服務狀態。 當然只是看肯定是不完美的,監控往往伴隨着告警閾值,當 DynamicTp 的線程池指標超出我們的期望值或異常時,能及時的通知到我們對應的負責人,負責人收到通知處理問題,這樣才是一個完整的監控告警流程。

接下來我們就來一步一步演示如何配置 HertzBeat 系統裏的閾值告警通知,讓 DynamicTp線程池 的指標異常時,及時通知給我們

三. 在 HertzBeat 系統添加 DynamicTp線程池 指標閾值告警

  1. 對某個重要指標配置告警閾值

路徑:菜單 -> 告警閾值 -> 新增閾值

  • 選擇配置的指標對象,DynamicTp監控主要是一些線程池相關指標,我們舉例對 運行超時線程數量 thread_pool_running -> run_timeout_count 這個指標進行閾值設置, 當線程運行超時數量大於1時發出告警。
  • 這裏我們就配置當此指標thread_pool_runningrun_timeout_count>1 時發出告警,告警級別為嚴重告警,三次即觸發,具體如下圖。

monitor-dynamic-tp-6.png

  1. 新增消息通知接收人

配置接收人,讓告警消息知道要發給誰,用什麼方式發。

路徑:菜單 -> 告警通知 -> 告警接收人 -> 新增接收人

消息通知方式支持 郵件,釘釘,企業微信,飛書,WebHook,短信等,我們這裏以常用的釘釘為例。

【告警通知】->【新增接收人】 ->【選擇釘釘機器人通知方式】->【設置釘釘機器人ACCESS_TOKEN】-> 【確定】

alert-notice-1.png

  1. 配置關聯的告警通知策略⚠️ 【新增通知策略】-> 【將剛設置的接收人關聯】-> 【確定】

配置告警通知策略,讓告警消息與接收人綁定,這樣就能決定哪些告警發給哪個人。

alert-notice-2.png

完畢,現在坐等告警消息過來啦。叮叮叮叮

[HertzBeat告警通知]
告警目標對象 : dynamic_tp.thread_pool_running.run_timeout_count
所屬監控ID : 205540620349493
所屬監控名稱 : DynamicTp_localhost
告警級別 : 嚴重告警
告警觸發時間 : 2023-02-02 22:17:06
內容詳情 : DynamicTp has run timeout thread, count is 2

小結

這篇實踐文章帶我們體驗瞭如何使用 HertzBeat 監控 DynamicTp線程池 指標數據,可以發現集 監控-告警-通知 的 HertzBeat 在操作與使用方面更加的便捷,只需頁面上簡單點一點就能把 DynamicTp線程池 納入監控並告警通知,再也不需要部署多個組件寫YML配置文件那些繁瑣操作了。

DynamicTp Github: https://github.com/dromara/dynamic-tp
HertzBeat Github: https://github.com/dromara/hertzbeat

歡迎瞭解使用Star支持哦!

只需要一條docker命令即可安裝體驗heartbeat :
docker run -d -p 1157:1157 --name hertzbeat tancloud/hertzbeat