監(jiān)控利器之 Prometheus

一直以來急迂,我們會在項目中,使用 APM 去監(jiān)控應(yīng)用的狀況僚碎,分析性能等,這些工具很有效卷中,而且不侵入業(yè)務(wù)渊抽,不需要埋點。

然而十减,有些需求愤估,是 APM 的監(jiān)控滿足不了的,比如應(yīng)用業(yè)務(wù)指標由驹。

監(jiān)控模式

目前昔园,采集指標有兩種方式,一種是『推』润樱,另一種就是『拉』:

推的代表有 ElasticSearch羡棵,InfluxDB,OpenTSDB 等店展,需要你從程序中將指標使用 TCP台妆,UDP 等方式推送至相關(guān)監(jiān)控應(yīng)用玖媚,只是使用 TCP 的話盅安,一旦監(jiān)控應(yīng)用掛掉或存在瓶頸震缭,容易對應(yīng)用本身產(chǎn)生影響糖赔,而使用 UDP 的話,雖然不用擔(dān)心監(jiān)控應(yīng)用逝变,但是容易丟數(shù)據(jù)奋构。

拉的代表,主要代表就是 Prometheus宴咧,讓我們不用擔(dān)心監(jiān)控應(yīng)用本身的狀態(tài)径缅。而且,可以利用 DNS-SRV 或者 Consul 等服務(wù)發(fā)現(xiàn)功能就可以自動添加監(jiān)控。

當(dāng)然兆旬,InfluxDB 加上 collector,或者 ES 加上 metricbeat 也可以變?yōu)?『拉』怎栽,而 Prometheus 加上 Push Gateway 也可以變?yōu)?『推』。

接下來脚祟,我們主要介紹下 Prometheus强饮。

Prometheus

『普羅米修斯』,也是希臘之神行您,取義『先見之明』,應(yīng)該就是監(jiān)控的意義所在吧剪廉。

它跟 k8s 一樣,也是依據(jù) Google 內(nèi)部的應(yīng)用原理設(shè)計來的捌斧,可以看作是 Google 內(nèi)部監(jiān)控系統(tǒng) Borgmon 的一個實現(xiàn)。

架構(gòu)圖如下(來自 Prometheus 官方文檔):

Prometheus 可以從配置或者用服務(wù)發(fā)現(xiàn)妇押,去調(diào)用各個應(yīng)用的 metrics 接口洞难,來采集數(shù)據(jù)队贱,然后存儲在硬盤中,而如果是基礎(chǔ)應(yīng)用比如數(shù)據(jù)庫柱嫌,負載均衡器等,可以在相關(guān)的服務(wù)中安裝 Exporters 來提供 metrics 接口供 Prometheus 拉取与学。

采集到的數(shù)據(jù)有兩個去向嘉抓,一個是報警,另一個是可視化卵佛。

下面將一一介紹敞斋。

Metrics 格式

<metric name>{<label name>=<label value>, ...}

各個部分需符合相關(guān)的正則表達式

  • metric name: [a-zA-Z_:][a-zA-Z0-9_:]*
  • label name: [a-zA-Z0-9_]*
  • label value: .* (即不限制)

需要注意的是植捎,label value 最好使用枚舉值,而不要使用無限制的值焰枢,比如用戶 ID济锄,Email 等,不然會消耗大量內(nèi)存拟淮,也不符合指標采集的意義很泊。

Metrics 接口的實現(xiàn)

大部分語言都有提供客戶端沾谓,比如 Node.js 的客戶端 prom-client

npm install prom-client --save

目前戳鹅,這個客戶端提供了完整功能,可以在應(yīng)用中埋點采集數(shù)據(jù)妇穴,比如

  • 今天注冊了多少用戶隶债,收入了多少錢,可以使用 Counter;
  • Node 內(nèi)存以及 CPU 的變化瞒滴,可以使用 Gause赞警;
  • API 接口響應(yīng)時間的統(tǒng)計,可以使用 Histogram 或者 Summary世剖,前者可以按照具體數(shù)值笤虫,而后者可以按照百分比去統(tǒng)計響應(yīng)時長;

對了境蜕,這個包內(nèi)部提供了采集默認數(shù)據(jù)的功能凌停,比如 Node 相關(guān)的指標:

const promClient = require('prom-client');

promClient.collectDefaultMetrics({
    timeout: 5000,
});

報警

你可以根據(jù)業(yè)務(wù)需求售滤,來定制相關(guān)的規(guī)則去報警完箩,然后關(guān)鍵就來了,你是否在傳統(tǒng)的短信或者郵件報警中感到厭煩呢阻逮?

一方面秩彤,當(dāng)線上問題出現(xiàn)的時候事哭,我們會收到大量的報警消息瓜富,而其中很大一部分是重復(fù)的;另一方面谤辜,收到?jīng)]用的報警价捧,或者報警級別不高,導(dǎo)致這時候如果有重要的報警渠欺,會被我們忽略椎眯。

Prometheus 的 AlertManager 提供了解決這些問題的各種高級報警功能。

  • 報警分組:將報警分組舔稀,當(dāng)報警大量出現(xiàn)的時候掌测,只會發(fā)一條消息告訴你數(shù)據(jù)庫掛了的情況出現(xiàn)了 100 次,而不是用 100 條推送轟炸你夜郁;
  • 報警抑制:顯然粘勒,當(dāng)數(shù)據(jù)庫出問題的時候庙睡,其它的應(yīng)用可肯定會出問題,這時候你可能不會需要其它的不相干的報警短信乘陪,這個功能將真正有用的信息及時通知你啡邑;
  • 報警靜默:一些不重要的報警,可以完全忽略贵扰,因此也就沒有必要通知;

報警通知的方式拔鹰,目前可以通過 webhook, email 等方式列肢,估計微信或者釘釘也可以,我目前使用的是 slack拴还。

可視化

首選當(dāng)然是 Grafana欧聘,Prometheus 自己放棄了 PromDash 的可視化工具,而專注于監(jiān)控數(shù)據(jù)采集與分析怀骤。在 Grafana 中配置 Prometheus 也很簡單蒋伦,在配置好數(shù)據(jù)源之后,可以直接創(chuàng)建圖表痕届。

需要注意的是研叫,你會需要用到 Prometheus 專用的查詢語言去配置數(shù)據(jù),其中如果涉及到的圖表內(nèi)容太多渊啰,你可能會需要用到 Grafana 的模板:

  • label_values(label):全局中 label 值的集合渤昌;
  • label_values(metric, label):某個 metric 的 label 值的集合走搁;
  • metrics(metric):metric 的正則表達集合,返回全部匹配的 metric忌栅;
  • query_result(query):返回查詢集合;

Ref

原鏈接:https://xizhibei.github.io/2017/08/06/monitoring-with-prometheus

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瑞驱,隨后出現(xiàn)的幾起案子唤反,更是在濱河造成了極大的恐慌,老刑警劉巖肠缨,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盏阶,死亡現(xiàn)場離奇詭異名斟,居然都是意外死亡,警方通過查閱死者的電腦和手機漾橙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門楞卡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒋腮,“玉大人,你說我怎么就攤上這事池摧∽魍” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵创葡,是天一觀的道長绢慢。 經(jīng)常有香客問我,道長骚露,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任焰扳,我火速辦了婚禮蓝翰,結(jié)果婚禮上女嘲,老公的妹妹穿的比我還像新娘。我一直安慰自己爆雹,他們只是感情好愕鼓,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布菇晃。 她就那樣靜靜地躺著,像睡著了一般驻子。 火紅的嫁衣襯著肌膚如雪估灿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天馅袁,我揣著相機與錄音域慷,去河邊找鬼。 笑死汗销,一個胖子當(dāng)著我的面吹牛犹褒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弛针,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叠骑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钦奋?” 一聲冷哼從身側(cè)響起座云,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎付材,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厌衔,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡璧帝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了富寿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睬隶。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖页徐,靈堂內(nèi)的尸體忽然破棺而出苏潜,到底是詐尸還是另有隱情,我是刑警寧澤变勇,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布恤左,位于F島的核電站,受9級特大地震影響搀绣,放射性物質(zhì)發(fā)生泄漏飞袋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一链患、第九天 我趴在偏房一處隱蔽的房頂上張望巧鸭。 院中可真熱鬧,春花似錦麻捻、人聲如沸纲仍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巷折。三九已至,卻和暖如春崖咨,著一層夾襖步出監(jiān)牢的瞬間锻拘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工击蹲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留署拟,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓歌豺,卻偏偏與公主長得像推穷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子类咧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容