近期項目需要引入監控系統,一番折騰後搭建成功。這裡總結一下搭建的過程。本文旨在引導整合并打通整個監控系統各個環節,适合新手及需求急切的開發者快速搭建監控系統的基礎。
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的界面:
在graph界面中(圖示界面),可以在Expression中輸入函數和名額進行查詢;也可以在Status中檢視相關配置。
3、grafana
1、安裝運作
grafana的安裝同樣非常簡單,官方針對不同作業系統的安裝都要非常詳細的安裝步驟,戳grafana安裝。我的是Mac系統,在官網安裝教程的下面能找到啟動方法。啟動grafana。
grafana的預設運作端口是3000,在浏覽器輸入localhost:3000,預設初始賬号密碼是admin/admin,進入grafana界面。
2、添加資料源
首先點選左邊的齒輪,配置資料源:Configuration --> Data Sources --> add data source --> prometheus,在裡面添加url。這裡我添加的是本地的prometheus資料源:
3、建立Dashboard
點選左上角的加号,建立新的Dashboard,在新的Dashboard中可以去建立各種圖示。這裡選擇Graph。Graph是目前唯一一個支援告警的圖表。
上面是新建立的graph。點選圖表标題會出現功能菜單,選擇edit,進入編輯界面,就是grafana強大的編輯界面:
在編輯界面中,分别可以對圖表UI、對名額、對坐标刻度等等資訊進行編輯,還能在Alert中設定名額告警,告警還可以郵件推送或者推送到釘釘群。上述界面是設定顯示的名額,因為前面設定的資料源是prometheus,是以這裡可以使用prometheus的查詢文法設定名額。例如這裡查詢了post_request_number名額的彙總值。
當然,如果對圖表顯示的時長不滿意,還可以點選右上角的傳回按鈕回到Dashboard界面,在右上角設定顯示時間。
這樣,整個監控系統的各個環節,就已經打通了。