שאילתה והצגה של התראות פתוחות

מעקב אחרי התראות ב-Google Distributed Cloud (GDC)‎ עם air gap מאפשר לכם לעקוב אחרי התראות פעילות בפרויקט ולפתור בעיות שקשורות אליהן, אחרי שיצרתם כללי התראות. במסוף GDC אפשר לבדוק את חומרת ההתראה, משך הזמן, הסטטוס והתוויות. לסקריפטים, למשימות cron ולשילובים בהתאמה אישית, שולחים שאילתה לנקודת הקצה (endpoint) של HTTP ב-Cortex Alertmanager בפרויקט באמצעות curl.

לפני שמתחילים

כדי לקבל את ההרשאות שנדרשות לשליחת שאילתות ולהצגת התראות, בקשו מהאדמין של הפרויקט ב-IAM להקצות לכם את אחד מהתפקידים שמשויכים ל-Project Cortex Alertmanager במרחב השמות של הפרויקט. בהתאם לרמת הגישה וההרשאות שאתם צריכים, יכול להיות שתקבלו תפקידי עריכה או צפייה במשאב הזה בפרויקט.

בטבלה הבאה מפורטות הדרישות של Role לגבי PA and AO persona.

פרסונה אובייקט אשכול תפקיד מרחב שמות קבוצה/משתמש הגדרה
PA grafana מנהל חשבון ארגוני project-cortex-alertmanager-viewer platform-obs קבוצה 1
PA grafana מנהל חשבון ארגוני project-cortex-alertmanager-viewer platform-obs משתמש 2
AO alertmanager מנהל חשבון ארגוני project-cortex-alertmanager-viewer PROJECT_NAMESPACE קבוצה 1
AO alertmanager מנהל חשבון ארגוני project-cortex-alertmanager-viewer PROJECT_NAMESPACE משתמש 2

מחליפים את המשתנים הבאים בהתאם:

משתנה תיאור
KUBECONFIG תצטרכו את ה-kubeconfig של האשכול הספציפי שמכיל את ה-NAMESPACE שעליו יחול ה-RoleBinding הזה.
RULE_NAME השם הייחודי של המשאב RoleBinding במרחב השמות. לדוגמה, pa-cortex-alertmanager-viewer.
NAMESPACE מרחב השמות של Kubernetes שבו ייווצר ויחול ה-RoleBinding הזה. חפשו את העמודה Namespace בטבלה הקודמת.
EMAIL_ADDRESS המזהה של המשתמש שמקבל את התפקיד. לרוב מדובר בכתובת אימייל. לדוגמה, infrastructure-operator@example.com.
ROLE השם של Role שמכיל את ההרשאות שרוצים לתת למשתמש. מחפשים את התפקידים שזמינים בטבלה הקודמת.
GROUP_NAME השם של Group שהמשתמש עם הרשאת PA או AO שייך אליו. לדוגמה, pa-group.
ZONE שם האזור

הגדרה 1

ההגדרה הזו נותנת לקבוצת משתמשים הרשאות גישה להתראות של PA/AO באשכול org. אחרי שמגדירים את ההגדרה הזו, אפשר לעיין בקטע מסוף במסמך הזה כדי לראות התראות במסוף GDC.

  • פקודת Kubectl

    זהו הפורמט הכללי של הפקודה:

    kubectl --kubeconfig `KUBECONFIG` create rolebinding `RULE_NAME` -n `NAMESPACE` --group=`GROUP_NAME` --role=project-cortex-alertmanager-viewer
    

    לדוגמה:

    kubectl --kubeconfig <path-to-kubeconfig> create rolebinding project-cortex-alertmanager-viewer-binding --role=project-cortex-alertmanager-viewer --group=my-team --namespace=platform-obs
    
  • נתיב קובץ IAC

    /infrastructure/zonal/zones/`ZONE`/org-admin/rolebindings/`GROUP_NAME`/<YAML_FILE>
    
  • קובץ YAML

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: RULE_NAME
      namespace: NAMESPACE
    subjects:
    - kind: Group
      name: GROUP_NAME
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: project-cortex-alertmanager-viewer
      apiGroup: rbac.authorization.k8s.io
    

הגדרה 2

ההגדרה הזו מיועדת לפרסונה PA, ומטרגטת את האובייקט grafana באשכול org-admin. הוא מעניק את התפקיד project-cortex-alertmanager-viewer במרחב השמות platform-obs ל-User.

  • פקודת Kubectl

    זהו הפורמט הכללי של הפקודה:

    kubectl --kubeconfig `KUBECONFIG` create rolebinding `RULE_NAME` -n platform-obs --user=`EMAIL_ADDRESS` --role=project-cortex-alertmanager-viewer
    

    לדוגמה:

    kubectl --kubeconfig <path-to-kubeconfig> create rolebinding project-cortex-alertmanager-viewer-binding --role=project-cortex-alertmanager-viewer --user=my-email@example.com --namespace=platform-obs
    
  • נתיב קובץ IAC

    /infrastructure/zonal/zones/`ZONE`/org-admin/rolebindings/`EMAIL_ADDRESS`/<YAML_FILE>
    
  • קובץ YAML

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: RULE_NAME
      namespace: platform-obs
    subjects:
    - kind: User
      name: EMAIL_ADDRESS
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: project-cortex-alertmanager-viewer
      apiGroup: rbac.authorization.k8s.io
    

    למידע נוסף על התפקידים האלה, ראו הכנת הרשאות IAM.

הצגה וסינון של התראות פתוחות

כדי לשלוח שאילתה ולסנן התראות פתוחות ממרחב השמות של הפרויקט, בוחרים באחת מהשיטות הבאות:

המסוף

כדי לראות את ההתראות הפתוחות בפרויקט דרך מסוף GDC:

  1. נכנסים למסוף GDC.
  2. בוחרים את הפרויקט במסוף GDC.
  3. בתפריט הניווט, לוחצים על Operations > Alerting.
  4. לוחצים על הכרטיסייה התראות.
  5. לראות את רשימת ההתראות.
  6. בקטע Alerts opened, לוחצים על Filter כדי להציג רק התראות פתוחות. אפשר גם לסנן התראות לפי שמות או ערכים של מאפיינים אחרים.
  7. לוחצים על שם ההתראה כדי לראות את הפרטים שלה.

נקודת קצה של Cortex

כאן מוסבר איך לגשת להתראות באמצעות נקודת הקצה של Cortex Alertmanager.

זיהוי נקודת הקצה של Cortex

כתובת ה-URL הבאה היא נקודת הקצה של המכונה של Cortex בפרויקט:

  https://GDC_URL/PROJECT_NAMESPACE/cortex/alertmanager/

מחליפים את מה שכתוב בשדות הבאים:

  • ‫GDC_URL: כתובת ה-URL של הארגון ב-GDC.
  • ‫PROJECT_NAMESPACE: מרחב השמות של הפרויקט.

    לדוגמה, נקודת הקצה של Cortex לפרויקט platform-obs בארגון org-1 היא https://org-1/platform-obs/cortex/alertmanager/.

אימות הבקשה של curl

  1. מורידים ומתקינים את ה-CLI של gdcloud.
  2. מגדירים את המאפיין gdcloud core/organization_console_url:

    gdcloud config set core/organization_console_url
    https://GDC_URL
    
  3. נכנסים לחשבון באמצעות ספק הזהויות שהוגדר:

    gdcloud auth login
    
  4. משתמשים בשם המשתמש ובסיסמה כדי לאמת את החשבון ולהיכנס אליו.

    אחרי ההתחברות, אפשר להשתמש בכותרת ההרשאה בבקשת ה-curl באמצעות הפקודה gdcloud auth print-identity-token. מידע נוסף זמין במאמר gdcloud auth.

שליחת קריאה לנקודת הקצה של Cortex

כדי להגיע לנקודת הקצה של Cortex באמצעות הכלי curl:

  1. מאמתים את הבקשה של curl.
  2. משתמשים ב-curl כדי לשלוח קריאה לנקודת הקצה של Cortex, ומרחיבים את כתובת ה-URL באמצעות המפרט הרגיל של Alertmanager API‏ (https://prometheus.io/docs/prometheus/latest/querying/api/#alertmanagers) כדי לשלוח שאילתות לגבי התראות.

    דוגמה לבקשת curl:

      curl https://GDC_URL/PROJECT_NAME/cortex/alertmanager/api/v1/alertmanagers \
      -H "Authorization: Bearer $(gdcloud auth print-identity-token \
      --audiences=https://GDC_URL)"
    

    הפלט מתקבל אחרי הפקודה. התגובה מה-API היא בפורמט JSON.