prometheus job 重复_分享一款开源的监控神器--Prometheus 简介、架构及相关概念
概述
老環境用的zabbix做監控,新環境因為用的微服務架構,所以對比再三,選擇了prometheus來做監控,下面介紹下什么是prometheus。
一、簡介
Prometheus 是一套開源的系統監控報警框架。它啟發于 Google 的 borgmon 監控系統,由工作在 SoundCloud 的 google 前員工在 2012 年創建,作為社區開源項目進行開發,并于 2015 年正式發布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成為受歡迎度僅次于 Kubernetes 的項目。
作為新一代的監控框架,Prometheus 具有以下特點:
- 強大的多維度數據模型:
- 靈活而強大的查詢語句(PromQL):在同一個查詢語句,可以對多個 metrics 進行乘法、加法、連接、取分數位等操作。
- 易于管理: Prometheus server 是一個單獨的二進制文件,可直接在本地工作,不依賴于分布式存儲。
- 高效:平均每個采樣點僅占 3.5 bytes,且一個 Prometheus server 可以處理數百萬的 metrics。
- 使用 pull 模式采集時間序列數據,這樣不僅有利于本機測試而且可以避免有問題的服務器推送壞的 metrics。
- 可以采用 push gateway 的方式把時間序列數據推送至 Prometheus server 端。
- 可以通過服務發現或者靜態配置去獲取監控的 targets。
- 有多種可視化圖形界面。
- 易于伸縮。
需要指出的是,由于數據采集可能會有丟失,所以 Prometheus 不適用對采集數據要 100% 準確的情形。但如果用于記錄時間序列數據,Prometheus 具有很大的查詢優勢,此外,Prometheus 適用于微服務的體系架構。
二、Prometheus 組成及架構
Prometheus 生態圈中包含了多個組件,其中許多組件是可選的:
- Prometheus Server: 用于收集和存儲時間序列數據。
- Client Library: 客戶端庫,為需要監控的服務生成相應的 metrics 并暴露給 Prometheus server。當 Prometheus server 來 pull 時,直接返回實時狀態的 metrics。
- Push Gateway: 主要用于短期的 jobs。由于這類 jobs 存在時間較短,可能在 Prometheus 來 pull 之前就消失了。為此,這次 jobs 可以直接向 Prometheus server 端推送它們的 metrics。這種方式主要用于服務層面的 metrics,對于機器層面的 metrices,需要使用 node exporter。
- Exporters: 用于暴露已有的第三方服務的 metrics 給 Prometheus。
- Alertmanager: 從 Prometheus server 端接收到 alerts 后,會進行去除重復數據,分組,并路由到對收的接受方式,發出報警。常見的接收方式有:電子郵件,pagerduty,OpsGenie, webhook 等。
- 一些其他的工具。
Prometheus 架構圖:
從上圖可以看出,Prometheus 的主要模塊包括:Prometheus server, exporters, Pushgateway, PromQL, Alertmanager 以及圖形界面。
其大概的工作流程是:
pull方式
Prometheus采集數據是用的pull也就是拉模型,通過HTTP協議去采集指標,只要應用系統能夠提供HTTP接口就可以接入監控系統,相比于私有協議或二進制協議來說開發、簡單。
push方式
對于定時任務這種短周期的指標采集,如果采用pull模式,可能造成任務結束了,Prometheus還沒有來得及采集,這個時候可以使用加一個中轉層,客戶端推數據到Push Gateway緩存一下,由Prometheus從push gateway pull指標過來。(需要額外搭建Push Gateway,同時需要新增job去從gateway采數據)
三、Prometheus 相關概念
下面將對 Prometheus 中的數據模型,metric 類型以及 instance 和 job 等概念進行介紹。
1、數據模型
Prometheus 中存儲的數據為時間序列,是由 metric 的名字和一系列的標簽(鍵值對)唯一標識的,不同的標簽則代表不同的時間序列。
- metric 名字:該名字應該具有語義,一般用于表示 metric 的功能,例如:http_requests_total, 表示 http 請求的總數。其中,metric 名字由 ASCII 字符,數字,下劃線,以及冒號組成,且必須滿足正則表達式 [a-zA-Z_:][a-zA-Z0-9_:]*。
- 標簽:使同一個時間序列有了不同維度的識別。例如 http_requests_total{method="Get"} 表示所有 http 請求中的 Get 請求。當 method="post" 時,則為新的一個 metric。標簽中的鍵由 ASCII 字符,數字,以及下劃線組成,且必須滿足正則表達式 [a-zA-Z_:][a-zA-Z0-9_:]*。
- 樣本:實際的時間序列,每個序列包括一個 float64 的值和一個毫秒級的時間戳。
- 格式:{=, …},例如:http_requests_total{method="POST
總結
以上是生活随笔為你收集整理的prometheus job 重复_分享一款开源的监控神器--Prometheus 简介、架构及相关概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python编程快速上手-----让繁琐
- 下一篇: 为什么有的行车记录仪得连接数据线?