go-zero docker-compose 搭建課件服務(七):prometheus+grafana服務監控

slowquery發表於2022-08-28

0、轉載

go-zero docker-compose 搭建課件服務(七):prometheus+grafana服務監控

0.1原始碼地址

github.com/liuyuede123/go-zero-cou...

1、什麼是prometheus

Prometheus是一個開源的系統監控和警報工具包。自2012年啟動以來,許多公司和組織都採用了Prometheus,該專案擁有非常活躍的開發人員和使用者社群。它現在是一個獨立的開源專案,獨立於任何公司進行維護。Prometheus於2016年加入雲原生計算基金會,成為繼Kubernetes之後的第二個託管專案。

特性:

  • 一個多維資料模型,包含由指標名稱和鍵/值對(Tag)標識的時間序列資料
  • PromQL是一種靈活的查詢語音,用於查詢並利用這些維度資料
  • 不依賴分散式儲存,單個伺服器節點是自治的
  • 時間序列收集是透過HTTP上的pull模型進行的(支援Pull)
  • 推送時間序列是透過一箇中間閘道器來支援的(也支援Push)
  • 目標是透過服務發現或靜態配置發現的
  • 多種模式的圖形和儀表盤支援

2、什麼是grafana

grafana是用於視覺化大型測量資料的開源程式,他提供了強大和優雅的方式去建立、共享、瀏覽資料。dashboard中顯示了你不同metric資料來源中的資料。

Grafana是一個開源的,擁有豐富dashboard和圖表編輯的指標分析平臺,和Kibana不同的是Grafana專注於時序類圖表分析,而且支援多種資料來源,如Prometheus、Graphite、InfluxDB、Elasticsearch、Mysql、K8s、Zabbix等。

3、prometheus部署

根目錄下增加prometheus的Dockerfile

FROM bitnami/prometheus:latest

LABEL maintainer="liuyuede123 <liufutianoppo@163.com>"

增加prometheus配置

# 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).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# 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: 'file_ds'
    file_sd_configs:
      - files:
          - targets.json
[
  {
    "targets": ["user-api:9081"],
    "labels": {
      "job": "user-api",
      "app": "user-api",
      "env": "test",
      "instance": "user-api:8300"
    }
  },
  {
    "targets": ["user-rpc:9091"],
    "labels": {
      "job": "user-rpc",
      "app": "user-rpc",
      "env": "test",
      "instance": "user-api:9300"
    }
  },
  {
    "targets": ["courseware-api:9082"],
    "labels": {
      "job": "courseware-api",
      "app": "courseware-api",
      "env": "test",
      "instance": "courseware-api:8400"
    }
  },
  {
    "targets": ["courseware-rpc:9092"],
    "labels": {
      "job": "courseware-rpc",
      "app": "courseware-rpc",
      "env": "test",
      "instance": "courseware-rpc:9400"
    }
  }
]

檔案結構如下

prometheus
├── Dockerfile
├── prometheus.yml
└── target.json

docker-compose中增加prometheus配置,預設9090埠

...

prometheus:
  build:
    context: ./prometheus
  environment:
    - TZ=Asia/Shanghai
  privileged: true
  volumes:
    - ./prometheus/prometheus.yml:/opt/bitnami/prometheus/conf/prometheus.yml  # 將 prometheus 配置檔案掛載到容器裡
    - ./prometheus/target.json:/opt/bitnami/prometheus/conf/targets.json  # 將 prometheus 配置檔案掛載到容器裡
  ports:
    - "9090:9090"                     # 設定容器9090埠對映指定宿主機埠,用於宿主機訪問視覺化web
  networks:
    - backend
  restart: always

user-api配置中增加

...
Prometheus:
  Host: 0.0.0.0
  Port: 9081
  Path: /metrics

user-rpc配置中增加

...
Prometheus:
  Host: 0.0.0.0
  Port: 9091
  Path: /metrics

courseware-api配置中增加

...
Prometheus:
  Host: 0.0.0.0
  Port: 9082
  Path: /metrics

courseware-rpc配置中增加

Prometheus:
  Host: 0.0.0.0
  Port: 9092
  Path: /metrics

刪除容器和映象重新生成構建容器docker-compose up -d --build

瀏覽器中訪問http://localhost:9090/到prometheus後臺檢視是否生效

訪問http://localhost:9090/targets?search=可以看到,4個服務的metrics都進來了

https://i.iter01.com/images/0e4888607683ade291fc67742bb5f4e64962ada712bea35b3ebbe6b3563c69f4.png

請求使用者詳情介面,然後訪問下http://localhost:9090/graph,搜尋欄中輸入`{app="user-api"}`,會看到

https://i.iter01.com/images/390448caa88bfa578dd9953d1c80a583a03f679d3e057b59d2554f4860ed6f49.png

4、部署grafana

新建grafana資料夾,並建立Dockerfile

FROM grafana/grafana:latest

LABEL maintainer="liuyuede123 <liufutianoppo@163.com>"

docker-compose中新增grafana服務

 ... 

  grafana:
    build:
      context: ./grafana
    environment:
      - TZ=Asia/Shanghai
    privileged: true
    ports:
      - "3000:3000"
    networks:
      - backend
    restart: always

刪除容器和映象重新生成構建容器docker-compose up -d --build

訪問http://localhost:3000/,預設賬號admin,密碼admin

點選設定新增資料來源

https://i.iter01.com/images/20213b64cebdf0c16ddf29d471982d2ecaf83ceb6348fa78bbcae31a92fa3d54.png

https://i.iter01.com/images/16da3719f97e55196713bbfc03c8542a56a7e4bf742e14f58b56a5ed3eab67c8.png

新增看板

https://i.iter01.com/images/8c2c2e916e1768872229edcea9b15bdea807beb8107f7d5dc1bc91d6cb3f4a3b.png

https://i.iter01.com/images/9dbc9b735f19be66128573873f74856bd2f870fc7e7ed0c021af124df37c6c3d.png

資料來源選擇prometheus統計user-api qps然後點選儲存

https://i.iter01.com/images/d0b380014472d760e9d7e752f4afbfbd2643183eea739f1c6f9cf5a320e6ec41.png

https://i.iter01.com/images/ef9e0d45b552d3f675dd8fb2721ae3f84e26cc9b99ef00fe6a62f18d60d9287f.png

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章