מעקב אחרי התראות ב-Google Distributed Cloud (GDC) במכשיר עם air gap מאפשר לכם לעקוב אחרי התראות פעילות בפרויקט ולפתור בעיות שקשורות אליהן, אחרי שיצרתם כללי התראות. במסוף GDC אפשר לבדוק את חומרת ההתראה, משך הזמן, הסטטוס והתוויות. לסקריפטים, למשימות cron ולשילובים בהתאמה אישית, שולחים שאילתה לנקודת הקצה (endpoint) של HTTP ב-Cortex Alertmanager בפרויקט באמצעות curl.
לפני שמתחילים
כדי לקבל את ההרשאות שנדרשות לשליחת שאילתות על התראות ולהצגה שלהן, בקשו מהאדמין של Project IAM להקצות לכם את אחד מהתפקידים המשויכים של Project Cortex Alertmanager במרחב השמות של הפרויקט. בהתאם לרמת הגישה וההרשאות שאתם צריכים, יכול להיות שתקבלו תפקידי עריכה או צפייה במשאב הזה בפרויקט.
כדי לקבל את ההרשאות שנדרשות לייצוא יומנים, צריך לבקש מהאדמין של Project IAM להקצות לכם את התפקיד "צפייה ב-Grafana בפרויקט" (project-grafana-viewer). תהליך בקרת גישה המבוססת על תפקידים (RBAC) מאפשר לכם לגשת להמחשות של נתונים בצורה בטוחה. מידע נוסף על התפקידים האלה זמין במאמר הכנת הרשאות IAM.
בטבלה הבאה מפורטות הדרישות של Role לגבי PA and AO persona.
| פרסונה | אובייקט | אשכול | תפקיד | מרחב שמות | קבוצה/משתמש | הגדרה |
|---|---|---|---|---|---|---|
| PA | alertmanager | מנהל חשבון ארגוני | project-cortex-alertmanager-viewer |
platform-obs | קבוצה | 1 |
| PA | alertmanager | מנהל חשבון ארגוני | 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 |
המזהה של המשתמש שמקבל את התפקיד. לרוב מדובר בכתובת אימייל. לדוגמה, platform-administrator@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קובץ 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/AO באשכול org. אחרי שמגדירים את ההגדרה הזו, אפשר לעיין בקטע מסוף במסמך הזה כדי לראות התראות במסוף GDC.
פקודת Kubectl
זהו הפורמט הכללי של הפקודה:
kubectl --kubeconfig `KUBECONFIG` create rolebinding `RULE_NAME` -n `NAMESPACE` --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: NAMESPACE subjects: - kind: User name: EMAIL_ADDRESS apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: project-cortex-alertmanager-viewer apiGroup: rbac.authorization.k8s.io
נקודת קצה של Grafana
למפעילי אפליקציות (AO):
כדי לגשת לנקודת הקצה של הפרויקט, פותחים את כתובת ה-URL הבאה:
https://GDC_URL/PROJECT_NAMESPACE/grafana
מחליפים את מה שכתוב בשדות הבאים:
- GDC_URL: כתובת ה-URL של הארגון ב-GDC.
- PROJECT_NAMESPACE: מרחב השמות של הפרויקט.
ממשק המשתמש של הפרויקט מכיל לוחות בקרה שמוגדרים כברירת מחדל, כמו לוח הבקרה Alerts - Overview עם מידע על התראות. כששולחים שאילתות לגבי התראות דרך ממשק המשתמש, אפשר לאחזר באופן חזותי מידע על התראות מהפרויקט ולקבל תצוגה משולבת של המשאבים, כדי להגביר את המודעות ולפתור בעיות במהירות.
לאדמין בפלטפורמה (PA):
פותחים את כתובת ה-URL הבאה כדי לגשת לנקודת הקצה של הפרויקט ב-platform-obs:
https://GDC_URL/platform-obs/grafana
מחליפים את GDC_URL בכתובת ה-URL של הארגון ב-GDC.
ממשק המשתמש (UI) של המכונה למעקב אחרי המערכת כולל לוחות בקרה שמוגדרים כברירת מחדל, כמו לוח הבקרה Alerts - Overview עם מידע על התראות לגבי ניטור נתונים. כששולחים שאילתות לגבי התראות דרך ממשק המשתמש, אפשר לאחזר באופן חזותי מידע על התראות מהפרויקט ולקבל תצוגה משולבת של המשאבים, כדי להגביר את המודעות ולפתור בעיות במהירות.

איור 1. לוח הבקרה Alerts - Overview בממשק המשתמש של Grafana.
הצגה וסינון של התראות פתוחות
כדי לשלוח שאילתה ולסנן התראות פתוחות ממרחב השמות של הפרויקט, בוחרים באחת מהשיטות הבאות:
המסוף
כדי לראות את ההתראות הפתוחות בפרויקט דרך מסוף GDC:
- נכנסים למסוף GDC.
- בוחרים את הפרויקט במסוף GDC.
- בתפריט הניווט, לוחצים על Operations > Alerting.
- לוחצים על הכרטיסייה התראות.
- לראות את רשימת ההתראות.
- בקטע Alerts opened, לוחצים על Filter כדי להציג רק התראות פתוחות. אפשר גם לסנן התראות לפי שמות או ערכים של מאפיינים אחרים.
- לוחצים על שם ההתראה כדי לראות את הפרטים שלה.
נקודת קצה של 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
- מורידים ומתקינים את ה-CLI של gdcloud.
מגדירים את המאפיין gdcloud
core/organization_console_url:gdcloud config set core/organization_console_url https://GDC_URLנכנסים לחשבון באמצעות ספק הזהויות שהוגדר:
gdcloud auth loginמשתמשים בשם המשתמש ובסיסמה כדי לאמת את החשבון ולהיכנס אליו.
אחרי ההתחברות, אפשר להשתמש בכותרת ההרשאה בבקשת ה-cURL באמצעות הפקודה
gdcloud auth print-identity-token. מידע נוסף זמין במאמר gdcloud auth.
שליחת קריאה לנקודת הקצה של Cortex
כדי להגיע לנקודת הקצה של Cortex באמצעות הכלי curl:
- מאמתים את הבקשה של
curl. משתמשים ב-
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.
Alertmanager
בעזרת Alertmanager אתם יכולים לעקוב אחרי התראות מאפליקציות לקוח. אתם יכולים לבדוק ולהשתיק התראות באמצעות Alertmanager, ולסנן או לקבץ התראות:

איור 2. אפשרות בתפריט לשליחת שאילתות ליומני הביקורת מ-Alertmanager.
כללי מדיניות התראות מוגדרים מראש
בטבלה הבאה מפורטים כללי ההתראות שמותקנים מראש ב-Prometheus:
| שם | תיאור |
|---|---|
| KubeAPIDown (קריטית) | KubeAPI נעלם מ-Prometheus target discovery למשך 15 דקות. |
| KubeClientErrors (אזהרה) | שיעור השגיאות של לקוח שרת ה-API של Kubernetes > 0.01 למשך 15 דקות. |
| KubeClientErrors (קריטי) | שיעור השגיאות של לקוח שרת ה-API של Kubernetes > 0.1 למשך 15 דקות. |
| KubePodCrashLooping (אזהרה) | ה-Pod נמצא במצב של לולאת קריסה במשך יותר מ-15 דקות. |
| KubePodNotReady (אזהרה) | ה-Pod לא מוכן כבר יותר מ-15 דקות. |
| KubePersistentVolumeFillingUp (קריטי) | בייטים פנויים של PersistentVolume שנתבע < 0.03. |
| KubePersistentVolumeFillingUp (אזהרה) | בייטים פנויים של PersistentVolume שנתבע < 0.15. |
| KubePersistentVolumeErrors (קריטי) | הנפח הקבוע נמצא בשלב Failed או Pending במשך חמש דקות. |
| KubeNodeNotReady (אזהרה) | הצומת לא מוכן כבר יותר מ-15 דקות. |
| KubeNodeCPUUsageHigh (קריטי) | השימוש במעבד (CPU) של הצומת הוא יותר מ-80%. |
| KubeNodeMemoryUsageHigh (קריטי) | השימוש בזיכרון של הצומת הוא יותר מ-80%. |
| NodeFilesystemSpaceFillingUp (אזהרה) | השימוש במערכת הקבצים של הצומת הוא יותר מ-60%. |
| NodeFilesystemSpaceFillingUp (קריטי) | השימוש במערכת הקבצים של הצומת הוא יותר מ-85%. |
| CertManagerCertExpirySoon (אזהרה) | תוקף האישור יפוג בעוד 21 ימים. |
| CertManagerCertNotReady (קריטית) | האישור לא מוכן להצגת תנועה אחרי 10 דקות. |
| CertManagerHittingRateLimits (critical) | הגעתם למגבלת הקצב של יצירת וחידוש אישורים למשך חמש דקות. |
| DeploymentNotReady (קריטי). | פריסה באשכול של מנהל חשבון ארגוני נמצאת במצב "לא מוכן" במשך יותר מ-15 דקות. |
דוגמה ל-alertmanagerConfigurationConfigmaps
התחביר של ההגדרות ב-ConfigMaps ש-alertmanagerConfigurationConfigmaps מפרט חייב להיות תואם ל-https://prometheus.io/docs/alerting/latest/configuration/
apiVersion: observability.gdc.goog/v1alpha1
kind: ObservabilityPipeline
metadata:
# Choose namespace that matches the project's namespace
namespace: kube-system
name: observability-config
# Configure Alertmanager
alerting:
# Storage size for alerting data within organization
# Permission: PA
localStorageSize: 1Gi
# Permission: PA & AO
# alertmanager config must be under the key "alertmanager.yml" in the configMap
alertmanagerConfig: <configmap-for-alertmanager-config>
# Permission: PA
volumes:
- <volume referenced in volumeMounts>
# Permission: PA
volumeMounts:
- <volumeMount referenced in alertmanagerConfig>
הגדרת כלל לדוגמה
# Configures either an alert or a target record for precomputation
apiVersion: monitoring.gdc.goog/v1alpha1
kind: MonitoringRule
metadata:
# Choose namespace that contains the metrics that rules are based on
# Note: alert/record will be produced in the same namespace
namespace: g-fleetns-a
name: alerting-config
spec:
# Rule evaluation interval
interval: <duration>
# Configure limit for number of alerts (0: no limit)
# Optional, Default: 0 (no limit)
limit: <int>
# Configure record rules
recordRules:
# Define which timeseries to write to (must be a valid metric name)
- record: <string>
# Define PromQL expression to evaluate for this rule
expr: <string>
# Define labels to add or overwrite
# Optional, Map of {key, value} pairs
labels:
<labelname>: <labelvalue>
# Configure alert rules
alertRules:
# Define alert name
- alert: <string>
# Define PromQL expression to evaluate for this rule
# https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
expr: <string>
# Define when an active alert moves from pending to firing
# Optional, Default: 0s
for: <duration>
# Define labels to add or overwrite
# Required, Map of {key, value} pairs
# Required labels:
# severity: [error, critical, warning, info]
# code:
# resource: component/service/hardware related to alert
# additional labels are optional
labels:
severity: <enum: [error, critical, warning, info]>
code:
resource: <Short name of the related operable component>
<labelname>: <tmpl_string>
# Define annotations to add
# Optional, Map of {key, value} pairs
# Recommended annotations:
# message: value of Message field in UI
# expression: value of Rule field in UI
# runbookurl: URL for link in Actions to take field in UI
annotations:
<labelname>: <tmpl_string>
# Configures either an alert or a target record for precomputation
apiVersion: logging.gdc.goog/v1alpha1
kind: LoggingRule
metadata:
# Choose namespace that contains the logs that rules are based on
# Note: alert/record will be produced in the same namespace
namespace: g-fleetns-a
name: alerting-config
spec:
# Choose which log source to base alerts on (Operational/Audit/Security Logs)
# Optional, Default: Operational
source: <string>
# Rule evaluation interval
interval: <duration>
# Configure limit for number of alerts (0: no limit)
# Optional, Default: 0 (no limit)
limit: <int>
# Configure record rules
recordRules:
# Define which timeseries to write to (must be a valid metric name)
- record: <string>
# Define LogQL expression to evaluate for this rule
# https://grafana.com/docs/loki/latest/rules/
expr: <string>
# Define labels to add or overwrite
# Optional, Map of {key, value} pairs
labels:
<labelname>: <labelvalue>
# Configure alert rules
alertRules:
# Define alert name
- alert: <string>
# Define LogQL expression to evaluate for this rule
expr: <string>
# Define when an active alert moves from pending to firing
# Optional, Default: 0s
for: <duration>
# Define labels to add or overwrite
# Required, Map of {key, value} pairs
# Required labels:
# severity: [error, critical, warning, info]
# code:
# resource: component/service/hardware related to alert
# additional labels are optional
labels:
severity: <enum: [error, critical, warning, info]>
code:
resource: <Short name of the related operable component>
<labelname>: <tmpl_string>
# Define annotations to add
# Optional, Map of {key, value} pairs
# Recommended annotations:
# message: value of Message field in UI
# expression: value of Rule field in UI
# runbookurl: URL for link in Actions to take field in UI
annotations:
<labelname>: <tmpl_string>
שאילתות על התראות מ-HTTP API
פלטפורמת הניראות (observability) חושפת נקודת קצה ל-API של HTTP כדי לשלוח שאילתות ולקרוא מדדים, התראות ונתונים אחרים של סדרות זמנים מהפרויקט שלכם, לצורך מעקב אחרי המערכת.אפשר לשלוח שאילתות לגבי התראות ישירות מ-Observability HTTP API כדי להגדיר משימות אוטומטיות, להתאים את התגובות וליצור שילובים בהתאם לתרחיש לדוגמה. לדוגמה, אפשר להוסיף את הפלט לפקודה אחרת, לייצא פרטים לפורמטים של קובצי טקסט או להגדיר משימת cron ב-Linux. אתם יכולים לשלוח קריאה ל-Observability HTTP API מממשק שורת הפקודה (CLI) או מדפדפן אינטרנט, ולקבל את התוצאה בפורמט JSON.
בקטע הזה מוסבר איך להפעיל את נקודת קצה ל-API של Observability HTTP מה-CLI באמצעות מפרט ה-API שלכדי לשלוח שאילתות לגבי התראות.
אפשר לשלוח שאילתות לגבי התראות ישירות מ-Observability HTTP API כדי להגדיר משימות אוטומטיות, להתאים את התגובות וליצור שילובים בהתאם לתרחיש לדוגמה. לדוגמה, אפשר להוסיף את הפלט לפקודה אחרת, לייצא פרטים לפורמטים של קובצי טקסט או להגדיר משימת cron ב-Linux. אתם יכולים לשלוח קריאה ל-Observability HTTP API מממשק שורת הפקודה (CLI) או מדפדפן אינטרנט, ולקבל את התוצאה בפורמט JSON.
בקטע הזה מוסבר איך לשלוח קריאה לנקודת קצה ל-API של Observability HTTP מה-CLI באמצעות מפרט Alertmanager API כדי לשלוח שאילתות על מדדים.
לפני שמתחילים
כדי לקבל את ההרשאות שנדרשות לגישה לנקודת קצה ל-API של Observability HTTP, צריך לבקש מהאדמין של Project IAM להקצות לכם את התפקיד Project Cortex Alertmanager Viewer (project-cortex-alertmanager-viewer) במרחב השמות של הפרויקט.
אדמין ה-IAM של הפרויקט יכול לתת לכם גישה על ידי יצירת קישור לתפקיד:
א. אדמין ברמה הבסיסית (root) של מפעיל התשתית (IO) – Project Cortex Alertmanager Viewer:
kubectl --kubeconfig $HOME/root-admin-kubeconfig create rolebinding
io-cortex-alertmanager-viewer-binding -n infra-obs
--user=fop-infrastructure-operator@example.com
--role=project-cortex-alertmanager-viewer
ב. אדמין ברמת הפלטפורמה (PA) אדמין ברמה הבסיסית (Root) – Project Cortex Alertmanager Viewer:
kubectl --kubeconfig $HOME/root-admin-kubeconfig create rolebinding
pa-cortex-alertmanager-viewer-binding -n platform-obs
--user=fop-platform-admin@example.com
--role=project-cortex-alertmanager-viewer
ג. מפעיל אפליקציה (AO) אדמין ברמה הבסיסית (Root) – צופה ב-Alertmanager של Project Cortex: פרויקט: $AO_PROJECT שם משתמש של AO: $AO_USER
kubectl --kubeconfig $HOME/root-admin-kubeconfig create rolebinding
project-cortex-alertmanager-viewer-binding -n $AO_PROJECT
--user=$AO_USER
--role=project-cortex-alertmanager-viewer
אחרי שקישור התפקיד נוצר, אתם יכולים לגשת ל-Alertmanager המתאים באמצעות שם המשתמש שלכם להתחברות.
אימות של קישור התפקידים
kubectl --kubeconfig $HOME/org-1-admin-kubeconfig get rolebinding -n platform-obs
למידע על הגדרת קישורי תפקידים ממסוף GDC, קראו את המאמר מתן גישה למשאבים.
נקודת קצה של Cortex
כתובת ה-URL הבאה היא נקודת הקצה של Cortex לגישה להתראות:
https://GDC_URL/PROJECT_NAME/cortex/alertmanager/
מחליפים את מה שכתוב בשדות הבאים:
- GDC_URL: כתובת ה-URL של הארגון ב-GDC.
- PROJECT_NAME: שם הפרויקט.
שליחת קריאה לנקודת הקצה ל-API
כדי להגיע לנקודת קצה ל-API של Cortex מה-CLI ולשלוח שאילתה על התראות, פועלים לפי השלבים הבאים:
- מוודאים שאתם עומדים בדרישות המוקדמות.
- פותחים את ה-CLI.
משתמשים בכלי
curlכדי לשלוח קריאה לכתובת ה-URL של נקודת הקצה של Cortex, ומרחיבים את כתובת ה-URL באמצעות https://prometheus.io/docs/prometheus/latest/querying/api/#alertmanagers הרגיל כדי לשלוח שאילתות לגבי התראות. לדוגמה:curl https://console.org-1.zone1.google.gdch.test/alice/cortex/alertmanager/api/v1/alertmanagers
הפלט מתקבל ב-CLI אחרי הפקודה. פורמט התגובה מה-API הוא JSON.