常見監(jiān)控告警系統(tǒng)對比分析

目錄

  • 監(jiān)控告警系統(tǒng)的總體介紹
  • 常見的監(jiān)控告警系統(tǒng)介紹
    • Prometheus
      • 架構
      • Prometheus Server
      • Metric Type
      • Prometheus Exporter
    • AlertManager
      • 架構
    • Open-Falcon
      • 架構
      • Data model
      • Data collection
      • Alert
      • Heartbeat server
    • Zabbix
      • Zabbix組件圖
        • Zabbix Server
        • Zabbix Database
        • Zabbix Web
        • Proxy
        • Agent
    • InfluxData
      • TICK技術棧
      • InfluxDB metric type
      • Kapacitor
    • Bosun
    • Unisphere Unity300
  • 對比分析
  • References

監(jiān)控告警系統(tǒng)的總體介紹

監(jiān)控告警系統(tǒng)的實現(xiàn)各有不同仗颈,大致如下所述笔链。

  • 在數(shù)據(jù)采集方面斟叼,有的監(jiān)控系統(tǒng)采用主動采集方式幻锁,有的監(jiān)控系統(tǒng)采用被動上報方式公黑,有的監(jiān)控系統(tǒng)采用上述兩者兼?zhèn)涞姆绞健?/li>
  • 在數(shù)據(jù)傳輸方面,有的監(jiān)控系統(tǒng)采用socket傳輸稿茉,有的監(jiān)控系統(tǒng)采用HTTP傳輸。
  • 在數(shù)據(jù)存儲方面拳亿,有的監(jiān)控系統(tǒng)將監(jiān)控數(shù)據(jù)保存在MySQL中,有的監(jiān)控系統(tǒng)將數(shù)據(jù)保存在MongoDB愿伴,OpenTSDB, InfluxDB等時序數(shù)據(jù)庫中肺魁。

但是,所有的監(jiān)控告警系統(tǒng)的核心都是采集和處理數(shù)據(jù)隔节。

監(jiān)控系統(tǒng)通常由指標采集子系統(tǒng)和數(shù)據(jù)處理子系統(tǒng)組成鹅经。

  • 指標采集子系統(tǒng)主要負責信息采集,過濾怎诫,匯總和存儲瘾晃。
  • 數(shù)據(jù)處理子系統(tǒng)主要負責數(shù)據(jù)分析,展現(xiàn)幻妓,預警蹦误,告警動作觸發(fā)和告警等。



常見的監(jiān)控告警系統(tǒng)介紹

常見的監(jiān)控告警系統(tǒng)主要有Prometheus肉津,Prometheus AlertManager强胰,Zabbix,Open-Falcon妹沙, Bosun偶洋, InfluxData, Unity300等距糖。下面分別進行簡單的介紹和對比分析玄窝。

Prometheus

Prometheus是由SoundCloud公司開發(fā)的開源告警系統(tǒng)并且?guī)r序數(shù)據(jù)庫牵寺,基于Go語言開發(fā)。

架構

Prometheus的基本原理是通過HTTP周期性地抓取被監(jiān)控組件的狀態(tài)哆料,任意組件只要提供對應的HTTP接口并且符合Prometheus定義的數(shù)據(jù)格式缸剪,就可以接入Prometheus監(jiān)控。其架構圖及其生態(tài)系統(tǒng)組件圖如下所示东亦。


Prometheus Server

Prometheus Server是Prometheus的核心,根據(jù)配置完成數(shù)據(jù)采集唬渗,服務發(fā)現(xiàn)以及數(shù)據(jù)存儲 典阵,推送告警,以及提供PromQL查詢語言的支持镊逝。

  • Prometheus Server負責定時在目標上抓去Metrics數(shù)據(jù)壮啊,每個抓取目標都需要暴露一個HTTP服務接口用于Prometheus定時抓取。這種調用監(jiān)控對象獲取監(jiān)控數(shù)據(jù)的方式成為Pull撑蒜。Pull方式可以降低耦合歹啼,通過Pull方式,被采集端無須感知監(jiān)控系統(tǒng)的存在座菠,完全獨立于監(jiān)控系統(tǒng)之外狸眼,這樣數(shù)據(jù)的采集完全由監(jiān)控系統(tǒng)控制,增強了整個系統(tǒng)的穩(wěn)定性浴滴。
  • Prometheus Server通過如下兩種方式獲取監(jiān)控對象拓萌。
    • 通過配置文件,文本文件等進行靜態(tài)配置升略。
    • 支持Kubernetes微王,file_sd,Consul等方式進行動態(tài)發(fā)現(xiàn)品嚣。
  • Storage通過一定的規(guī)則清理和整理數(shù)據(jù)炕倘,并把得到的結果存儲到新的時間序列中,主要有兩種存儲方式翰撑。
    • 本地存儲罩旋。通過Prometheus自帶的時序數(shù)據(jù)庫保存到本地磁盤。
    • 遠端存儲额嘿。通過中間層的適配器的轉化瘸恼,目前Prometheus支持OpenTSDB, InfluxDB册养,ElasticSearch等后端存儲东帅。
  • Prometheus通過PromQL和其他API可視化地展示收集的數(shù)據(jù)球拦。
  • AlertManager是獨立于Prometheus的一個組件靠闭,在觸發(fā)了預先設置在Prometheus中的告警規(guī)則后帐我,Prometheus便會push告警信息到AlertManager。

Metric Type

Prometheus的所有監(jiān)控指標(Metric)被統(tǒng)一定義為:

<metric_name>{<label_name>=<label_value>, ...}

其中指標名稱說明指標的含義愧膀,標簽可以體現(xiàn)指標的維度特征拦键,用于過濾和聚合。

Prometheus的Client Library提供度量的四種基本類型包括: Counter(計數(shù)器), Gauge(儀表盤), Histogram(柱狀圖), Summary(概要)檩淋。

Prometheus Exporter

AlertManager

Alertmanager作為一個獨立的組件芬为,負責接收并處理來自Prometheus Server(也可以是其它的客戶端程序)的告警信息。Alertmanager可以對這些告警信息進行進一步的處理蟀悦,比如當接收到大量重復告警時能夠消除重復的告警信息媚朦,同時對告警信息進行分組并且路由到正確的通知方,Prometheus內置了對郵件日戈,Slack等多種通知方式的支持询张,同時還支持與Webhook的集成,以支持更多定制化的場景浙炼。同時AlertManager還提供了靜默和告警抑制機制來對告警通知行為進行優(yōu)化份氧。

  1. 客戶端通過POST請求向AlertManager推送告警信息。
  2. 每條告警信息中的labels可用于唯一識別告警信息并用于去重弯屈。
[
  {
    "labels": {
      "alertname": "<requiredAlertName>",
      "<labelname>": "<labelvalue>",
      ...
    },
    "annotations": {
      "<labelname>": "<labelvalue>",
    },
    "startsAt": "<rfc3339>",
    "endsAt": "<rfc3339>",
    "generatorURL": "<generator_url>"
  },
  ...
]

架構


AlertManager主要分為兩個部分蜗帜,路由(router)和接收器(receiver)。告警消息先被經(jīng)過路由樹季俩,然后被分配到對應的接收器中钮糖。路由樹是由預先設定的路由規(guī)則生成的。其高可用架構如上圖所示酌住,具體流程如下:

  1. Prometheus會通過調用AlertManager提供的告警接口將原始的告警消息發(fā)送到AlertManager店归。
  2. AlertManager的API除了接收告警,還接收靜默請求酪我,將其分別保存到各自的provider里消痛。
  3. provider提供了一個訂閱(subscribe)接口,這樣Dispatcher組件便可以獲取告警數(shù)據(jù)都哭,并對數(shù)據(jù)進行分組秩伞,通過用戶預先設置的規(guī)則進入告警抑制階段或靜默階段。
  4. 如果通過了上面的告警靜默階段欺矫,則進入路由分發(fā)階段纱新,最終發(fā)送通知。

Open-Falcon

Open-Falcon是小米公司開源的一款監(jiān)控與告警系統(tǒng)穆趴,已被多家國內互聯(lián)網(wǎng)公司所使用脸爱,基于Go語言開發(fā)。

架構

Data model

open-falcon采用和opentsdb相同的數(shù)據(jù)格式:metric未妹、endpoint加多組key value tags簿废。例如:

{
    metric: load.1min,
    endpoint: open-falcon-host,
    tags: srv=falcon,idc=aws-sgp,group=az1,
    value: 1.5,
    timestamp: `date +%s`,
    counterType: GAUGE,
    step: 60
}

Data collection

falcon-agent用于采集各項基礎監(jiān)控數(shù)據(jù)指標空入,主動上報,不需要用戶在server做任何配置族檬。falcon-agent還可以執(zhí)行用戶自定義的插件返回的數(shù)據(jù)歪赢。同時falcon-agent提供了一個proxy-gateway,用戶可以方便的通過http接口单料,push數(shù)據(jù)到本機的gateway埋凯,gateway會幫忙高效率的轉發(fā)到server端。

transfer接收客戶端發(fā)送的數(shù)據(jù)扫尖,做一些數(shù)據(jù)規(guī)整递鹉,檢查之后,轉發(fā)到多個后端系統(tǒng)去處理藏斩。在轉發(fā)到每個后端業(yè)務系統(tǒng)的時候,transfer會根據(jù)一致性hash算法却盘,進行數(shù)據(jù)分片狰域,來達到后端業(yè)務系統(tǒng)的水平擴展。transfer目前支持三種業(yè)務后端黄橘,分別為judge兆览、graph、opentsdb塞关。其中judge是告警判定組件抬探,graph是數(shù)據(jù)存儲、歸檔帆赢、查詢組件小压,opentsdb是開源的時間序列數(shù)據(jù)存儲服務。

Alert

Judge組件用戶告警的判定椰于。用戶在web portal來配置相關的報警策略怠益,存儲在MySQL中。heartbeat server 會定期加載MySQL中的內容瘾婿。judge也會定期和heartbeat server保持溝通蜻牢,來獲取相關的告警策略。

Heartbeat server

heartbeat sever從數(shù)據(jù)庫中加載模板策略偏陪,根據(jù)模板繼承抢呆、模板項覆蓋、報警動作覆蓋笛谦、模板和hostGroup綁定抱虐,計算出最終關聯(lián)到每個endpoint的告警策略,提供給judge組件來使用揪罕。

Zabbix

Zabbix 是由 Alexei Vladishev 開發(fā)的一種網(wǎng)絡監(jiān)視梯码、管理系統(tǒng)宝泵,支持多種采集方式和采集客戶端,同時支持SNMP轩娶,IPMI儿奶,JMX,Telnet鳄抒,SSH等多種協(xié)議闯捎,它將采集到的數(shù)據(jù)存放到數(shù)據(jù)庫中,然后對其進行分析整理许溅,如果符合告警規(guī)則瓤鼻,則觸發(fā)相應的告警。

Zabbix組件圖

Zabbix Server

Zabbix的核心組件贤重,由C語言編寫茬祷,主要負責接收Agent發(fā)送的監(jiān)控信息,并進行匯總存儲并蝗。Zabbix Server主要包括三個方面的工作祭犯。

  1. 設備注冊。
    • 手動配置Agent地址滚停。
    • 自動發(fā)現(xiàn)機制沃粗。
  2. 數(shù)據(jù)收集。采集到數(shù)據(jù)首先會被放置在內存中键畴,然后被批量保存在數(shù)據(jù)庫中最盅。
    • 主動收集
    • 被動接收
  3. 定期的數(shù)據(jù)清理和告警觸發(fā)。

Zabbix Database

用于存儲配置信息以及收集的監(jiān)控數(shù)據(jù)起惕。后端數(shù)據(jù)庫支持MySQL涡贱,PostgreSQL,Oracle等疤祭,并提供Zabbix Web頁面的數(shù)據(jù)查詢方式盼产。由于采用關系型數(shù)據(jù)庫存儲時序數(shù)據(jù),所以Zabbix在監(jiān)控大規(guī)模集群時常常在數(shù)據(jù)存儲方面捉襟見肘勺馆。

Zabbix Web

Zabbix的GUI組件戏售,由PHP編寫。通常于Server運行在同一臺主機上草穆。提供監(jiān)控數(shù)據(jù)的展現(xiàn)和系統(tǒng)配置灌灾,主要配置包括監(jiān)控模板,告警等悲柱。

Proxy

主要解決兩個問題锋喜。

  • Server和Agent之間網(wǎng)絡不通。
  • 大規(guī)模部署時減輕Server的壓力。

Agent

部署在被監(jiān)控主機上嘿般,負責收集本地數(shù)據(jù)并發(fā)往Server端或Proxy端段标,Agent端會啟動一個Agentd的守護進程。

  • 主動
  • 被動

InfluxData

TICK技術棧

TICK技術棧是InfluxData 平臺提供的監(jiān)控方案炉奴,代表了用于解決時序數(shù)據(jù)庫問題的四個組件:Telegraf(數(shù)據(jù)收集器)逼庞、InfluxDB(時序數(shù)據(jù)庫)、Chronograf(可視化 UI)和 Kapacitor(處理和監(jiān)控服務)瞻赶。



InfluxDB metric type

InfluxDB與傳統(tǒng)數(shù)據(jù)庫的比較

InfluxDB MySQL
database 數(shù)據(jù)庫
measurement 數(shù)據(jù)庫中的表
points 表里面的一行數(shù)據(jù)

InfluxDB的數(shù)據(jù)類型


<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

InfluxDB數(shù)據(jù)的構成:Point由時間戳(time)赛糟、數(shù)據(jù)(field)、標簽(tags)組成砸逊。

Pointer屬性 傳統(tǒng)數(shù)據(jù)庫中的概念
fields 各種記錄值(沒有索引的屬性)也就是記錄的值:溫度璧南, 濕度
tags 各種有索引的屬性:地區(qū),海拔
time 每個數(shù)據(jù)記錄時間师逸,是數(shù)據(jù)庫中的主索引(會自動生成)

Kapacitor

Kapacitor 是TICK技術棧的告警服務司倚,用戶通過tickScript腳本來對時序數(shù)據(jù)庫當中的數(shù)據(jù)進行過濾,篩選篓像,批處理等進行告警对湃,告警信息可以通過日志保存在本地,或回插到InfluxDB遗淳,還可以直接在告警產生后發(fā)起http請求到指定地址,kapacitor支持數(shù)據(jù)流(stream)和批處理(batch)數(shù)據(jù)心傀。

kapacitor是一個腳本定義告警規(guī)則服務屈暗,與InfluxDB強相關,安裝kapacitor后通過配置kapacitor.conf文件來配置和InfluxDB連接(通常是與InfluxDB開放的本地端口8086連接)

Example:

stream
  |from()
    .measurement('cpu')
    .where(lambda: "host" == 'serverA')
    .groupBy('host')
  |alert()
    .id('kapacitor/{{ index .Tags "service" }}')
    .message('{{ .ID }} is {{ .Level }} value:{{ index .Fields "value" }}')
    .info(lambda: "value" > 60)
    .warn(lambda: "value" > 70)
    .crit(lambda: "value" > 80)
    .post("http://example.com/api/alert")
    .post("http://another.example.com/api/alert")
    .tcp("exampleendpoint.com:5678")
    .email('oncall@example.com')

Bosun

Unisphere Unity300





對比分析

監(jiān)控與告警系統(tǒng) 開發(fā)語言 成熟度 配置 可擴展性 故障域 性能 告警源 告警目標 社區(qū)活躍度 對容器的支持 企業(yè)使用度
Zabbix C + PHP 基于模版 大脂男,集成 多通道 多通道
Prometheus Go 基于模版 小养叛,單組件 多通道 多通道
Open-Falcon Go + Python 樹形結構 小,單組件 多通道 多通道 中 (主要是國內企業(yè)使用宰翅,包括美團弃甥,滴滴,360等)
InfluxDB Go 小汁讼,單組件 多通道 多通道
Bosun Go
Unity300 Dell EMC產品

References

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嘿架,隨后出現(xiàn)的幾起案子瓶珊,更是在濱河造成了極大的恐慌,老刑警劉巖耸彪,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伞芹,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機唱较,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門扎唾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人南缓,你說我怎么就攤上這事胸遇。” “怎么了西乖?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵狐榔,是天一觀的道長。 經(jīng)常有香客問我获雕,道長薄腻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任届案,我火速辦了婚禮庵楷,結果婚禮上,老公的妹妹穿的比我還像新娘楣颠。我一直安慰自己尽纽,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布童漩。 她就那樣靜靜地躺著弄贿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矫膨。 梳的紋絲不亂的頭發(fā)上差凹,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音侧馅,去河邊找鬼危尿。 笑死,一個胖子當著我的面吹牛馁痴,可吹牛的內容都是我干的谊娇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼罗晕,長吁一口氣:“原來是場噩夢啊……” “哼济欢!你這毒婦竟也來了?” 一聲冷哼從身側響起小渊,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤船逮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粤铭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挖胃,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了酱鸭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吗垮。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凹髓,靈堂內的尸體忽然破棺而出烁登,到底是詐尸還是另有隱情,我是刑警寧澤蔚舀,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布饵沧,位于F島的核電站,受9級特大地震影響赌躺,放射性物質發(fā)生泄漏狼牺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一礼患、第九天 我趴在偏房一處隱蔽的房頂上張望是钥。 院中可真熱鬧,春花似錦缅叠、人聲如沸悄泥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弹囚。三九已至,卻和暖如春领曼,著一層夾襖步出監(jiān)牢的瞬間余寥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工悯森, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绪撵。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓瓢姻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親音诈。 傳聞我的和親對象是個殘疾皇子幻碱,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容