天天看點

實戰:micrometer+prometheus+grafana搭建Java程式的監控系統1、MicroMeter2、Prometheus3、grafana

    近期項目需要引入監控系統,一番折騰後搭建成功。這裡總結一下搭建的過程。本文旨在引導整合并打通整個監控系統各個環節,适合新手及需求急切的開發者快速搭建監控系統的基礎。

1、MicroMeter

    官網:micrometer

    micrometer号稱監控界的SLF4J,主要用來以極低極低的消耗來給Java程式提供對名額的監控。

    micrometer支援接入多種資料庫,這裡我使用的是prometheus。

1、引入jar包:

    maven項目:

<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-prometheus</artifactId>
  <version>${micrometer.version}</version>
</dependency>
           

    gradle項目:

compile 'io.micrometer:micrometer-registry-prometheus:latest.release'
           

2、使用系統資料庫

    系統資料庫是用來管理一系列名額的工具,尤其在micrometer-prometheus的項目,PrometheusMeterRegistry的scrape()方法已經封裝好了生成給prometheus傳遞的資訊的代碼,我們隻需要在servlet中調用該方法響應prometheus的抓取即可。

    1)定義系統資料庫:為了友善管理,将系統資料庫封裝到一個類裡面統一管理。

public class PrometheusMeterManager {

  private static PrometheusMeterRegistry registry = null;

  public static void init() {
    registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
  }

  public static PrometheusMeterRegistry register() {
    if (registry == null) {
      init();
    }
    return registry;
  }
}
           

    2)向Prometheus回報系統資料庫的内容:在servlet中調用系統資料庫的scrape()方法作為傳回結果,prometheus會去配置的 {服務位址、端口、路徑} 組合下擷取名額資訊。如下是servlet的示例:

public class PrometheusMeterServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest httpRequest, HttpServletResponse httpResponse) {
    PrometheusMeterRegistry registry = PrometheusMeterManager.register();
    String meterResponse = registry.scrape();
    try {
      httpResponse.getWriter().print(meterResponse);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
           

3、添加監控名額

    micrometer的名額包括counter、gauge、timer和distribution summaries這4種。這裡以counter為例:

    1)根據系統資料庫擷取counter的執行個體。

MeterRegistry registry = PrometheusMeterManager.register();
Counter counter = registry.counter("post_request_number");
           

    2)調用counter的方法達到預期目的:

    Counter定義了4個方法:

increment():counter計數加1;
increment(double amount):計數加amount;
count():counter的累積值;
measure():counter的累積值
           

2、Prometheus

1、安裝

    Prometheus官網下載下傳傳送門:Prometheus下載下傳,下載下傳後解壓即可完成安裝。

2、配置

    在解壓目錄中找到并配置prometheus.yml:

global:
  scrape_interval:     15s 
  evaluation_interval: 15s 
alerting:
  alertmanagers:
  - static_configs:
    - targets:
'evaluation_interval'.
rule_files:

scrape_configs:
  - job_name: 'prometheus'
    metrics_path: /prometheus
    static_configs:
     - targets: ['localhost:9000']
           

    一般來說,我們隻需要配置scrape_configs下的抓取目标。示例中的是對特定url的配置,還可以通過consul實作對叢集的配置。Prometheus會自動去配置的目标中抓取資訊。

3、運作

    在Prometheus的解壓目錄中運作prometheus,即可啟動程式。Prometheus的預設運作端口是9090,如果是在本機安裝,可以在浏覽器輸入localhost:9090打開Prometheus的界面:

實戰:micrometer+prometheus+grafana搭建Java程式的監控系統1、MicroMeter2、Prometheus3、grafana

    在graph界面中(圖示界面),可以在Expression中輸入函數和名額進行查詢;也可以在Status中檢視相關配置。

3、grafana

1、安裝運作

    grafana的安裝同樣非常簡單,官方針對不同作業系統的安裝都要非常詳細的安裝步驟,戳grafana安裝。我的是Mac系統,在官網安裝教程的下面能找到啟動方法。啟動grafana。

    grafana的預設運作端口是3000,在浏覽器輸入localhost:3000,預設初始賬号密碼是admin/admin,進入grafana界面。

實戰:micrometer+prometheus+grafana搭建Java程式的監控系統1、MicroMeter2、Prometheus3、grafana

2、添加資料源

    首先點選左邊的齒輪,配置資料源:Configuration --> Data Sources --> add data source --> prometheus,在裡面添加url。這裡我添加的是本地的prometheus資料源:

實戰:micrometer+prometheus+grafana搭建Java程式的監控系統1、MicroMeter2、Prometheus3、grafana

3、建立Dashboard

    點選左上角的加号,建立新的Dashboard,在新的Dashboard中可以去建立各種圖示。這裡選擇Graph。Graph是目前唯一一個支援告警的圖表。

實戰:micrometer+prometheus+grafana搭建Java程式的監控系統1、MicroMeter2、Prometheus3、grafana

    上面是新建立的graph。點選圖表标題會出現功能菜單,選擇edit,進入編輯界面,就是grafana強大的編輯界面:

實戰:micrometer+prometheus+grafana搭建Java程式的監控系統1、MicroMeter2、Prometheus3、grafana

    在編輯界面中,分别可以對圖表UI、對名額、對坐标刻度等等資訊進行編輯,還能在Alert中設定名額告警,告警還可以郵件推送或者推送到釘釘群。上述界面是設定顯示的名額,因為前面設定的資料源是prometheus,是以這裡可以使用prometheus的查詢文法設定名額。例如這裡查詢了post_request_number名額的彙總值。

    當然,如果對圖表顯示的時長不滿意,還可以點選右上角的傳回按鈕回到Dashboard界面,在右上角設定顯示時間。

實戰:micrometer+prometheus+grafana搭建Java程式的監控系統1、MicroMeter2、Prometheus3、grafana

    這樣,整個監控系統的各個環節,就已經打通了。