[Prometheus+Grafana系列]基於docker-compose搭建

immaxfang發表於2022-08-28

Prometheus

Prometheus 是有 SoundCloud 開發的開源監控系統和時序資料庫,基於 Go 語言開發。透過基於 HTTP 的 pull 方式採集時序資料,透過服務發現或靜態配置去獲取要採集的目標伺服器,支援多節點工作,支援多種視覺化圖表及儀表盤。

貼一下官方提供的架構圖:

image.png

Pormetheus 幾個主要模組有,Server,Exporters,Pushgateway,PromQL,Alertmanager,WebUI等,主要邏輯如下:

  • Prometheus server 定期從靜態配置的 targets 或者服務發現的 targets 拉取資料。

  • 當新拉取的資料大於配置記憶體快取區時,Prometheus 會將資料持久化到磁碟(如果使用 remote storage 將持久化到雲端)。

  • Prometheus 配置 rules,然後定時查詢資料,當條件觸發時,會將 alert 推送到配置的 Alertmanager。

  • Alertmanager 收到警告時,會根據配置,聚合、去重、降噪等操作,最後傳送警告。

  • 可以使用 API,Prometheus Console 或者 Grafana 查詢和聚合資料。

Grafana

Grafana 是一個開源的度量分析及視覺化套件。透過訪問資料庫(如InfluxDB、Prometheus),展示自定義圖表。

Exporter

Exporter 是 Prometheus 推出的針對伺服器狀態監控的 Metrics 工具。目前開發中常見的元件都有對應的 exporter 可以直接使用。常見的有兩大類,一種是社群提供的,包含資料庫,訊息佇列,儲存,HTTP服務,日誌等,比如 node_exporter,mysqld_exporter等;還有一種是使用者自定義的 exporter,可以基於官方提供的 Client Library 建立自己的 exporter 程式。

每個 exporter 的一個例項被稱為 target,Prometheus 透過輪詢的方式定期從這些 target 中獲取樣本資料。

image.png

原理簡介

image.png

安裝 node-exporter


cd  /opt

wget  https://github.com/prometheus/node_exporter/releases/download/v1.4.0-rc.0/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz

tar  xvf  node_exporter-1.4.0-rc.0.linux-amd64.tar.gz

mv  node_exporter-1.4.0-rc.0.linux-amd64  node_exporter

mv  node_exporter  /usr/local/

執行如下命令測試 node-exporter 收集器啟動情況,正常情況下會輸出服務埠。


/usr/local/node_exporter/node_exporter

新增到系統服務

vim /etc/systemd/system/node_exporter.service

新增如下內容


[Unit]

Description=mysqld_exporter

After=network.target

[Service]

ExecStart=/usr/local/node_exporter/node_exporter

Restart=on-failure

[Install]

WantedBy=multi-user.target

載入並重啟服務

# 載入配置
systemctl  daemon-reload

# 啟動服務
systemctl  restart  node_exporter.service

# 檢視服務狀態
systemctl  status  node_exporter.service

# 配置開機啟動
systemctl  enable  node_exporter.service

檢視資料收集情況

重新起一個終端,檢視資料收集情況。也可以在瀏覽器中檢視。

curl  http://127.0.0.1:9100/metrics

安裝 docker&docker-compose

本文介紹的安裝方法是基於 docker-compose 的,所以需要先安裝相關 docker 環境。相關方法可以見筆者的其他文章,本文中不做詳細介紹。

安裝 prometheus 和 grafana

可以直接 clone 這個專案來快速搭建:

github.com/FX-Max/docker-install-e...

該專案是筆者弄的一個使用 docker-compose 搭建軟體開發常見服務的專案,大家覺得有幫助,可以幫忙點個 star,感謝。

根據實際情況,修改 prometheus.yml 檔案中的內容,將ip修改為上面安裝了 node-exporter 的伺服器ip即可。

然後在該目錄下執行 docker-compose up -d即可,docker ps檢視服務啟動情況。


CONTAINER  ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES

6f360e9ab242  grafana/grafana  "/run.sh"  25  hours  ago  Up  25  hours  0.0.0.0:3000->3000/tcp, :::3000->3000/tcp  grafana

97b92b65aca6  prom/prometheus  "/bin/prometheus --c…"  25  hours  ago  Up  21  hours  0.0.0.0:9090->9090/tcp, :::9090->9090/tcp  prometheus

3f5906f07bf6  prom/pushgateway  "/bin/pushgateway"  25  hours  ago  Up  25  hours  0.0.0.0:9091->9091/tcp, :::9091->9091/tcp  pushgateway

f556168c1b8b  prom/alertmanager  "/bin/alertmanager -…"  25  hours  ago  Up  25  hours  0.0.0.0:9093->9093/tcp, :::9093->9093/tcp  alertmanager

docker-compose.yml 內容:


version: "3"

services:

prometheus:

image: prom/prometheus

container_name: prometheus

user: root

# restart: always

ports:

-  "9090:9090"

volumes:

-  ./conf/prometheus:/etc/prometheus

-  ./data/prometheus/prometheus_db:/prometheus

command:

-  '--config.file=/etc/prometheus/prometheus.yml'

-  '--storage.tsdb.path=/prometheus'

-  '--web.console.libraries=/usr/share/prometheus/console_libraries'

-  '--web.console.templates=/usr/share/prometheus/consoles'

networks:

-  net-prometheus

grafana:

image: grafana/grafana

container_name: grafana

user: root

# restart: always

ports:

-  "3000:3000"

volumes:

#- ./conf/grafana:/etc/grafana

-  ./data/prometheus/grafana_data:/var/lib/grafana

depends_on:

-  prometheus

networks:

-  net-prometheus

pushgateway:

image: prom/pushgateway

container_name: pushgateway

user: root

# restart: always

ports:

-  "9091:9091"

volumes:

-  ./data/prometheus/pushgateway_data:/var/lib/pushgateway

alertmanager:

image: prom/alertmanager

hostname: alertmanager

container_name: alertmanager

user: root

# restart: always

ports:

-  "9093:9093"

volumes:

-  ./data/prometheus/alertmanager_data:/var/lib/alertmanager

networks:

net-prometheus:

prometheus.yml 內容:


global:

scrape_interval: 5s

evaluation_interval: 5s

external_labels:

monitor: 'dashboard'

alerting:

alertmanagers:

-  static_configs:

-  targets:

-  "alertmanager:9093"

rule_files:

#- 'alert.rules'

scrape_configs:

-  job_name: 'prometheus'

scrape_interval: 5s

static_configs:

-  targets: ['prometheus:9090']

-  job_name: node

static_configs:

-  targets: ['192.168.0.103:9100','pushgateway:9091']

-  job_name: 'mysql-131'

static_configs:

-  targets: ['192.168.0.131:9104']

labels:

instance: mysql

檢視 prometheus

訪問 http://127.0.0.1:9090/targets,效果如下,上面我們透過 node_exporter 收集的節點狀態是 up 狀態。

image.png

配置 Grafana

訪問 http://127.0.0.1:3000,登入 Grafana,預設的賬號密碼是 admin:admin,首次登入需要修改預設密碼。

image.png

按照如下新增 data sources,將 prometheus 新增到 data sources 中。

image.png

image.png

image.png

新增 prometheus 服務地址,此處由於服務是基於 docker-compose 構建的,沒有填寫ip,直接填寫服務名即可。

新增監控模版

image.png

輸入官方模版 id,1860,點選 load。然後按照下圖選擇確認即可。

image.png

匯入成功後,會自動跳轉到監控皮膚頁面,如下圖。

image.png

本文簡單介紹了 prometheus + grafana 服務搭建流程,初步跑通了整個服務。當然它還有很多功能,後續筆者會開新的文章來分享。

參考文件

官方模板庫:grafana.com/grafana/dashboards/

node 模板:grafana.com/grafana/dashboards/186...

MySQL 模板:grafana.com/grafana/dashboards/736...

docker 搭建 prometheus&grafana:blog.51cto.com/keep11/4261521

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

相關文章