學習目錄
- 能夠安裝prometheus服務器
- 能夠通過安裝node_exporter監控遠程linux
- 能夠通過安裝mysqld_exporter監控遠程mysql數據庫
- 能夠安裝grafana
- 能夠在grafana添加prometheus數據源
- 能夠在grafana添加監控cpu負載的圖形
- 能夠在grafana圖形顯示mysql監控數據
- 能夠通過grafana+onealert實現報警
任務背景
AAA公司是一家電商網站,由於公司的業務快速發展,公司要求對現有機器進行爲業務監控,責成運維部門來實施這個項目。
任務要求:
- 部署監控服務器,實現7*24實時監控
- 針對公司的爲一務及研發部門設計監控系統,對監控項和觸發器拿出合理意見
- 做好問題預警機制,對可能出的問題要及時告警並形成嚴格的處理機制
- 做好監控告警系統,要求可以實現告警分級
- 一級報警 電話通知
- 二級報警 微信通知
- 三級報警 郵件通知
-
處理好公司服務器異地集中監控問題,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是一個開源的度量分析和可視化工具,可以通過將採集的數據分析,查詢,然後進行可視化的展示,並能實現報警。
它是開源的時序數據分析平臺 目前支持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
默認的賬號與密碼: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
測試告警情況:
測試結果:
告警後,郵箱收到報警郵件
如果告警消除後,也會收到一封告警消除的郵件。
同時,使用手機掃描二維碼,也可以詳細瞭解告警信息。
文章最後,給大家推薦一些受歡迎的技術博客鏈接:
- JAVA相關的深度技術博客鏈接
- Flink 相關技術博客鏈接
- Spark 核心技術鏈接
- 設計模式 —— 深度技術博客鏈接
- 機器學習 —— 深度技術博客鏈接
- Hadoop相關技術博客鏈接
- 超全乾貨--Flink思維導圖,花了3周左右編寫、校對
- 深入JAVA 的JVM核心原理解決線上各種故障【附案例】
- 請談談你對volatile的理解?--最近小李子與面試官的一場“硬核較量”
- 聊聊RPC通信,經常被問到的一道面試題。源碼+筆記,包懂
- 深入聊聊Java 垃圾回收機制【附原理圖及調優方法】
歡迎掃描下方的二維碼或 搜索 公衆號“大數據高級架構師”,我們會有更多、且及時的資料推送給您,歡迎多多交流!