העברה של כללי התראה ונמענים מ-Prometheus

בדף הזה מוסבר איך להעביר כללי התרעה של Prometheus למדיניות התרעה מבוססת-PromQL ב-Cloud Monitoring. תהליך ההעברה שימושי אם אתם משתמשים ב-PromQL בסביבות מחוץ ל- Google Cloud. העברה של כללי ההתראות של Prometheus ל-Cloud Monitoring מאפשרת לכם לנהל את כל מדיניות ההתראות בסביבה אחת.

מידע כללי על מדיניות התראות שמבוססת על PromQL זמין במאמר סקירה כללית על התראות ב-PromQL.

אפשר גם לייבא מרכזי בקרה של Grafana. מידע נוסף זמין במאמר ייבוא לוחות בקרה של Grafana ל-Cloud Monitoring.

איך ההעברה פועלת

ב-CLI של gcloud, אפשר להעביר את כללי ההתראה והנמענים הקיימים כדי ליצור כללי מדיניות התראות וערוצי התראות ב-Cloud Monitoring. באמצעות ה-CLI של gcloud אפשר לבצע העברות מהסוגים הבאים:

  • אם מספקים קובץ תצורה של Prometheus עם כלל התראה, ה-CLI של gcloud יוצר מדיניות התראה שמבוססת על PromQL.

    אתם יכולים לספק כמה קובצי הגדרות של Prometheus בו-זמנית כדי ליצור כמה מדיניות התראות שמבוססת על PromQL.

  • אם מספקים קובץ של Alertmanager של Prometheus עם לפחות נמען אחד, ה-CLI של gcloud ממיר כל נמען לערוץ התראות מקביל ב-Monitoring.

  • אם מספקים קובץ Prometheus Alertmanager וקובץ תצורה של Prometheus בו-זמנית, ה-CLI של gcloud יוצר את מדיניות ההתראות ואת ערוצי ההתראות, ואז משייך כל ערוץ התראות חדש למדיניות ההתראות החדשה.

    אם מספקים כמה קובצי הגדרה עם כללי התראה, ה-CLI של gcloud מקצה כל ערוץ התראה מקובץ Alertmanager לכל מדיניות התראה חדשה.

אם כלל ההתראות של Prometheus מפנה למדד מותאם אישית, ה-CLI של gcloud דורש תיאור מדד שווה ערך כדי ליצור את מדיניות ההתראות.

קובצי ההגדרות של Prometheus וקובצי Prometheus Alertmanager צריכים להיות בפורמט של קובצי כללים תקינים של Prometheus ב-YAML או ב-JSON.

מיפוי שדות

ה-CLI של gcloud ממפה שדות בין כלל התראה של Prometheus לבין מדיניות התראות של Cloud Monitoring באופן הבא:

כלל התראות של Prometheus מדיניות התראות ב-Cloud Monitoring
alert conditionPrometheusQueryLanguage.alertRule
expr conditionPrometheusQueryLanguage.query
for conditionPrometheusQueryLanguage.duration
labels conditionPrometheusQueryLanguage.labels
annotations: "summary" documentation.subject
annotations: "description" documentation.content

Google Cloud משתני תיעוד בכללי התראות של Prometheus שהועברו

‫Prometheus משתמש בתבניות של שדות התראה כדי להגדיר משתנים בהערות ובתגיות של כללי התראה. כשמעבירים כללי התראה של Prometheus שיש להם תבניות של שדות התראה, ‏ Cloud Monitoring ממיר את התבניות למשתני תיעוד של Cloud Monitoring באופן הבא:

תבנית שדה ההתראה של Prometheus משתנה של מאמרי עזרה ב-Cloud Monitoring
{{$value}}

${metric.label.value}

המשתנה הזה הוא הטמעה של ${metric.label.KEY}, כאשר value מכיל את הערך של שאילתת PromQL.

{{humanize $value}}

${metric.label.value}

המשתנה הזה הוא הטמעה של ${metric.label.KEY}, כאשר value מכיל את הערך של שאילתת PromQL.

{{$labels}} ${metric_or_resource.labels}
{{humanize $labels}} ${metric_or_resource.labels}
{{$labels.key}}

מופיע כ-${metric_or_resource.label.KEY} בהגדרת התיעוד של כללי מדיניות ההתראות.

  • אם KEY היא תווית תקינה, המשתנה הזה מוצג בהתראה כערך של ${metric.label.KEY}.
  • אם KEY הוא משאב תקין, המשתנה הזה מוצג בהתראה כערך של ${resource.label.KEY}.
  • אם KEY הוא לא תווית ולא משאב תקינים, המשתנה הזה יוצג בהתראה כמחרוזת ריקה.
{{humanize $labels.<key>}}

מופיע כ-${metric_or_resource.label.KEY} בהגדרת התיעוד של כללי מדיניות ההתראות.

  • אם KEY היא תווית תקינה, המשתנה הזה מוצג בהתראה כערך של ${metric.label.KEY}.
  • אם KEY הוא משאב תקין, המשתנה הזה מוצג בהתראה כערך של ${resource.label.KEY}.
  • אם KEY הוא לא תווית ולא משאב תקינים, המשתנה הזה יוצג בהתראה כמחרוזת ריקה.

העברה של כללי התראה ונמענים מ-Prometheus

כדי להעביר את כללי ההתראות של Prometheus למדיניות התראות מבוססת-PromQL ב-Cloud Monitoring, משתמשים בפקודה gcloud monitoring policies migrate. הפקודה הזו מאפשרת גם להעביר את מקבלי הנתונים של Prometheus לערוצי ההתראות של Cloud Monitoring.

  • כדי להעביר כלל התראה, צריך שיהיה לכם קובץ כללים של Prometheus בפורמט YAML או JSON שמכיל את כלל ההתראה.
  • כדי להעביר נמען, צריך קובץ YAML או JSON של Prometheus Alertmanager שמכיל את הנמען.

‫Google Cloud לא תומך בהעברת כללי הקלטה של Prometheus. כדי להשתמש בכללי הקלטה, מומלץ להשתמש בכלי להערכת כללים שמוטמע באופן עצמאי.

יצירת מדיניות התראות מקובץ תצורה של Prometheus

כדי ליצור מדיניות התראות מקובץ תצורה של Prometheus, מריצים את הפקודה הבאה. אפשר ליצור כמה כללי התראה על ידי ציון כמה נתיבי קבצים:

gcloud monitoring policies migrate \
--policies-from-prometheus-alert-rules-yaml=PATH_TO_FILE_1,PATH_TO_FILE_2

יצירת ערוצי התראות מקובץ תצורה של Prometheus Alertmanager

כדי ליצור ערוצי התראות מקובץ הגדרות של Prometheus Alertmanager, מריצים את הפקודה הבאה:

gcloud monitoring policies migrate \
--channels-from-prometheus-alertmanager-yaml=PATH_TO_FILE

יצירה של כללי מדיניות התראות וערוצי התראות בו-זמנית

כדי ליצור מדיניות התראות מקובצי תצורה של Prometheus וגם ליצור ערוצי התראות מקובץ תצורה של Prometheus Alertmanager, מריצים את הפקודה הבאה:

gcloud monitoring policies migrate \
--policies-from-prometheus-alert-rules-yaml=PATH_TO_FILE_1,PATH_TO_FILE_2 \
--channels-from-prometheus-alertmanager-yaml=PATH_TO_FILE

דוגמה

יש לכם קובץ תצורה של Prometheus עם כלל התראה ששולח התראה אם השימוש במעבד נשאר מעל 75% למשך דקה אחת. כלל ההתראה מוגדר באופן הבא:

groups:
- name: Utilization_Alerts
  interval: 30s
  rules:
  - alert: CPU_Utilization_Over_75
    expr: compute_googleapis_com:instance_cpu_utilization > 75
    for: 60s
    labels:
      severity: page
    annotations:
      subject: "Subject: ${metric.label.value}"
      description: "CPU utilization is over 75%"

יש לכם גם קובץ Prometheus AlertManager שמכיל נמענים של אימייל, PagerDuty ו-webhook.

receivers:
- name: 'team-emails'
  email_configs:
  - to: EMAIL_ADDRESS
- name: 'team-pager'
  pagerduty_configs:
  - service_key: SERVICE_KEY
- name: 'team-webhook'
  webhook_configs:
  - url: WEBHOOK_ADDRESS

כדי ליצור את מדיניות ההתראות ואת ערוץ ההתראות, מריצים את הפקודה הבאה:

gcloud monitoring policies migrate \
--policies-from-prometheus-alert-rules-yaml=PATH_TO_CONFIG_FILE \
--channels-from-prometheus-alertmanager-yaml=PATH_TO_ALERTMANAGER_FILE

‫ה-CLI של gcloud יוצר מדיניות התראות כמו בדוגמה הבאה:

  {
  "name": "projects/PROJECT_ID/alertPolicies/POLICY_ID",
  "displayName": "Utilization_Alerts/CPU_Utilization_Over_75",
  "documentation": {
    "content": "CPU utilization is over 75%",
    "mimeType": "text/markdown",
    "subject": "Subject: ${metric.label.value}"
  },
  "userLabels": {},
  "conditions": [
    {
      "name": "projects/PROJECT_ID/alertPolicies/POLICY_ID/conditions/CONDITION_ID",
      "displayName": "CPU_Utilization_Over_75"
      "conditionPrometheusQueryLanguage": {
        "alertRule": "CPU_Utilization_Over_75",
        "duration": "60s",
        "evaluationInterval": "30s",
        "labels": {
          "severity": "page"
        },
        "query": "compute_googleapis_com:instance_cpu_utilization > 75",
        "ruleGroup": "Utilization_Alerts"
      }
    }
  ],
  "alertStrategy": {},
  "combiner": "OR",
  "enabled": true,
  "notificationChannels": [
    "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_1",
    "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_2",
    "projects/google.com:PROJECT_ID/notificationChannels/CHANNEL_ID_3"
  ]
}

העברת כללי התראה מהשירות המנוהל ל-Prometheus

‫Google Cloud configures managed rule evaluation for שירות מנוהל ל-Prometheus by using the Rules, ClusterRules, and GlobalRules custom resources.

כדי להעביר את המשאבים האלה למדיניות התראות שמבוססת על Google Cloud PromQL:

  1. מעתיקים את הקטע groups של המשאב המותאם אישית אל קובץ כללים חדש של Prometheus.

  2. מעבירים את קובץ הכללים באמצעות ה-CLI של gcloud.

לדוגמה, יש לכם את המשאב המותאם אישית Rules הבא:

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  namespace: NAMESPACE_NAME
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - alert: FewerThanTenInstancesUp
      expr: sum(up) < 10

קובץ הכללים של Prometheus שנוצר על ידי העתקה של groups מהמשאב המותאם אישית הקודם Rules ייראה כך:

  groups:
  - name: example
    interval: 30s
    rules:
    - alert: FewerThanTenInstancesUp
      expr: sum(up) < 10

העברה של כמה משאבים מותאמים אישית של כללים

אם רוצים להעביר כמה כללים, CustomRules או GlobalRules, מומלץ ליצור ולהעביר קובץ כללים נפרד לכל משאב. מידע נוסף מופיע במאמרי העזרה בנושא Prometheus.

ניהול של מסננים וביטויי צבירה

כללים ו-ClusterRules מסננים באופן אוטומטי את ביטויי ההתראה של Prometheus על סמך תוויות מסוימות. כדי לשמור על ההתנהגות הזו בשאילתה של מדיניות התראות שהועברה, צריך לכלול את התוויות האלה באופן מפורש במסנן או בביטוי צבירה בקובץ הכללים של Prometheus לפני העברת הקובץ.

לדוגמה, הכלי להערכת כללים מנוהלים בשירות המנוהל ל-Prometheus מבצע את הביטוי sum(up) < 10 באופן הבא:

sum(up{project_id="test-project", cluster="test-cluster", namespace="NAMESPACE_NAME"}) < 10

עם זאת, אם מדיניות ההתראות כוללת את שאילתת PromQL‏ sum(up) < 10, ‏ Cloud Monitoring מריץ את השאילתה רק כ-sum(up) < 10. השאילתה הזו מוחלת על כל Google Cloud פרויקט, אשכול ומרחב שמות בהיקף המדדים. כדי למנוע את ההתנהגות הזו, מומלץ לציין את התוויות בשאילתה כדי לוודא ש-Cloud Monitoring יבצע את השאילתה כמו שרציתם. לדוגמה, כשיוצרים את קובץ הכללים ממקור המידע המותאם אישית Rules, אפשר לשנות את sum(up) < 10 לביטוי הבא:

sum (up) by (project_id, cluster, namespace) < 10

הביטוי הקודם יוצר סדרת זמן נפרדת לכלGoogle Cloud פרויקט, אשכול ומרחב שמות, ואז משווה כל סדרת זמן לסף ההתראה של <10.

בטבלה הבאה מוצג סדר ההערכה של מסנני ביטויים של התראות עבור כללים וכללי אשכולות:

סוג המשאב של הכלל סינון תוויות
כלל
  1. project_id
  2. cluster
  3. namespace
ClusterRule
  1. project_id
  2. cluster

מידע נוסף על התנהגות הסינון בביטויי Prometheus זמין במאמר Instant vector selectors.