Amazon Managed Service for Prometheus Alert Manager
परिचय
Amazon Managed Service for Prometheus (AMP) दो प्रकार के नियमों का समर्थन करता है - 'Recording rules' और 'Alerting rules', जिन्हें आपके मौजूदा Prometheus server से import किया जा सकता है और नियमित अंतराल पर मूल्यांकन किया जाता है।
Alerting rules ग्राहकों को PromQL और एक threshold के आधार पर अलर्ट शर्तें परिभाषित करने की अनुमति देते हैं। जब alerting rule का मान threshold से अधिक हो जाता है, तो Amazon Managed Service for Prometheus में Alert manager को एक नोटिफिकेशन भेजा जाता है जो standalone Prometheus में alert manager के समान कार्यक्षमता प्रदान करता है। एक अलर्ट Prometheus में एक alerting rule का परिणाम है जब वह सक्रिय होता है।
Alerting Rules फ़ाइल
Amazon Managed Service for Prometheus में एक Alerting rule YAML प्रारूप में एक rules फ़ाइल द्वारा परिभाषित किया जाता है, जो standalone Prometheus में rules फ़ाइल के समान प्रारूप का पालन करता है। ग्राहकों के पास Amazon Managed Service for Prometheus workspace में कई rules फ़ाइलें हो सकती हैं। एक workspace Prometheus मेट्रिक्स के भंडारण और querying के लिए समर्पित एक तार्किक स्थान है।
एक rules फ़ाइल में आमतौर पर निम्नलिखित फ़ील्ड होते हैं:
groups:
- name:
rules:
- alert:
expr:
for:
labels:
annotations:
Groups: नियमों का एक संग्रह जो नियमित अंतराल पर क्रमिक रूप से चलाए जाते हैं
Name: समूह का नाम
Rules: एक समूह में नियम
Alert: अलर्ट का नाम
Expr: अलर्ट ट्रिगर होने के लिए अभिव्यक्ति
For: firing स्थिति में अपडेट होने से पहले अलर्ट की अभिव्यक्ति द्वारा threshold पार करने की न्यूनतम अवधि
Labels: अलर्ट से जुड़े कोई भी अतिरिक्त labels
Annotations: संदर्भात्मक विवरण जैसे विवरण या लिंक
एक नमूना rule फ़ाइल नीचे जैसी दिखती है
groups:
- name: test
rules:
- record: metric:recording_rule
expr: avg(rate(container_cpu_usage_seconds_total[5m]))
- name: alert-test
rules:
- alert: metric:alerting_rule
expr: avg(rate(container_cpu_usage_seconds_total[5m])) > 0
for: 2m
Alert Manager कॉन्फ़िगरेशन फ़ाइल
Amazon Managed Service for Prometheus Alert Manager अलर्ट सेटअप करने के लिए (प्राप्तकर्ता सेवा के लिए) YAML प्रारूप में एक कॉन्फ़िगरेशन फ़ाइल का उपयोग करता है जो standalone Prometheus में alert manager config फ़ाइल के समान संरचना में है। कॉन्फ़िगरेशन फ़ाइल में alert manager और templating के लिए दो प्रमुख अनुभाग होते हैं
-
template_files, जिसमें अलर्ट में annotations और labels के templates होते हैं जो सुविधा के लिए
$value,$labels,$externalLabels, और$externalURLvariables के रूप में expose किए जाते हैं।$labelsvariable एक अलर्ट instance के label key/value pairs को रखता है। कॉन्फ़िगर किए गए external labels को$externalLabelsvariable के माध्यम से एक्सेस किया जा सकता है।$valuevariable एक अलर्ट instance के evaluated मान को रखता है।.Value,.Labels,.ExternalLabels, और.ExternalURLक्रमशः अलर्ट मान, अलर्ट labels, globally कॉन्फ़िगर किए गए external labels, और external URL (जो--web.external-urlके साथ कॉन्फ़िगर किया गया है) को contain करते हैं। -
alertmanager_config, जिसमें alert manager कॉन्फ़िगरेशन होता है जो standalone Prometheus में alert manager config फ़ाइल के समान संरचना का उपयोग करता है।
template_files और alertmanager_config दोनों वाली एक नमूना alert manager कॉन्फ़िगरेशन फ़ाइल नीचे जैसी दिखती है,
template_files:
default_template: |
{{ define "sns.default.subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]{{ end }}
{{ define "__alertmanager" }}AlertManager{{ end }}
{{ define "__alertmanagerURL" }}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver | urlquery }}{{ end }}
alertmanager_config: |
global:
templates:
- 'default_template'
route:
receiver: default
receivers:
- name: 'default'
sns_configs:
- topic_arn: arn:aws:sns:us-east-2:accountid:My-Topic
sigv4:
region: us-east-2
attributes:
key: severity
value: SEV2
अलर्टिंग के प्रमुख पहलू
Amazon Managed Service for Prometheus Alert Manager कॉन्फ़िगरेशन फ़ाइल बनाते समय तीन महत्वपूर्ण पहलुओं से अवगत होना आवश्यक है।
- Grouping: यह समान अलर्ट को एक एक नोटिफिकेशन में एकत्र करने में मदद करता है, जो तब उपयोगी होता है जब विफलता या आउटेज का blast radius बड़ा होता है और कई सिस्टम प्रभावित होते हैं और कई अलर्ट एक साथ fire होते हैं। इसका उपयोग श्रेणियों में समूहित करने के लिए भी किया जा सकता है (उदा., node अलर्ट, pod अलर्ट)। alert manager कॉन्फ़िगरेशन फ़ाइल में route ब्लॉक का उपयोग इस grouping को कॉन्फ़िगर करने के लिए किया जा सकता है।
- Inhibition: यह कुछ नोटिफिकेशन को दबाने का एक तरीका है ताकि पहले से सक्रिय और fire हो चुके समान अलर्ट को स्पैम करने से बचा जा सके। inhibit_rules ब्लॉक का उपयोग inhibition rules लिखने के लिए किया जा सकता है।
- Silencing: अलर्ट को एक निर्दिष्ट अवधि के लिए mute किया जा सकता है, जैसे maintenance window या planned outage के दौरान। आने वाले अलर्ट को अलर्ट silence करने से पहले सभी equality या regular expression मिलान के लिए सत्यापित किया जाता है। PutAlertManagerSilences API का उपयोग silencing बनाने के लिए किया जा सकता है।
Amazon Simple Notification Service (SNS) के माध्यम से अलर्ट रूट करना
वर्तमान में Amazon Managed Service for Prometheus Alert Manager Amazon SNS का समर्थन करता है एकमात्र receiver के रूप में। alertmanager_config ब्लॉक में प्रमुख अनुभाग receivers है, जो ग्राहकों को अलर्ट प्राप्त करने के लिए Amazon SNS कॉन्फ़िगर करने देता है। निम्नलिखित अनुभाग receivers ब्लॉक के लिए एक template के रूप में उपयोग किया जा सकता है।
- name: name_of_receiver
sns_configs:
- sigv4:
region: <AWS_Region>
topic_arn: <ARN_of_SNS_topic>
subject: somesubject
attributes:
key: <somekey>
value: <somevalue>
Amazon SNS कॉन्फ़िगरेशन निम्नलिखित template का उपयोग डिफ़ॉल्ट रूप से करता है जब तक कि इसे स्पष्ट रूप से override नहीं किया जाता।
{{ define "sns.default.message" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }}
{{ if gt (len .Alerts.Firing) 0 -}}
Alerts Firing:
{{ template "__text_alert_list" .Alerts.Firing }}
{{- end }}
{{ if gt (len .Alerts.Resolved) 0 -}}
Alerts Resolved:
{{ template "__text_alert_list" .Alerts.Resolved }}
{{- end }}
{{- end }}
अतिरिक्त संदर्भ: Notification Template Examples
Amazon SNS से परे अन्य डेस्टिनेशन पर अलर्ट रूट करना
Amazon Managed Service for Prometheus Alert Manager Amazon SNS का उपयोग अन्य डेस्टिनेशन से कनेक्ट करने के लिए कर सकता है जैसे email, webhook (HTTP), Slack, PagerDuty, और OpsGenie।
- Email एक सफल नोटिफिकेशन का परिणाम Amazon Managed Service for Prometheus Alert Manager से Amazon SNS topic के माध्यम से अलर्ट विवरण के साथ एक ईमेल प्राप्त होना होगा।
- Amazon Managed Service for Prometheus Alert Manager JSON प्रारूप में अलर्ट भेज सकता है, ताकि उन्हें Amazon SNS से downstream AWS Lambda या webhook-receiving endpoints में प्रोसेस किया जा सके।
- Webhook एक मौजूदा Amazon SNS topic को webhook endpoint पर messages आउटपुट करने के लिए कॉन्फ़िगर किया जा सकता है। Webhooks serialized form-encoded JSON या XML प्रारूपों में messages हैं, जो event driven triggers के आधार पर HTTP पर applications के बीच exchange होते हैं। इसका उपयोग अलर्टिंग, टिकटिंग या incident management systems के लिए किसी भी मौजूदा SIEM या collaboration tools को hook करने के लिए किया जा सकता है।
- Slack ग्राहक Slack के email-to-channel integration के साथ integrate कर सकते हैं जहां Slack एक email स्वीकार कर सकता है और इसे Slack channel पर forward कर सकता है, या SNS नोटिफिकेशन को Slack पर rewrite करने के लिए Lambda function का उपयोग कर सकते हैं।
- PagerDuty
alertmanager_configपरिभाषा मेंtemplate_filesब्लॉक में उपयोग किया गया template Amazon SNS के डेस् टिनेशन के रूप में PagerDuty को payload भेजने के लिए अनुकूलित किया जा सकता है।
अतिरिक्त संदर्भ: Custom Alert manager Templates
अलर्ट स्थिति
Alerting rules अभिव्यक्तियों के आधार पर अलर्ट शर्तें परिभाषित करते हैं ताकि जब भी निर्धारित threshold पार हो जाए तो किसी भी notification service को अलर्ट भेजे जा सकें। एक उदाहरण rule और उसकी अभिव्यक्ति नीचे दिखाई गई है।
rules:
- alert: metric:alerting_rule
expr: avg(rate(container_cpu_usage_seconds_total[5m])) > 0
for: 2m
जब भी अलर्ट अभिव्यक्ति किसी दिए गए समय बिंदु पर एक या अधिक vector elements उत्पन्न करती है, तो अलर्ट सक्रिय माना जाता है। अलर्ट active (pending | firing) या resolved स्थिति लेते हैं।
- Pending: threshold breach के बाद बीता हुआ समय recording interval से कम है
- Firing: threshold breach के बाद बीता हुआ समय recording interval से अधिक है और Alert Manager अलर्ट रूट कर रहा है।
- Resolved: अलर्ट अब firing नहीं है क्योंकि threshold अब पार नहीं हो रहा है।
इसे awscurl कमांड का उपयोग करके ListAlerts API के साथ Amazon Managed Service for Prometheus Alert Manager endpoint को query करके मैन्युअल रूप से सत्यापित किया जा सकता है। एक नमूना request नीचे दिखाया गया है।
awscurl https://aps-workspaces.us-east-1.amazonaws.com/workspaces/$WORKSPACE_ID/alertmanager/api/v2/alerts --service="aps" -H "Content-Type: application/json"