‫PromQL for Cloud Monitoring

במאמר הזה מוסבר איך להגדיר את Grafana כדי לקרוא נתוני מדדים מ-Cloud Monitoring. אחרי זה תוכלו להשתמש ב-PromQL כדי להציג את הנתונים בתרשימים. ‫Grafana ו-Cloud Monitoring מקושרים באמצעות תהליך שנקרא סנכרון מקור נתונים, שמאפשר תקשורת בין מקור נתונים ב-Grafana לבין Cloud Monitoring. הכלי לסנכרון מקורות נתונים מבצע את הפעולות הבאות:

  • שולחת ערכי הגדרה למקור נתונים של Grafana.
  • שמירה של פרטי אימות עבור Cloud de Confiance by S3NS חשבון שירות שיכול לקרוא נתונים של מדדים מ-Cloud Monitoring.

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

איך נותנים ל-Grafana הרשאה לקרוא נתוני מדדים

בקטע הזה מוסבר איך להגדיר הרשאות בין Cloud Monitoring לבין Grafana באמצעות כלי לסנכרון מקורות נתונים, כדי ליצור ולסנכרן פרטי כניסה.

שימוש בכלי לסנכרון מקורות נתונים לצורך הרשאה

כל ממשקי ה-API מחייבים אימות באמצעות OAuth2, אבל Grafana לא תומכת באימות OAuth2 לחשבונות שירות שמשמשים עם מקורות נתונים של Prometheus.Cloud de Confiance by S3NS כדי להשתמש ב-Grafana עם Cloud Monitoring, צריך להשתמש בכלי לסנכרון מקורות נתונים כדי ליצור פרטי כניסה מסוג OAuth2 לחשבון השירות ולסנכרן אותם עם Grafana באמצעות Grafana data source API.

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

כלי הסנכרון של מקורות הנתונים הוא כלי עם ממשק שורת פקודה (CLI) ששולח מרחוק ערכי הגדרה למקור נתונים מסוים של Grafana Prometheus. כך מוודאים שמקור הנתונים שלכם ב-Grafana מוגדר בצורה נכונה:

  • אימות, שמתבצע על ידי רענון תקופתי של אסימון גישה מסוג OAuth2
  • הגדרת Cloud Monitoring API ככתובת ה-URL של שרת Prometheus
  • שיטת ה-HTTP מוגדרת ל-GET
  • הסוג והגרסה של Prometheus מוגדרים לגרסה מינימלית של 2.40.x
  • הערכים של הזמן הקצוב לתפוגה של HTTP ושל שאילתה מוגדרים ל-2 דקות

הכלי לסנכרון מקורות נתונים צריך לפעול שוב ושוב. אסימוני גישה לחשבון שירות תקפים לשעה אחת כברירת מחדל, ולכן הפעלת הכלי לסנכרון מקורות נתונים כל 10 דקות מבטיחה שיהיה לכם חיבור מאומת רציף בין Grafana לבין Cloud Monitoring API.

הגדרה ואימות של מקור הנתונים של Grafana

אתם יכולים להשתמש ב-Grafana כדי להריץ שאילתות על נתוני מדדים של Cloud Monitoring משירותי Google Kubernetes Engine או מסביבות אחרות. ההוראות משתמשות במשתנים שאפשר לערוך כדי ליצור פקודות שאפשר להריץ. מומלץ מאוד להשתמש במשתנים הניתנים לעריכה ובסמלי ההעתקה וההדבקה שניתן ללחוץ עליהם, שמוטמעים בדוגמאות הקוד.

GKE

כדי לפרוס ולהפעיל את הכלי לסנכרון מקורות נתונים באשכול Kubernetes:

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

    בשלב הבא, מוודאים שהגדרתם והרשיתם את הכלי לסנכרון מקורות נתונים בצורה נכונה:

  2. מגדירים את כתובת ה-URL של מופע Grafana, לדוגמה: ‫https://yourcompanyname.grafana.net לפריסה של Grafana Cloud או ‫http://grafana.NAMESPACE_NAME.svc:3000 למופע מקומי שהוגדר באמצעות קובץ ה-YAML של פריסת הבדיקה.

    אם אתם פורסים את Grafana באופן מקומי והאשכול שלכם מוגדר לאבטח את כל התנועה בתוך האשכול באמצעות TLS, אתם צריכים להשתמש ב-https:// בכתובת ה-URL ולאמת את עצמכם באמצעות אחת מאפשרויות האימות הנתמכות של TLS.

  3. בוחרים את מקור הנתונים של Grafana Prometheus שרוצים להשתמש בו ב-Cloud Monitoring, שיכול להיות מקור נתונים חדש או מקור נתונים קיים, ואז מאתרים את ה-UID של מקור הנתונים ורושמים אותו. אפשר למצוא את ה-UID של מקור הנתונים בחלק האחרון של כתובת ה-URL כשמגדירים מקור נתונים או כשבוחנים אותו. לדוגמה: https://yourcompanyname.grafana.net/connections/datasources/edit/GRAFANA_DATASOURCE_UID. אין להעתיק את כתובת ה-URL המלאה של מקור הנתונים. מעתיקים רק את המזהה הייחודי מכתובת ה-URL.

  4. מגדירים חשבון שירות ב-Grafana על ידי יצירת חשבון השירות ויצירת אסימון לשימוש בחשבון:

    1. בסרגל הצד לניווט ב-Grafana, לוחצים על Administration > Users and Access > Service Accounts (ניהול > משתמשים וגישה > חשבונות שירות).
    2. כדי ליצור את חשבון השירות, לוחצים על Add service account, נותנים לו שם ומקצים לו את התפקיד Admin ב-Grafana. אם הגרסה של Grafana מאפשרת הרשאות מפורטות יותר, אפשר להשתמש בתפקיד Data Sources > Writer.

    3. לוחצים על הוספת אסימון של חשבון שירות.

    4. מגדירים את תוקף האסימון ל'ללא תוקף', לוחצים על יצירת אסימון ומעתיקים את האסימון שנוצר ללוח כדי להשתמש בו בתור GRAFANA_SERVICE_ACCOUNT_TOKEN בשלב הבא.

  5. מגדירים את משתני הסביבה הבאים באמצעות התוצאות של השלבים הקודמים:

    # These values are required.
    PROJECT_ID=SCOPING_PROJECT_ID # The value from Step 1.
    GRAFANA_API_ENDPOINT=GRAFANA_INSTANCE_URL # The value from step 2. This is a URL.
    DATASOURCE_UIDS=GRAFANA_DATASOURCE_UID # The value from step 3. This is not a URL.
    GRAFANA_API_TOKEN=GRAFANA_SERVICE_ACCOUNT_TOKEN # The value from step 4.
    GCM_ENDPOINT_OVERRIDE=--gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
    
  6. מריצים את הפקודה הבאה כדי ליצור CronJob שמרענן את מקור הנתונים באתחול ואז כל 10 דקות. אם אתם משתמשים באיחוד שירותי אימות הזהות של עומסי עבודה ב-GKE, הערך של NAMESPACE_NAME צריך להיות אותו מרחב שמות שקישרתם קודם לחשבון השירות.

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.17.2/cmd/datasource-syncer/datasource-syncer.yaml \
    | sed 's|$DATASOURCE_UIDS|'"$DATASOURCE_UIDS"'|; s|$GRAFANA_API_ENDPOINT|'"$GRAFANA_API_ENDPOINT"'|; s|$GRAFANA_API_TOKEN|'"$GRAFANA_API_TOKEN"'|; s|$PROJECT_ID|'"$PROJECT_ID"'|; s|$GCM_ENDPOINT_OVERRIDE|'"$GCM_ENDPOINT_OVERRIDE"'|;' \
    | kubectl -n NAMESPACE_NAME apply -f -
    
  7. עוברים למקור הנתונים החדש שהגדרתם ב-Grafana ומוודאים שהערך של כתובת ה-URL של שרת Prometheus מתחיל ב-https://monitoring.s3nsapis.fr. יכול להיות שתצטרכו לרענן את הדף. אחרי האימות, גוללים לחלק התחתון של הדף ולוחצים על שמירה ובדיקה. כדי לוודא שההשלמה האוטומטית של התוויות ב-Grafana פועלת, צריך ללחוץ על הלחצן הזה לפחות פעם אחת.

אימות פרטי הכניסה לחשבון שירות

אם באשכול Kubernetes שלכם מופעל איחוד זהויות של עומסי עבודה ל-GKE, אתם יכולים לדלג על הקטע הזה.

כשמריצים ב-GKE, ‏ Cloud Monitoring מאחזר באופן אוטומטי פרטי כניסה מהסביבה על סמך חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine. לחשבון השירות שמוגדר כברירת מחדל יש את ההרשאות הנדרשות. אם אתם לא משתמשים באיחוד שירותי אימות הזהות של עומסי עבודה ב-GKE, ואם הסרתם בעבר את ההרשאות שמשויכות לתפקידים monitoring.metricWriter ו-monitoring.viewer מחשבון השירות של צומת ברירת המחדל, תצטרכו להוסיף מחדש את ההרשאות החסרות האלה לפני שתמשיכו.

אם צריך להוסיף מחדש הרשאות לחשבון השירות של הצומת, צריך ליצור תפקיד בהתאמה אישית, לתת לו את ההרשאות בתפקידים monitoring.metricWriter וmonitoring.viewer, ואז להקצות את התפקיד בהתאמה אישית לחשבון השירות. אי אפשר להעניק את התפקידים monitoring.metricWriter ו-monitoring.viewer.

הגדרת חשבון שירות לשימוש באיחוד זהויות של עומסי עבודה ב-GKE

אם איחוד זהויות של עומסי עבודה ל-GKE לא מופעל באשכול Kubernetes, אפשר לדלג על הקטע הזה.

‫Cloud Monitoring אוסף נתונים של מדדים באמצעות Cloud Monitoring API. אם באשכול שלכם נעשה שימוש באיחוד זהויות של עומסי עבודה ל-GKE, אתם צריכים לתת לחשבון השירות של Kubernetes הרשאה ל-Monitoring API. בקטע הזה מתוארים הנושאים הבאים:

יצירה של חשבון השירות וקישור שלו

השלב הזה מופיע בכמה מקומות במסמכי התיעוד של Cloud Monitoring. אם כבר ביצעתם את השלב הזה במסגרת משימה קודמת, אין צורך לחזור עליו. אפשר לדלג אל אישור חשבון השירות.

קודם יוצרים חשבון שירות, אם עדיין לא עשיתם זאת:

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts create SERVICE_ACCT_NAME

אחר כך משתמשים ברצף הפקודות הבא כדי לקשר את חשבון השירות SERVICE_ACCT_NAMEלחשבון השירות שמוגדר כברירת מחדל ב-Kubernetes במרחב השמות NAMESPACE_NAME:

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --condition=None \
  --member "serviceAccount:PROJECT_ID.s3ns.svc.id.goog[NAMESPACE_NAME/default]" \
  SERVICE_ACCT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com \
&&
kubectl annotate serviceaccount \
  --namespace NAMESPACE_NAME \
  default \
  iam.gke.io/gcp-service-account=SERVICE_ACCT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com

אם אתם משתמשים במרחב שמות או בחשבון שירות אחרים של GKE, צריך לשנות את הפקודות בהתאם.

אישור חשבון השירות

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

הפקודה הבאה מעניקה לחשבון השירות Cloud de Confiance ,‏ SERVICE_ACCT_NAME את התפקידים ב-Monitoring API שדרושים לו כדי לקרוא נתונים של מדדים.

אם כבר הענקתם לחשבון השירות תפקיד ספציפי כחלק ממשימה קודמת, אין צורך לעשות זאת שוב. Cloud de Confiance

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com \
  --role=roles/monitoring.viewer \
  --condition=None \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com \
  --role=roles/iam.serviceAccountTokenCreator \
  --condition=None

ניפוי באגים בהגדרת איחוד הזהויות של עומסי עבודה ל-GKE

אם נתקלתם בבעיות בהפעלת איחוד זהויות של עומסי עבודה ל-GKE, תוכלו לעיין במסמכים בנושא אימות ההגדרה של איחוד זהויות של עומסי עבודה ל-GKE ובמדריך לפתרון בעיות באיחוד זהויות של עומסי עבודה ל-GKE.

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

איחוד זהויות של עומסי עבודה ל-GKE בסביבות ייצור

בדוגמה שמתוארת במסמך הזה, חשבון השירות Cloud de Confiance משויך לחשבון השירות שמוגדר כברירת מחדל ב-Kubernetes, ומקבל את כל ההרשאות הנדרשות לשימוש ב-Monitoring API. Cloud de Confiance

בסביבת ייצור, יכול להיות שתרצו להשתמש בגישה מפורטת יותר, עם חשבון שירות לכל רכיב, ולכל אחד מהם הרשאות מינימליות. מידע נוסף על הגדרת חשבונות שירות לניהול Workload Identity זמין במאמר שימוש באיחוד זהויות של עומסי עבודה ל-GKE.

במקום אחר

כדי לפרוס ולהריץ את הכלי לסנכרון מקורות נתונים בסביבות שאינן Google Kubernetes Engine, צריך לבצע את הפעולות הבאות:

  1. מגדירים חשבון שירות לשימוש של הכלי לסנכרון מקורות נתונים:

    1. הגדרת פרויקט ברירת מחדל לפקודות של gcloud:

      gcloud config set project PROJECT_ID
      
    2. יוצרים חשבון שירות לשימוש של הכלי לסנכרון מקורות נתונים:

      gcloud iam service-accounts create DS_SYNCER_SVCACCT_NAME
      
    3. נותנים לחשבון השירות הרשאה לקרוא נתונים של מדדים:

       gcloud projects add-iam-policy-binding PROJECT_ID \
       --member=serviceAccount:DS_SYNCER_SVCACCT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com \
       --role=roles/monitoring.viewer \
       && \
       gcloud projects add-iam-policy-binding PROJECT_ID \
       --member=serviceAccount:DS_SYNCER_SVCACCT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com \
       --role=roles/iam.serviceAccountTokenCreator
      
    4. יוצרים מפתח לחשבון השירות:

      gcloud iam service-accounts keys create DS_SYNCER_SVCACCT_KEYFILE_NAME.json \
      --iam-account DS_SYNCER_SVCACCT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com
      

      הנתיב לספרייה הזו משמש להגדרת משתנה סביבה בשלב הבא. כדי לקבל את הנתיב, מריצים את הפקודה pwd ורושמים את הערך:

      pwd
      DS_SYNCER_SVCACCT_KEYFILE_DIR
      
  2. מזהים את כתובת ה-URL של מופע Grafana, לדוגמה https://yourcompanyname.grafana.net לפריסת Grafana Cloud או https://localhost:3000 למופע בדיקה מקומי. הערך הזה משמש בפקודה להפעלת הכלי לסנכרון מקורות נתונים.

    אם אתם פורסים את Grafana באופן מקומי עבור אשכול Kubernetes שהוגדר לאבטח את כל התנועה בתוך האשכול באמצעות TLS, אתם צריכים להשתמש ב-https:// בכתובת ה-URL, ובשלב הבא לבצע אימות באמצעות אחת מאפשרויות האימות הנתמכות של TLS.

  3. ב-Grafana, מוסיפים מקור נתונים של Prometheus לשימוש ב-Cloud Monitoring, ורושמים את ה-UID של מקור הנתונים:

    1. לוחצים על קישורים > מקורות נתונים > הוספת מקור נתונים חדש. בוחרים באפשרות Prometheus מתוך רשימת מסדי הנתונים של סדרות הזמן.

    2. בשדה כתובת ה-URL של שרת Prometheus, מזינים את הערך הבא:

      https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/
      
    3. לוחצים על שמירה ובדיקה.

      כתובת ה-URL בדפדפן של דף מקור הנתונים מכילה את ממשק המשתמש של מקור הנתונים, לדוגמה, https://yourcompanyname.grafana.net/connections/datasources/edit/GRAFANA_DATASOURCE_UID.

    4. רושמים את ה-UID של מקור הנתונים. הערך הזה משמש בפקודה להפעלת הכלי לסנכרון מקורות נתונים. אל תעתיקו את כתובת ה-URL המלאה של מקור הנתונים. מעתיקים רק את המזהה הייחודי בכתובת ה-URL, שהוא ערך כמו ee0z3woqjah34e:

      GRAFANA_DATASOURCE_UID
      
  4. מגדירים חשבון שירות ב-Grafana על ידי יצירת חשבון השירות ויצירת אסימון לשימוש בחשבון השירות:

    1. בסרגל הצד לניווט ב-Grafana, לוחצים על Administration > Users and Access > Service Accounts (ניהול > משתמשים וגישה > חשבונות שירות).
    2. כדי ליצור את חשבון השירות, לוחצים על Add service account, נותנים לו שם ומקצים לו את התפקיד Admin ב-Grafana.

    3. לוחצים על הוספת אסימון של חשבון שירות.

    4. מגדירים את התפוגה של האסימון ל'ללא תפוגה', לוחצים על יצירת אסימון ומעתיקים את האסימון שנוצר למשתנה הבא שאפשר לערוך. הערך הזה משמש בפקודה להפעלת הכלי לסנכרון מקורות נתונים.

      GRAFANA_SERVICE_ACCOUNT_TOKEN
      
  5. מריצים את הכלי לסנכרון מקורות נתונים. אפשר להריץ את הכלי לסנכרון מקובץ אימג' של קונטיינר שנבנה מראש באמצעות Docker, או לבנות את הקוד ממקור ולהריץ אותו באופן ידני. הכלי לסנכרון מקורות נתונים הוא אפליקציית Go, ולכן צריך להתקין את Go כדי ליצור את הכלי לסנכרון ממקור.

    Docker

    מריצים את הכלי לסנכרון מקורות נתונים מ-Docker באמצעות קובץ האימג' של הקונטיינר gke.gcr.io/prometheus-engine/datasource-syncer:v0.17.2-gke.2. לצורך בדיקה, אפשר להריץ את הכלי לסנכרון באופן ידני. אחרי שמוודאים שהחיבור פועל, צריך להשתמש במנגנון אוטומטי כמו משימת cron כדי להפעיל את הכלי לסנכרון מקורות הנתונים כל 10 דקות, כי אסימוני הגישה תקפים לשעה אחת בלבד. כך מבטיחים שהחיבור לא ייפסק.

    מריצים את הפקודה הבאה של Docker כדי להפעיל את הכלי לסנכרון מקורות נתונים:

    docker run --network container:grafana -v "DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json:/app/DS_SYNCER_SVCACCT_KEYFILE_NAME.json" gke.gcr.io/prometheus-engine/datasource-syncer:v0.17.2-gke.2
    -datasource-uids=UID_OF_GRAFANA_DATASOURCE
    -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN
    -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE
    -project-id=PROJECT_ID
    -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json
    -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
    

    כדי ליצור משימת cron להרצת הכלי לסנכרון מקורות נתונים:

    1. עורכים את טבלת ה-cron:

      cron -e
      
    2. מוסיפים רשומה שמריצה את הפקודה הקודמת כל 10 דקות:

      */10 * * * * * docker run --network container:grafana -v "DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json:/app/<KEY_ID>" gke.gcr.io/prometheus-engine/datasource-syncer:v0.17.2-gke.2 -datasource-uids=UID_OF_GRAFANA_DATASOURCE -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE -project-id=PROJECT_ID -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
      

    מידע נוסף על האפשרויות של שורת הפקודה שזמינות כשמריצים את הכלי לסנכרון מקורות נתונים מופיע במסמך README.

    קוד מקור

    1. כדי ליצור בעצמכם את הכלי לסנכרון מקורות נתונים:

      1. יוצרים ספרייה שתכיל את הקוד ועוברים לספרייה הזו:

        mkdir data-source-syncer-code
        
        cd data-source-syncer-code
        

        הנתיב לספרייה הזו משמש להגדרת משתנה סביבה בשלב הבא. כדי לקבל את הנתיב, מריצים את הפקודה pwd ומתעדים אותו במשתנה שאפשר לערוך:

        pwd
        PATH_TO_LOCAL_REPO_COPY
        
      2. משכפלים את הקוד מהגרסה הנוכחית של המאגר:

        git clone -b 'v0.17.2' --single-branch https://github.com/GoogleCloudPlatform/prometheus-engine
        
      3. עוברים לספרייה datasource-syncer ויוצרים את הקוד:

        cd prometheus-engine/cmd/datasource-syncer
        
        go build main.go
        
    2. מריצים את הכלי לסנכרון מקורות נתונים. כדי לבצע בדיקה, אפשר להריץ את הכלי לסנכרון באופן ידני. אחרי שמוודאים שהחיבור פועל, צריך להשתמש במנגנון אוטומטי כמו משימת cron כדי להפעיל את הכלי לסנכרון מקורות הנתונים כל 10 דקות, כדי שהחיבור לא יופסק. הסיבה לכך היא שלטוקנים של גישה יש תוקף של שעה אחת.

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

      main -datasource-uids=UID_OF_GRAFANA_DATASOURCE
      -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN
      -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE
      -project-id=PROJECT_ID
      -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json
      -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
      

      כדי ליצור משימת cron להרצת הכלי לסנכרון מקורות נתונים:

      1. עורכים את טבלת ה-cron:

         cron -e
        
      2. מוסיפים רשומה שמריצה את הפקודה הקודמת כל 10 דקות:

         */10 * * * * * main -datasource-uids=UID_OF_GRAFANA_DATASOURCE -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE -project-id=PROJECT_ID -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
        

      מידע נוסף על האפשרויות של שורת הפקודה שזמינות כשמריצים את הכלי לסנכרון מקורות נתונים מופיע במסמך README.

  6. עוברים למקור הנתונים החדש שהגדרתם ב-Grafana ומוודאים שהערך של כתובת ה-URL של שרת Prometheus מתחיל ב-https://monitoring.s3nsapis.fr. יכול להיות שתצטרכו לרענן את הדף. אחרי האימות, גוללים לחלק התחתון של הדף ולוחצים על שמירה ובדיקה. כדי לוודא שההשלמה האוטומטית של התוויות ב-Grafana פועלת, צריך ללחוץ על הלחצן הזה לפחות פעם אחת.

הצגת מדדים ב-Grafana

כדי לראות את המדדים מהפרויקט שלכם ב-Grafana: Cloud de Confiance

  1. לוחצים על ניתוח בחלונית הניווט או בדף מקורות נתונים.

  2. בשדה מדד, משתמשים בתפריט הנפתח כדי לבחור מדד. אפשר גם לבחור באפשרות Metrics explorer כדי לחפש מדדים ספציפיים. אם המדד משויך ליותר ממשאב אחד שנמצא במעקב, צריך להוסיף מסנן תווית monitored_resource לשאילתה ולבחור סוג משאב.

  3. מוסיפים עוד מסנני תוויות ופעולות כדי ליצור את השאילתה.

מידע על יצירת ייצוגים חזותיים ולוחות בקרה ב-Grafana זמין במאמר Panels and visualizations.

שליחת שאילתות על מדדי Cloud Monitoring באמצעות PromQL

אפשר לשלוח שאילתות על מדדים של Cloud Monitoring באמצעות מפרט UTF-8 ל-PromQL. שמות של מדדים בקידוד UTF-8 צריכים להיות בתוך מרכאות ולהיות מועברים לתוך הסוגריים המסולסלים. אם שמות התוויות מכילים תווים שלא תואמים לגרסאות קודמות, צריך להוסיף להם מרכאות. למדד Cloud Monitoring‏ kubernetes.io/container/cpu/limit_utilization, השאילתות הבאות שקולות:

  • {"kubernetes.io/container/cpu/limit_utilization", pod_name="foo"}
  • {__name__="kubernetes.io/container/cpu/limit_utilization", pod_name="foo"}.
  • {"__name__"="kubernetes.io/container/cpu/limit_utilization", "pod_name"="foo"}.

אפשר לשלוח שאילתות על מדדים של ערכי התפלגות ב-Cloud Monitoring כמו על היסטוגרמות של Prometheus, עם הסיומת _count, _sum או _bucket שנוספת לשם המדד.

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

למידת PromQL

כדי ללמוד את היסודות של השימוש ב-PromQL, מומלץ לעיין במסמכי המקור הפתוח. מקורות המידע הבאים יעזרו לכם להתחיל:

ציון סוג של משאב במעקב

כשמדד של Cloud Monitoring משויך רק לסוג משאב אחד במעקב של Cloud Monitoring, שליחת שאילתות ב-PromQL תפעל בלי שתצטרכו לציין סוג משאב באופן ידני. עם זאת, חלק מהמדדים ב-Cloud Monitoring, כולל חלק ממדדי המערכת, ממופים ליותר מסוג משאב אחד.

כדי לראות אילו סוגים של משאבים במעקב ממופים למדד מסוים, אפשר לעיין ברשימת Cloud de Confiance by S3NS המדדים. בכל רשומה במסמכי התיעוד מפורטים סוגי המשאבים במעקב שמשויכים אליה בעמודה הראשונה של כל רשומה מתחת לסוג. אם לא מופיעים סוגים של משאבים במעקב, אפשר לשייך את המדד לכל סוג.

אם מדד משויך ליותר מסוג משאב אחד, צריך לציין את סוג המשאב בשאילתת PromQL. יש תווית מיוחדת, monitored_resource, שאפשר להשתמש בה כדי לבחור את סוג המשאב.

סוגי משאבים שבמעקב הם ברוב המקרים מחרוזת קצרה, כמו gce_instance, אבל לפעמים הם מופיעים ככתובות URI מלאות, כמו monitoring.googleapis.com/MetricIngestionAttribution. דוגמאות לשאילתות תקינות ב-PromQL:

  • logging_googleapis_com:byte_count{monitored_resource="k8s_container"}
  • loadbalancing_googleapis_com:l3_external_egress_bytes_count{monitored_resource="loadbalancing.googleapis.com/ExternalNetworkLoadBalancerRule"}

אם לא משתמשים בתווית monitored_resource כשצריך, מוצגת השגיאה הבאה:

metric is configured to be used with more than one monitored resource type; series selector must specify a label matcher on monitored resource name

פתרון בעיות שקשורות להתנגשויות בין תוויות

ב-Cloud Monitoring, תוויות יכולות להיות שייכות למדד או למשאב. אם לתווית של מדד יש את אותו שם מפתח כמו לתווית של משאב, אפשר להתייחס לתווית של המדד באופן ספציפי על ידי הוספת הקידומת metric_ לשם מפתח התווית בשאילתה.

לדוגמה, נניח שיש לכם תווית משאב ותווית מדד ששתיהן נקראות pod_name במדד example.googleapis.com/user/widget_count.

  • כדי לסנן לפי הערך של תווית המשאב, משתמשים ב-
    example_googleapis_com:user_widget_count{pod_name="RESOURCE_LABEL_VALUE"}

  • כדי לסנן לפי הערך של תווית המדד, משתמשים ב-
    example_googleapis_com:user_widget_count{metric_pod_name="METRIC_LABEL_VALUE"}

מיפוי של שמות מדדים ב-Cloud Monitoring ל-PromQL מדור קודם

שמות המדדים ב-Cloud Monitoring כוללים שני רכיבים: דומיין (כמו compute.googleapis.com/) ונתיב (כמו instance/disk/max_read_ops_count). מכיוון ש-PromQL מדור קודם תומך רק בתווים המיוחדים : ו-_, צריך להחיל את הכללים הבאים כדי ששמות המדדים ב-Monitoring יהיו תואמים ל-PromQL מדור קודם:

  • מחליפים את / הראשון ב-:.
  • מחליפים את כל התווים המיוחדים האחרים (כולל . ותווים אחרים של / ) ב-_.

בטבלה הבאה מפורטים כמה שמות של מדדים והמקבילים שלהם ב-PromQL מדור קודם:

שם המדד ב-Cloud Monitoring שם מדד מדור קודם ב-PromQL
compute.googleapis.com/instance/cpu/utilization compute_googleapis_com:instance_cpu_utilization
logging.googleapis.com/log_entry_count logging_googleapis_com:log_entry_count

אפשר לשלוח שאילתות על מדדים של ערכי התפלגות ב-Cloud Monitoring כמו על היסטוגרמות של Prometheus, עם הסיומת _count,‏ _sum או _bucket שנוספת לשם המדד:

שם המדד ב-Cloud Monitoring שמות מדדים בגרסה הקודמת של PromQL
networking.googleapis.com/vm_flow/rtt networking_googleapis_com:vm_flow_rtt_sum
networking_googleapis_com:vm_flow_rtt_count
networking_googleapis_com:vm_flow_rtt_bucket

תאימות ל-PromQL

יכול להיות ש-PromQL ל-Cloud Monitoring יפעל בצורה שונה מעט מ-PromQL במעלה הזרם.

שאילתות PromQL ב-Cloud Monitoring מוערכות באופן חלקי בקצה העורפי של Monarch באמצעות שפת שאילתות פנימית, ויש כמה הבדלים ידועים בתוצאות השאילתות. מלבד ההבדלים שמפורטים בקטע הזה, שפת PromQL ב-Cloud Monitoring זהה לשפת PromQL שזמינה בגרסה 2.44 של Prometheus.

יכול להיות שלא תהיה תמיכה בפונקציות PromQL שנוספו אחרי גרסה 2.44 של Prometheus.

תמיכה ב-UTF-8

‫PromQL for Cloud Monitoring תומך בשאילתות UTF-8.

אם שם המדד של Prometheus כולל רק תווים אלפאנומריים בתוספת התווים _ או :, ואם מפתחות התווית כוללים רק תווים אלפאנומריים בתוספת התו _, אפשר להריץ שאילתות באמצעות תחביר PromQL רגיל. לדוגמה, שאילתה תקינה יכולה להיראות כך: job:my_metric:sum{label_key="label_value"}.

עם זאת, אם שם המדד של Prometheus כולל תווים מיוחדים כלשהם מלבד התווים _ או :, או אם מפתחות התוויות כוללים תווים מיוחדים כלשהם מלבד התו _, צריך ליצור את השאילתה בהתאם למפרט UTF-8 של PromQL.

שמות של מדדים בקידוד UTF-8 צריכים להיות במירכאות ולהיות מועברים לסוגריים המסולסלים. גם שמות של תוויות צריכים להיות במירכאות אם הם מכילים תווים שלא תואמים לגרסאות קודמות. הדוגמאות הבאות לשאילתות חוקיות הן שקולות:

  • {"my.domain.com/metric/name_bucket", "label.key"="label.value"}
  • {__name__="my.domain.com/metric/name_bucket", "label.key"="label.value"}
  • {"__name__"="my.domain.com/metric/name_bucket", "label.key"="label.value"}

התאמה לפי שמות מדדים

יש תמיכה רק בהתאמה מדויקת של שמות המדדים. צריך לכלול התאמה מדויקת של שם המדד בשאילתה.

אנחנו ממליצים על הפתרונות הבאים לתרחישים נפוצים שבהם נעשה שימוש בכלי להשוואה של ביטוי רגולרי בתווית __name__:

  • בדרך כלל משתמשים באופרטור =~ בתצורות של Prometheus adapter כדי להתאים לכמה שמות של מדדים. כדי לתקן את השימוש הזה, צריך להרחיב את ההגדרה כך שתשתמש במדיניות נפרדת לכל מדד, ולתת שם לכל מדד באופן מפורש. כך גם נמנעת הרחבה אוטומטית בטעות על סמך מדדים לא צפויים.
  • לרוב משתמשים בביטויים רגולריים כדי להציג בתרשים כמה מדדים לא ממדיים. לדוגמה, אם יש לכם מדד כמו cpu_servicename_usage, תוכלו להשתמש בתו כללי כדי ליצור תרשים של כל השירותים יחד. שימוש במדדים לא ממדיים כמו אלה הוא שיטה פסולה ב-Cloud Monitoring, והוא מוביל לביצועים גרועים במיוחד של השאילתות. כדי לתקן את השימוש הזה, צריך להעביר את כל המאפיינים לתוויות של מדדים, במקום להטמיע מאפיינים בשם המדד.
  • לרוב משתמשים בשאילתות על כמה מדדים כדי לראות אילו מדדים זמינים לשאילתה. במקום זאת, מומלץ להשתמש בקריאה /labels/__name__/values כדי לגלות מדדים.

לא פעיל

אין תמיכה בנתונים לא עדכניים בשרת העורפי של Monarch.

חישוב של irate

אם חלון המבט לאחור של הפונקציה irate קטן מגודל השלב, אנחנו מגדילים את החלון לגודל השלב. השינוי הזה נדרש ב-Monarch כדי להבטיח שאף אחד מנתוני הקלט לא יתעלם לחלוטין בפלט. ההבדל הזה רלוונטי גם לחישובים של rate.

חישוב של rate ושל increase

אם חלון המבט לאחור של הפונקציה rate קטן מגודל השלב, אנחנו מגדילים את החלון לגודל השלב. השינוי הזה נדרש ב-Monarch כדי לוודא שאף אחד מנתוני הקלט לא יתעלם לחלוטין בפלט. ההבדל הזה רלוונטי גם לחישובים של irate.

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

חישוב של histogram_quantile

חישוב של histogram_quantile ב-PromQL בהיסטוגרמה ללא דגימות יפיק ערך NaN. החישוב של שפת השאילתות הפנימית לא מניב ערך, והנקודה בחותמת הזמן מושמטת במקום זאת.

ההבדלים בחישוב השערים יכולים להשפיע גם על הקלט של שאילתות histogram_quantile.

פונקציות ספציפיות לסוגים של מדדים שונים

למרות ש-Prometheus במעלה הזרם הוא בעל הקלדה חלשה, Monarch הוא בעל הקלדה חזקה. המשמעות היא שאי אפשר להפעיל פונקציות שספציפיות לסוג אחד על מדד מסוג אחר (לדוגמה, הפעלת rate() על מדד GAUGE או histogram_quantile() על מדד COUNTER או על מדד ללא סוג) ב-Cloud Monitoring, גם אם הפונקציות האלה פועלות ב-Prometheus במעלה הזרם.