本文來自Prometheus官網手冊 和 Prometheus簡介html
Prometheus經過命令行和配置文件進行配置,命令行配置不能修改的系統參數(例如存儲位置,要保留在磁盤和內存中的數據量等),但配置文件定義了與抓取做業及其實例相關的全部內容,以及哪些規則文件的加載。node
Prometheus能夠在運行時從新加載其配置。 若是新配置格式不正確,則更改將不會應用。 經過向Prometheus進程發送SIGHUP或向/-/reload端點發送HTTP POST請求(啓用--web.enable-lifecycle)來觸發配置重載,這還將從新加載全部已配置的規則文件。mysql
使用--config.file參數指定要加載的配置文件
。該文件以YAML格式編寫,由下面描述的方案定義。 括號表示參數是可選的。 對於非列表參數,該值設置爲指定的默認值。nginx
通用佔位符定義以下:git
<boolean>:一個能夠取值爲true或false的布爾值 <duration>:與正則表達式匹配的持續時間[0-9] +(ms | [smhdwy]) <labelname>:與正則表達式匹配的字符串[a-zA-Z _] [a-zA-Z0-9 _] * <labelvalue>:一串unicode字符 <filename>:當前工做目錄中的有效路徑 <host>:由主機名或IP後跟可選端口號組成的有效字符串 <path>:有效的URL路徑 <scheme>:一個能夠取值http或https的字符串 <string>:常規字符串 <secret>:一個祕密的常規字符串,例如密碼 <tmpl_string>:在使用前進行模板擴展的字符串
其餘佔位符是單獨指定的。能夠在此處找到有效的示例文件github
全局配置指定在全部其餘配置上下文中有效的參數。 它們還可用做其餘配置節的默認值。web
global: # 默認狀況下抓取目標的頻率. [ scrape_interval: <duration> | default = 1m ] # 抓取超時時間. [ scrape_timeout: <duration> | default = 10s ] # 評估規則的頻率. [ evaluation_interval: <duration> | default = 1m ] # 與外部系統通訊時添加到任什麼時候間序列或警報的標籤(聯合,遠程存儲,Alertma# nager).即添加到拉取的數據並存到數據庫中 external_labels: [ <labelname>: <labelvalue> ... ] # 規則文件指定了一個globs列表. # 從全部匹配的文件中讀取規則和警報. rule_files: [ - <filepath_glob> ... ] # 抓取配置列表. scrape_configs: [ - <scrape_config> ... ] # 警報指定與Alertmanager相關的設置. alerting: alert_relabel_configs: [ - <relabel_config> ... ] alertmanagers: [ - <alertmanager_config> ... ] # 與遠程寫入功能相關的設置. remote_write: [ - <remote_write> ... ] # 與遠程讀取功能相關的設置. remote_read: [ - <remote_read> ... ]
<scrape_config>指定一組描述如何抓取的目標和參數。 通常一個scrape指定單個做業。目標能夠經過<static_configs>參數靜態配置,也可使用其中一種支持的服務發現機制動態發現。此外,<relabel_configs>容許在抓取以前對任何目標及其標籤進行高級修改。正則表達式
# 默認分配給已抓取指標的job名稱。 job_name: <job_name> # 從job中抓取目標的頻率. [ scrape_interval: <duration> | default = <global_config.scrape_interval> ] # 抓取此job時,每次抓取超時時間. [ scrape_timeout: <duration> | default = <global_config.scrape_timeout> ] # 從目標獲取指標的HTTP資源路徑. [ metrics_path: <path> | default = /metrics ] # honor_labels控制Prometheus如何處理已經存在於已抓取數據中的標籤與Prometheus將附加服務器端的標籤之間的衝突("job"和"instance"標籤,手動配置的目標標籤以及服務發現實現生成的標籤)。 # 若是honor_labels設置爲"true",則經過保留已抓取數據的標籤值並忽略衝突的服務器端標籤來解決標籤衝突。 # 若是honor_labels設置爲"false",則經過將已抓取數據中的衝突標籤重命名爲"exported_ <original-label>"(例如"exported_instance","exported_job")而後附加服務器端標籤來解決標籤衝突。 這對於聯合等用例頗有用,其中應保留目標中指定的全部標籤。 # 請注意,任何全局配置的"external_labels"都不受此設置的影響。 在與外部系統通訊時,它們始終僅在時間序列還沒有具備給定標籤時應用,不然將被忽略。 [ honor_labels: <boolean> | default = false ] # 配置用於請求的協議方案. [ scheme: <scheme> | default = http ] # 可選的HTTP URL參數. params: [ <string>: [<string>, ...] ] # 使用配置的用戶名和密碼在每一個scrape請求上設置`Authorization`標頭。 password和password_file是互斥的。 basic_auth: [ username: <string> ] [ password: <secret> ] [ password_file: <string> ] # 使用配置的承載令牌在每一個scrape請求上設置`Authorization`標頭。 它`bearer_token_file`和是互斥的。 [ bearer_token: <secret> ] # 使用配置的承載令牌在每一個scrape請求上設置`Authorization`標頭。 它`bearer_token`和是互斥的。 [ bearer_token_file: /path/to/bearer/token/file ] # 配置scrape請求的TLS設置. tls_config: [ <tls_config> ] # 可選的代理URL. [ proxy_url: <string> ] # Azure服務發現配置列表. azure_sd_configs: [ - <azure_sd_config> ... ] # Consul服務發現配置列表. consul_sd_configs: [ - <consul_sd_config> ... ] # DNS服務發現配置列表。 dns_sd_configs: [ - <dns_sd_config> ... ] # EC2服務發現配置列表。 ec2_sd_configs: [ - <ec2_sd_config> ... ] # OpenStack服務發現配置列表。 openstack_sd_configs: [ - <openstack_sd_config> ... ] # 文件服務發現配置列表。 file_sd_configs: [ - <file_sd_config> ... ] # GCE服務發現配置列表。 gce_sd_configs: [ - <gce_sd_config> ... ] # Kubernetes服務發現配置列表。 kubernetes_sd_configs: [ - <kubernetes_sd_config> ... ] # Marathon服務發現配置列表。 marathon_sd_configs: [ - <marathon_sd_config> ... ] # AirBnB的神經服務發現配置列表。 nerve_sd_configs: [ - <nerve_sd_config> ... ] # Zookeeper Serverset服務發現配置列表。 serverset_sd_configs: [ - <serverset_sd_config> ... ] # Triton服務發現配置列表。 triton_sd_configs: [ - <triton_sd_config> ... ] # 此job的標記靜態配置目標列表。 static_configs: [ - <static_config> ... ] # 目標從新標記配置列表。 relabel_configs: [ - <relabel_config> ... ] # 度量標準從新配置列表。 metric_relabel_configs: [ - <relabel_config> ... ] # 對每一個將被接受的樣本數量的每次抓取限制。 # 若是在度量從新標記後存在超過此數量的樣本,則整個抓取將被視爲失敗。 0表示沒有限制。 [ sample_limit: <int> | default = 0 ]
其中<job_name>
在全部scrape配置中必須是惟一的。sql
tls_config容許配置TLS鏈接。數據庫
# 用於驗證API服務器證書的CA證書。 [ ca_file: <filename> ] # 用於服務器的客戶端證書身份驗證的證書和密鑰文件。 [ cert_file: <filename> ] [ key_file: <filename> ] # ServerName擴展名,用於指示服務器的名稱。 # https://tools.ietf.org/html/rfc4366#section-3.1 [ server_name: <string> ] # 禁用服務器證書的驗證。 [ insecure_skip_verify: <boolean> ]
<azure_sd_config>
<consul_sd_config>
配置容許從Consul的Catalog API檢索抓取目標(自動獲取),從新標記期間,如下meta標籤可用於目標:
# 根據文檔要求定義consul api信息 [ server: <host> | default = "localhost:8500" ] [ token: <secret> ] [ datacenter: <string> ] [ scheme: <string> | default = "http" ] [ username: <string> ] [ password: <secret> ] tls_config: [ <tls_config> ] # 檢索目標的服務列表,默認全部服務器 services: [ - <string> ] # See https://www.consul.io/api/catalog.html#list-nodes-for-service to know more about the possible filters that can be used. #標籤的可選列表,用於過濾給定服務的節點。 服務必須包含列表中的全部標籤。 tags: [ - <string> ] # 節點元數據,用於過濾給定服務的節點。 [ node_meta: [ <name>: <value> ... ] ] # Consul標籤經過其鏈接到標籤標籤中的字符串 [ tag_separator: <string> | default = , ] # Allow stale Consul results (see https://www.consul.io/api/features/consistency.html). Will reduce load on Consul. [ allow_stale: <bool> ] # 刷新提供的名稱以後的時間,在大型設置中,增長此值多是個好主意,由於目錄會一直更改。 [ refresh_interval: <duration> | default = 30s ]
注意:用於抓取目標的IP地址和端口被組裝爲<__ meta_consul_address>:<__ meta_consul_service_port>。 可是,在某些Consul設置中,相關地址在__meta_consul_service_address中。 在這種狀況下,您可使用從新標記功能來替換特殊的__address__標籤。
從新標記階段是基於任意標籤爲服務篩選服務或節點的首選且功能更強大的方法。 對於擁有數千項服務的用戶,直接使用Consul API可能會更高效,該API具備基本的過濾節點支持(當前經過節點元數據和單個標籤)。
基於DNS的服務發現配置容許指定一組DNS域名,這些域名會按期查詢以發現目標列表。 要聯繫的DNS服務器從/etc/resolv.conf中讀取。
此服務發現方法僅支持基本的DNS A,AAAA和SRV記錄查詢,但不支持RFC6763中指定的高級DNS-SD方法。在從新標記階段,元標籤__meta_dns_name在每一個目標上可用,並設置爲生成已發現目標的記錄名稱。
# 要查詢的DNS域名列表。 names: [ - <domain_name> ] # 要執行的DNS查詢的類型。 [ type: <query_type> | default = 'SRV' ] # 查詢類型不是SRV時使用的端口號。 [ port: <number>] # 提供名稱後刷新的時間。 [ refresh_interval: <duration> | default = 30s ]
其中<domain_name>
是有效的DNS域名。 其中<query_type>
是SRV,A或AAAA。
<openstack_sd_config>
<file_sd_config>
<gce_sd_config>
<kubernetes_sd_config>
<marathon_sd_config>
<nerve_sd_config>
<serverset_sd_config>
<triton_sd_config>
<static_config>
static_config容許指定目標列表和它們的公共標籤集,這是在scrape配置中指定靜態目標的規範方法。
# 靜態配置指定的目標。 targets: [ - '<host>' ] # 分配給從目標中已抓取的全部指標的標籤。 labels: [ <labelname>: <labelvalue> ... ]
<relabel_config>
從新標記是一種強大的工具,能夠在抓取目標以前動態重寫目標的標籤集。 每一個抓取配置能夠配置多個從新標記步驟。 它們按照它們在配置文件中的出現順序應用於每一個目標的標籤集。
最初,除了配置的每目標標籤以外,目標的做業標籤設置爲相應的scrape配置的job_name
值。 __address__
標籤設置爲目標的<host>:<port>
地址。 從新標記後,若是在從新標記期間未設置實例標籤,則實例標籤默認設置爲__address__
的值。 __scheme__
和__metrics_path__
標籤分別設置爲目標的方案和度量標準路徑。 __param_ <name>
標籤設置爲名爲<name>
的第一個傳遞的URL參數的值。
在從新標記階段,可使用帶有__meta_
前綴的附加標籤。 它們由提供目標的服務發現機制設置,並在不一樣機制之間變化。
在目標從新標記完成後,將從標籤集中刪除以__
開頭的標籤。若是從新標記步驟僅需臨時存儲標籤值(做爲後續從新標記步驟的輸入),請使用__tmp
標籤名稱前綴。 保證Prometheus自己不會使用此前綴。
# 源標籤從現有標籤中選擇值。 它們的內容使用已配置的分隔符進行鏈接,並與已配置的正則表達式進行匹配,以進行替換,保留和刪除操做。 [ source_labels: '[' <labelname> [, ...] ']' ] # 分隔符放置在鏈接的源標籤值之間。 [ separator: <string> | default = ; ] # 在替換操做中將結果值寫入的標籤。 # 替換操做是強制性的。 正則表達式捕獲組可用。 [ target_label: <labelname> ] # 與提取的值匹配的正則表達式。 [ regex: <regex> | default = (.*) ] # 採用源標籤值的散列的模數。 [ modulus: <uint64> ] # 若是正則表達式匹配,則執行正則表達式替換的替換值。 正則表達式捕獲組可用。 [ replacement: <string> | default = $1 ] # 基於正則表達式匹配執行的操做。 [ action: <relabel_action> | default = replace ]
<regex>
是任何有效的RE2正則表達式。 它是replace
,keep
,drop
,labelmap
,labeldrop
和labelkeep
操做所必需的。 正則表達式固定在兩端。 要取消錨定正則表達式,請使用。* <regex>.*
。
<relabel_action>
肯定要採起的從新簽名行動:
replace
:將regex
與鏈接的source_labels
匹配。 而後,將target_label
設置爲replacement
,將匹配組引用(${1}
,${2}
,...)替換爲其值。 若是正則表達式不匹配,則不進行替換。keep
:刪除regex
與鏈接的source_labels
不匹配的目標。drop
:刪除regex
與鏈接的source_labels
匹配的目標。hashmod
:將target_label
設置爲鏈接的source_labels
的哈希模數。labelmap
:將regex
與全部標籤名稱匹配。 而後將匹配標籤的值複製到替換時給出的標籤名稱,替換爲匹配組引用(${1}
,{2}
,...)替換爲其值。labeldrop
:將regex
與全部標籤名稱匹配。匹配的任何標籤都將從標籤集中刪除。labelkeep
:將regex
與全部標籤名稱匹配。任何不匹配的標籤都將從標籤集中刪除。必須當心使用labeldrop
和labelkeep
,以確保在刪除標籤後仍然對指標進行惟一標記。
<metric_relabel_configs>
度量從新標記應用於樣本,做爲攝取前的最後一步。 它具備與目標從新標記相同的配置格式和操做。 度量標準從新標記不適用於自動生成的時間序列,例如up
。
一個用途是將黑名單時間序列列入黑名單,這些時間序列太昂貴而沒法攝取。
<alert_relabel_configs>
警報從新標記在發送到Alertmanager以前應用於警報。 它具備與目標從新標記相同的配置格式和操做。 外部標籤後應用警報從新標記。這樣作的一個用途是確保具備不一樣外部標籤的HA對Prometheus服務器發送相同的警報。
<alertmanager_config>
alertmanager_config
部分指定Prometheus服務器向其發送警報的Alertmanager實例。 它還提供參數以配置如何與這些Alertmanagers進行通訊。
Alertmanagers能夠經過static_configs
參數靜態配置,也可使用其中一種支持的服務發現機制動態發現。此外,relabel_configs
容許從發現的實體中選擇Alertmanagers,並對使用的API路徑提供高級修改,該路徑經過__alerts_path__
標籤公開。
# 推送警報時按目標Alertmanager超時。 [ timeout: <duration> | default = 10s ] # 將推送HTTP路徑警報的前綴。 [ path_prefix: <path> | default = / ] # 配置用於請求的協議方案。 [ scheme: <scheme> | default = http ] # 使用配置的用戶名和密碼在每一個請求上設置`Authorization`標頭。 password和password_file是互斥的。 basic_auth: [ username: <string> ] [ password: <string> ] [ password_file: <string> ] # 使用配置的承載令牌在每一個請求上設置「Authorization」標頭。 它與`bearer_token_file`互斥。 [ bearer_token: <string> ] # 使用配置的承載令牌在每一個請求上設置「Authorization」標頭。 它與`bearer_token`互斥。 [ bearer_token_file: /path/to/bearer/token/file ] # 配置scrape請求的TLS設置。 tls_config: [ <tls_config> ] # 可選的代理URL。 [ proxy_url: <string> ] # Azure服務發現配置列表。 azure_sd_configs: [ - <azure_sd_config> ... ] # Consul服務發現配置列表。 consul_sd_configs: [ - <consul_sd_config> ... ] # DNS服務發現配置列表。 dns_sd_configs: [ - <dns_sd_config> ... ] # ECS服務發現配置列表。 ec2_sd_configs: [ - <ec2_sd_config> ... ] # 文件服務發現配置列表。 file_sd_configs: [ - <file_sd_config> ... ] # GCE服務發現配置列表。 gce_sd_configs: [ - <gce_sd_config> ... ] # K8S服務發現配置列表。 kubernetes_sd_configs: [ - <kubernetes_sd_config> ... ] # Marathon服務發現配置列表。 marathon_sd_configs: [ - <marathon_sd_config> ... ] # AirBnB's Nerve 服務發現配置列表。 nerve_sd_configs: [ - <nerve_sd_config> ... ] # Zookepper服務發現配置列表。 serverset_sd_configs: [ - <serverset_sd_config> ... ] # Triton服務發現配置列表。 triton_sd_configs: [ - <triton_sd_config> ... ] # 標記爲靜態配置的Alertmanagers列表。 static_configs: [ - <static_config> ... ] # Alertmanager從新配置列表。 relabel_configs: [ - <relabel_config> ... ]
<remote_write>
write_relabel_configs
是在將樣本發送到遠程端點以前應用於樣本的從新標記。 在外部標籤以後應用寫入從新標記。 這可用於限制發送的樣本。
# 要發送樣本的端點的URL. url: <string> # 對遠程寫端點的請求超時。 [ remote_timeout: <duration> | default = 30s ] # 遠程寫入從新標記配置列表。 write_relabel_configs: [ - <relabel_config> ... ] # 使用配置的用戶名和密碼在每一個遠程寫請求上設置`Authorization`標頭.password和password_file是互斥的。 basic_auth: [ username: <string> ] [ password: <string> ] [ password_file: <string> ] # 使用配置的承載令牌在每一個遠程寫請求上設置`Authorization`頭。 它與`bearer_token_file`互斥。 [ bearer_token: <string> ] # 使用配置的承載令牌在每一個遠程寫請求上設置`Authorization`頭。 它與`bearer_token`互斥。 [ bearer_token_file: /path/to/bearer/token/file ] # 配置遠程寫入請求的TLS設置。 tls_config: [ <tls_config> ] # 可選的代理URL。 [ proxy_url: <string> ] # 配置用於寫入遠程存儲的隊列。 queue_config: # 在咱們開始刪除以前每一個分片緩衝的樣本數。 [ capacity: <int> | default = 10000 ] # 最大分片數,即併發數。 [ max_shards: <int> | default = 1000 ] # 最小分片數,即併發數。 [ min_shards: <int> | default = 1 ] # 每次發送的最大樣本數。 [ max_samples_per_send: <int> | default = 100] # 樣本在緩衝區中等待的最長時間。 [ batch_send_deadline: <duration> | default = 5s ] # 在可恢復錯誤上重試批處理的最大次數。 [ max_retries: <int> | default = 3 ] # 初始重試延遲。 每次重試都會加倍。 [ min_backoff: <duration> | default = 30ms ] # 最大重試延遲。 [ max_backoff: <duration> | default = 100ms ]
有一個與此功能集成的列表。
# 要發送樣本的端點的URL. url: <string> # 可選的匹配器列表,必須存在於選擇器中以查詢遠程讀取端點。 required_matchers: [ <labelname>: <labelvalue> ... ] # 對遠程讀取端點的請求超時。 [ remote_timeout: <duration> | default = 1m ] # 本地存儲應該有完整的數據。 [ read_recent: <boolean> | default = false ] # 使用配置的用戶名和密碼在每一個遠程寫請求上設置`Authorization`標頭.password和password_file是互斥的。 basic_auth: [ username: <string> ] [ password: <string> ] [ password_file: <string> ] # 使用配置的承載令牌在每一個遠程寫請求上設置`Authorization`頭。 它與`bearer_toke_filen`互斥。 [ bearer_token: <string> ] # 使用配置的承載令牌在每一個遠程寫請求上設置`Authorization`頭。 它與`bearer_token`互斥。 [ bearer_token_file: /path/to/bearer/token/file ] # 配置遠程寫入請求的TLS設置。 tls_config: [ <tls_config> ] # 可選的代理URL。 [ proxy_url: <string> ]
有一個與此功能集成的列表。
# my global config global: scrape_interval: 15s evaluation_interval: 30s # scrape_timeout is set to the global default (10s). external_labels: monitor: codelab foo: bar rule_files: - "first.rules" - "my/*.rules" remote_write: - url: http://remote1/push write_relabel_configs: - source_labels: [__name__] regex: expensive.* action: drop - url: http://remote2/push remote_read: - url: http://remote1/read read_recent: true - url: http://remote3/read read_recent: false required_matchers: job: special scrape_configs: - job_name: prometheus honor_labels: true # scrape_interval is defined by the configured global (15s). # scrape_timeout is defined by the global default (10s). # metrics_path defaults to '/metrics' # scheme defaults to 'http'. file_sd_configs: - files: - foo/*.slow.json - foo/*.slow.yml - single/file.yml refresh_interval: 10m - files: - bar/*.yaml static_configs: - targets: ['localhost:9090', 'localhost:9191'] labels: my: label your: label relabel_configs: - source_labels: [job, __meta_dns_name] regex: (.*)some-[regex] target_label: job replacement: foo-${1} # action defaults to 'replace' - source_labels: [abc] target_label: cde - replacement: static target_label: abc - regex: replacement: static target_label: abc bearer_token_file: valid_token_file - job_name: service-x basic_auth: username: admin_name password: "multiline\nmysecret\ntest" scrape_interval: 50s scrape_timeout: 5s sample_limit: 1000 metrics_path: /my_path scheme: https dns_sd_configs: - refresh_interval: 15s names: - first.dns.address.domain.com - second.dns.address.domain.com - names: - first.dns.address.domain.com # refresh_interval defaults to 30s. relabel_configs: - source_labels: [job] regex: (.*)some-[regex] action: drop - source_labels: [__address__] modulus: 8 target_label: __tmp_hash action: hashmod - source_labels: [__tmp_hash] regex: 1 action: keep - action: labelmap regex: 1 - action: labeldrop regex: d - action: labelkeep regex: k metric_relabel_configs: - source_labels: [__name__] regex: expensive_metric.* action: drop - job_name: service-y consul_sd_configs: - server: 'localhost:1234' token: mysecret services: ['nginx', 'cache', 'mysql'] tag: "canary" node_meta: rack: "123" allow_stale: true scheme: https tls_config: ca_file: valid_ca_file cert_file: valid_cert_file key_file: valid_key_file insecure_skip_verify: false relabel_configs: - source_labels: [__meta_sd_consul_tags] separator: ',' regex: label:([^=]+)=([^,]+) target_label: ${1} replacement: ${2} - job_name: service-z tls_config: cert_file: valid_cert_file key_file: valid_key_file bearer_token: mysecret - job_name: service-kubernetes kubernetes_sd_configs: - role: endpoints api_server: 'https://localhost:1234' basic_auth: username: 'myusername' password: 'mysecret' - job_name: service-kubernetes-namespaces kubernetes_sd_configs: - role: endpoints api_server: 'https://localhost:1234' namespaces: names: - default - job_name: service-marathon marathon_sd_configs: - servers: - 'https://marathon.example.com:443' auth_token: "mysecret" tls_config: cert_file: valid_cert_file key_file: valid_key_file - job_name: service-ec2 ec2_sd_configs: - region: us-east-1 access_key: access secret_key: mysecret profile: profile filters: - name: tag:environment values: - prod - name: tag:service values: - web - db - job_name: service-azure azure_sd_configs: - environment: AzurePublicCloud authentication_method: OAuth subscription_id: 11AAAA11-A11A-111A-A111-1111A1111A11 tenant_id: BBBB222B-B2B2-2B22-B222-2BB2222BB2B2 client_id: 333333CC-3C33-3333-CCC3-33C3CCCCC33C client_secret: mysecret port: 9100 - job_name: service-nerve nerve_sd_configs: - servers: - localhost paths: - /monitoring - job_name: 0123service-xxx metrics_path: /metrics static_configs: - targets: - localhost:9090 - job_name: 測試 metrics_path: /metrics static_configs: - targets: - localhost:9090 - job_name: service-triton triton_sd_configs: - account: 'testAccount' dns_suffix: 'triton.example.com' endpoint: 'triton.example.com' port: 9163 refresh_interval: 1m version: 1 tls_config: cert_file: testdata/valid_cert_file key_file: testdata/valid_key_file - job_name: service-openstack openstack_sd_configs: - role: instance region: RegionOne port: 80 refresh_interval: 1m tls_config: ca_file: valid_ca_file cert_file: valid_cert_file key_file: valid_key_file alerting: alertmanagers: - scheme: https static_configs: - targets: - "1.2.3.4:9093" - "1.2.3.5:9093" - "1.2.3.6:9093"