Prometheus hotspot監控指標解讀

簡介

Prometheus 是一套開源的系統監控報警框架。它啓發於 Google 的 borgmon 監控系統,由工做在 SoundCloud 的 google 前員工在 2012 年建立,做爲社區開源項目進行開發,並於 2015 年正式發佈。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成爲受歡迎度僅次於 Kubernetes 的項目。html

特性

  • 強大的多維度數據模型:java

    1. 時間序列數據經過 metric 名和鍵值對來區分。
    2. 全部的 metrics 均可以設置任意的多維標籤。
    3. 數據模型更隨意,不須要刻意設置爲以點分隔的字符串。
    4. 能夠對數據模型進行聚合,切割和切片操做。
    5. 支持雙精度浮點類型,標籤能夠設爲全 unicode。
  • 靈活而強大的查詢語句(PromQL):在同一個查詢語句,能夠對多個 metrics 進行乘法、加法、鏈接、取分數位等操做。
  • 易於管理: Prometheus server 是一個單獨的二進制文件,可直接在本地工做,不依賴於分佈式存儲。
  • 高效:平均每一個採樣點僅佔 3.5 bytes,且一個 Prometheus server 能夠處理數百萬的 metrics。
  • 使用 pull 模式採集時間序列數據,這樣不只有利於本機測試並且能夠避免有問題的服務器推送壞的 metrics。
  • 能夠採用 push gateway 的方式把時間序列數據推送至 Prometheus server 端。
  • 能夠經過服務發現或者靜態配置去獲取監控的 targets。
  • 有多種可視化圖形界面。
  • 易於伸縮。

架構

相關概念

hotspot 監控

Java Hotspot虛擬機監控指標收集緩存

BufferPoolsExports

JVM緩衝區監控指標。
bufferPool指標是從MBean獲取的,BufferPoolsExports構造函數:服務器

public BufferPoolsExports() {
    try {
        final Class<?> bufferPoolMXBeanClass = Class.forName("java.lang.management.BufferPoolMXBean");
        bufferPoolMXBeans.addAll(accessBufferPoolMXBeans(bufferPoolMXBeanClass));

        getName = bufferPoolMXBeanClass.getMethod("getName");
        getMemoryUsed = bufferPoolMXBeanClass.getMethod("getMemoryUsed");
        getTotalCapacity = bufferPoolMXBeanClass.getMethod("getTotalCapacity");
        getCount = bufferPoolMXBeanClass.getMethod("getCount");

    } catch (ClassNotFoundException e) {
        LOGGER.fine("BufferPoolMXBean not available, no metrics for buffer pools will be exported");
    } catch (NoSuchMethodException e) {
        LOGGER.fine("Can not get necessary accessor from BufferPoolMXBean: " + e.getMessage());
    }
}
  1. 獲取Mean類對象
  2. 獲取可訪問的MBean實例並添加到成員變量中
  3. 獲取getName方法Method對象(緩衝池名稱)
  4. 獲取getMemoryUsed方法的Method對象(估算的jvm已使用內存大小)
  5. 獲取getTotalCapacity方法的Method對象(預估的總的緩衝池大小)
  6. 獲取getCount方法的Method對象(緩衝池中大體的數量)

collect()方法返回buffer pool指標收集器收集的全部指標信息。架構

jvm_buffer_pool_used_bytes

jvm緩衝區使用狀況,包括Code Cache(編譯後的代碼緩存,不一樣版本的jvm默認大小不一樣)、PS Old Gen(老年代)、PS Eden Space(伊甸園)、PS Survivor Space(倖存者)、PS Perm Gen(永久代)。
緩衝區使用狀況示例框架

jvm_buffer_pool_capacity_bytes

給定jvm的估算緩衝區大小。這個metrics數據沒有收集到,可能和jvm的版本有關,部署服務器使用的是jdk 6。jvm

jvm_buffer_pool_used_buffers

給定jvm的已使用緩衝區大小。這個metrics沒有收集到,可能和jvm的版本有關,部署服務器使用的是jdk 6。分佈式

ClassLoadingExports

提供jvm類加載指標。
jvm類加載指標數據由ClassLoadingMXBean提供。函數

jvm_classes_loaded

當前jvm已加載類數量。
已加載類數量示例測試

jvm_classes_loaded_total

從jvm運行開始加載的類的數量,這是一個Counter指標,遞增。

jvm_classes_unloaded_total

jvm運行後卸載的類數量,這是一個Counter指標。生產環境一直是0。

GarbageCollectorExports

提供jvm 垃圾收集器指標,指標數據有GarbageCollectorMXBean列表提供。

jvm_gc_collection_seconds

這是一個Summary指標,與Histogram相似,能夠對指標數據進行採樣。
count rate
平均耗時

MemoryAllocationExports

內存分配狀況指標,這個指標因java版本不兼容而沒有作監控。

MemoryPoolsExports

jvm 內存區域指標。

jvm_memory_bytes_used

jvm已用內存區域。
內存使用示例

jvm_memory_bytes_committed

Committed (bytes) of a given JVM memory area

jvm_memory_bytes_max

jvm內存區域的最大字節數

jvm_memory_bytes_init

jvm內存區域的初始化字節數

jvm_memory_pool_bytes_used

jvm內存池使用狀況

jvm_memory_pool_bytes_committed

Committed bytes of a given JVM memory pool.

jvm_memory_pool_bytes_max

jvm內存池最大數

jvm_memory_pool_bytes_init

jvm內存池初始化數

ThreadExports

jvm線程區域監控。

jvm_threads_current

jvm當前線程數。

jvm_threads_daemon

jvm後臺線程數。

jvm_threads_peak

jvm線程峯值

jvm_threads_started_total

jvm總啓動線程數量,Counter指標。

jvm_threads_deadlocked

死鎖線程數量

jvm_threads_deadlocked_monitor

Cycles of JVM-threads that are in deadlock waiting to acquire object monitors

jvm_threads_state

當前線程的狀態
狀態示例

VersionInfoExports

jvm版本信息

jvm_info

版本信息,能夠看到生產環境使用的是:1.6.0.29-b11

StandardExports

全部prometheus 客戶端共有的標準指標。

process_cpu_seconds_total

用戶和系統的總cpu使用時間

process_start_time_seconds

Start time of the process since unix epoch in seconds

process_open_fds

打開的文件描述符數量

process_max_fds

看支持打開的最大文件描述符數量

PromQL

todo
(190918:登陸發現有提醒,終於有個覺悟,全部的todo都是不可能完成的坑。。。。。。)

參考資料

Prometheus 入門與實踐

相關文章
相關標籤/搜索