摘要:傳統方法比如說你想監控你容器的內存使用率。不支持維度數據,這樣一個名為的容器的指標,可能被稱為。這是非常偉大并且有用的,但是有限制性。這個輸出器使用容器的名字,和鏡像作為維度。
本文的原作者是 johannes-fish-ziemke,原文地址是 http://5pi.de/2015/01/26/monitor-docker-containers-with-prometheus/
監控 Docker該文中介紹的 Prometheus 的項目地址是 https://prometheus.github.io/
在容器中運行你所有的服務使得獲取深度資源和運行特性成為可能,因為每個容器運行在它們自己的 cgroup 中并且 Linux 內核給我們提供了各種各樣的指標(metrics)。
盡管有一些其他的 Docker 監控工具,我將給你們展示我為什么認為 SoundCloud 最新發布的 Prometheus 是最適合監控基于容器的基礎架構。
Prometheus 特點是高維度數據模型,時間序列是通過一個度量值名字和一套鍵值對識別。靈活的查詢語言允許查詢和繪制數據。它采用了先進的度量標準類型像匯總(summaries),從指定時間跨度的總數構建比率或者是在任何異常的時候報警并且沒有任何依賴,中斷期間使它成為一個可靠的系統進行調試。
我會集中講為什么該數據模型和查詢語言如此貼合容器式和動態基礎設施,對于這些基礎設施,你應該想著整個服務集群而不是單個服務器實例,把服務器想成牛群中的牛而不是各家自養分散開的寵物。
傳統方法比如說你想監控你容器的內存使用率。不支持維度數據,這樣一個名為 webapp123 的容器的指標,可能被稱為 container_memory_usage_bytes_webapp123。
但是如果你想展示所有你的 webapp123 容器的內存利用率?更先進的監控解決方案像 graphite 支持這樣。它的特性是層次,樹狀數據模型,這樣的指標可能被稱為 container.memory_usage_bytes.webapp123。現在你可以使用正則表達式像 container.memory_usage_bytes.webapp* 來繪制所有你的 ‘webapp’ 容器的內存使用率。Graphite 也支持函數像 sum() 來通過使用一個表達式像 sum(container.memory_usage_bytes.webapp*) 聚合你所有服務器上的應用的內存使用率。
這是非常偉大并且有用的,但是有限制性。如果你不想聚合一個給定名字的所有容器而是一個給定鏡像的?或者你想把部署你的 canary 同在你生產環境的服務器對比?
可以為每個用例想出一個層次結構,但是沒有一個支持它們。現實情況顯示,你預先往往不知道哪個問題需要從新回答一次并且你開始研究。
PrometheusPrometheus 支持維度數據,你可以擁有全局和簡單的指標名像 container_memory_usage_bytes ,使用多個維度來標識你服務的指定實例。
我已經創建了一個簡單的 container-exporter 來收集 Docker 容器的指標以及輸出給 Prometheus 來消費。這個輸出器使用容器的名字,id 和 鏡像作為維度。額外的 per-exporter 維度可以在 prometheus.conf 中設置。
如果你使用指標名字直接作為一個查詢表達式,它將返回有這個使用這個指標名字作為標簽的所有時間序列。
container_memory_usage_bytes{env="prod",id="23f731ee29ae12fef1ef6726e2fce60e5e37342ee9e35cb47e3c7a24422f9e88",instance="http://1.2.3.4:9088/metrics",job="container-exporter",name="haproxy-exporter-int",image="prom/haproxy-exporter:latest"} 11468800.000000 container_memory_usage_bytes{env="prod",id="57690ddfd3bb954d59b2d9dcd7379b308fbe999bce057951aa3d45211c0b5f8c",instance="http://1.2.3.5:9088/metrics",job="container-exporter",name="haproxy-exporter",image="prom/haproxy-exporter:latest"} 16809984.000000 container_memory_usage_bytes{env="prod",id="907ac267ebb3299af08a276e4ea6fd7bf3cb26632889d9394900adc832a302b4",instance="http://1.2.3.2:9088/metrics",job="container-exporter",name="node-exporter",image="prom/container-exporter:latest"} ... ...
如果你運行了許多容器,這個看起來像這樣
為了幫助你使得這數據更有意義,你可以過濾(filter) and/or 聚合(aggregate) 這些指標。
切片 & 切塊(Slice & Dice)使用 Prometheus 的查詢語言,你可以對你想的任何維度的數據切片和切塊。如果你對一個給定名字的所有容器感興趣,你可以使用一個表達式像 container_memory_usage_bytes{name="consul-server"},這個將僅僅顯示 name == "consul-server" 的時間序列。
Prometheus 也支持正則表達式,因此匹配完整的腳本你可以這樣做 container_memory_usage_bytes{name=~"^consul"},這將展示起來像這樣:
你也使用使用任何維度過濾,因此你可以獲取在一個給定主機,給定環境和給定區域上所有容器的指標。
聚合(Aggregation)和 Graphite 類似,Prometheus 支持聚合函數但是它的維度更加豐富。使用 sum(container_memory_usage_bytes{name=~"^consul"}) 按預期匯總你所有 "consul-*" 的內存使用率。
現在比如說你想看你的 "consul" 和 "consul-server" 容器平均內存使用率的不同,這可以通過提供維度保存這聚合結果像 avg(container_memory_usage_bytes{name=~"^consul"}) by (name) 來實現:
如果你在多個區域有服務并且配置了區域名作為一個額外的標簽對,你也可以保存維度來展示每個名字和區域的內存使用率,通過使用一個像這樣的表達式 avg(container_memory_usage_bytes{name=~"^consul"}) by (name,zone)。
使用 Prometheus + Container-Exporter正如你所知,我喜歡在容器中運行一切,包括 container-exporter 和 Prometheus,運行 container-exporter 應該是非常容易的:
docker run -p 8080:8080 -v /sys/fs/cgroup:/cgroup -v /var/run/docker.sock:/var/run/docker.sock prom/container-exporter
現在你需要安裝 Prometheus。關于這個參考官方文檔。為了使得 Prometheus 從 container-exporter 拉取指標,你需要把它作為目標添加到配置。比如:
job: { name: "container-exporter" scrape_interval: "1m" target_group: { labels: { label: { name: "zone" value: "us-east-1" } label: { name: "env" value: "prod" } } target: "http://1.2.3.4:8080/metrics" } }
現在從新構建你的鏡像如文檔中描述的那樣并啟動它。Prometheus 現在應該每 60s 輪詢你的 container-exporter。
總結因為 Prometheus 的靈活性,它的性能和最小化依賴,它是我選擇的監控系統。這就是為什么從去年起我介紹了 Prometheus 作為我們監控 Docker 的主要監控系統。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26362.html
摘要:由發明,適合于監控基于容器的基礎架構。有關其數據聚合的功能可以閱讀數據聚合分組新一代系統監控的核心功能。所抓取的性能指標算是較為全面,部署和展現方式都是相當簡單易懂的。 如今,越來越多的公司開始使用 Docker 了,2 / 3 的公司在嘗試了 Docker 后最終使用了它。為了能夠更精確的分配每個容器能使用的資源,我們想要實時獲取容器運行時使用資源的情況,怎樣對 Docker 上的應...
摘要:監控告警是運營系統最核心的功能之一,騰訊內部有一套很成熟的監控告警平臺,而且開發運維同學已經習慣這套平臺,如果我們針對容器再開發一個監控告警平臺,會花費很多精力,而且沒有太大的意義。也是一款付費監控解決方案,計劃收費方案是美分小時。 如今,越來越多的公司開始使用 Docker 了,現在來給大家看幾組數據: 2 / 3 的公司在嘗試了 Docker 后最終使用了它 也就是說 Docker...
摘要:二可視化是一個開源的圖表可視化系統,簡單說圖表配置比較方便生成的圖表比較漂亮。 一. 概述 Prometheus自帶了一個web服務,包括一個默認的dashboard,可以使用表達式查詢并進行圖表可視化,默認服務的地址為:http://prometheus_ip:9090 如下圖: showImg(https://segmentfault.com/img/remote/14600000...
摘要:二可視化是一個開源的圖表可視化系統,簡單說圖表配置比較方便生成的圖表比較漂亮。 一. 概述 Prometheus自帶了一個web服務,包括一個默認的dashboard,可以使用表達式查詢并進行圖表可視化,默認服務的地址為:http://prometheus_ip:9090 如下圖: showImg(https://segmentfault.com/img/remote/14600000...
摘要:二可視化是一個開源的圖表可視化系統,簡單說圖表配置比較方便生成的圖表比較漂亮。 一. 概述 Prometheus自帶了一個web服務,包括一個默認的dashboard,可以使用表達式查詢并進行圖表可視化,默認服務的地址為:http://prometheus_ip:9090 如下圖: showImg(https://segmentfault.com/img/remote/14600000...
閱讀 2629·2021-11-23 09:51
閱讀 861·2021-09-24 10:37
閱讀 3612·2021-09-02 15:15
閱讀 1962·2019-08-30 13:03
閱讀 1881·2019-08-29 15:41
閱讀 2624·2019-08-29 14:12
閱讀 1424·2019-08-29 11:19
閱讀 3301·2019-08-26 13:39