docker部署監控Prometheus+Grafana

misakivv發表於2024-03-07

目錄
  • 一、Prometheus簡介
  • 二、Prometheus基本原理
  • 三、Prometheus架構圖
  • 四、Prometheus特性
  • 五、Prometheus元件
  • 六、Prometheus服務發現
  • 七、部署環境
  • 八、部署主機
  • 九、部署Prometheus
    • 1、安裝docker
    • 2、啟動docker並設定開機自啟
    • 3、下載映象包
    • 4、建立prometheus掛載目錄
    • 5、建立prometheus配置檔案
    • 6、啟動prometheus
    • 7、檢視埠狀態
    • 8、訪問地址
  • 十、部署grafana
    • 1、建立掛載資料目錄
    • 2、設定許可權
    • 3、啟動grafana
    • 4、檢視埠狀態
    • 5、訪問地址
  • 十一、部署node-exporter
    • 1、啟動node-exporter
    • 2、檢視埠狀態
    • 3、訪問網址
  • 十二、新增監控節點
    • 1、安裝docker
    • 2、啟動docker並設定開機自啟
    • 3、被監控主機安裝node-exporter
    • 4、安裝並啟動映象
    • 5、修改prometheus配置檔案
    • 6、重啟prometheus
    • 7、測試
  • 十三、新增監控模版
    • 1、新增資料來源
    • 2、新增模版
    • 3、下載需要的dashboard頁面
      • 上傳JSON檔案
    • 4、效果演示

一、Prometheus簡介

71be210a68f24749a56d3f7117c77fd5
Prometheus 是一個開源的系統監控和報警系統,在 2012 年由 SoundCloud 公司建立,並於 2015 年正式釋出。2016 年,Prometheus 正式加入 CNCF (Cloud Native Computing Foundation),成為繼kubernetes之後第二個在CNCF託管的專案, 現已廣泛用於在容器和微服務領域中得到了廣泛的應用,當然不僅限於此Prometheus 本身基於Go語言開發的一套開源的系統監控報警框架和時序列資料庫(TSDB)。

Prometheus 的監控功能很完善和全面,效能也足夠支撐上萬臺規模的叢集。

網站:https://prometheus.io/

github:https://github.com/prometheus

二、Prometheus基本原理

Prometheus的基本原理是透過HTTP協議週期性抓取被監控元件的狀態,任意元件只要提供對應的HTTP介面就可以接入監控。不需要任何SDK或者其他的整合過程。這樣做非常適合做虛擬化環境監控系統,比如VM、Docker、Kubernetes等。輸出被監控元件資訊的HTTP介面被叫做exporter 。目前網際網路公司常用的元件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系統資訊(包括磁碟、記憶體、CPU、網路等等)。
其大概的工作流程是:
1、Prometheus server 定期從配置好的 jobs 或者 exporters 中拉 metrics,或者接收來自 Pushgateway 發過來的 metrics,或者從其他的 Prometheus server 中拉 metrics。
2、Prometheus server 在本地儲存收集到的 metrics,並執行已定義好的 alert.rules,記錄新的時間序列或者向 Alertmanager 推送警報。
3、Alertmanager 根據配置檔案,對接收到的警報進行處理,發出告警。
4、在Grafana圖形介面中,視覺化檢視採集資料。

三、Prometheus架構圖

image-20240307164912048

四、Prometheus特性

1、多維度資料模型。

2、靈活的查詢語言。

3、不依賴分散式儲存,單個伺服器節點是自主的。

4、透過基於HTTP的pull方式採集時序資料。

5、可以透過中間閘道器進行時序列資料推送。

6、透過服務發現或者靜態配置來發現目標服務物件。

7、支援多種多樣的圖表和介面展示,比如Grafana等。

五、Prometheus元件

  • Prometheus server是Prometheus架構中的核心元件,基於go語言編寫而成,無第三方依賴關係,可以獨立部署在物理伺服器上、雲主機、Docker容器內。主要用於收集每個目標資料,並儲存為時間序列資料,對外可提供資料查詢支援和告警規則配置管理。
    • Prometheus伺服器可以對監控目標進行靜態配置管理或者動態配置管理,它將監控採集到的資料按照時間序列儲存在本地磁碟的時序資料庫中(當然也支援遠端儲存),自身對外提供了自定義的PromQL語言,可以對資料進行查詢和分析
  • Client Library是用於檢測應用程式程式碼的客戶端庫。在監控服務之前,需要向客戶端庫程式碼新增檢測實現Prometheus中metric的型別。
  • Exporter(資料採集)用於輸出被監控元件資訊的HTTP介面統稱為Exporter(匯出器)。目前網際網路公司常用的元件大部分都有Expoter供直接使用,比如Nginx、MySQL、linux系統資訊等。
  • Pushgateway是指用於支援短期臨時或批次計劃任務工作的匯聚節點。主要用於短期的job,此類存在的job時間較短,可能在Prometheus來pull之前就自動消失了。所以針對這類job,設計成可以直接向Pushgateway推送metric,這樣Prometheus伺服器端便可以定時去Pushgateway拉去metric
  • Pushgateway是prometheus的一個元件,prometheus server預設是透過exporter主動獲取資料(預設採取pull拉取資料),pushgateway則是透過被動方式推送資料到prometheus server,使用者可以寫一些自定義的監控指令碼把需要監控的資料傳送給pushgateway, 然後pushgateway再把資料傳送給Prometheus server
    • 總結就是pushgateway是普羅米修斯的一個元件,是透過被動的方式將資料上傳至普羅米修斯。這個可以解決不在一個網段的問題
  • Alertmanager主要用於處理Prometheus伺服器端傳送的alerts資訊,對其去除重資料、分組並路由到正確的接收方式,發出告警,支援豐富的告警方式。
  • Service Discovery:動態發現待監控的target,從而完成監控配置的重要元件,在容器環境中尤為重要,該元件目前由Prometheus Server內建支援

六、Prometheus服務發現

由於 Prometheus 是透過 Pull 的方式主動獲取監控資料,也就是每隔幾秒鐘去各個target採集一次metric。所以需要手工指定監控節點的列表,當監控的節點增多之後,每次增加節點都需要更改配置檔案,儘管可以使用介面去熱更新配置檔案,但仍然非常麻煩,這個時候就需要透過服務發現(service discovery,SD)機制去解決。
Prometheus 支援多種服務發現機制,可以自動獲取要收集的 targets,包含的服務發現機制包括:azure、consul、dns、ec2、openstack、file、gce、kubernetes、marathon、triton、zookeeper(nerve、serverset),配置方法可以參考手冊的配置頁面。可以說 SD 機制是非常豐富的,但目前由於開發資源有限,已經不再開發新的 SD 機制,只對基於檔案的 SD 機制進行維護。針對我們現有的系統情況,我們選擇了靜態配置方式。

七、部署環境

系統版本:CentOS Linux release 7.9.2009 (Core)
docker版本:Docker version 1.13.1
關閉防火牆 systemctl stop firewalld.service
禁止防火牆開機自啟 systemctl disable firewalld.service
關閉selinux
sed -i ‘s/SELINUX=enforcing /SELINUX=disabled/g’ /etc/selinux/config
重啟系統即可 reboot

八、部署主機

監控主機:192.168.112.30(Prometheus+Grafana)
被監控主機:192.168.112.20(node-exporter)

九、部署Prometheus

1、安裝docker

在監控主機:192.168.112.30(Prometheus+Grafana)上操作

[root@server ~]# yum install wget.x86_64 -y	#使用Yum包管理器在系統上安裝wget工具(適用於x86_64架構)
[root@server ~]# rm -rf /etc/yum.repos.d/*	#刪除 /etc/yum.repos.d/ 目錄下的所有檔案。這個目錄存放了Yum用來獲取和更新軟體包的倉庫定義檔案。透過刪除現有倉庫配置,管理員可以確保接下來將只使用新新增的倉庫源。
[root@server ~]# wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo    #使用wget工具從阿里雲映象站下載CentOS 7的官方軟體倉庫配置檔案,並將其儲存為 /etc/yum.repos.d/Centos-7.repo。這樣做的目的是更換預設的CentOS基礎軟體源為阿里雲提供的國內映象源,以提高軟體包下載速度。
[root@server ~]# wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo	#下載適用於CentOS 7的EPEL擴充套件倉庫配置檔案,並將其儲存到 /etc/yum.repos.d/epel-7.repo
[root@server ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#下載Docker CE的官方倉庫配置檔案,同樣是從阿里雲映象站下載,這樣可以加速Docker CE相關軟體包的下載。
[root@docker-server ~]# yum install docker-ce -y	#使用配置好的yum軟體源來安裝Docker CE社群版。

2、啟動docker並設定開機自啟

systemctl start docker
systemctl enable docker

3、下載映象包

docker pull prom/node-exporter

image-20240307121715886

docker pull prom/prometheus

image-20240307121823449

docker pull grafana/grafana

image-20240307121943527

4、建立prometheus掛載目錄

mkdir /opt/prometheus

5、建立prometheus配置檔案

vi /opt/prometheus/prometheus.yml
global:
  scrape_interval:    15s
  evaluation_interval: 15s

scrape_configs:
- job_name: prometheus
  static_configs:
  - targets: ['localhost:9090']
    labels:
      instance: centos7

- job_name: grafana
  static_configs:
  - targets: ['192.168.112.30:9100']
    labels:
      instance: centos7

注:這裡的IP:192.168.112.30就是本地localhost本地IP,為了實驗方便,將prometheus和grafana搭建在同一個伺服器上了。

6、啟動prometheus

docker run  -d \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
prom/prometheus

image-20240307124955015

7、檢視埠狀態

netstat -antupl |grep 9090

image-20240307125053379

8、訪問地址

192.168.112.30:9090

image-20240307125310850

十、部署grafana

1、建立掛載資料目錄

mkdir /opt/grafana-storage

2、設定許可權

chmod 777 -R /opt/grafana-storage

注:因為這個檔案需要寫入所以要給一定的許可權,這裡為了方便測試給777,具體許可權要根據具體實際情況而定。

3、啟動grafana

docker run -d \
-p 3000:3000 \
--name=grafana \
-v /opt/grafana-storage:/var/lib/grafana \
grafana/grafana

4、檢視埠狀態

netstat -antupl | grep 3000

image-20240307125848294

5、訪問地址

192.168.112.30:3000

注:預設賬號密碼都是admin

image-20240307130112386

十一、部署node-exporter

1、啟動node-exporter

docker run -d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" \
prom/node-exporter

2、檢視埠狀態

netstat -antupl | grep 9100

image-20240307150521211

3、訪問網址

192.168.112.30:9100
image-20240307150357843

十二、新增監控節點

在被監控主機:192.168.112.20(node-exporter)上操作

1、安裝docker

yum -y install docker

2、啟動docker並設定開機自啟

systemctl start docker
systemctl enable docker

3、被監控主機安裝node-exporter

docker pull prom/node-exporter

image-20240307150920565

4、安裝並啟動映象

docker run -d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" \
prom/node-exporter

5、修改prometheus配置檔案

在監控主機:192.168.112.30(Prometheus+Grafana)上操作

cat /opt/prometheus/prometheus.yml

global:
  scrape_interval:     15s
  evaluation_interval: 15s
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: centos7
  - job_name: grafana
    static_configs:
      - targets: ['192.168.112.30:9100']
        labels:
          instance: centos7
  - job_name: harbor
    static_configs:
      - targets: ['192.168.112.20:9100']
        labels:
          instance: centos7

6、重啟prometheus

docker restart 6decfdbc9fa4

image-20240307151602332

7、測試

  • 網頁登入prometheus
  • 點選Status下拉選項,選擇Targets。
    image-20240307151840533
  • 如下圖說明新增監控節點已完成
    image-20240307153900365

十三、新增監控模版

1、新增資料來源

  • 網頁登陸grafana

image-20240307154102695

  • 依次點選左側Connections Data source Add data source

image-20240307154501201

  • Add data source中找到Prometheus

image-20240307154704756

  • 點選Prometheus,設定名字和IP地址

image-20240307155257087


image-20240307155600095

注:如上圖點選Save & Test,如果出現綠色的,說明ok了。

2、新增模版

  • 點選左上角+號,點選Import dashboard

image-20240307155821443


image-20240307155917633

3、下載需要的dashboard頁面

  • Grafana官方為我們提供了很多dashboard頁面,可直接下載使用。瀏覽器訪問 https://grafana.com/grafana/dashboards下載所需要的dashboard頁面

image-20240307160720919

  • 本示例使用的Dashboard如下圖所示,連結如下

[Node Exporter Full | Grafana Labs](Node Exporter Full | Grafana Labs)

  • 下載JSON檔案,用於匯入。

    image-20240307163651983

  • 上傳JSON檔案

image-20240307163906311

4、效果演示

image-20240307164002390


image-20240307164021865

相關文章