搞定Prometheus普羅米修斯監控系統

學習目錄

  • 能夠安裝prometheus服務器
  • 能夠通過安裝node_exporter監控遠程linux
  • 能夠通過安裝mysqld_exporter監控遠程mysql數據庫
  • 能夠安裝grafana
  • 能夠在grafana添加prometheus數據源
  • 能夠在grafana添加監控cpu負載的圖形
  • 能夠在grafana圖形顯示mysql監控數據
  • 能夠通過grafana+onealert實現報警

任務背景

AAA公司是一家電商網站,由於公司的業務快速發展,公司要求對現有機器進行爲業務監控,責成運維部門來實施這個項目。

任務要求:

  1. 部署監控服務器,實現7*24實時監控
  2. 針對公司的爲一務及研發部門設計監控系統,對監控項和觸發器拿出合理意見
  3. 做好問題預警機制,對可能出的問題要及時告警並形成嚴格的處理機制
  4. 做好監控告警系統,要求可以實現告警分級
    1. 一級報警 電話通知
    2. 二級報警 微信通知
    3. 三級報警 郵件通知
  5. 處理好公司服務器異地集中監控問題,K8S內部使用的監控系統就是普羅米修斯


任務分析

爲什麼要監控?

實時收集數據,通過報警及時發現問題 ,及時處理。數據爲優化也可以提供依據。

監控四要素:

  • 監控對象:【主機狀態、服務、資源、頁面、url】
  • 用什麼監控:【zabbix-server zabbix-agent】 -> 普羅米修斯監控
  • 什麼時間監控:【7 x 24、5x8】
  • 報警給誰:【管理員】

項目選型:

  • mrtg(Multi Router Traffic Grapher)通過snmp 協議得到設備的流量信息,並以包含PNG格式的圖形的HTML文檔方式顯示給用戶。
  • cacti(仙人掌)用php語言實現的一個軟件,它的主要功能是用snmp 服務獲取數據,然後用rrdtool 存儲和更新數據。官網地址:https://www.cacti.net/
  • ntop 官網地址:https://www.stopo.org/
  • nagios 能夠跨平臺,插件多,報警功能強大。官網地址: https://www.nagios.org/
  • centreon 底層使用的就是nagios。是一個nagios整合版軟件。官網地址:https://www.centreon.com/
  • ganglia 設計用於測量數以千計的節點,資源消耗非常小。官網地址:http://ganglia.info/
  • open-falcon 小米發佈的運維監控軟件,高效率,高可用。時間較短,用戶基數小。官網地址: http://open-falcon.org/
  • zabbix 跨平臺,畫圖,多條件告警,多種API接口。使用基數特別大。官網地址: https://www.zabbix.com/
  • prometheus 基於時間序列的數值數據的容器監控解決方案。官網地址: https://prometheus.io/
     

綜合分析:Prometheus比較適合公司的監控需求


一、普羅米修斯概述

Prometheus(由go語言(golang)開發)是一套開源的監控&報警&時間序列數據庫的組合。適合監控docker容器。因爲kubernetes(俗稱k8s)的流行帶動了prometheus的發展。https://prometheus.io/docs/introduction/overview/

二、時間序列數據

1、什麼是序列數據
時間序列數據(TimeSeries Data) : 按照時間順序記錄系統、設備狀態變化的數據被稱爲時序數據。應用的場景很多, 如:

  • 無人駕駛車輛運行中要記錄的經度,緯度,速度,方向,旁邊物體的距
  • 離等等。每時每刻都要將數據記錄下來做分析。
  • 某一個地區的各車輛的行駛軌跡數據
  • 傳統證券行業實時交易數據
  • 實時運維監控數據等

2、時間序列數據特點

  • 性能好

關係型數據庫對於大規模數據的處理性能糟糕。NOSQL可以比較好的處理大規模數據,讓依然比不上時間序列數據庫。

  • 存儲成本低

高效的壓縮算法,節省存儲空間,有效降低IO,Prometheus有着非常高效的時間序列數據存儲方法,每個採樣數據僅僅佔用3.5byte左右空間,上百萬條時間序列,30秒間隔,保留60天,大概花了200多G(來自官方數據)

3、Prometheus的主要特徵

  • 多維度數據模型
  • 靈活的查詢語言
  • 不依賴分佈式存儲,單個服務器節點是自主的
  • 以HTTP方式,通過pull模型拉去時間序列數據
  • 也可以通過中間網關支持push模型
  • 通過服務發現或者靜態配置,來發現目標服務對象
  • 支持多種多樣的圖表和界面展示

4、普羅米修斯原理架構圖


三、實驗環境準備

序號 服務器IP 角色
1 node-01 (172.20.10.7) 被監控服務器
2 node-02 (172.20.10.8) Prometheus 服務器
3 node-03 (172.20.10.9) grafana 服務器

1. 靜態ip(要求能上外網)【三臺服務器都要操作】
2. 主機名【三臺服務器都要操作】: vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

## BigData CDH 5.x
172.20.10.7 node-01.bigdata.com node-01
172.20.10.8 node-02.bigdata.com node-02
172.20.10.9 node-03.bigdata.com node-03

3. 時間同步(時間同步一定要確認一下)【三臺服務器都要操作】

# crontab -e
# .------------------------------------------minute(0~59)
# | .----------------------------------------hours(0~23)
# | | .--------------------------------------day of month(1~31)
# | | | .------------------------------------month(1~12)
# | | | | .----------------------------------day of week(0~6)
# | | | | | .--------------------------------command
# | | | | | |
# | | | | | |
*/1 * * * * /usr/sbin/ntpdate cn.pool.ntp.org

4. 關閉防火牆

systemctl stop firewalld       (當前開機狀態生效)
systemctl disable firewalld    (永久生效,重啓才生效)
systemctl status firewalld 

5. SELINUX關閉

setenforce 0   (當前開機狀態生效)
vi /etc/selinux/config (SELINUX=disabled)   (永久生效,重啓生效)

1、安裝prometheus

https://prometheus.io/download/ 下載相應版本,安裝到服務器上官網提供的是二進制版,解壓就能用,不需要編譯

第一步:上傳軟件prometheus-2.5.0.linux-amd64.tar.gz 到Linux服務器目錄下:/home/tools

第二步:解壓軟件:tar -zxvf /home/tools/prometheus-2.5.0.linux-amd64.tar.gz -C /usr/local/

第三步:創建prometheus軟鏈接:ln -s /usr/local/prometheus-2.5.0.linux-amd64 /usr/local/prometheus

第四步:啓動普羅米修斯軟件

直接使用默認配置文件啓動
[root@server ~]# /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &

注: &連接符代表後臺運行,不佔用終端窗口

第五步:測試端口占用情況(判斷是否真正的啓動了)

如果沒有安裝的話:yum install lsof
[root@server ~]# lsof -i:9090   或   ss -naltp | grep 9090

ss -naltp | grep 9090

2、prometheus界面

通過瀏覽器訪問http://服務器IP:9090就可以訪問到prometheus的主界面。即: http://node-02:9090

默認只監控了本機一臺,點Status --》點Targets --》可以看到只監控了本機


3、主機數據展示

通過http://服務器IP:9090/metrics可以查看到監控的數據

在web主界面可以通過關鍵字查詢監控項

4、普羅米修斯默認的監控圖像


四、使用普羅米修斯監控Linux 主機

1、node組件介紹

在遠程linux 主機(被監控端agent)上安裝node_exporter組件(這樣普羅米修斯就可以接收到其收集系統)。

下載地址:https://prometheus.io/download/

2、安裝node_exporter

第一步:上傳軟件包到Linux 服務器中(Agent 被監控端)node-01服務器中:node_exporter-0.16.0.linux-amd64.tar.gz

第二步:解壓安裝node_exporter 組件

tar -zxvf /home/tools/node_exporter-0.16.0.linux-amd64.tar.gz -C /usr/local/

ln -s /usr/local/node_exporter-0.16.0.linux-amd64 /usr/local/node_exporter

第三步:啓動node_exporter組件

裏面就一個啓動命令node_exporter,可以直接使用此命令啓動
ls /usr/local/node_exporter/
LICENSE node_exporter NOTICE

啓動指令,&代表後臺運行,nohup代表永久運行
nohup /usr/local/node_exporter/node_exporter &

擴展: nohup命令: 如果把啓動node_exporter的終端給關閉,那麼進程也會隨之關閉。nohup命令會幫你解決這個問題。
 

第四步:查看9100 端口占用情況

ss -naltp | grep 9100

第五步:使用http 協議 + 9100 端口收集Linux 主機信息

通過瀏覽器訪問 http://被監控端IP:9100/metrics 就可以查看到node_exporte在被監控端收集的監控信息。即:http://node-01:9100/metrics


3、讓普羅米修斯監控可以拉取node 節點信息

回到prometheus服務器的配置文件裏添加被監控機器的配置段
 

在主配置文件最後加上下面三行

vi /usr/local/prometheus/prometheus.yml

具體配置如下:文件的最後添加內容

  
  - job_name: 'node-01_agent1' # 取一個job名稱來代 表被監控的機器
    static_configs:
    - targets: ['172.20.10.7:9100'] # 這裏改成被監控機器 的IP,後面端口接9100 

設置完成後,保存,然後重新啓動Prometheus  普羅米修斯監控系統 

改完配置文件後,重啓服務 
[root@node-02 prometheus]# pkill prometheus 
[root@node-02 prometheus]# lsof -i:9090 

# 確認端口沒有進程佔 用
[root@node-02 prometheus]# /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &

[root@node-02 prometheus]# lsof -i:9090    # 確認端口被佔用,說明重啓成功
或
[root@node-02 prometheus]# ss -naltp | grep 9090

回到web 管理界面 --》點Status --》 點Targets --》可以看到多了一臺監控目標

通過瀏覽器訪問http://服務器IP:9090就可以訪問到prometheus的主界面。即: http://node-02:9090


五、使用普羅米修斯監控mysqld 服務

1、如何監控其他服務

在node_exporter 的基礎上,可以根據自己的需要收集其他信息

2、安裝mysqld_exporter 組件

下載地址:https://prometheus.io/download/

第一步:上傳組件到Linux 服務器

第二步:解壓與安裝mysqld組件

tar -zxvf /home/tools/mysqld_exporter-0.11.0.linux-amd64.tar.gz -C /usr/local/

ln -s /usr/local/mysqld_exporter-0.11.0.linux-amd64 /usr/local/mysqld_exporter

[root@node-01 local]# ls /usr/local/mysqld_exporter
LICENSE  mysqld_exporter  NOTICE

3、安裝mysql,並啓動

這個過程比較簡單【跳過】:ss -naltp | grep 3306

4、創建mysql 賬號

mysql -u root -p aa_bb_CC1234

grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by 'aa_bb_CC1234';
flush privileges;
quit

5、在mysqld_exporter 組件中配置msyql 信息

這個文件是手工創建

創建一個mysql 配置文件,寫上連接的用戶名與密碼(和上面的授權的用戶名
和密碼要對應)
[root@node-01 mysqld_exporter]# vi /usr/local/mysqld_exporter/.my.cnf
[client]
user=mysql_monitor
password=aa_bb_CC1234

6、啓動mysqld_exporter組件

啓動mysqld_exporter
[root@node-01 ~]# nohup /usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf &


確認端口(9104)
[root@node-01 ~]# ss -naltp | grep 9104


7、讓普羅米修斯監控可以拉取mysqld 節點信息

回到prometheus服務器的配置文件裏添加被監控機器的配置段
 

在主配置文件最後加上下面三行

vi /usr/local/prometheus/prometheus.yml

具體配置如下:文件的最後添加內容

  
  - job_name: 'mysql_agent' # 取一個job名稱來代 表被監控的機器
    static_configs:
    - targets: ['172.20.10.7:9104'] # 這裏改成被監控機器 的IP,後面端口接9100 

設置完成後,保存,然後重新啓動Prometheus  普羅米修斯監控系統 

改完配置文件後,重啓服務 
[root@node-02 prometheus]# pkill prometheus 
[root@node-02 prometheus]# lsof -i:9090 

# 確認端口沒有進程佔 用
[root@node-02 prometheus]# /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &

[root@node-02 prometheus]# lsof -i:9090    # 確認端口被佔用,說明重啓成功
或
[root@node-02 prometheus]# ss -naltp | grep 9090

回到web 管理界面 --》點Status --》 點Targets --》可以看到多了一臺監控目標

通過瀏覽器訪問http://服務器IP:9090就可以訪問到prometheus的主界面。即: http://node-02:9090


六、Grafana 可視化工具

1、什麼是Grafana

Grafana是一個開源的度量分析和可視化工具,可以通過將採集的數據分析,查詢,然後進行可視化的展示,並能實現報警。

網址: https://grafana.com/

它是開源的時序數據分析平臺    目前支持52種數據源,其中promethus 就是其中支持的一種

2、安裝Grafana

下載地址:https://grafana.com/grafana/download

我這裏選擇的rpm包,下載後直接rpm -ivh安裝就OK
[root@node-03 ~]# rpm -ivh /home/tools/grafana-5.3.4-1.x86_64.rpm

或
yum install grafana-5.3.4-1.x86_64.rpm -y

啓動服務
[root@node-03 ~]# systemctl start grafana-server
設置開機自啓動
[root@node-03 ~]# systemctl enable grafana-server

確認端口(3000)
[root@node-03 ~]# ss -naltp | grep 3000

3、登錄Grafana 

http://node-03:3000/login

默認的賬號與密碼:admin。首次登錄後,需要對admin的密碼進行更改,如:123456

4、添加普羅米修斯的數據源

第一步:添加數據源

第二步:設置數據源、數據源名稱、類型、IP地址、端口號...

5、爲添加好的數據源做圖形顯示

第一步:點擊加號,選擇Dashboard

第二步:增加一個圖形

第三步:選擇需要呈現圖形的數據(小三角 =》Edit 編輯)

第四步:選擇DataSource 數據源,選擇普羅米修斯 

第五步:可以把我們設計完的圖形保存起來

擴展,第六步:根據條件帥選我們想要的數據


七、Grafana圖形顯示MySQL監控數據

1、修改配置文件安裝模板

在grafana上修改配置文件,並下載安裝mysql監控的dashboard(包含相關json文件,這些json文件可以看作是開發人員開發的一個監控模板)

參考網址: https://github.com/percona/grafana-dashboards
 

在grafana配置文件裏最後加上以下三行
[root@node-03 ~]# vi /etc/grafana/grafana.ini
[dashboards.json]
enabled = true
path = /var/lib/grafana/dashboards


[root@node-03 ~]# cd /var/lib/grafana/
[root@node-03 grafana]# git clone https://github.com/percona/grafana-dashboards.git
[root@grafana grafana]# cp -r grafanadashboards/dashboards/ /var/lib/grafana/

如果網速過慢,可以先通過windows下載好再上傳至服務器
mkdir /var/lib/grafana/dashboards
然後下載好的dashboars目錄下的.json文件全部上傳至 /var/lib/grafana/dashboards

重啓grafana服務
[root@node-03 grafana]# systemctl restart grafana-server

2、在Grafana 中導入json 文件

選擇上傳MySQL_Overview.json,設置完成後,單點Import 

3、設置數據庫源

點import導入後,報prometheus數據源找不到,因爲這些json文件裏默認要找的就是叫Prometheus的數據源,但我們前面建立的數據源卻是叫 prometheus_data(坑啊

4、更改數據源名稱

那麼請自行把原來的prometheus_data源改名爲Prometheus即可(注意:第一個字母P是大寫)。然後再回去刷新,就有數據了(如下圖所示)
 


八、Grafana + onealert 報警

1、onealert

https://caweb.aiops.com/#/integrate,需要先在這個系統中進行註冊一個賬號。然後登錄。

2、在Grafana中配置Webhook URL

第一步:在Grafana中創建Notification channel,選擇類型爲Webhook;

第三步:將配置的Webhook Notification Channel添加到Grafana Alert中

設置告警內容:發送給運維負責人

CPU負載測試

cat /dev/urandom | md5sum

測試告警情況:

 

測試結果:

 

告警後,郵箱收到報警郵件

如果告警消除後,也會收到一封告警消除的郵件。

同時,使用手機掃描二維碼,也可以詳細瞭解告警信息。


文章最後,給大家推薦一些受歡迎的技術博客鏈接

  1. JAVA相關的深度技術博客鏈接
  2. Flink 相關技術博客鏈接
  3. Spark 核心技術鏈接
  4. 設計模式 —— 深度技術博客鏈接
  5. 機器學習 —— 深度技術博客鏈接
  6. Hadoop相關技術博客鏈接
  7. 超全乾貨--Flink思維導圖,花了3周左右編寫、校對
  8. 深入JAVA 的JVM核心原理解決線上各種故障【附案例】
  9. 請談談你對volatile的理解?--最近小李子與面試官的一場“硬核較量”
  10. 聊聊RPC通信,經常被問到的一道面試題。源碼+筆記,包懂
  11. 深入聊聊Java 垃圾回收機制【附原理圖及調優方法】

歡迎掃描下方的二維碼或 搜索 公衆號“大數據高級架構師”,我們會有更多、且及時的資料推送給您,歡迎多多交流!

                                           

       

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章