天天看點

Prometheus監控運維實戰五: 任務與執行個體

本文将對prometheus的任務配置進行詳細介紹,閱讀本文可以了解到如何通過配置任務擷取到需要的執行個體資訊。

任務與執行個體,是prometheus監控中經常會提到的詞彙。在其術語中,每一個提供樣本資料的端點稱為一個執行個體(instance),它可以是各種exporter,如node-exporter、mysql-exporter,也可以是你自己開發的一個服務。隻要提供符合prometheus要求的資料格式 ,并允許通過http請求擷取資訊的端點都可稱為執行個體。而對于執行個體資料的采集,則是通過一個個任務(job)來進行管理,每個job會管理一類相同業務的執行個體。

在前面部署安裝一節中,我們對prometheus的配置檔案promehteus.yml進行過介紹,其中scrape_configs子產品即是管理job的配置。

如下是prometheus預設配置的job,用于擷取prometheus自身的狀态資訊,這是一個格式最精簡的job。

可以在targets頁面看到相關的任務執行個體,其中endpoint項代表該執行個體的采集位址;state項為執行個體狀态,狀态為up表示可正常采集;labels為執行個體所擁有的标簽 ,标簽會包含在擷取到的所有時間序列中。

Prometheus監控運維實戰五: 任務與執行個體

job_name定義了該job的名稱,這會生成一個标簽{job="prometheus"},并插入到該任務所有擷取名額的标簽列中。在prometheus表達式浏覽器中查詢 {job="prometheus"},可看到與該job相關的名額。

Prometheus監控運維實戰五: 任務與執行個體

此外,job也支援自定義标簽的方式。如下所示,将在該job擷取的名額中添加{group="dev"}的标簽。

配置完成後,重新開機prometheus可看到标簽 已生效。

Prometheus監控運維實戰五: 任務與執行個體

注意:修改job後,隻對新擷取資料生效,原有資料不會有變化 。

static_configs為靜态配置,需要手動在配置檔案填寫targets的目标資訊,格式為域名/ip + 端口号。當有多個目标執行個體時,書寫格式如下 :

prometheus對于監控執行個體的加載,除了靜态配置,還可以使用檔案配置的方式。操作方式很簡單,隻需要在一個檔案中填好相關的執行個體資訊,然後在job中加載該檔案即可,檔案的格式必須是yaml或json格式。

如:

配置job加載該檔案

另外,prometheus也支援基于kubernetes、dns或配置中心的服務自動發現方式,這個會在後面的文檔做介紹。

scrape_interval和scrape_timeout

scrape_interval代表抓取間隔,scrape_timeout代替抓取的逾時時間,它們預設繼承來自global全局配置的設定。但如果有特殊需求,也可以對單個job單獨定義自己的參數。示例:

注意:scrape_timeout時間不能大于scrape_interval,否則prometheus将會報錯。

指定抓取路徑,可以不配置,預設為/metrics。

示例:

指定采集使用的協定,http或者https,預設為http。

某些特殊的exporter需要在請求中攜帶url參數,如blackbox_exporter ,可以通過params進行相關參數配置。

預設情況下,exporter不需要賬号密碼即可擷取到相關的監控資料。在某此安全程度較高的場景下,可能驗證通過後才可擷取exporter資訊,此時可通過basic_auth配置prometheus的擷取exporter資訊時使用的賬密。

用于配置标簽重寫(relabeling),在拉取(scraping)階段前,修改target和它的labels。這是job配置中最複雜的部分,但relabeling在實際應用非常有用,值得認真了解。

預設情況下,prometheus加載targets後,都會包含一些預設的标簽,其中以__作為前置的标簽是在系統内部使用的,是以這些标簽不會寫入到樣本資料中。

Prometheus監控運維實戰五: 任務與執行個體

target的job标簽設定為配置檔案裡的job_name的值;

__address__設定為配置裡的targets的值;

而instance标簽的值,是重定義标簽操作之後__address__的值;

__scheme__和__metrics_path__标簽的值,也是從配置裡取值的;

relabel_config的完整配置格式 如下 :

其中,相關的action類型有如下幾種:

replace: 正則比對源标簽的值用來替換目标标簽,如果有replacement,使用replacement替換目标标簽;

keep:   如果正則沒有比對到源标簽的值,删除該targets ,不進行采集;

drop:   與keep相反,正則比對到源标簽,删除該targets;

labelmap: 正則比對所有标簽名,将比對的标簽值部分做為新标簽名,原标簽值做為新标簽的值;

labeldrop: 正則比對所有标簽名,比對則移除标簽;

labelkeep: 正則比對所有标簽名,不比對的标簽會被移除;

注意:重定義标簽并應用後,__開頭的标簽會被删除;要臨時存儲值用于下一階段的處理,使用__tmp開頭的标簽名,這種标簽不會被prometheus使用;

在開始前,我們先配置一個測試job,該job包含兩個執行個體,執行個體分别包含了兩個标簽,__machine_hostname和__machine_idc__。

Prometheus監控運維實戰五: 任務與執行個體

replace操作

将__machine_hostname__的值替換到新标簽hostname

重新開機prometheus後,檢視target資訊如下:

Prometheus監控運維實戰五: 任務與執行個體

如果将上面配置的action改為drop,則結果相反,将删除正則比對到标簽的執行個體。

keep操作

排除标簽值不比對正則的targets 目标,此處正則比對__machine_hostname__: 'node-01' 。

檢視target資訊,發現隻保留正則比對的執行個體。

Prometheus監控運維實戰五: 任務與執行個體

labelmap操作

重寫新的标簽hostname和idc,使用原有__machine_hostname__和__machine_idc__标簽的值。

檢視target資訊,可看到重寫的新标簽。

Prometheus監控運維實戰五: 任務與執行個體

繼續閱讀