基於Prometheus和Grafana的監控平台 – 環境搭建

  • 2019 年 10 月 20 日
  • 筆記

相關概念

微服務中的監控分根據作用領域分為三大類,Logging,Tracing,Metrics。

  • Logging – 用於記錄離散的事件。例如,應用程式的調試資訊或錯誤資訊。它是我們診斷問題的依據。比如我們說的ELK就是基於Logging。

  • Metrics – 用於記錄可聚合的數據。例如,隊列的當前深度可被定義為一個度量值,在元素入隊或出隊時被更新;HTTP 請求個數可被定義為一個計數器,新請求到來時進行累。prometheus專註於Metrics領域。

  • Tracing – 用於記錄請求範圍內的資訊。例如,一次遠程方法調用的執行過程和耗時。它是我們排查系統性能問題的利器。最常用的有Skywalking,ping-point,zipkin。

今天我們主要聊聊Prometheus的監控,接下來我們了解下需要涉及的幾個關鍵組件。

Prometheus

Prometheus(中文名:普羅米修斯)是由SoundCloud開發的開源監控報警系統和時序列資料庫(TSDB). Prometheus使用Go語言開發, 是Google BorgMon監控系統的開源版本。

Prometheus的基本原理是通過HTTP協議周期性抓取被監控組件的狀態, 任意組件只要提供對應的HTTP介面就可以接入監控. 不需要任何SDK或者其他的集成過程。輸出被監控組件資訊的HTTP介面被叫做exporter,目前開發常用的組件大部分都有exporter可以直接使用, 比如Nginx、MySQL、Linux系統資訊、Mongo、ES等

exporter

prometheus可以理解為一個資料庫+數據抓取工具, 工具從各處抓來統一的數據, 放入prometheus這一個時間序列資料庫中. 那如何保證各處的數據格式是統一的呢?就是通過這個exporter. Exporter是一類數據採集組件的總稱. Exporter負責從目標處搜集數據, 並將其轉化為Prometheus支援的格式, 它開放了一個http介面(以便Prometheus來抓取數據). 與傳統的數據採集組件不同的是, Exporter並不向中央伺服器發送數據, 而是等待中央伺服器(如Prometheus等)主動前來抓取。https://github.com/prometheus 有很多寫好的exporter,可以直接下載使用。

Grafana

Grafana是一個圖形化工具, 它可以從很多種數據源(例如Prometheus)中讀取數據資訊, 使用很漂亮的圖表來展示數據, 並且有很多開源的dashborad可以使用,可以快速地搭建起一個非常精美的監控平台。它與Prometheus的關係就類似於Kibana與ElasticSearch。

環境準備

在開始配置之前請下載以下幾個軟體(直接從github或者grafana官網下載太慢了,簡直是龜速而且容易下載失敗,建議使用迅雷下載)。

安裝

準備兩台伺服器,一台用作安裝prometheus和grafana,一台用作放置exporter組件。建立應用文件夾,將相關軟體上傳至伺服器。

  • 192.168.249.131 prometheus,grafana
  • 192.168.249.129 exporter

prometheus

使用如下shell命令進行安裝並啟動

tar zxvf prometheus-2.13.1.linux-amd64.tar.gz  mv prometheus-2.13.1.linux-amd64 prometheus  cd prometheus  nohup ./prometheus &

啟動完成後,用瀏覽器打開http://192.168.249.131:9090進行訪問,效果如下:
file

grafana

使用如下shell命令進行安裝並啟動

tar grafana-6.4.3.linux-amd64.tar.gz  cd grafana-6.4.3  nohup ./grafana-server &

啟動完成後,用瀏覽器打開http://192.168.249.131:3000進行訪問,默認帳號密碼為admin/admin,初次登陸需要修改密碼,修改密碼並登陸效果如下:
file

node_exporter

使用如下shell命令進行安裝並啟動

tar zxvf node_exporter-0.18.1.linux-amd64.tar.gz  mv node_exporter-0.18.1.linux-amd64 node_exporter  nohup ./node_exporter &

node exporter默認使用9100埠,可以使用–web.listen-address=":9200"指定埠號。
啟動完成後,用瀏覽器打開http://192.168.249.129:9100/進行訪問,顯示效果如下:
file

配置

prometheus

進入prometheus安裝目錄,修改prometheus.yml文件,增加監聽job server-192.168.249.129,完整配置如下:

# 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    rule_files:    # - "first_rules.yml"    # - "second_rules.yml"      scrape_configs:    # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.    - job_name: 'prometheus'      static_configs:      - targets: ['localhost:9090']      - job_name: '192.168.249.129'      static_configs:      - targets: ['192.168.249.129:9100']

配置完成後重啟prometheus,查看監聽狀態。
file

grafana

  • 配置prometheus數據源
    file

  • 官網尋找對應的錶盤,我們選擇node exporter監控看板
    file

  • 在grafana中在導入錶盤
    file
    file

  • 查看監控效果
    file
    file

至此基於Prometheus的監控環境搭建完成,你也來動手試一下吧。

近期熱文

請關注個人公眾號:JAVA日知錄

avatar