天天看點

微服務的監控并實作釘釘圖文告警

為了比較友善統計微服務伺服器基礎名額和相關運作狀态,目前比較流行和成熟的方案是采用Prometheus+Grafana。本文主要基于docker的方式,快速搭建一套監控體系。

  1. 應用改造

為了整合Prometheus,需要在微服務應用中增加micrometer-registry-prometheus依賴:

<!-- Micrometer Prometheus registry  -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>           

配置中打開端點/actuator/prometheus

management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS
  metrics:
    tags:
      application: ${spring.application.name}           
  1. 啟動prometheus

運作prometheus容器:

$ docker run -d --name=prometheus -p 9090:9090 -v /docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:v2.16.0 --config.file=/etc/prometheus/prometheus.yml           

其中映射到主機的配置檔案prometheus.yml的配置如下:

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
# rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ['127.0.0.1:9090']

  - job_name: 'nacos-prometheus'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 15s
    consul_sd_configs:
      - server: '192.168.0.102:7000'
        services: []           
  1. 啟動Grafana

使用以下指令可以使Docker下載下傳和運作Grafana:

$ docker run -d --name=grafana -p 3000:3000 grafana/grafana           

為了能讓Grafana的面闆嵌入到應用中,需要更改配置

以root使用者進入容器中

$ docker exec -u root -it grafana sh
# vi conf/defaults.ini           
微服務的監控并實作釘釘圖文告警
微服務的監控并實作釘釘圖文告警
  1. 導入模版

使用dashboard模版,可以減少定制的時間。官網的dashboard廣場,有很多現成的:

https://grafana.com/grafana/dashboards

在Grafana的面闆中點選菜單Import:

微服務的監控并實作釘釘圖文告警

從官網dashboard廣場擷取面闆ID:

微服務的監控并實作釘釘圖文告警

此處粘貼入模版ID:

微服務的監控并實作釘釘圖文告警

微服務應用,推薦使用4701

  1. 将Grafana嵌入自己的應用頁面

dashboard 和 panel都可以分享,如圖點選share:

微服務的監控并實作釘釘圖文告警

彈出的對話框中,可以自定義一些參數

微服務的監控并實作釘釘圖文告警

分享出來的連結加入kiosk=tv參數還可以隐藏面闆的左邊菜單和上面标題欄。然後就可以用iframe标簽嵌入到前端頁面裡去了。

  1. 告警配置

如需告警,則需要把配置檔案中的這個位址改下,否則docker裡的會是錯誤的

微服務的監控并實作釘釘圖文告警

在Grafana的Alert面闆中,可以根據需要配置告警的一些參數,如監測頻率等

微服務的監控并實作釘釘圖文告警
  1. 生成圖文告警

首先在Grafana的Notification channels面闆中配置告警通道:

微服務的監控并實作釘釘圖文告警

有2個參數必須注意,Url填入告警分發的釘釘機器人的webhook。如何添加群機器人并獲得webkook,請參考釘釘官網

https://ding-doc.dingtalk.com/doc#/serverapi2/krgddi

。此外,要注意勾選 Include image 選項。

配置好後,Grafana的告警圖表還需要一個外部的圖像渲染服務。我們依然使用docker來建立并啟動此服務,

建立容器并對外開放8081端口:

$ docker run -d --name=grafana-image-renderer -p 8081:8081 --env GF_RENDERER_PLUGIN_TZ=Asia/Shanghai --env GF_RENDERER_PLUGIN_IGNORE_HTTPS_ERRORS=true grafana/grafana-image-renderer           

進入容器中修改配置檔案 /conf/defaults.ini

[rendering]
# 這裡指定使用外部圖像渲染,指向剛建立的容器 /render 路徑不可少
server_url = http://192.168.0.102:8081/render
# If the remote HTTP image renderer service runs on a different server than the
callback_url = http://192.168.0.102:3000           

還有:

[external_image_storage]
# 使用s3協定
provider = s3
[external_image_storage.s3]
# 這個連結必須要能連通網際網路,否則圖像能生成,但會無法通路
endpoint = http://www.xxx.com
# 這個參數必須設定成true,否則下面的bucket參數會加在上面endpoint最前面,導緻通路不了,會變成 http://mybucket.www.xxx.com
path_style_access = true
# 不要配置
bucket_url =
bucket = mybucket
# minIO預設的region是us-east-1
region = us-east-1
path = images
access_key = AKIAIOSFODNN7EXAMPLE
secret_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY中的           

我們用的是本地的minIO作為圖像生成的存儲服務。當然用阿裡雲的OSS應該也是沒有問題的。

通過以上的配置,當Grafana監測到系統名額超過告警閥值,則就會向釘釘發送圖文消息

微服務的監控并實作釘釘圖文告警