Docker系列——Grafana+Prometheus+Node-exporter伺服器監控平臺(一)

溫一壺清酒發表於2021-05-25

在最近的博文中,都是介紹監控平臺的搭建,其實並不難,主要是需要自己動手操作,實踐一番就會了。

有天在想,雲上的伺服器,是不是也可以搭建一個監控平臺,所以就搗鼓了一下,不過遺憾的是,使用阿里雲開源的外掛-CMS Grafana Service沒能成功,嘗試了許久都沒能成功。

所以就改用Prometheus了,一步步實踐,配置成功,小有收穫吧,來分享下每天點滴。

Node-exporter

Node-exporter簡介

在配置環境前,可能會有疑問,為什麼需要?所以就先來講下其作用。

在Prometheus的架構設計中,Prometheus Server並不直接服務監控特定的目標,其主要任務負責資料的收集,儲存並且對外提供資料查詢支援。因此為了能夠監控到某些東西,如主機的CPU使用率,我們需要使用到Exporter。Prometheus週期性的從Exporter暴露的HTTP服務地址(通常是/metrics)拉取監控樣本資料。

Node-exporter 與之前博文中的 Jmeter 是一個作用,就是用於機器系統資料收集。我們在展示資料時,資料肯定是有來源的,監控系統,監控的資料有:CPU、記憶體、磁碟、I/O等資訊。所以就需要部署Node-exporter,我們一起來看下部署過程。

環境部署

拉取映象

使用命令 docker pull prom/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

我們可以檢視埠,是否有啟動成功,命令 netstat -anpt

或者使用命令 docker ps -a 檢視容器是否啟用成功
確認啟動成功之後,可以通過url訪問檢視,伺服器ip+9100;這裡需要注意的是,伺服器埠有安全策略,需要手動開啟,開啟後才能正常訪問,如下所示:

我們可以檢視到具體的監聽資訊,如下所示:

Prometheus

Prometheus簡介

Prometheus(普羅米修斯)是一套開源的監控&報警&時間序列資料庫的組合,起始是由SoundCloud公司開發的。隨著發展,越來越多公司和組織接受採用Prometheus,社會也十分活躍,他們便將它獨立成開源專案,並且有公司來運作。Google SRE的書內也曾提到跟他們BorgMon監控系統相似的實現是Prometheus。現在最常見的Kubernetes容器管理系統中,通常會搭配Prometheus進行監控。

Prometheus基本原理是通過HTTP協議週期性抓取被監控元件的狀態,這樣做的好處是任意元件只要提供HTTP介面就可以接入監控系統,不需要任何SDK或者其他的整合過程。這樣做非常適合虛擬化環境比如VM或者Docker 。

Prometheus應該是為數不多的適合Docker、Mesos、Kubernetes環境的監控系統之一。

輸出被監控元件資訊的HTTP介面被叫做exporter 。目前網際網路公司常用的元件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系統資訊 (包括磁碟、記憶體、CPU、網路等等)。

與其他監控系統相比,Prometheus的主要特點是:

  • 易於管理
  • 監控服務的內部執行狀態
  • 強大的資料模型
  • 強大的查詢語言PromQL
  • 高效
  • 可擴充套件
  • 易於整合
  • 視覺化
  • 開放性

Prometheus架構

架構圖如下所示:

從架構圖中,可以看出有幾大核心元件,一起來看下。

Prometheus Server

Prometheus Server是Prometheus元件中的核心部分,負責實現對監控資料的獲取,儲存以及查詢。 Prometheus Server可以通過靜態配置管理監控目標,也可以配合使用Service Discovery的方式動態管理監控目標,並從這些監控目標中獲取資料。其次Prometheus Server需要對採集到的監控資料進行儲存,Prometheus Server本身就是一個時序資料庫,將採集到的監控資料按照時間序列的方式儲存在本地磁碟當中。最後Prometheus Server對外提供了自定義的PromQL語言,實現對資料的查詢以及分析。

Prometheus Server內建的Express Browser UI,通過這個UI可以直接通過PromQL實現資料的查詢以及視覺化。

Prometheus Server的聯邦叢集能力可以使其從其他的Prometheus Server例項中獲取資料,因此在大規模監控的情況下,可以通過聯邦叢集以及功能分割槽的方式對Prometheus Server進行擴充套件。

Exporters

Exporter將監控資料採集的端點通過HTTP服務的形式暴露給Prometheus Server,Prometheus Server通過訪問該Exporter提供的Endpoint端點,即可獲取到需要採集的監控資料。

一般來說可以將Exporter分為2類:

  • 直接採集:這一類Exporter直接內建了對Prometheus監控的支援,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接內建了用於向Prometheus暴露監控資料的端點。
  • 間接採集:間接採集,原有監控目標並不直接支援Prometheus,因此我們需要通過Prometheus提供的Client Library編寫該監控目標的監控採集程式。例如: Mysql Exporter,JMX Exporter,Consul Exporter等。

AlertManager

在Prometheus Server中支援基於PromQL建立告警規則,如果滿足PromQL定義的規則,則會產生一條告警,而告警的後續處理流程則由AlertManager進行管理。在AlertManager中我們可以與郵件,Slack等等內建的通知方式進行整合,也可以通過Webhook自定義告警處理方式。AlertManager即Prometheus體系中的告警處理中心。

PushGateway

由於Prometheus資料採集基於Pull模型進行設計,因此在網路環境的配置上必須要讓Prometheus Server能夠直接與Exporter進行通訊。 當這種網路需求無法直接滿足時,就可以利用PushGateway來進行中轉。可以通過PushGateway將內部網路的監控資料主動Push到Gateway當中。而Prometheus Server則可以採用同樣Pull的方式從PushGateway中獲取到監控資料。

環境部署

拉取映象

使用命令 docker pull prom/prometheus ,操作如下:

• 新增配置檔案
使用命令 mkdir -p /opt/prometheus && cd /opt/prometheus 新建資料夾,並進入到該目錄下。新建配置檔案的操作命令 vim prometheus.yml ,新增如下內容:

global:
  scrape_interval:     60s
  evaluation_interval: 60s
             
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['自己ip:9090']
        labels:
          instance: prometheus
                                                                       
  - job_name: linux
    static_configs:
      - targets: ['自己ip:9100']
        labels:
          instance: ip

• 啟動服務
使用如下命令,將配置檔案掛載到容器中:

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

啟動後,可以檢查是否啟動成功,檢視埠或者檢視容器執行情況,檢視埠如下:

我們可以通過web頁面檢視,服務執行狀態,訪問地址:伺服器ip+埠/targets,如下所示:

Grafana配置

在之前的博文中,已經詳細介紹過Grafana了,所以這裡就不細說了,詳細可以看之前的博文,Docker系列——InfluxDB+Grafana+Jmeter效能監控平臺搭建(三)

新增資料來源

在使用過程中,稍有區別就是需要新增新的資料來源,因為我們現在使用的是 Prometheus ,操作如下:

訪問grafana:http://ip:3000/login ,新增即可,操作如下:

在這裡可以配置資料來源名稱,配置資料來源的地址,地址填啟動的prometheus地址即可。

引用模板

接下來就是新增模板,模板直接按id匯入: 8919 ,可以配置監控皮膚的名稱和引用源,新增即可。引用模板就是讓資料展示的更美觀。其他皮膚,也可以在Grafana官網去搜尋,裡面還有其他的模板資料。

資料展示

配置完成後,檢視皮膚資料如下:

我們從圖中看出,監控皮膚的資料很齊全,各種指標都有展示,還是挺不錯的。監控伺服器就完成了,操作簡單吧,有資源的,可以手動操作一下,很容易上手的哦。

相關文章