Alertmanager
簡介
Alertmanager 主要用於接收Prometheus 發送的告警信息,它支持豐富的告警通知渠道,而且很容易做到告警信息進行分組、靜默、抑制等,是Prometheus生態中非常重要的一個核心模塊。
在這里插入圖片描述
告警功能概述
Prometheus 告警分為兩部分:
Prometheus服務器中的警報規則向Alertmanager發送告警。
Alertmanager 管理這些告警,對這些告警進行分組去重,根據理由規則發送到接受者,比如發送電子郵件、呼叫通知系統,以及即時通訊平台。
設置告警和通知的主要步驟是:
安裝和配置Alertmanager
配置 Prometheus與 Alertmanager 對接
在 Prometheus 中創建告警規則
Alertmanager實現的核心概念
接下來了解下Alertmanager核心概念,混個眼熟,后面會詳細案例解讀。
分組
分組將類似性質的警報分類為單個通知。當許多系統同時發生故障並且可能同時觸發數百到數千個警報時,這在較大的中斷期間尤其有用。
示例:當發生網絡分區故障時,集群中正在運行數十個或數百個服務實例。您的一半服務實例無法再訪問數據庫。Prometheus 中的警報規則被配置為在每個服務實例無法與數據庫通信時發送警報。因此,數百個警報被發送到 Alertmanager。
作為用戶,您只想獲得一個頁面,同時仍然能夠准確查看哪些服務實例受到影響。因此,可以將 Alertmanager 配置為按集群和警報名稱對警報進行分組,以便它發送單個緊湊通知。
警報分組、分組通知的時間以及這些通知的接收者由配置文件中的路由樹進行配置。
抑制
抑制是一個概念,如果某些其他警報已經觸發,則抑制某些警報的通知。
示例:發出警報,通知無法訪問整個集群。如果該特定警報正在觸發,Alertmanager 可以配置為靜音與該集群相關的所有其他警報。這可以防止收到與實際問題無關的數百或數千個觸發警報的通知。
通過 Alertmanager 的配置文件進行配置。
靜默
靜默是在給定時間內簡單地將警報靜音的直接方法。靜默是基於匹配器配置的,就像路由樹一樣。檢查傳入警報是否與活動靜默的所有相等或正則表達式匹配器匹配。如果他們這樣做,則不會發送該警報的通知。
靜默是在 Alertmanager 的 Web 界面中配置的。
客戶行為
Alertmanager對其客戶端的行為有特殊要求。這些僅與不使用 Prometheus 發送警報的高級用例相關。
高可用性
Alertmanager 支持配置以創建集群以實現高可用性。這可以使用–cluster-*標志進行配置。
重要的是不要在 Prometheus 及其警報管理器之間負載平衡流量,而是將 Prometheus 指向所有警報管理器的列表。
Alertmanager配置項說明
接下來了解下Alertmanager核心配置,混個眼熟,后面會詳細案例解讀。
Alertmanager通過命令行和配置文件進行配置。配置文件定義了禁止規則、通知路由和通知接收器。
要查看所有可用的命令行幫助,請運行alertmanager -h。
Alertmanager 可以在運行時重新加載其配置。如果新配置格式不正確,則不會應用更改並記錄錯誤。配置重新加載是通過向SIGHUP進程發送 a 或向/-/reload端點發送 HTTP POST 請求來觸發的。
配置文件說明
./alertmanager --config.file=alertmanager.yml
該文件以YAML 格式編寫,由下面描述的字段定義。
< duration>: 匹配正則表達式的持續時間((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0),例如1d, 1h30m, 5m,10s
< labelname>: 匹配正則表達式的字符串 [a-zA-Z_][a-zA-Z0-9_]*
< labelvalue>: 一串unicode字符
< filepath>: 當前工作目錄中的有效路徑
< boolean>: 一個布爾值,可以取值true或false
< string>: 普通字符串
< secret>:作為秘密的常規字符串,例如密碼
< tmpl_string>: 使用前模板擴展的字符串
< tmpl_secret>: 一個在使用前被模板擴展的字符串,這是一個秘密
< int>: 一個整數值
global
全局配置指定在所有其他配置上下文中有效的參數。它們還用作其他配置部分的默認值。
global: # 默認SMTP發件人標頭字段 [ smtp_from: <tmpl_string> ] # 用於發送電子郵件的默認SMTP smarthost,包括端口號。 # 端口號通常為25,對於通過TLS的SMTP(有時稱為STARTTLS),端口號通常為587。 # 例子: smtp.example.org:587 [ smtp_smarthost: <string> ] # 要向SMTP服務器標識的默認主機名。 [ smtp_hello: <string> | default = "localhost" ] # SMTP身份驗證使用CRAM-MD5、LOGIN、PLAIN。如果為空,則Alertmanager不會對SMTP服務器進行身份驗證。 [ smtp_auth_username: <string> ] # SMTP身份驗證使用LOGIN and PLAIN [ smtp_auth_password: <secret> ] # SMTP認證使用 PLAIN. [ smtp_auth_identity: <string> ] # SMTP認證使用 CRAM-MD5. [ smtp_auth_secret: <secret> ] # 默認SMTP TLS要求,請注意,Go不支持到遠程SMTP端點的未加密連接。 [ smtp_require_tls: <bool> | default = true ] # 用於slack通知的API URL。 [ slack_api_url: <secret> ] [ slack_api_url_file: <filepath> ] [ victorops_api_key: <secret> ] [ victorops_api_url: <string> | default = "https://alert.victorops.com/integrations/generic/20131114/alert/" ] [ pagerduty_url: <string> | default = "https://events.pagerduty.com/v2/enqueue" ] [ opsgenie_api_key: <secret> ] [ opsgenie_api_url: <string> | default = "https://api.opsgenie.com/" ] # 微信通知 [ wechat_api_url: <string> | default = "https://qyapi.weixin.qq.com/cgi-bin/" ] [ wechat_api_secret: <secret> ] [ wechat_api_corp_id: <string> ] # 默認的HTTP客戶端配置 [ http_config: <http_config> ] # ResolveTimeout是alertmanager在警報發生時使用的默認值 # 不包括EndsAt,在此時間過后,如果警報尚未更新,則可以將其聲明為已解決。 # 這對來自普羅米修斯的警報沒有影響,因為它們總是包括EndsAt。 [ resolve_timeout: <duration> | default = 5m ] # 從中讀取自定義通知模板定義的文件。 # 最后一個組件可以使用通配符匹配器,例如“templates/*.tmpl”。 templates: [ - <filepath> ... ] # 路由樹的根節點。 route: <route> # 通知接收者的列表。 receivers: - <receiver> ... # 抑制規則列表。 inhibit_rules: [ - <inhibit_rule> ... ] # 靜音路由的靜音時間間隔列表。 mute_time_intervals: [ - <mute_time_interval> ... ]
route
路由塊定義路由樹中的一個節點及其子節點。如果未設置,其可選配置參數將從其父節點繼承。
每個警報在配置的頂級路由處進入路由樹,該路由樹必須匹配所有警報(即沒有任何配置的匹配器)。然后遍歷子節點。如果continue設置為 false,它會在第一個匹配的孩子之后停止。如果continue在匹配節點上為 true,則警報將繼續與后續兄弟節點匹配。如果警報與節點的任何子節點都不匹配(沒有匹配的子節點或不存在),則根據當前節點的配置參數處理警報。
# 接受者名稱 [ receiver: <string> ] # 用於將傳入警報分組在一起的標簽。 [ group_by: '[' <labelname>, ... ']' ] # 警報是否應繼續匹配后續同級節點。 [ continue: <boolean> | default = false ] # 不推薦使用下面的匹配器。 # 警報必須滿足的一組相等匹配器來匹配節點。 match: [ <labelname>: <labelvalue>, ... ] # 不推薦,警報必須滿足的一組正則表達式匹配器來匹配節點。 match_re: [ <labelname>: <regex>, ... ] # 警報必須完成以匹配節點的匹配器列表。 matchers: [ - <matcher> ... ] # 為組發送通知的初始等待時間 # 警報數量。允許等待禁止警報到達或收集,同一組的更多初始警報。(通常為~0到幾分鍾。) [ group_wait: <duration> | default = 30s ] # 在發送有關新警報的通知之前需要等待多長時間 [ group_interval: <duration> | default = 5m ] # 如果已發送通知,則在再次發送通知之前要等待多長時間,通常約3小時或更長時間 [ repeat_interval: <duration> | default = 4h ] # 應禁用路由的時間。這些文件必須與文件名匹配 mute_time_intervals: [ - <string> ...] # 零個或多個子路由。 routes: [ - <route> ... ]
mute_time_interval
mute_time_interval指定可以在路由樹中引用的命名時間間隔,以在一天中的特定時間使特定路由靜音。
name: <string> time_intervals: [ - <time_interval> ... ]
time_interval
time_interval包含時間間隔的實際定義。語法支持以下字段:
- times: [ - <time_range> ...] weekdays: [ - <weekday_range> ...] days_of_month: [ - <days_of_month_range> ...] months: [ - <month_range> ...] years: [ - <year_range> ...]
所有字段都是列表。在每個非空列表中,必須至少滿足一個元素才能匹配該字段。如果未指定字段,則任何值都將匹配該字段。對於匹配完整時間間隔的瞬間,所有字段都必須匹配。一些字段支持范圍和負索引,詳情如下。所有定義均采用 UTC,目前不支持其他時區。
time_range包括開始時間和不包括結束時間的范圍,以便於表示在小時邊界開始/結束的時間。例如,開始時間:‘17:00’ 和結束時間:‘24:00’ 將在 17:00 開始並在 24:00 之前結束。它們是這樣指定的:
times: - start_time: HH:MM end_time: HH:MM
weekday_range:一周中的幾天列表,一周從星期日開始到星期六結束。應按名稱指定日期(例如“星期日”)。為方便起見,范圍也接受形式:並且在兩端都包含在內。例如: [‘monday:wednesday’,‘saturday’, ‘sunday’]
days_of_month_range: 月份中的數字天數列表。天數從 1 開始。也接受從月底開始的負值,例如,一月份的 -1 表示一月 31 日。例如:[‘1:5’, ‘-3:-1’]。超過月初或月底將導致它被夾住。例如,指定 [‘1:31’]在二月將根據閏年將實際結束日期限制為 28 或 29。兩端包容。
month_range:由區分大小寫的名稱(例如“一月”)或數字標識的日歷月列表,其中一月 = 1。也接受范圍。例如,[‘1:3’, ‘may:august’, ‘december’]。兩端包容。
year_range: 年份的數字列表。接受范圍。例如,[‘2020:2022’, ‘2030’]。兩端包容。
inhibit_rule
當存在與另一組匹配器匹配的警報(源)時,禁止規則使匹配一組匹配器的警報(目標)靜音。對於equal列表中的標簽名稱,目標警報和源警報都必須具有相同的標簽值。
從語義上講,缺少標簽和帶有空值的標簽是一回事。因此,如果equal源警報和目標警報中都缺少 中列出的所有標簽名稱,則將應用禁止規則。
為了防止警報自我抑制,與規則的目標端和源端均匹配的警報不能被同樣適用的警報(包括其自身)抑制。但是,我們建議以警報永遠不會匹配雙方的方式選擇目標和源匹配器。推理要容易得多,並且不會觸發這種特殊情況。
# 必須在警報中完成的匹配器將被禁用。不推薦使用 target_match: [ <labelname>: <labelvalue>, ... ] # 不推薦使用 target_match_re: [ <labelname>: <regex>, ... ] # 要禁用的目標警報必須滿足的匹配器列表。 target_matchers: [ - <matcher> ... ] # 不推薦使用 source_match: [ <labelname>: <labelvalue>, ... ] # 不推薦使用 source_match_re: [ <labelname>: <regex>, ... ] # 必須存在一個或多個警報才能使抑制生效的匹配器列表。 source_matchers: [ - <matcher> ... ] # 要使抑制生效,源警報和目標警報中必須具有相等值的標簽。 [ equal: '[' <labelname>, ... ']' ]
http_config
http_config允許配置接收方用於與基於 HTTP 的 API 服務通信的 HTTP 客戶端。
# 請注意,`basic_auth`和`authorization`選項是互斥的。 # 使用配置的用戶名和密碼設置“Authorization”標頭。 # 密碼和密碼文件是互斥的。 basic_auth: [ username: <string> ] [ password: <secret> ] [ password_file: <string> ] # Authorization消息頭令牌認證方式 authorization: # 消息頭前綴 Bearer [ type: <string> | default: Bearer ] # 設置憑據。 [ credentials: <secret> ] # 憑據文件 [ credentials_file: <filename> ] # OAuth 2.0 配置 # 使用客戶端憑據授權類型的 OAuth 2.0 身份驗證。Alertmanager 使用給定的客戶端訪問和密鑰從指定的端點獲取訪問令牌。 # 不能與基本授權或授權同時使用。 oauth2: [ <oauth2> ] # 可選的代理URL。 [ proxy_url: <string> ] # 配置HTTP請求是否遵循HTTP 3xx重定向。 [ follow_redirects: <bool> | default = true ] # TLS配置 tls_config: [ <tls_config> ]
使用客戶端憑據授權類型的 OAuth 2.0 身份驗證。Alertmanager 使用給定的客戶端訪問和密鑰從指定的端點獲取訪問令牌。
# Oauth2 客戶端ID client_id: <string> # Oauth2 客戶端密碼 [ client_secret: <secret> ] # 從文件讀取Oauth密碼 [ client_secret_file: <filename> ] # Oauth2授權范圍 scopes: [ - <string> ... ] # 獲取令牌URL token_url: <string> # 令牌URL 參數 endpoint_params: [ <string>: <string> ... ]
tls_config
tls_config允許配置 TLS 連接。
# 用於驗證服務器證書的CA證書 [ ca_file: <filepath> ] # 用於向服務器進行客戶端證書身份驗證的證書和密鑰文件。 [ cert_file: <filepath> ] [ key_file: <filepath> ] # ServerName擴展以指示服務器的名稱。http://tools.ietf.org/html/rfc4366#section-3.1 [ server_name: <string> ] # 禁用服務器證書的驗證。 [ insecure_skip_verify: <boolean> | default = false]
receiver
Receiver 是一個或多個通知集成的命名配置。
注意:作為取消過去對新接收器的暫停的一部分,同意除了現有要求之外,新的通知集成將需要有一個具有推送訪問權限的承諾維護者。
# Receiver 的唯一名稱。 name: <string> # 多個通知集成的配置。 email_configs: [ - <email_config>, ... ] pagerduty_configs: [ - <pagerduty_config>, ... ] pushover_configs: [ - <pushover_config>, ... ] slack_configs: [ - <slack_config>, ... ] opsgenie_configs: [ - <opsgenie_config>, ... ] webhook_configs: [ - <webhook_config>, ... ] victorops_configs: [ - <victorops_config>, ... ] wechat_configs: [ - <wechat_config>, ... ]
email_config
發送郵件通知相關配置。
# 是否通知已解決的警報。 [ send_resolved: <boolean> | default = false ] # 要向其發送通知的電子郵件地址。 to: <tmpl_string> # 發件人地址。 [ from: <tmpl_string> | default = global.smtp_from ] # 發送電子郵件的SMTP主機。 [ smarthost: <string> | default = global.smtp_smarthost ] # 要向SMTP服務器標識的主機名。 [ hello: <string> | default = global.smtp_hello ] # SMTP身份驗證信息。 [ auth_username: <string> | default = global.smtp_auth_username ] [ auth_password: <secret> | default = global.smtp_auth_password ] [ auth_secret: <secret> | default = global.smtp_auth_secret ] [ auth_identity: <string> | default = global.smtp_auth_identity ] # SMTP TLS要求。請注意,Go不支持到遠程SMTP端點的未加密連接。 [ require_tls: <bool> | default = global.smtp_require_tls ] # TLS配置 tls_config: [ <tls_config> ] # 電子郵件通知的HTML正文。 [ html: <tmpl_string> | default = '{{ template "email.default.html" . }}' ] # 電子郵件通知的文本正文。 [ text: <tmpl_string> ] # 更多標題電子郵件標題鍵/值對。覆蓋任何標題,以前由通知實現設置。 [ headers: { <string>: <tmpl_string>, ... } ]
pagerduty_config
PagerDuty 通知通過PagerDuty API發送。PagerDuty 提供有關如何集成的文檔。與 Alertmanager 的 v0.11 和對 PagerDuty 的 Events API v2 的更大支持存在重要差異。
# 是否通知已解決的警報。 [ send_resolved: <boolean> | default = true ] # 以下兩個選項是互斥的。PagerDuty集成鍵(使用PagerDuty集成類型`Events API v2`時) routing_key: <tmpl_secret> # PagerDuty集成鍵(使用PagerDuty集成類型“Prometheus”時)。 service_key: <tmpl_secret> # 要向其發送API請求的URL [ url: <string> | default = global.pagerduty_url ] # Alertmanager的客戶端標識。 [ client: <tmpl_string> | default = '{{ template "pagerduty.default.client" . }}' ] # 指向通知發件人的反向鏈接。 [ client_url: <tmpl_string> | default = '{{ template "pagerduty.default.clientURL" . }}' ] # 對事件的描述。 [ description: <tmpl_string> | default = '{{ template "pagerduty.default.description" .}}' ] # 事件的嚴重性。 [ severity: <tmpl_string> | default = 'error' ] # 提供進一步詳細信息的一組任意鍵/值對 [ details: { <string>: <tmpl_string>, ... } | default = { firing: '{{ template "pagerduty.default.instances" .Alerts.Firing }}' resolved: '{{ template "pagerduty.default.instances" .Alerts.Resolved }}' num_firing: '{{ .Alerts.Firing | len }}' num_resolved: '{{ .Alerts.Resolved | len }}' } ] # 要附加到事件的圖像。 images: [ <image_config> ... ] # 要附加到事件的鏈接。 links: [ <link_config> ... ] # 受影響系統中損壞的部分或組件。 [ component: <tmpl_string> ] # sources的集群或者分組 [ group: <tmpl_string> ] # event的class類型 [ class: <tmpl_string> ] # HTTP客戶端的配置。 [ http_config: <http_config> | default = global.http_config ]
image_config
這些字段記錄在PagerDuty API 文檔中。
href: <tmpl_string> source: <tmpl_string> alt: <tmpl_string>
link_config
這些字段記錄在PagerDuty API 文檔中。
href: <tmpl_string>
text: <tmpl_string>
pushover_config
Pushover 通知通過Pushover API發送。
# Whether or not to notify about resolved alerts. [ send_resolved: <boolean> | default = true ] # The recipient user’s user key. user_key: <secret> # 您注冊的應用程序的API令牌,請參閱https://pushover.net/apps # 您還可以通過克隆此普羅米修斯應用程序來注冊令牌: # https://pushover.net/apps/clone/prometheus token: <secret> # Notification title. [ title: <tmpl_string> | default = '{{ template "pushover.default.title" . }}' ] # 通知消息 [ message: <tmpl_string> | default = '{{ template "pushover.default.message" . }}' ] # 消息旁邊顯示的補充URL。 [ url: <tmpl_string> | default = '{{ template "pushover.default.url" . }}' ] # 優先事項,見https://pushover.net/api#priority [ priority: <tmpl_string> | default = '{{ if eq .Status "firing" }}2{{ else }}0{{ end }}' ] # Pushover服務器向用戶發送相同通知的頻率。 # 必須至少為30秒。 [ retry: <duration> | default = 1m ] # 您的通知將繼續重試多長時間,除非用戶確認通知。 [ expire: <duration> | default = 1h ] # HTTP客戶端的配置。 [ http_config: <http_config> | default = global.http_config ]
slack_config
Slack 通知通過Slack webhooks發送。該通知包含一個附件。
# 是否通知已解決的警報。 [ send_resolved: <boolean> | default = false ] # 松弛webhook URL。應設置api_url或api_url_文件。 # 如果此處未設置任何設置,則默認為全局設置。 [ api_url: <secret> | default = global.slack_api_url ] [ api_url_file: <filepath> | default = global.slack_api_url_file ] # 要向其發送通知的頻道或用戶。 channel: <tmpl_string> # 由Slack webhook API定義的API請求數據。 [ icon_emoji: <tmpl_string> ] [ icon_url: <tmpl_string> ] [ link_names: <boolean> | default = false ] [ username: <tmpl_string> | default = '{{ template "slack.default.username" . }}' ] # 以下參數定義了附件。 actions: [ <action_config> ... ] [ callback_id: <tmpl_string> | default = '{{ template "slack.default.callbackid" . }}' ] [ color: <tmpl_string> | default = '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}' ] [ fallback: <tmpl_string> | default = '{{ template "slack.default.fallback" . }}' ] fields: [ <field_config> ... ] [ footer: <tmpl_string> | default = '{{ template "slack.default.footer" . }}' ] [ mrkdwn_in: '[' <string>, ... ']' | default = ["fallback", "pretext", "text"] ] [ pretext: <tmpl_string> | default = '{{ template "slack.default.pretext" . }}' ] [ short_fields: <boolean> | default = false ] [ text: <tmpl_string> | default = '{{ template "slack.default.text" . }}' ] [ title: <tmpl_string> | default = '{{ template "slack.default.title" . }}' ] [ title_link: <tmpl_string> | default = '{{ template "slack.default.titlelink" . }}' ] [ image_url: <tmpl_string> ] [ thumb_url: <tmpl_string> ] # The HTTP 客戶端配置 [ http_config: <http_config> | default = global.http_config ]
action_config
這些字段記錄在消息附件和交互式消息的 Slack API 文檔中。
text: <tmpl_string> type: <tmpl_string> # url或名稱和值都是必需的。 [ url: <tmpl_string> ] [ name: <tmpl_string> ] [ value: <tmpl_string> ] [ confirm: <action_confirm_field_config> ] [ style: <tmpl_string> | default = '' ]
action_confirm_field_config
這些字段記錄在Slack API 文檔中。
text: <tmpl_string> [ dismiss_text: <tmpl_string> | default '' ] [ ok_text: <tmpl_string> | default '' ] [ title: <tmpl_string> | default '' ]
field_config
這些字段記錄在Slack API 文檔中。
title: <tmpl_string> value: <tmpl_string> [ short: <boolean> | default = slack_config.short_fields ]
sns_configs
短信通知配置。
# Whether or not to notify about resolved alerts. [ send_resolved: <boolean> | default = false ] # SNS API URL,即。https://sns.us-east-2.amazonaws.com. # 如果未指定,將使用SNS SDK中的SNS API URL。 [ api_url: <tmpl_string> ] # 將AWS的簽名驗證4簽名過程配置為簽名請求。 sigv4: [ <sigv4_config> ] # SNS主題ARN,即ARN:aws:SNS:us-east-2:698519295917:我的主題 #如果未指定此值,則必須為電話號碼或目標號碼指定一個值。 #如果您正在使用FIFO SNS主題,則應將消息組間隔設置為大於5分鍾 #防止SNS默認重復數據消除窗口對具有相同組密鑰的郵件進行重復數據消除 [ topic_arn: <tmpl_string> ] # 郵件傳遞到電子郵件端點時的主題行。 [ subject: <tmpl_string> | default = '{{ template "sns.default.subject" .}}' ] # 如果信息以E.164格式通過短信發送,則為電話號碼。 # 如果未指定此值,則必須為主題或目標指定一個值。 [ phone_number: <tmpl_string> ] #移動平台端點ARN if消息通過移動通知傳遞。 #如果未指定此值,則必須為主題或電話號碼指定一個值。 [ target_arn: <tmpl_string> ] # SNS通知的消息內容。 [ message: <tmpl_string> | default = '{{ template "sns.default.message" .}}' ] # SNS消息屬性。 attributes: [ <string>: <string> ... ] # The HTTP 客戶端配置 [ http_config: <http_config> | default = global.http_config ]
sigv4_config
# AWS地區。如果為空,則使用默認憑據鏈中的區域。 [ region: <string> ] #AWS API密鑰。必須同時提供訪問密鑰和機密密鑰,或者兩者都必須為空。 #如果為空,則使用環境變量“AWS\u ACCESS\u KEY\u ID”和“AWS\u SECRET\u ACCESS\u KEY”。 [ access_key: <string> ] [ secret_key: <secret> ] # 用於身份驗證的命名AWS配置文件。 [ profile: <string> ] # AWS角色ARN,使用AWS API密鑰的替代方案。 [ role_arn: <string> ]
matcher
匹配器是一個字符串,其語法受 PromQL 和 OpenMetrics 啟發。匹配器的語法由三個標記組成:
有效的 Prometheus 標簽名稱。
一 =,!=,=,或!。=表示相等,!=表示字符串不相等,=用於正則表達式的相等,用於正則表達式!的不相等。它們與 PromQL 選擇器的含義相同。
UTF-8 字符串,可以用雙引號括起來。在每個標記之前或之后,可能有任意數量的空格。
第三個標記可能是空字符串。在第三個標記中,OpenMetrics 轉義規則適用:“對於雙引號、\n換行符、\文字反斜杠。Unescaped"不得出現在第三個標記內(僅作為第一個或最后一個字符)。但是,可以容忍文字換行符,也可以容忍單個\字符后不跟, n, 或”。在這種情況下,它們充當字面反斜杠。
在配置中,多個匹配器組合在一個 YAML 列表中。但是,也可以在單個 YAML 字符串中組合多個匹配器,同樣使用受 PromQL 啟發的語法。在這樣的字符串中,前導{和/或尾隨}是可選的,在進一步解析之前將被修剪。單個匹配器在字符串的引用部分之外用逗號分隔。這些逗號可能被空格包圍。未轉義雙引號內的部分字符串"…"被認為是帶引號的(並且逗號不作為分隔符)。如果雙引號用單個反斜杠轉義\,則為了識別輸入字符串的引用部分,它們將被忽略。如果是輸入字符串,修剪后可選的尾隨}, 以逗號結尾,后跟可選的空格,此逗號和空格將被修剪。
以下是一些有效字符串匹配器的示例:
下面顯示了兩個等式匹配器組合在一個長形式的 YAML 列表中。
matchers: - foo = bar - dings !=bums
與示例 1 類似,下面顯示的是組合在一個簡短形式的 YAML 列表中的兩個相等匹配器
matchers: [ foo = bar, dings != bums ]
如下所示,在短格式中,通常最好將列表元素引用起來,以避免出現逗號等特殊字符的問題
matchers: [ "foo = bar,baz", "dings != bums" ]
您還可以將兩個匹配器放入一個類似 PromQL 的字符串中。整個字符串的單引號在這里效果最好。
matchers: [ '{foo="bar",dings!="bums"}' ]
為避免在 YAML 字符串引用和轉義方面出現任何混淆,您可以使用 YAML 塊引用,然后只擔心 OpenMetrics 在塊內轉義。下面顯示了一個帶有正則表達式和標簽值內不同引號的復雜示例:
matchers: - | {quote=~"She said: \"Hi, all!( How're you…)?\""}
opsgenie_config
OpsGenie 通知通過OpsGenie API發送。
# 是否通知已解決的警報。 [ send_resolved: <boolean> | default = true ] # 與OpsGenie API對話時要使用的API密鑰。 [ api_key: <secret> | default = global.opsgenie_api_key ] # 要向其發送OpsGenie API請求的主機。 [ api_url: <string> | default = global.opsgenie_api_url ] # 警報文本限制為130個字符。 [ message: <tmpl_string> ] # 警報的說明。 [ description: <tmpl_string> | default = '{{ template "opsgenie.default.description" . }}' ] # 指向通知發件人的反向鏈接。 [ source: <tmpl_string> | default = '{{ template "opsgenie.default.source" . }}' ] # 提供進一步詳細信息的一組任意鍵/值對。關於警報。 # 默認情況下,所有常用標簽都包含為詳細信息 [ details: { <string>: <tmpl_string>, ... } ] # 負責通知的響應者列表。 responders: [ - <responder> ... ] # 附加到通知的標記的逗號分隔列表。 [ tags: <tmpl_string> ] # 附加警報說明。 [ note: <tmpl_string> ] # 警報的優先級。可能的值為P1、P2、P3、P4和P5。 [ priority: <tmpl_string> ] # The HTTP 客戶端配置 [ http_config: <http_config> | default = global.http_config ]
responder
# 應該定義其中一個字段。 [ id: <tmpl_string> ] [ name: <tmpl_string> ] [ username: <tmpl_string> ] # "team", "user", "escalation" or schedule". type: <tmpl_string>
victorops_config
VictorOps 通知通過VictorOps API發出
# 是否通知已解決的警報。 [ send_resolved: <boolean> | default = true ] # 與VictorOps API對話時要使用的API鍵。 [ api_key: <secret> | default = global.victorops_api_key ] # The VictorOps API URL. [ api_url: <string> | default = global.victorops_api_url ] # 用於將警報映射到團隊的鍵。 routing_key: <tmpl_string> # Describes the behavior of the alert (CRITICAL, WARNING, INFO). [ message_type: <tmpl_string> | default = 'CRITICAL' ] # 包含警報問題的摘要。 [ entity_display_name: <tmpl_string> | default = '{{ template "victorops.default.entity_display_name" . }}' ] # 包含警報問題的詳細解釋。 [ state_message: <tmpl_string> | default = '{{ template "victorops.default.state_message" . }}' ] # 狀態消息來自的監視工具。 [ monitoring_tool: <tmpl_string> | default = '{{ template "victorops.default.monitoring_tool" . }}' ] # Http 客戶端配置 [ http_config: <http_config> | default = global.http_config ]
webhook_config
webhook 接收器允許配置通用接收器
# 是否通知已解決的警報。 [ send_resolved: <boolean> | default = true ] # 要向其發送HTTP POST請求的端點。 url: <string> # Http 客戶端配置 [ http_config: <http_config> | default = global.http_config ] # 單個webhook消息中包含的最大警報數高於此閾值的將被截斷。將其保留為默認值時0。 包括所有警報。 [ max_alerts: <
int> | default = 0 ]
Alertmanager 將以以下 JSON 格式向配置的端點發送 HTTP POST 請求:
{ "version": "4", "groupKey": <string>, // key identifying the group of alerts (e.g. to deduplicate) "truncatedAlerts": <int>, // how many alerts have been truncated due to "max_alerts" "status": "<resolved|firing>", "receiver": <string>, "groupLabels": <object>, "commonLabels": <object>, "commonAnnotations": <object>, "externalURL": <string>, // backlink to the Alertmanager. "alerts": [ { "status": "<resolved|firing>", "labels": <object>, "annotations": <object>, "startsAt": "<rfc3339>", "endsAt": "<rfc3339>", "generatorURL": <string>, // identifies the entity that caused the alert "fingerprint": <string> // fingerprint to identify the alert }, ... ] }
wechat_config
微信通知通過微信 API發送。
# 是否通知已解決的警報。 [ send_resolved: <boolean> | default = false ] # 與微信API交談時使用的API密鑰。 [ api_secret: <secret> | default = global.wechat_api_secret ] # 微信API URL。 [ api_url: <string> | default = global.wechat_api_url ] # 用於身份驗證的公司id。 [ corp_id: <string> | default = global.wechat_api_corp_id ] # 微信API定義的API請求數據。 [ message: <tmpl_string> | default = '{{ template "wechat.default.message" . }}' ] # 消息類型的類型,支持的值為“text”和“markdown”。 [ message_type: <string> | default = 'text' ] [ agent_id: <string> | default = '{{ template "wechat.default.agent_id" . }}' ] [ to_user: <string> | default = '{{ template "wechat.default.to_user" . }}' ] [ to_party: <string> | default = '{{ template "wechat.default.to_party" . }}' ] [ to_tag: <string> | default = '{{ template "wechat.default.to_tag" . }}' ]
————————————————
版權聲明:本文為CSDN博主「qq_43437874」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_43437874/article/details/120386208