Prometheus是一套開源的監控&報警&時間序列數據庫的組合,起始是由SoundCloud公司開發的。隨着發展,越來越多公司和組織接受采用Prometheus,社會也十分活躍,他們便將它獨立成開源項目,並且有公司來運作。google SRE的書內也曾提到跟他們BorgMon監控系統相似的實現是Prometheus。現在最常見的Kubernetes容器管理系統中,通常會搭配Prometheus進行監控。
介紹 http://www.cnblogs.com/vovlie/p/Prometheus_CONCEPTS.html
安裝配置 http://www.cnblogs.com/vovlie/p/Prometheus_install.html
我們公司的監控系統是statsd + graphite + grafana ,但是最近遇到一個需求,需要將所有id的失敗成功打到監控中,同時計算出失敗率並進行排序。這個需求通過 graphite 這一套是無法實現的,有兩個問題:
1. graphite 對應每個id會生成一個小文件,id多的情況下操作系統文件系統檢索很慢。
2. graphite 沒有強大的查詢表達式支持。
糾結之后,選擇了Prometheus,目前實現了這個需求,並且可以很好的兼容老的監控系統,業務部門不需要改動代碼。
我們在往statsd_expoter寫數據的時候發現並不會類似statsd那樣定時清理數據,科學上網之后找到了 https://www.robustperception.io/how-does-a-prometheus-counter-work/ ,這里面介紹了prometheus的counter實現方式,獲取增長值要用 increase 函數。
獲取失敗率Top10的id示例查詢語句:
topk(10, sort_desc( sum(increase(demo_fail[1m]) / (increase(demo_success[1m])+increase(demo_fail[1m])) and increase(demo_fail[1m]) > 10 ) by (id) ))
