目錄
一、理論
1.Promethues簡介
2.監(jiān)控告警系統(tǒng)設(shè)計(jì)思路
3.Prometheus監(jiān)控體系
4.Prometheus時間序列數(shù)據(jù)
5.Prometheus的生態(tài)組件
6.Prometheus工作原理
7.Prometheus監(jiān)控內(nèi)容
8.部署Prometheus
9.部署Exporters
10.部署Grafana進(jìn)行展示
二、實(shí)驗(yàn)
1.部署Prometheus
2.部署Exporters
2.監(jiān)控遠(yuǎn)程MySQL
3.部署Grafana進(jìn)行展示
三、問題
1.Prometheus和Zabbix區(qū)別
2.如何防止告警信息轟炸
3.監(jiān)控服務(wù)有哪4個黃金指標(biāo)
4.訪問prometheus服務(wù)器被監(jiān)控端agent服務(wù)器狀態(tài)報錯
5.mysqld_exporter如何指定啟動參數(shù)
四、總結(jié)
一、理論
1.Promethues簡介
(1)概念
Prometheus 是一個開源的服務(wù)監(jiān)控系統(tǒng)和時序數(shù)據(jù)庫(TDSB),其提供了通用的數(shù)據(jù)模型和快捷數(shù)據(jù)采集、存儲和查詢接口。它的核心組件Prometheus server會定期從靜態(tài)配置的監(jiān)控目標(biāo)或者基于服務(wù)發(fā)現(xiàn)自動配置的自標(biāo)中進(jìn)行拉取數(shù)據(jù),當(dāng)新拉取到的數(shù)據(jù)大于配置的內(nèi)存緩存區(qū)時,數(shù)據(jù)就會持久化到存儲設(shè)備當(dāng)中。
每個被監(jiān)控的主機(jī)都可以通過專用的exporter 程序提供輸出監(jiān)控?cái)?shù)據(jù)的接口,它會在目標(biāo)處收集監(jiān)控?cái)?shù)據(jù),并暴露出一個HTTP接口供Prometheus server查詢,Prometheus通過基于HTTP的pull的方式來周期性的采集數(shù)據(jù)。
任何被監(jiān)控的目標(biāo)都需要事先納入到監(jiān)控系統(tǒng)中才能進(jìn)行時序數(shù)據(jù)采集、存儲、告警和展示,監(jiān)控目標(biāo)可以通過配置信息以靜態(tài)形式指定,也可以讓Prometheus通過服務(wù)發(fā)現(xiàn)的機(jī)制進(jìn)行動態(tài)管理。
Prometheus 能夠直接把API Server作為服務(wù)發(fā)現(xiàn)系統(tǒng)使用,進(jìn)而動態(tài)發(fā)現(xiàn)和監(jiān)控集群中的所有可被監(jiān)控的對象
Prometheus 官網(wǎng)地址:https://prometheus.io
Prometheus github 地址:https://github.com/prometheus
(2)特點(diǎn)
多維數(shù)據(jù)模型:由度量名稱和鍵值對標(biāo)識的時間序列數(shù)據(jù)
時序數(shù)據(jù),是在一段時間內(nèi)通過重復(fù)測量(measurement)而獲得的觀測值的集合;將這些觀測值繪制于圖形之上,它會有一個數(shù)據(jù)軸和一個時間軸;
服務(wù)器指標(biāo)數(shù)據(jù)、應(yīng)用程序性能監(jiān)控?cái)?shù)據(jù)、網(wǎng)絡(luò)數(shù)據(jù)等也都是時序數(shù)據(jù);
1)內(nèi)置時間序列(pime series)數(shù)據(jù)庫:Prometheus;外置的遠(yuǎn)端存儲通常會用:InfluxDB、openTsDB等
2)promQL一種靈活的查詢語言,可以利用多維數(shù)據(jù)完成復(fù)雜查詢
3)基于HTTP的pull(拉?。┓绞讲杉瘯r間序列數(shù)據(jù)
4)同時支持PushGateway組件收集數(shù)據(jù)
5)通過服務(wù)發(fā)現(xiàn)或者靜態(tài)配置,來發(fā)現(xiàn)目標(biāo)服務(wù)對象
6)支持作為數(shù)據(jù)源接入Grafana
2.監(jiān)控告警系統(tǒng)設(shè)計(jì)思路
(1)模塊組成
①?數(shù)據(jù)收集模塊
②?數(shù)據(jù)提取模塊(prometheus-TSDB,查詢語言是promQL)
③?監(jiān)控告警模塊(布爾值表達(dá)式判斷是否需要告警,不成立是健康狀態(tài))
(2)層次
第一層:數(shù)據(jù)收集層 多渠道監(jiān)控?cái)?shù)據(jù)(網(wǎng)絡(luò),硬件,應(yīng)用,數(shù)據(jù),物理環(huán)境)
第二層:數(shù)據(jù)展示層 數(shù)據(jù)生成曲線圖展示(對時序數(shù)據(jù)的動態(tài)展示)
第三層:數(shù)據(jù)提取層 定時采集數(shù)據(jù)到監(jiān)控模塊
第四層:告警規(guī)則配置層 告警規(guī)則設(shè)置、告警伐值設(shè)置(定義布爾值表達(dá)式,篩選異常狀態(tài))
第五層:告警事件生成層 實(shí)時記錄告警事件、形成分析圖表(趨勢分析、可視化)
第六層:用戶展示管理層 同一用戶管理、集中監(jiān)控、集中維護(hù)
3.Prometheus監(jiān)控體系
(1)系統(tǒng)層監(jiān)控(需要監(jiān)控的數(shù)據(jù))
1)CPU、Load、Memory、swap、disk、I/O、process等
2)網(wǎng)絡(luò)監(jiān)控:網(wǎng)絡(luò)設(shè)備、工作負(fù)載、網(wǎng)絡(luò)延遲、丟包率等
(2)中間件及基礎(chǔ)設(shè)施類監(jiān)控
1)消息中間件:kafka、RocketMQ、等消息代理(redis 中間件)
2)WEB服務(wù)容器:tomcat、weblogic、apache、php、spring系列
3)數(shù)據(jù)庫/緩存數(shù)據(jù)庫:Mysql、Postgresql、MongoDB、es、redis
redis監(jiān)控內(nèi)容:
redis的服務(wù)狀態(tài)
redis所在服務(wù)器的系統(tǒng)層監(jiān)控
RDB和AOF日志監(jiān)控
日志--->如果是哨兵模式--->哨兵共享集群信息,產(chǎn)生的日志
--->直接包含的其他節(jié)點(diǎn)哨兵信息及redis信息
key的數(shù)量
key被命中的數(shù)據(jù)/次數(shù)
最大連接數(shù)--->redis和系統(tǒng)
redis:redis-cli登錄--->config get maxclients查看最大連接
(3)應(yīng)用層監(jiān)控
它用于衡量應(yīng)用程序代碼狀態(tài)和性能。
監(jiān)控的分類:
1)白盒監(jiān)控:自省指標(biāo),等待被下載(cadvisor)
2)黑盒監(jiān)控:基于探針(snmp)的監(jiān)控方式,不會主動干預(yù)、影響數(shù)據(jù)
(4)業(yè)務(wù)層監(jiān)控
用于衡量應(yīng)用程序的價值。如電商業(yè)務(wù)的銷售量,ops、dau日活、轉(zhuǎn)化等。
業(yè)務(wù)接口:登入數(shù)量,注冊數(shù)、訂單量、搜索量和支付量。
4.Prometheus時間序列數(shù)據(jù)
(1)序列數(shù)據(jù)
時間序列數(shù)據(jù)(TimeSeries Data):按照時間順序記錄系統(tǒng)、設(shè)備狀態(tài)變化的數(shù)據(jù)被稱為時序數(shù)據(jù)。
應(yīng)用場景很多,如:
1)人駕駛車輛運(yùn)行中要記錄的經(jīng)度,緯度,速度,方向,旁邊物體的距離等等。每時每刻都要將數(shù)據(jù)記錄下來做分析。
2)某一個地區(qū)的各車輛的行駛軌跡數(shù)據(jù)
3)傳統(tǒng)證券行業(yè)實(shí)時交易數(shù)據(jù)
4)實(shí)時運(yùn)維監(jiān)控?cái)?shù)據(jù)等
(2)時間序列數(shù)據(jù)特點(diǎn)
Prometheus 有著非常高效的時間序列數(shù)據(jù)存儲方法,每個采樣數(shù)據(jù)僅僅占用 3.5byte 左右空間,上百萬條時間序列,30 秒間隔,保留 60 天,大概花了 200 多 G(來自官方數(shù)據(jù))。
1)性能好:關(guān)系型數(shù)據(jù)庫對于大規(guī)模數(shù)據(jù)的處理性能糟糕。NOSQL 可以比較好的處理大規(guī)模數(shù)據(jù),讓依然比不上時間序列數(shù)據(jù)庫。
2)存儲成本低:高效的壓縮算法,節(jié)省存儲空間,有效降低 IO。
(3)數(shù)據(jù)來源
Prometheus基于HTTP call (http/https請求),從配置文件中指定的網(wǎng)絡(luò)端點(diǎn)(endpoint/IP:端口)上周期性獲取指標(biāo)數(shù)據(jù)。很多環(huán)境、被監(jiān)控對象,本身是沒有直接響應(yīng)/處理http請求的功能,prometheus-exporter則可以在被監(jiān)控端收集所需的數(shù)據(jù),收集過來之后,還會做標(biāo)準(zhǔn)化,把這些數(shù)據(jù)轉(zhuǎn)化為prometheus可識別,可使用的數(shù)據(jù)(兼容格式)。
?
(4)收集數(shù)據(jù)
1)監(jiān)控概念:白盒監(jiān)控、黑盒監(jiān)控
2)白盒監(jiān)控:自省方式,被監(jiān)控端內(nèi)部,可以生成指標(biāo),只要等待監(jiān)控系統(tǒng)來采集時提供出去即可。
3)黑盒監(jiān)控:對于被監(jiān)控系統(tǒng)沒有侵入性,對其沒有直接‘影響",這種類似于基于探針機(jī)制進(jìn)行監(jiān)控(snmp協(xié)議)
prometheus支持通過三種類型的途徑從目標(biāo)上抓取/采集(scrape)指標(biāo)數(shù)據(jù)(基于白盒監(jiān)控):
1)exporter--->工作在被監(jiān)控端,周期性的抓取數(shù)據(jù)并 轉(zhuǎn)換為prometheus來收集,自己并不推送
2)Instrumentation--->指被監(jiān)控對象內(nèi)部自身有數(shù)據(jù)收集、監(jiān)控的功能,只需要prometheus直接去獲取
3)Pushgateway--->短周期5s-10s的數(shù)據(jù)收集
(5)常見的時間序列數(shù)據(jù)庫
(6)時間序列數(shù)據(jù)庫引擎排行
DB-Engines Ranking - die Rangliste der popul?rsten Time Series DBMS
(7)prometheus獲取方式
Prometheus同其他TSDB相比有一個非常典型的特性:主動從各Target上拉?。╬ull)數(shù)據(jù),非等待被監(jiān)控端的推送(push)
兩個獲取方式各有優(yōu)劣,其中,Pull模型的優(yōu)勢在于:
1)集中控制:有利于將配置集在Prometheus server上完成,包括指標(biāo)及采取速率等;
2)Prometheus的根本目標(biāo)在于收集在target上預(yù)先完成聚合的聚合型數(shù)據(jù),而非一款由事件驅(qū)動的存儲系統(tǒng)通過targets(標(biāo)識的是具體的被監(jiān)控端)
3)比如配置文件中的targets : [ ‘localhost:9090’]
(8)Prometheus 數(shù)據(jù)模型
Prometheus 僅用于以“鍵值”(key)形式儲存時序式的聚合數(shù),不支持存儲文本信息;
1)其中的“鍵”稱為指標(biāo),它通常意味著cpu速率、內(nèi)存使用率、負(fù)載等;
2)同一指標(biāo)可能會適配到多個目標(biāo),比如cpu使用率這個指標(biāo),我們需要對100臺服務(wù)器設(shè)備進(jìn)行使用。所以它使
3)用“標(biāo)簽”(labels)作為元數(shù)據(jù),從而為指標(biāo)添加更多的信息描述;
這些標(biāo)簽可以作為過濾器進(jìn)行指標(biāo)過濾及運(yùn)算。
具體的看如下數(shù)據(jù)展示描述:
如上圖中,cpu_usage{core=“1”,ip=“128.0.0.1”} 14.04
cpu_usage為指標(biāo)名稱,{core=“1”,ip=“128.0.0.1”}為標(biāo)簽(標(biāo)簽內(nèi)的條件可以多個,用逗號分隔),14.04 為 表達(dá)式返回的值
5.Prometheus的生態(tài)組件
Prometheus 負(fù)責(zé)時序型指標(biāo)數(shù)據(jù)的采集及存儲,但數(shù)據(jù)的分析、聚合及直觀展示以及告警等功能并非由Prometheus Server所負(fù)責(zé)。
(1)Prometheus server
Prometheus server:服務(wù)核心組件,采用pull方式收集監(jiān)控?cái)?shù)據(jù),通過http協(xié)議傳輸。并存儲時間序列數(shù)據(jù)。Prometheus server 由三個部分組成:Retrival,Storage,PromQL
1)Retrieval:負(fù)責(zé)在活躍的target 主機(jī)上抓取監(jiān)控指標(biāo)數(shù)據(jù)。
2)Storage:存儲,主要是把采集到的數(shù)據(jù)存儲到磁盤中。默認(rèn)為15天(可修改)。
3)PromQL:是Prometheus提供的查詢語言模塊。
(2)pushgateway
Pushgateway:類似一個中轉(zhuǎn)站,Prometheus的server端只會使用pull方式拉取數(shù)據(jù),但是某些節(jié)點(diǎn)因?yàn)槟承┰蛑荒苁褂胮ush方式推送數(shù)據(jù),那么它就是用來接收push而來的數(shù)據(jù)并暴露給Prometheus的server拉取的中轉(zhuǎn)站。可以理解成目標(biāo)主機(jī)可以上報短期任務(wù)的數(shù)據(jù)到Pushgateway,然后Prometheus server 統(tǒng)一從Pushgateway拉取數(shù)據(jù)。
?
(3)exporters
Exporters:指標(biāo)暴露器,負(fù)責(zé)收集不支持內(nèi)建Instrumentation的應(yīng)用程序或服務(wù)的性能指標(biāo)數(shù)據(jù),并通過HTTP接口供Prometheus Server獲取。換句話說,Exporter 負(fù)責(zé)從目標(biāo)應(yīng)用程序上采集和聚合原始格式的數(shù)據(jù),并轉(zhuǎn)換或聚合為Prometheus格式的指標(biāo)向外暴露。
常用的Exporters:
1)Node-Exporter:用于收集服務(wù)器節(jié)點(diǎn)(例如k8s)的物理指標(biāo)狀態(tài)數(shù)據(jù),如平均負(fù)載、CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等資源信息的指標(biāo)數(shù)據(jù),需要部署到所有運(yùn)算節(jié)點(diǎn)。指標(biāo)詳細(xì)介紹:https://github.com/prometheus/node_exporter
2)mysqld-exporter/nginx-exporter
3)Kube-state-Metrics:為prometheus 采集k8s資源數(shù)據(jù)的exporter,通過監(jiān)聽APIServer 收集kubernetes集群內(nèi)資源對象的狀態(tài)指標(biāo)數(shù)據(jù),例如pod、deployment、service 等等。同時它也提供自己的數(shù)據(jù),主要是資源采集個數(shù)和采集發(fā)生的異常次數(shù)統(tǒng)計(jì)。
4)cAdvisor:用來監(jiān)控容器內(nèi)部使用資源的信息,比如CPU、內(nèi)存、網(wǎng)絡(luò)I/0、磁盤I/0。
5)blackbox-exporter:監(jiān)控業(yè)務(wù)容器存活性。
需要注意的是kube-state-metrics 只是簡單的提供一個metrics 數(shù)據(jù),并不會存儲這些指標(biāo)數(shù)據(jù),
所以可以使用prometheus來抓取這些數(shù)據(jù)然后存儲,主要關(guān)注的是業(yè)務(wù)相關(guān)的一些元數(shù)據(jù),
比如Deployment、Pod、副本狀態(tài)等;調(diào)度了多少個replicas?現(xiàn)在可用的有幾個?
多少個Pod是running/stopped/terminated 狀態(tài)?Pod 重啟了多少次?有多少job在運(yùn)行中。
(4)Service Discovery
Service Discovery:服務(wù)發(fā)現(xiàn),用于動態(tài)發(fā)現(xiàn)待監(jiān)控的Target,Prometheus支持多種服務(wù)發(fā)現(xiàn)機(jī)制:文件、DNS、Consul、Kubernetes等等。
服務(wù)發(fā)現(xiàn)可通過第三方提供的接口,Prometheus查詢到需要監(jiān)控的Target列表,然后輪詢這些Target 獲取監(jiān)控?cái)?shù)據(jù)。該組件目前由Prometheus Server內(nèi)建支持。
?
(5)Alertmanager
Alertmanager:是一個獨(dú)立的告警模塊,從Prometheus server端接收到“告警通知”后,會進(jìn)行去重、分組,并路由到相應(yīng)的接收方,發(fā)出報警,常見的接收方式有:電子郵件、釘釘、企業(yè)微信等。
1)Prometheus Server 僅負(fù)責(zé)生成告警指示,具體的告警行為由另一個獨(dú)立的應(yīng)用程序AlertManager負(fù)責(zé);
2)告警指示由 Prometheus Server基于用戶提供的告警規(guī)則周期性計(jì)算生成,Alertmanager 接收到Prometheus Server發(fā)來的告警指示后,基于用戶定義的告警路由向告警接收人發(fā)送告警信息。
(6)client Library
client Library:客戶端庫,目的在于為那些期望原生提供Instrumentation功能的應(yīng)用程序提供便捷的開發(fā)途徑,用于基于應(yīng)用程序內(nèi)建的測量系統(tǒng)。
(7)grafana
Grafana:是一個跨平臺的開源的度量分析和可視化工具,可以將采集的數(shù)據(jù)可視化的展示,并及時通知給告警接收方。其官方庫中具有豐富的儀表盤插件。
?
6.Prometheus工作原理
(1)Prometheus數(shù)據(jù)流向:
1)Prometheus server定期從配置好的jobs或者exporters中拉取metrics,或者接收來自 Pushgateway發(fā)送過來的metrics,或者從其它的Prometheus server中拉metrics。
2)Prometheus server在本地存儲收集到的metrics,并運(yùn)行定義好的alerts.rules,記錄新的時間序列或者向Alert manager推送警報。
3)Alertmanager根據(jù)配置文件,對接收到的警報進(jìn)行處理,發(fā)出告警。
4)在圖形界面中,可視化采集數(shù)據(jù)。
(2)Prometheus工作模式
1)Prometheus Server 基于服務(wù)發(fā)現(xiàn)(Service Discovery)機(jī)制或靜態(tài)配置獲取要監(jiān)視的目標(biāo)(Target),并通過每個目標(biāo)上的指標(biāo)exporter來采集(Scrape)指標(biāo)數(shù)據(jù);
2)Prometheus Server 內(nèi)置了一個基于文件的時間序列存儲來持久存儲指標(biāo)數(shù)據(jù),用戶可使用PromQL接口來檢索數(shù)據(jù),也能夠按需將告警需求發(fā)往A1ertmanager完成告警內(nèi)容發(fā)送;
3)一些短期運(yùn)行的作業(yè)的生命周期過短,難以有效地將必要的指標(biāo)數(shù)據(jù)供給到Server端,它們一般會采用推送(Push)方式輸出指標(biāo)數(shù)據(jù),Prometheus借助于Pushgateway 接收這些推送的數(shù)據(jù),進(jìn)而由server端進(jìn)行抓取
(3)Prometheus工作流程
1)Prometheus以prometheus Server 為核心,用于收集和存儲時間序列數(shù)據(jù)。Prometheus Server從監(jiān)控目標(biāo)中通過pull方式拉取指標(biāo)數(shù)據(jù),或通過pushgateway 把采集的數(shù)據(jù)拉取到Prometheus server中。
2)Prometheus server 把采集到的監(jiān)控指標(biāo)數(shù)據(jù)通過TSDB存儲到本地HDD/ssD中。
3)Prometheus 采集的監(jiān)控指標(biāo)數(shù)據(jù)按時間序列存儲,通過配置報警規(guī)則,把觸發(fā)的報警發(fā)送到Alertmanager。
4)Alertmanager 通過配置報警接收方,發(fā)送報警到郵件、釘釘或者企業(yè)微信等。
5)Prometheus 自帶的Web UI 界面提供PromQL 查詢語言,可查詢監(jiān)控?cái)?shù)據(jù)。
6)Grafana 可接入Prometheus 數(shù)據(jù)源,把監(jiān)控?cái)?shù)據(jù)以圖形化形式展示出。
注意:告警數(shù)據(jù)采集、告警信息提取、告警通知
1)首先,需要采集監(jiān)控?cái)?shù)據(jù),pro會周期性的pull或被push指標(biāo)數(shù)據(jù),數(shù)據(jù)采集的方式主要包括exporters、instrumentation、pushgateway 3種方式,前兩者為pull方式獲取,pushgateway借助于push方式推送給prometheus。
2)根據(jù)prometheus配置文件中(K8S-configmap的配置中),獲取被監(jiān)控端的數(shù)據(jù)之后,保存在TSDB中,我們可以借助Grafana或者告警平臺來展示數(shù)據(jù),grafana的展示是通過PromQL來獲取數(shù)據(jù)。
3)prometheus通過rule配置來借助于PromQL來定義布爾值表達(dá)式,產(chǎn)生告警信息
4)一旦出現(xiàn)告警,prometheus產(chǎn)生告警信息,發(fā)送給alertmanager,alertmanager根據(jù)自定義的告警路由,來進(jìn)行告警通知,對接第三方平臺,例如告警平臺、郵件、釘釘。
(4)Prometheus的局限性
1)Prometheus是一款指際監(jiān)控系統(tǒng),不適合存儲事件及日志等;它更多地展示的是趨勢性的監(jiān)控,而非精準(zhǔn)數(shù)據(jù);
2)Prometheus認(rèn)為只有最近的監(jiān)控?cái)?shù)據(jù)才有查詢的需要,其本地存儲的設(shè)計(jì)初衷只是保存短期(例如一個月)數(shù)據(jù),因而不支持針對大量的歷史數(shù)據(jù)進(jìn)行存儲;若需要存儲長期的歷史數(shù)據(jù),建議基于遠(yuǎn)端存儲機(jī)制將數(shù)據(jù)保存于InfluxDB或openTsDB等系統(tǒng)中;
3)Prometheus的集群機(jī)制成熟度不高,可基于Thanos(和滅霸是一個單詞)實(shí)現(xiàn)Prometheus集群的高可用及聯(lián)邦集群
7.Prometheus監(jiān)控內(nèi)容
(1)監(jiān)控級別及內(nèi)容
表1 監(jiān)控級別及內(nèi)容
級別 | 監(jiān)控內(nèi)容 | exporter |
網(wǎng)絡(luò) | 網(wǎng)絡(luò)協(xié)議:http、dns、tcp、icmp; 網(wǎng)路硬件:路由器、交換機(jī)等 |
BlockBox Exporter;SNMP Exporter |
主機(jī) | 資源用量 | node exporter |
容器 | 資源用量 | cadvisor |
應(yīng)用(包括Library) | 延遲、錯誤,QPS,內(nèi)部狀態(tài) | 代碼集中集成Prometheus Client |
中間件狀態(tài) | 資源用量,以及服務(wù)狀態(tài) | 代碼集中集成Prometheus Client |
編排工具 | 集群資源用量,調(diào)度等 | Kubernetes Components |
(2)網(wǎng)絡(luò)監(jiān)控
1)網(wǎng)絡(luò)性能監(jiān)控:主要涉及網(wǎng)絡(luò)監(jiān)測,網(wǎng)絡(luò)實(shí)時流量監(jiān)控(網(wǎng)絡(luò)延遲、訪問量、成功率)和歷史數(shù)據(jù)統(tǒng)計(jì)、匯總和歷史數(shù)據(jù)分析等功能。
2)網(wǎng)絡(luò)***檢測:主要針對內(nèi)網(wǎng)或者外網(wǎng)的網(wǎng)絡(luò)***。如DDoS***的。通過分析異常流量來確定網(wǎng)絡(luò)***行為。
3)設(shè)備監(jiān)控:主要針對數(shù)據(jù)中心內(nèi)的多種網(wǎng)絡(luò)設(shè)備進(jìn)行監(jiān)控。包括路由器,防火墻和交換機(jī)等硬件設(shè)備,可以通過snmp等協(xié)議收集數(shù)據(jù)。
(3)存儲監(jiān)控
1)存儲性能監(jiān)控方面:存儲通常監(jiān)控塊的讀寫速率,IOPS。讀寫延遲,磁盤用量等;文件存儲通常監(jiān)控文件系統(tǒng)inode。讀寫速度、目錄權(quán)限等。
2)存儲系統(tǒng)監(jiān)控方面:不同的存儲系統(tǒng)有不同的指標(biāo),例如,對于ceph存儲需要監(jiān)控OSD, MON的運(yùn)行狀態(tài),各種狀態(tài)pg的數(shù)量以及集群IOPS等信息。
3)存儲設(shè)備監(jiān)控方面:對于構(gòu)建在x86服務(wù)器上的存儲設(shè)備,設(shè)備監(jiān)控通過每個存儲節(jié)點(diǎn)上的采集器統(tǒng)一收集磁盤、SSD、網(wǎng)卡等設(shè)備信息;存儲廠商以黑盒方式提供商業(yè)存儲設(shè)備,通常自帶監(jiān)控功能,可監(jiān)控設(shè)備的運(yùn)行狀態(tài),性能和容量的。
(4)服務(wù)器監(jiān)控
1)CPU:涉及整個 CPU 的使用量、用戶態(tài)百分比、內(nèi)核態(tài)百分比,每個 CPU 的使用量、等待隊(duì)列長度、I/O 等待百分比、CPU 消耗最多的進(jìn)程、上下文切換次數(shù)、緩存命中率等。
2)內(nèi)存:涉及內(nèi)存的使用量、剩余量、內(nèi)存占用最高的進(jìn)程、交換分區(qū)大小、缺頁異常等。
3)網(wǎng)絡(luò) I/O:涉及每個網(wǎng)卡的上行流量、下行流量、網(wǎng)絡(luò)延遲、丟包率等。
4)磁盤 I/O:涉及硬盤的讀寫速率、IOPS、磁盤用量、讀寫延遲等。
(5)中間件監(jiān)控
1)消息中間件: RabbitMQ Exporter、Kafka Exporter
2)Web 服務(wù)中間件:Apache Exporter、Nginx Exporter
3)數(shù)據(jù)庫中間件:MySQL Exporter、PostgreSQL Exporter、Redis Exporter
8.部署Prometheus
(1)環(huán)境準(zhǔn)備
服務(wù)器類型 | IP地址 | 組件 |
---|---|---|
Prometheus服務(wù)器 | 192.168.204.18 | Prometheus、node_exporter |
grafana服務(wù)器 | 192.168.204.19 | Grafana |
agent服務(wù)器 | 192.168.204.20 | node_exporter |
關(guān)閉安全機(jī)制
#prometheus節(jié)點(diǎn)
[root@prometheus ~]# systemctl stop firewalld
[root@prometheus ~]# setenforce 0
setenforce: SELinux is disabled
[root@prometheus ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#grafana節(jié)點(diǎn)
[root@grafana ~]# systemctl stop firewalld
[root@grafana ~]# setenforce 0
setenforce: SELinux is disabled
[root@grafana ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#agent節(jié)點(diǎn)
[root@agent ~]# systemctl stop firewalld
[root@agent ~]# setenforce 0
setenforce: SELinux is disabled
[root@agent ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
修正地址映射
vim /etc/hosts
192.168.204.18 prometheus
192.168.204.19 grafana
192.168.204.20 agent
(2)Prometheus部署
prometheus下載地址:
https://prometheus.io/download/
①上傳 prometheus-2.37.0.linux-amd64.tar.gz 到 /opt 目錄中,并解壓
[root@prometheus ~]# cd /opt
[root@prometheus opt]# ls
cni containerd rh
[root@prometheus opt]# rz -E
rz waiting to receive.
[root@prometheus opt]# ls
cni containerd prometheus-2.37.0.linux-amd64.tar.gz rh
[root@prometheus opt]# tar xf prometheus-2.37.0.linux-amd64.tar.gz
[root@prometheus opt]# mv prometheus-2.37.0.linux-amd64 /usr/local/prometheus
[root@prometheus opt]# cd /usr/local/prometheus
[root@prometheus prometheus]# ls
console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool
②修改配置文件
cat /usr/local/prometheus/prometheus.yml | grep -v "^#"
global: #用于prometheus的全局配置,比如采集間隔,抓取超時時間等
scrape_interval: 15s #采集目標(biāo)主機(jī)監(jiān)控?cái)?shù)據(jù)的時間間隔,默認(rèn)為1m
evaluation_interval: 15s #觸發(fā)告警生成alert的時間間隔,默認(rèn)是1m
# scrape_timeout is set to the global default (10s).
scrape_timeout: 10s #數(shù)據(jù)采集超時時間,默認(rèn)10s
alerting: #用于alertmanager實(shí)例的配置,支持靜態(tài)配置和動態(tài)服務(wù)發(fā)現(xiàn)的機(jī)制
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files: #用于加載告警規(guī)則相關(guān)的文件路徑的配置,可以使用文件名通配機(jī)制
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs: #用于采集時序數(shù)據(jù)源的配置
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus" #每個被監(jiān)控實(shí)例的集合用job_name命名,支持靜態(tài)配置(static_configs)和動態(tài)服務(wù)發(fā)現(xiàn)的機(jī)制(*_sd_configs)
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs: #靜態(tài)目標(biāo)配置,固定從某個target拉取數(shù)據(jù)
- targets: ["localhost:9090"]
修改靜態(tài)模板配置,固定從某個target拉取數(shù)據(jù)
- targets: ["192.168.204.18:9090"]
③配置系統(tǒng)啟動文件,設(shè)置開機(jī)自啟
Unit為服務(wù)單元,After為依賴關(guān)系,config.file為配置文件,storage.tsdb.path為數(shù)據(jù)目錄,
storage.tsdb.retention為保存時間,ExecReload為重載
[root@prometheus prometheus]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
④開啟prometheus,并訪問網(wǎng)頁驗(yàn)證
systemctl start prometheus
systemctl enable prometheus
netstat -natp | grep :9090
瀏覽器訪問:http://192.168.204.18:9090 ,訪問到 Prometheus 的 Web UI 界面
點(diǎn)擊頁面的 Status -> Targets,如看到 Target 狀態(tài)都為 UP,說明 Prometheus 能正常采集到數(shù)據(jù)
http://192.168.204.18:9090/metrics ,可以看到 Prometheus 采集到自己的指標(biāo)數(shù)據(jù)
⑤通過瀏覽器訪問 http:// 服務(wù)器 IP:9090 就可以訪問到 Prometheus 的主界面
⑥默認(rèn)只監(jiān)控了本機(jī)一臺,點(diǎn) Status→點(diǎn) Targets→可以看到只監(jiān)控了本機(jī)
9.部署Exporters
(1)監(jiān)控遠(yuǎn)程Linux主機(jī)(192.168.109.20)
在遠(yuǎn)程 linux 主機(jī)(被監(jiān)控端 agent)上安裝 node_exporter 組件。
下載地址:
https://prometheus.io/download/
①上傳 node_exporter-1.3.1.linux-amd64.tar.gz 到 /opt 目錄中,并解壓
cd /opt/
tar xf node_exporter-1.3.1.linux-amd64.tar.gz
mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin
②配置啟動文件,設(shè)置開機(jī)自啟
vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=mysqld_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstat
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
③啟動node_exporter
systemctl start node_exporter
systemctl enable node_exporter
netstat -natp | grep :9100
瀏覽器訪問:http://192.168.204.20:9100/metrics ,可以看到 Node Exporter 采集到的指標(biāo)數(shù)據(jù)
④?通過瀏覽器訪問 http:// 被監(jiān)控端 IP:9100/metrics 就可以查看到 node_exporter 在被監(jiān)控端收集的監(jiān)控信息
修改Prometheus服務(wù)器的配置文件
回到 Prometheus 服務(wù)器的配置文件里添加被監(jiān)控機(jī)器的配置段:
vim /usr/local/prometheus/prometheus.yml
- job_name: 'agent'
static_configs:
- targets: ['192.168.204.20:9100']
改完配置文件后,重啟服務(wù)?
systemctl restart prometheus.service
systemctl status prometheus
⑤訪問prometheus服務(wù)器
回到 web 管理界面→點(diǎn) Status→點(diǎn) Targets→可以看到多了一臺監(jiān)控目標(biāo)
192.168.204.18:9090
注:也可以在本機(jī)安裝 node_exporter,使用上面的方式監(jiān)控本機(jī)。
(2)??監(jiān)控遠(yuǎn)程MySQL
在被管理機(jī) agent上安裝 mysqld_exporter 組件
下載地址:
https://prometheus.io/download/
(1)???安裝mariadb數(shù)據(jù)庫,并授權(quán)
安裝命令 yum -y install mariadb mariadb-server
安裝完成MariaDB,首先啟動MariaDB systemctl start mariadb
設(shè)置開機(jī)啟動 systemctl enable mariadb
取消開機(jī)啟動 systemctl disable mariadb
在當(dāng)前數(shù)據(jù)庫中增加授權(quán)
#進(jìn)入數(shù)據(jù)庫
mysql
授權(quán)IP為192.168.204.20,因?yàn)椴皇莗rometheus服務(wù)器直接來找mariadb獲取數(shù)據(jù),而是prometheus服務(wù)器找mysql_exporter,然后mysql_exporter再找mariadb.所以這個IP指的是mysql_exporter的IP.
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'192.168.204.20' IDENTIFIED BY 'exporter123' WITH MAX_USER_CONNECTIONS 3;
flush privileges;
(2)?下載mysqld_exporter組件?
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.0/mysqld_exporter-0.12.0.linux-amd64.tar.gz
(3)安裝mysqld_exporter組件
進(jìn)入目錄 cd /usr/local/prometheus/
下載 wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
解壓 tar xzvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
修改目錄名 mv mysqld_exporter-0.12.1.linux-amd64 mysqld_exporter
修改用戶及組 chown -R root:root /usr/local/prometheus/mysqld_exporter/mysqld_exporter
修改權(quán)限 chmod 755 /usr/local/prometheus/mysqld_exporter/mysqld_exporter
(4)??添加mysqld_exporter為系統(tǒng)服務(wù)
# vim /usr/lib/systemd/system/mysqld_exporter.service
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
Type=simple
User=mysql
# exporter對應(yīng)授權(quán)賬號,exporter123對應(yīng)授權(quán)密碼,localhost對應(yīng)授權(quán)賬號密碼所在的地址
Environment=DATA_SOURCE_NAME=exporter:exporter123@(localhost:3306)/
ExecStart=/usr/local/prometheus/mysqld_exporter/mysqld_exporter --web.listen-address=0.0.0.0:9104
--config.my-cnf /etc/my.cnf \
--collect.slave_status \
--collect.slave_hosts \
--log.level=error \
--collect.info_schema.processlist \
--collect.info_schema.innodb_metrics \
--collect.info_schema.innodb_tablespaces \
--collect.info_schema.innodb_cmp \
--collect.info_schema.innodb_cmpmem
Restart=on-failure
[Install]
WantedBy=multi-user.targe
(5)啟動服務(wù)并監(jiān)聽端口
systemctl start mysqld_exporter
systemctl enable mysqld_exporter
netstat -antp | grep 9104
(6)??修改Prometheus服務(wù)器的配置文件
回到 Prometheus 服務(wù)器的配置文件里添加被監(jiān)控的 mariadb 的配置段
vim /usr/local/prometheus/prometheus.yml
35 - job_name: 'agent_mariadb'
36 static_configs:
37 - targets: ['192.168.204.20:9104']
改完配置文件之后,重啟服務(wù)
systemctl restart prometheus.service
netstat -antp | grep 9090
(7)??訪問prometheus服務(wù)器
回到 web 管理界面→點(diǎn) Status→點(diǎn) Targets→可以看到監(jiān)控 mariadb?
192.168.204.18:9090/
10.部署Grafana進(jìn)行展示
Grafana 是一個開源的度量分析和可視化工具,可以通過將采集的數(shù)據(jù)分析,查詢,然后進(jìn)行可視化的展示,并能實(shí)現(xiàn)報警。
下載地址:
https://grafana.com/grafana/download/
(1)??下載安裝Grafana
#使用yum解決依賴關(guān)系 我這邊直接上傳軟件包到opt
yum install -y grafana-7.4.0-1.x86_64.rpm
或
rpm -ivh /opt/grafana-7.3.6-1.x86_64.rpm
systemctl start grafana-server
systemctl enable grafana-server
netstat -natp | grep :3000
瀏覽器訪問:http://192.168.109.19:3000 ,默認(rèn)賬號和密碼為 admin/admin
通過瀏覽器訪問 http:// grafana 服務(wù)器 IP:3000 就到了登錄界面,使用默認(rèn)的 admin 用戶,admin 密碼就可以登陸了。
192.168.204.19:3000/login
(2)??配置數(shù)據(jù)源
下面把 Prometheus 服務(wù)器收集的數(shù)據(jù)做為一個數(shù)據(jù)源添加到 grafana,讓 grafana 可以得到 Prometheus 的數(shù)據(jù)。
點(diǎn)擊增加數(shù)據(jù)源
為此數(shù)據(jù)自定義一個名稱
Prometheus_data
填寫prometheus的IP和port
http://192.168.204.18:9090
Auth模塊是公網(wǎng)傳輸數(shù)據(jù)加密與驗(yàn)證,為了保證安全
15s獲取一次,GET方式
填完之后點(diǎn)擊保存
點(diǎn)擊設(shè)置,選擇Data Source,可以查看到成功添加數(shù)據(jù)源
(3)導(dǎo)入模板
點(diǎn)擊prometheus_data,選擇Dashboards
點(diǎn)擊儀表盤,全部導(dǎo)入
全部導(dǎo)入后,點(diǎn)擊Manage
隨便點(diǎn)擊一個模板
192.168.204.19:3000/
(4)?為數(shù)據(jù)源做數(shù)據(jù)展示
創(chuàng)建Dashboard
數(shù)據(jù)源選擇添加的Prometheus_data
寫上查詢的值,可以多個條件一起,都顯示在同一張圖上
(1分鐘負(fù)載、5分鐘負(fù)載、15分鐘負(fù)載)
自定義名稱,點(diǎn)擊保存
最后在dashboard可以查看到 ,點(diǎn)擊“agent_cpu_load”
注:有多條數(shù)據(jù)的時候,可以在查詢的鍵值后面加個大括號,括號里的條件表示只匹配當(dāng)前的監(jiān)控項(xiàng)。
(5)?導(dǎo)入grafana監(jiān)控面板
瀏覽器訪問:https://grafana.com/grafana/dashboards ,在頁面中搜索 node exporter ,選擇適合的面板,點(diǎn)擊 Copy ID 或者 Download JSON
在 grafana 頁面中,+ Create -> Import ,輸入面板 ID 號或者上傳 JSON 文件,點(diǎn)擊 Load,即可導(dǎo)入監(jiān)控面板
(6)?Grafana 圖形顯示 MySQL 監(jiān)控?cái)?shù)據(jù)
在 grafana 上修改配置文件,并下載安裝 mysql 監(jiān)控的 dashboard(包含相關(guān) json 文件,這些 json 文件可以看作是開發(fā)人員開發(fā)的一個監(jiān)控模板)。
vim /etc/grafana/grafana.ini
[dashboards.json]
enabled = true
path = /var/lib/grafana/dashboards
cd /var/lib/grafana/
#克隆
yum install -y git
git clone git@github.com:percona/grafana-dashboards.git
cp -r grafana-dashboards/dashboards/ /var/lib/grafana/
#重啟grafana
systemctl restart grafana-server.service
在 grafana 上修改配置文件,并下載安裝 mysql 監(jiān)控的 dashboard(包含相關(guān) json 文件,這些 json 文件可以看作是開發(fā)人員開發(fā)的一個監(jiān)控模板)。
點(diǎn) import 導(dǎo)入后,報 prometheus 數(shù)據(jù)源找不到,因?yàn)檫@些 json 文件里默認(rèn)要找的就是叫 Prometheus 的數(shù)據(jù)源,但我們前面建立的數(shù)據(jù)源卻是叫 prometheus_data。
那么請自行把原來的 prometheus_data 源改名為 Prometheus 即可(注意:第一個字母 P 是大寫)。然后再回去刷新一下,就有數(shù)據(jù)了。
(7)?Grafana+onealert報警
Prometheus 報警需要使用 alertmanager 這個組件,而且報警規(guī)則需要手動編寫(對運(yùn)維來說不友好)。所以我這里選用 grafana+onealert 報警。注意:實(shí)現(xiàn)報警前把所有機(jī)器時間同步再檢查一遍。
登陸http://www.onealert.com/→注冊帳戶→登入后臺管理
?
(8)?在Grafana中配置Webhook URL
1、在Grafana中創(chuàng)建Notification channel,選擇類型為Webhook;
2、推薦選中Send on all alerts和Include image,Cloud Alert體驗(yàn)更佳;
3、將第一步中生成的Webhook URL填入Webhook settings Url;
URL格式:
http://api.aiops.com/alert/api/event/grafana/v1/897dcd4c804140098a171d680bf6e26a/ (保存當(dāng)前應(yīng)用,即可獲取完整webhook地址信息)
4、Http Method選擇POST;
5、Send Test&Save;
?在grafana增加通知通道
增加通道
192.168.204.19:3000/
Name: onealert
Type: webhook
Url: (onelert那里產(chǎn)生)
(9)?測試CPU負(fù)載告警
現(xiàn)在可以去設(shè)置一個報警來測試了(這里用前面加的 cpu 負(fù)載監(jiān)控來做測試)
保存后就可以測試了,如果 agent1上的 cpu 負(fù)載還沒有到 0.3,你可以試試 0.1,或者運(yùn)行一些程序把 agent1負(fù)載調(diào)大。
最終的郵件報警效果
二、實(shí)驗(yàn)
1.部署Prometheus
(1)環(huán)境準(zhǔn)備
服務(wù)器類型 | IP地址 | 組件 |
---|---|---|
Prometheus服務(wù)器 | 192.168.204.18 | Prometheus、node_exporter |
grafana服務(wù)器 | 192.168.204.19 | Grafana |
agent服務(wù)器 | 192.168.204.20 | node_exporter |
修改主機(jī)名:
修改地址映射:
關(guān)閉安全機(jī)制
(2)Prometheus部署
prometheus下載地址:
https://prometheus.io/download/
①上傳 prometheus-2.37.0.linux-amd64.tar.gz 到 /opt 目錄中,并解壓
②修改配置文件
修改靜態(tài)模板配置,固定從某個target拉取數(shù)據(jù)
③配置系統(tǒng)啟動文件,設(shè)置開機(jī)自啟
Unit為服務(wù)單元,After為依賴關(guān)系,config.file為配置文件,storage.tsdb.path為數(shù)據(jù)目錄,
storage.tsdb.retention為保存時間,ExecReload為重載
④開啟prometheus,并訪問網(wǎng)頁驗(yàn)證
⑤通過瀏覽器訪問 http:// 服務(wù)器 IP:9090 就可以訪問到 Prometheus 的主界面
⑥默認(rèn)只監(jiān)控了本機(jī)一臺,點(diǎn) Status→點(diǎn) Targets→可以看到只監(jiān)控了本機(jī)
通過 http:// 服務(wù)器 IP:9090/metrics 可以查看到監(jiān)控的數(shù)據(jù):
2.部署Exporters
(1)監(jiān)控遠(yuǎn)程Linux主機(jī)(192.168.204.20)
在遠(yuǎn)程 linux 主機(jī)(被監(jiān)控端 agent)上安裝 node_exporter 組件。
下載地址:
https://prometheus.io/download/
①上傳 node_exporter-1.3.1.linux-amd64.tar.gz 到 /opt 目錄中,并解壓
②配置啟動文件,設(shè)置開機(jī)自啟
③啟動node_exporter
④?通過瀏覽器訪問 http:// 被監(jiān)控端 IP:9100/metrics 就可以查看到 node_exporter 在被監(jiān)控端收集的監(jiān)控信息
修改Prometheus服務(wù)器的配置文件
回到 Prometheus 服務(wù)器的配置文件里添加被監(jiān)控機(jī)器的配置段
在主配置文件后添加這三行,不能加在上面,否則重啟會報錯
取一個job名稱來代表被監(jiān)控的機(jī)器
targets這里改成被監(jiān)控機(jī)器的IP,后面端口接9100
改完配置文件后,重啟服務(wù)?
⑤訪問prometheus服務(wù)器
回到 web 管理界面→點(diǎn) Status→點(diǎn) Targets→可以看到多了一臺監(jiān)控目標(biāo)
注:也可以在本機(jī)安裝 node_exporter,使用上面的方式監(jiān)控本機(jī)。
(2)監(jiān)控遠(yuǎn)程Linux主機(jī)(192.168.204.18)
也可以在遠(yuǎn)程 linux 主機(jī)(監(jiān)控端 prometheus)上安裝 node_exporter 組件,即監(jiān)控本機(jī)。
下載地址:
https://prometheus.io/download/
①上傳 node_exporter-1.3.1.linux-amd64.tar.gz 到 /opt 目錄中,并解壓
②配置啟動文件,設(shè)置開機(jī)自啟
③啟動node_exporter
瀏覽器訪問,可以看到 Node Exporter 采集到的指標(biāo)數(shù)據(jù)
④?通過瀏覽器訪問 http:// 被監(jiān)控端 IP:9100/metrics 就可以查看到 node_exporter 在被監(jiān)控端收集的監(jiān)控信息
修改Prometheus服務(wù)器的配置文件
回到 Prometheus 服務(wù)器的配置文件里添加被監(jiān)控機(jī)器的配置段
在主配置文件后添加這三行,不能加在上面,否則重啟會報錯
取一個job名稱來代表被監(jiān)控的機(jī)器
targets這里改成被監(jiān)控機(jī)器的IP,后面端口接9100
改完配置文件后,重啟服務(wù)?
⑤訪問prometheus服務(wù)器
回到 web 管理界面→點(diǎn) Status→點(diǎn) Targets→可以看到多了一臺監(jiān)控目標(biāo)
2.監(jiān)控遠(yuǎn)程MySQL
在被管理機(jī) agent上安裝 mysqld_exporter 組件
下載地址:
https://prometheus.io/download/
?(1)???安裝mariadb數(shù)據(jù)庫,并授權(quán)
在當(dāng)前數(shù)據(jù)庫中增加授權(quán)
(2)?下載mysqld_exporter組件?
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.0/mysqld_exporter-0.12.0.linux-amd64.tar.gz
(3)安裝mysqld_exporter組件
(4)??添加mysqld_exporter為系統(tǒng)服務(wù)
(5)啟動服務(wù)并監(jiān)聽端口
(6)??修改Prometheus服務(wù)器的配置文件
回到 Prometheus 服務(wù)器的配置文件里添加被監(jiān)控的 mariadb 的配置段
改完配置文件之后,重啟服務(wù)
(7)??訪問prometheus服務(wù)器
回到 web 管理界面→點(diǎn) Status→點(diǎn) Targets→可以看到監(jiān)控 mariadb?
3.部署Grafana進(jìn)行展示
Grafana 是一個開源的度量分析和可視化工具,可以通過將采集的數(shù)據(jù)分析,查詢,然后進(jìn)行可視化的展示,并能實(shí)現(xiàn)報警。
下載地址:
https://grafana.com/grafana/download/
(1)??下載安裝Grafana
通過瀏覽器訪問 http:// grafana 服務(wù)器 IP:3000 就到了登錄界面,使用默認(rèn)的 admin 用戶,admin 密碼就可以登陸了。
(2)??配置數(shù)據(jù)源
下面把 Prometheus 服務(wù)器收集的數(shù)據(jù)做為一個數(shù)據(jù)源添加到 grafana,讓 grafana 可以得到 Prometheus 的數(shù)據(jù)。
點(diǎn)擊增加數(shù)據(jù)源
為此數(shù)據(jù)自定義一個名稱
填寫prometheus的IP和port
http://192.168.204.18:9090
Auth模塊是公網(wǎng)傳輸數(shù)據(jù)加密與驗(yàn)證,為了保證安全
15s獲取一次,GET方式
填完之后點(diǎn)擊保存
點(diǎn)擊設(shè)置,選擇Data Source,可以查看到成功添加數(shù)據(jù)源
(3)導(dǎo)入模板
點(diǎn)擊prometheus_data,選擇Dashboards
點(diǎn)擊儀表盤,全部導(dǎo)入
全部導(dǎo)入后,點(diǎn)擊Manage
隨便點(diǎn)擊一個模板
192.168.204.19:3000/
(4)?為數(shù)據(jù)源做數(shù)據(jù)展示
創(chuàng)建Dashboard
數(shù)據(jù)源選擇添加的Prometheus_data
寫上查詢的值,可以多個條件一起,都顯示在同一張圖上
(1分鐘負(fù)載、5分鐘負(fù)載、15分鐘負(fù)載)
自定義名稱,點(diǎn)擊保存
最后在dashboard可以查看到 ,點(diǎn)擊“agent_cpu_load”
注:有多條數(shù)據(jù)的時候,可以在查詢的鍵值后面加個大括號,括號里的條件表示只匹配當(dāng)前的監(jiān)控項(xiàng)。
(5)?導(dǎo)入grafana監(jiān)控面板
瀏覽器訪問:https://grafana.com/grafana/dashboards ,在頁面中搜索 node exporter ,選擇適合的面板,點(diǎn)擊 Copy ID 或者 Download JSON
在 grafana 頁面中,+ Create -> Import ,輸入面板 ID 號或者上傳 JSON 文件,點(diǎn)擊 Load,即可導(dǎo)入監(jiān)控面板
在頁面中搜索 node exporter
選擇適合的面板,點(diǎn)擊 Copy ID 或者 Download JSON
在 grafana 頁面中,+ Create -> Import
輸入面板 ID 號,點(diǎn)擊 Load
選擇數(shù)據(jù)源并點(diǎn)擊導(dǎo)入,即可導(dǎo)入監(jiān)控面板
此時就可以監(jiān)控到這臺機(jī)子的信息了(192.168.204.20)
也可以切換查詢(192.168.204.18)
點(diǎn)擊編寫
可以看到實(shí)際上都是通過PromQL語句來查詢的
(6)?Grafana 圖形顯示 MySQL 監(jiān)控?cái)?shù)據(jù)
在 grafana 上修改配置文件,并下載安裝 mysql 監(jiān)控的 dashboard(包含相關(guān) json 文件,這些 json 文件可以看作是開發(fā)人員開發(fā)的一個監(jiān)控模板)。
在 grafana 上修改配置文件,并下載安裝 mysql 監(jiān)控的 dashboard(包含相關(guān) json 文件,這些 json 文件可以看作是開發(fā)人員開發(fā)的一個監(jiān)控模板)。
點(diǎn) import 導(dǎo)入后,報 prometheus 數(shù)據(jù)源找不到,因?yàn)檫@些 json 文件里默認(rèn)要找的就是叫 Prometheus 的數(shù)據(jù)源,但我們前面建立的數(shù)據(jù)源卻是叫 prometheus_data。
那么請自行把原來的 prometheus_data 源改名為Metrics 即可(注意:第一個字母 M 是大寫)。然后再回去刷新一下,就有數(shù)據(jù)了。
修改前:
修改后:
保存提交
(7)?Grafana+onealert報警
Prometheus 報警需要使用 alertmanager 這個組件,而且報警規(guī)則需要手動編寫(對運(yùn)維來說不友好)。所以我這里選用 grafana+onealert 報警。注意:實(shí)現(xiàn)報警前把所有機(jī)器時間同步再檢查一遍。
登陸https://caweb.aiops.com/→注冊帳戶→登入后臺管理
下拉選擇Grafana,點(diǎn)擊進(jìn)行配置
自定義一個名稱
保存之后獲得key
(8)?在Grafana中配置Webhook URL
①在Grafana中創(chuàng)建Notification channel,選擇類型為Webhook
②推薦選中Send on all alerts和Include image,Cloud Alert體驗(yàn)更佳
③將第一步中生成的Webhook URL填入Webhook settings Url:
④Http Method選擇POST
⑤?Send Test&Save
可以先“Test”測試一下報警媒介是否ok,然后再點(diǎn)擊保存
測試成功(自動去重)
保存,創(chuàng)建成功
(9)?測試CPU負(fù)載告警
現(xiàn)在可以去設(shè)置一個報警來測試了(這里用前面加的 cpu 負(fù)載監(jiān)控來做測試)
自定義一個名稱,類似于zabbix觸發(fā)器名稱;
IS ABOVE 這里填0.3,按實(shí)際使用也可以填0.1,表示當(dāng)cpu負(fù)載平均值大于0.1就發(fā)出報警
點(diǎn)通知,選擇之前定義好的onealert通道,自定義通知內(nèi)容
保存后就可以測試了,如果 agent上的 cpu 負(fù)載還沒有到 0.3,你可以試試 0.1,或者運(yùn)行一些程序把 agent負(fù)載調(diào)大(比如壓力測試或import一個新模板)。
點(diǎn)擊測試
平臺收到報警信息:
?最終的微信報警效果:?
?最終的郵件報警效果:?
三、問題
1.Prometheus和Zabbix區(qū)別
(1)監(jiān)控的維度
①監(jiān)控的廣度
②監(jiān)控的深度
③?監(jiān)控選型
(2)區(qū)別
和Zabbix類似,Prometheus也是一個近年比較火的開源監(jiān)控框架,和Zabbix不同之處在于Prometheus相對更靈活點(diǎn),模塊間比較解耦,比如告警模塊、代理模塊等等都可以選擇性配置。服務(wù)端和客戶端都是開箱即用,不需要進(jìn)行安裝。zabbix則是一套安裝把所有東西都弄好,很龐大也很繁雜。
zabbix的客戶端agent可以比較方便的通過腳本來讀取機(jī)器內(nèi)數(shù)據(jù)庫、日志等文件來做上報。而Prometheus的上報客戶端則分為不同語言的SDK和不同用途的exporter兩種,比如如果你要監(jiān)控機(jī)器狀態(tài)、mysql性能等,有大量已經(jīng)成熟的exporter來直接開箱使用,通過http通信來對服務(wù)端提供信息上報(server去pull信息);而如果你想要監(jiān)控自己的業(yè)務(wù)狀態(tài),那么針對各種語言都有官方或其他人寫好的sdk供你使用,都比較方便,不需要先把數(shù)據(jù)存入數(shù)據(jù)庫或日志再供zabbix-agent采集。
zabbix的客戶端更多是只做上報的事情,push模式。而Prometheus則是客戶端本地也會存儲監(jiān)控?cái)?shù)據(jù),服務(wù)端定時來拉取想要的數(shù)據(jù)。
界面來說zabbix比較陳舊,而prometheus比較新且非常簡潔,簡潔到只能算一個測試和配置平臺。要想獲得良好的監(jiān)控體驗(yàn),搭配Grafana還是二者的必走之路。
2.如何防止告警信息轟炸
(1)解決方法
1)alertmanagr: prometheus可以生成告警信息,但是不能直接提供告警,需要使用一個外置的組件alertmanager來進(jìn)行告警,emailetctif優(yōu)勢在于,收斂、支持靜默、去重、可以防止告警信息的轟炸
2)把這條告警規(guī)則中的支持靜默開啟,讓它必須,配置文件里直接改alertmanager改一個單詞
3.監(jiān)控服務(wù)有哪4個黃金指標(biāo)
(1)指標(biāo)
4個黃金指標(biāo)可以在服務(wù)級別幫助衡量終端用戶體驗(yàn)、服務(wù)中斷、業(yè)務(wù)影響等層面的問題。主要關(guān)注與以下四種類型的指標(biāo):延遲,通訊量,錯誤以及飽和度:
(2)延遲:服務(wù)請求所需時間
記錄用戶所有請求所需的時間,重點(diǎn)是要區(qū)分成功請求的延遲時間和失敗請求的延遲時間。 例如在數(shù)據(jù)庫或者其他關(guān)鍵禍端服務(wù)異常觸發(fā)HTTP 500的情況下,用戶也可能會很快得到請求失敗的響應(yīng)內(nèi)容,如果不加區(qū)分計(jì)算這些請求的延遲,可能導(dǎo)致計(jì)算結(jié)果與實(shí)際結(jié)果產(chǎn)生巨大的差異。除此以外,在微服務(wù)中通常提倡“快速失敗”,開發(fā)人員需要特別注意這些延遲較大的錯誤,因?yàn)檫@些緩慢的錯誤會明顯影響系統(tǒng)的性能,因此追蹤這些錯誤的延遲也是非常重要的。
(3)通訊量:監(jiān)控當(dāng)前系統(tǒng)的流量,用于衡量服務(wù)的容量需求
流量對于不同類型的系統(tǒng)而言可能代表不同的含義。例如,在HTTP REST API中, 流量通常是每秒HTTP請求數(shù);
(4)錯誤:監(jiān)控當(dāng)前系統(tǒng)所有發(fā)生的錯誤請求,衡量當(dāng)前系統(tǒng)錯誤發(fā)生的速率
對于失敗而言有些是顯式的(比如, HTTP 500錯誤),而有些是隱式(比如,HTTP響應(yīng)200,但實(shí)際業(yè)務(wù)流程依然是失敗的)。
對于一些顯式的錯誤如HTTP 500可以通過在負(fù)載均衡器(如Nginx)上進(jìn)行捕獲,而對于一些系統(tǒng)內(nèi)部的異常,則可能需要直接從服務(wù)中添加鉤子統(tǒng)計(jì)并進(jìn)行獲取。
(5)飽和度:衡量當(dāng)前服務(wù)的飽和度
主要強(qiáng)調(diào)最能影響服務(wù)狀態(tài)的受限制的資源。 例如,如果系統(tǒng)主要受內(nèi)存影響,那就主要關(guān)注系統(tǒng)的內(nèi)存狀態(tài),如果系統(tǒng)主要受限與磁盤I/O,那就主要觀測磁盤I/O的狀態(tài)。因?yàn)橥ǔG闆r下,當(dāng)這些資源達(dá)到飽和后,服務(wù)的性能會明顯下降。同時還可以利用飽和度對系統(tǒng)做出預(yù)測,比如,“磁盤是否可能在4個小時候就滿了”。
4.訪問prometheus服務(wù)器被監(jiān)控端agent服務(wù)器狀態(tài)報錯
(1)? 報錯
(2)原因分析
配置文件錯誤
(3)解決方法
修改配置文件被監(jiān)控機(jī)器的IP
修改前:
修改后:
重啟
成功:
5.mysqld_exporter如何指定啟動參數(shù)
?(1 ) 參數(shù)
mysqld_exporter常用啟動參數(shù):
1) exporter版本>0.10.0時:
--collect.auto_increment.columns
--no-collect.auto_increment.columns
2)exporter版本<=0.10.0時:
-collect.auto_increment.columns
-collect.auto_increment.columns=[true|false]
通過以下參數(shù)控制收集數(shù)據(jù):
通用啟動參數(shù):
(2)SSL配置
如果MySQL服務(wù)器支持SSL,則需要指定一個CA信任庫來驗(yàn)證服務(wù)器的信任鏈,并為SSL連接的客戶端指定SSL密鑰對。
要將mysqld_exporter配置為使用自定義CA證書,請將以下內(nèi)容添加到.my.cnf的配置文件中:
ssl-ca=/path/to/ca/file
要指定客戶端SSL密鑰對,請將以下內(nèi)容添加到cnf中。
ssl-key=/path/to/ssl/client/key
ssl-cert=/path/to/ssl/client/cert
僅在mysql cnf文件中支持自定義SSL配置,如果在環(huán)境變量DATA_SOURCE_NAME中設(shè)置mysql服務(wù)器的數(shù)據(jù)源名稱,則不支持自定義SSL配置。
四、總結(jié)
Prometheus收集k8s/服務(wù)的三種方式
1)Exporters(指標(biāo)暴露器):收集節(jié)點(diǎn)的信息、將數(shù)據(jù)格式化或轉(zhuǎn)化為promtheus可識別的http這種轉(zhuǎn)化方式/鏡像拉取方式
2)Instrumentation (應(yīng)用內(nèi)置的指標(biāo)暴露器): 收集有內(nèi)置指標(biāo)暴露器的信息
3)Pushgateway : 收集短周期的數(shù)據(jù)
報警不成功的可能原因:
?
各服務(wù)器之間時間不同步,這樣時序數(shù)據(jù)會出問題,也會造成報警出問題
必須寫通知內(nèi)容,留空內(nèi)容是不會發(fā)報警的
修改完報警配置后,記得要點(diǎn)右上角的保存
保存配置后,需要由 OK 狀態(tài)變?yōu)?alerting 狀態(tài)才會報警(也就是說,你配置保存后,就已經(jīng)是 alerting 狀態(tài)是不會報警的)
grafana 與 onealert 通信有問題
各組件默認(rèn)端口:
node 默認(rèn)端口:9100
mysql默認(rèn)端口:9104
redis 默認(rèn)端口:9121
process默認(rèn)端口:9256
alertmanager默認(rèn)端口:9093
指標(biāo)類型 (metric type):
Prometheus 使用4種方法來描述監(jiān)視的指標(biāo):
1)Counter
計(jì)數(shù)器,用于保存計(jì)數(shù)型數(shù)據(jù),如網(wǎng)站訪問量等。
2)Gauge
儀表盤,用于存儲有著起伏特征的指標(biāo)數(shù)據(jù),如空間空閑大小等。
3)Histogram
直方圖,在一段時間范圍內(nèi)對數(shù)據(jù)進(jìn)行采樣,并將其計(jì)入可配置的存儲中,后續(xù)可通過制定區(qū)間篩選樣本,也可以統(tǒng)計(jì)樣本總數(shù),最后一般將數(shù)據(jù)展示為直方圖。
4)Summary
摘要,Histogram的擴(kuò)展類型,用于表示一段時間內(nèi)的數(shù)據(jù)采樣結(jié)果(通常是請求持續(xù)時間或響應(yīng)大小等),但它直接存儲了分位數(shù)(通過客戶端計(jì)算,然后展示出來),而不是通過區(qū)間計(jì)算
作業(yè)(job)和實(shí)例(Instance):
1)Instance
實(shí)例可以簡單的理解為就是一個target,網(wǎng)絡(luò)客戶端,實(shí)際上在多核心的服務(wù)器上,一個instance就代表一個cpu核心;
2)job
通常,具有類似功能的Instance的集合稱為一個job。例如一個nginx集群中所有的nginx進(jìn)程。
PromQL:
1)內(nèi)置的數(shù)據(jù)查詢語言,支持用戶進(jìn)行實(shí)時的數(shù)據(jù)查詢及聚合操作
2)PromQL支持處理兩種向量,并內(nèi)置提供了一組用于數(shù)據(jù)處理的函數(shù)
即使向量:最近一次的時間戳上跟蹤的數(shù)據(jù)指標(biāo)
時間范圍向量:指定范圍時間內(nèi)的所有時間戳上的數(shù)指標(biāo)
Alerts:文章來源:http://www.zghlxwxcb.cn/news/detail-727838.html
1)抓取到異常值后,Prometheus 支持通過報警(alert)機(jī)制向用戶發(fā)送反饋,以便用戶能夠及時采取應(yīng)對措施。
2)Prometheus server 僅負(fù)責(zé)生成報警指示,具體的報警行為由另一個獨(dú)立的應(yīng)用程序AlertManager負(fù)責(zé)。
*報警指示由Prometheus server 基于用戶提供的“報警規(guī)則”周期性計(jì)算生成;
*AlertManager接收到Prometheus server發(fā)來的報警指示后,基于用戶定義的報警路由(route)向接收人(receivers)發(fā)送報警信息;
grafana常用模板編號記錄:文章來源地址http://www.zghlxwxcb.cn/news/detail-727838.html
第一部分
監(jiān)控容器
推薦ID
3146
8685
10000
8588
315
第二部分
監(jiān)控物理機(jī)/虛擬機(jī)(linux)
推薦ID
8919
9276
監(jiān)控物理機(jī)/虛擬機(jī)(windows)
推薦ID
10467
10171
2129
第三部分
監(jiān)控協(xié)議http/icmp/tcp/dns/
http監(jiān)控某個網(wǎng)站
icmp監(jiān)控某臺機(jī)器
tcp監(jiān)控某個端口
dns監(jiān)控dns
推薦ID
9965
到了這里,關(guān)于云原生監(jiān)控系統(tǒng)Prometheus:基于Prometheus構(gòu)建智能化監(jiān)控告警系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!