איסוף מדדים של AWS CloudWatch באמצעות Prometheus CloudWatch exporter

במאמר הזה מוסבר איך להשתמש ב-Prometheus CloudWatch exporter בקוד פתוח וב-סוכן תפעול שפועל במכונת Compute Engine כדי לאסוף מדדים של AWS CloudWatch ולאחסן אותם בפרויקט ב- Google Cloud .

המסמך הזה מיועד למפתחים ולאדמינים של מערכות שצריכים לאסוף מדדים של AWS CloudWatch. במאמר הזה מוסבר איך להגדיר את Prometheus CloudWatch exporter כדי לאסוף מדדים של AWS CloudWatch.

בעזרת Cloud Monitoring, אתם יכולים לראות את המדדים של AWS באותו הקשר של Google Cloud המדדים שלכם. לדוגמה, אתם יכולים ליצור לוח בקרה עם תרשימים שמציגים את ניצול המעבד במכונות של Amazon EC2 ובמכונות של Compute Engine. אפשר גם ליצור מדיניות התראות כדי לעקוב אחרי המדדים של AWS. מידע נוסף זמין בקטעים הבאים:

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

כדי לאסוף מדדים של AWS CloudWatch באמצעות כלי הייצוא Prometheus CloudWatch, צריך את הדברים הבאים:

  • Google Cloud פרויקט עם הרשאות לבצע את הפעולות הבאות:
    • יצירת VM
    • כתיבת יומנים ב-Cloud Logging
    • כתיבת מדדים ל-Cloud Monitoring
  • חשבון AWS עם פרטי כניסה ל-AWS שאפשר להשתמש בהם ב-Prometheus exporter כדי לאחזר מדדים. מידע נוסף זמין במאמר בנושא הרצת כלי הייצוא של Prometheus.

יצירת מכונה וירטואלית ב-Compute Engine

מומלץ ליצור מכונה וירטואלית של Linux ב-Compute Engine כדי להשתמש בה במיוחד להרצת סוכן התפעול וכלי הייצוא של Prometheus CloudWatch. המכונה הווירטואלית הזו משמשת כאתר האיסוף של כל המדדים של AWS.

  1. כדי ליצור מכונה וירטואלית של Debian Linux בשם aws-exporter-test באזור שאתם מציינים, מריצים את הפקודה הבאה:

    gcloud compute instances create \
      --image-project debian-cloud \
      --image-family debian-11 \
      --zone ZONE \
      aws-exporter-test
    

    מגדירים את הפקודה באופן הבא:

    • מחליפים את ZONE באזור של המכונה הווירטואלית החדשה.
    • זה שינוי אופציונלי. מחליפים את aws-exporter-test בשם אחר למכונה הווירטואלית.

    מידע נוסף על הפקודה הזו זמין במשאבי העזרה של gcloud compute instances create.

  2. כדי לגשת ל-VM כדי להתקין את Prometheus CloudWatch exporter ואת סוכן תפעול, אפשר להשתמש בפקודה הבאה:

    gcloud compute ssh --zone ZONE  --project PROJECT_ID  aws-exporter-test
    

    מגדירים את הפקודה באופן הבא:

    • מחליפים את ZONE בתחום שבו יצרתם את המכונה הווירטואלית.
    • מחליפים את PROJECT_ID במזהה הפרויקט. Google Cloud
    • מחליפים את aws-exporter-test אם יצרתם את המכונה הווירטואלית עם שם אחר.

    מידע נוסף על הפקודה הזו זמין במשאבי העזרה של gcloud compute ssh.

הגדרת כלי לייצוא נתונים של Prometheus CloudWatch

בקטעים הבאים מתואר התהליך של הורדה, התקנה והגדרה של Prometheus CloudWatch exporter במכונה וירטואלית של Compute Engine.

הורדה של כלי לייצוא נתונים של Prometheus ושל JRE

כדי להריץ את הכלי Prometheus CloudWatch exporter, צריך להוריד את הכלי ואת סביבת זמן ריצה של Java ‏ (JRE), גרסה 11 ואילך.

  1. כדי להוריד את קובץ ה-JAR שמכיל את כלי הייצוא של Prometheus CloudWatch, מריצים את הפקודה הבאה במופע Compute Engine:

    curl -sSO https://github.com/prometheus/cloudwatch_exporter/releases/download/v0.15.1/cloudwatch_exporter-0.15.1-jar-with-dependencies.jar
    
  2. כדי להתקין את JRE, אפשר להשתמש בפקודה כמו זו שבהמשך:

    sudo apt install default-jre
    

הגדרת כלי לייצוא נתונים של Prometheus

כדי להגדיר את כלי הייצוא Prometheus CloudWatch, יוצרים קובץ הגדרה לשירות או לשירותים של AWS שמהם רוצים לאסוף מדדים. מידע כללי זמין במסמכי ההגדרות של כלי הייצוא של Prometheus CloudWatch.

  • העברת משתמשים: אם אתם מעבירים את המדדים הקיימים של AWS CloudWatch אל Prometheus CloudWatch exporter, אתם יכולים להשתמש בקובצי ההגדרות בהגדרות של Prometheus CloudWatch exporter להעברה. קבצי ההגדרות האלה נועדו לשכפל את המדדים הקיימים בצורה הכי מדויקת שאפשר, אבל הם לא אוספים את כל המדדים שזמינים באמצעות כלי הייצוא Prometheus CloudWatch לשירותי AWS.

  • משתמשים חדשים: אם אתם לא מעבירים מדדים קיימים, מומלץ לא להשתמש בהגדרות ההעברה. במסמכי התיעוד של שירות AWS CloudWatch מוסבר איך מגדירים הגדרות של כלי לייצוא לשירותים אחרים. אפשר גם למצוא דוגמאות נוספות במאגר GitHub של Prometheus CloudWatch exporter.

אפשר לשלב הגדרות של כמה שירותי AWS בקובץ הגדרה אחד. בדוגמאות שבמסמך הזה מניחים שקובץ ההגדרות נקרא config.yml.

הפעלת כלי לייצוא נתונים של Prometheus

כדי להריץ את הכלי Prometheus CloudWatch exporter, צריך לספק לו פרטי כניסה והרשאה. הכלי Prometheus CloudWatch exporter משתמש ב-AWS Java SDK, שמציע דרכים לספק פרטי כניסה באמצעות משתני הסביבה הבאים:

מידע נוסף על אספקת פרטי כניסה ל-SDK זמין במאמר AWS SDK for Java 2.x.

צריך גם הרשאה להשתמש ב-CloudWatch API כדי לאחזר מדדים. אתם צריכים את ההרשאות הבאות ב-CloudWatch ב-AWS IAM:

  • cloudwatch:ListMetrics
  • cloudwatch:GetMetricStatistics
  • cloudwatch:GetMetricData

כדי להשתמש בתכונה aws_tag_select, צריך גם את ההרשאה tag:GetResourcesAWS IAM.

למידע נוסף על הרשאת גישה לשירותי AWS, אפשר לעיין במאמר ניהול זהויות והרשאות גישה ב-AWS.

כדי להריץ את Prometheus CloudWatch exporter:

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

    export AWS_ACCESS_KEY=YOUR_ACCESS_KEY
    export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY
    export AWS_SESSION_TOKEN=YOUR_SESSION_TOKEN
    

    מחליפים את המשתנים YOUR_KEY במפתחות הגישה. צריך להגדיר את משתנה הסביבה AWS_SESSION_TOKEN רק אם משתמשים בפרטי כניסה זמניים.

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

    java -jar cloudwatch_exporter-0.15.1-jar-with-dependencies.jar 9106 config.yml
    

    אם צריך, משנים את ערכי היציאה (9106) ואת קובץ התצורה (config.yml).

    אם משנים את הקובץ config.yml בזמן שהכלי לייצוא פועל, אפשר לטעון מחדש את הכלי לייצוא על ידי הרצת הפקודה הבאה:

    curl -X POST localhost:9106/-/reload
    

    כדי להשתמש בייצוא בסביבת ייצור, אפשר להגדיר את כלי הייצוא כך שיפעל מחדש אם המכונה הווירטואלית תופעל מחדש. לדוגמה, במערכות Debian, אפשר להשתמש במנהל המערכת והשירותים, systemd.

הגדרת סוכן התפעול

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

התקנת סוכן התפעול

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

curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install

הגדרת סוכן התפעול

כדי להגדיר את סוכן תפעול, מוסיפים רכיבי הגדרה לקובץ הגדרות המשתמש של הסוכן. ב-Linux, קובץ הגדרות המשתמש הוא /etc/google-cloud-ops-agent/config.yaml.

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

sudo vim /etc/google-cloud-ops-agent/config.yaml

הגדרה בסיסית של סוכן התפעול

ההגדרה הבאה מספקת הגדרה מינימלית של Ops Agent. ההגדרה הזו מבצעת את הפעולות הבאות:

  • יוצרת מקלט בשם aws מסוג prometheus. מקלט הנתונים מוגדר לגירוד מדדים מהמשימה aws_exporter. היציאה שצוינה צריכה להיות זהה ליציאה שבה כלי הייצוא של Prometheus CloudWatch מייצא מדדים. אפשר לעיין במאמר בנושא הפעלת כלי הייצוא של Prometheus.

  • יוצר צינור עיבוד נתונים בשם aws_pipeline שמשתמש ב-aws metrics receiver.

metrics:
  receivers:
    aws:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'aws_exporter'
            scrape_interval: 10s
            static_configs:
              - targets: ['localhost:9106']
  service:
    pipelines:
      aws_pipeline:
        receivers:
          - aws

הגדרה שגורמת להשמטת מדדים של JVM

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

metrics:
  receivers:
    aws:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'aws_exporter'
            scrape_interval: 10s
            static_configs:
              - targets: ['localhost:9106']
            # Drop the exporter's own JVM metrics to reduce noise.
            metric_relabel_configs:
              - source_labels: [ __name__ ]
                regex: 'jvm_.*'
                action: drop
  service:
    pipelines:
      aws_pipeline:
        receivers:
          - aws

אפשר ליצור הגדרות מורכבות הרבה יותר עבור סוכן תפעול.

הפעלה מחדש של סוכן התפעול

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

  1. כדי להפעיל מחדש את הסוכן, מריצים את הפקודה הבאה במופע:
    sudo service google-cloud-ops-agent restart
    
  2. כדי לוודא שהסוכן הופעל מחדש, מריצים את הפקודה הבאה ומוודאים שהרכיבים Metrics Agent ו-Logging Agent הופעלו:
    sudo systemctl status google-cloud-ops-agent"*"
    

צפייה במדדים ב-Cloud Monitoring

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

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

בתרשים הבא מוצגת שאילתת PromQL למדד aws_ec2_cpuutilization_sum של מכונות וירטואליות ב-AWS:

בתרשים מוצגת התוצאה של אחזור הנתון הסטטיסטי aws_ec2_cpuutilization_sum עבור מכונות וירטואליות ב-AWS באמצעות PromQL.

מידע נוסף על השימוש ב-PromQL ב-Cloud Monitoring זמין במאמר PromQL ל-Cloud Monitoring.

התראה על התנהגות של מדד

ב-Cloud Monitoring, אפשר ליצור מדיניות התראות כדי לעקוב אחרי המדדים של AWS CloudWatch ולקבל התראות על עליות, ירידות או מגמות בערכי המדדים.

מעקב אחרי כמה אזורים

ההגדרה של כלי הייצוא של Prometheus CloudWatch תומכת בשימוש באזור אחד בלבד לכל קובץ הגדרה. אם אתם צריכים לנטר כמה אזורים, מומלץ להריץ כמה מופעים של Prometheus exporter, אחד לכל אזור שאתם רוצים לנטר. אפשר להריץ כמה כלי ייצוא במכונה וירטואלית אחת, או לפזר אותם בין כמה מכונות וירטואליות. קובצי האימג' של Docker של Prometheus exporter יכולים להיות שימושיים במצב הזה.

אתם יכולים להגדיר את סוכן תפעול שפועל במכונת ה-VM ב-Compute Engine כדי לבצע scraping של כמה נקודות קצה של Prometheus. אם אתם מגדירים כמה מופעים של Prometheus exporter, מומלץ להשתמש בשם job שונה להגדרת הסקריפינג של כל אחד מהם, כדי שתוכלו להבחין בין מופעי ה-exporter אם תצטרכו לפתור בעיות בהם.

מידע על הגדרת סוכן תפעול ו-Prometheus receiver זמין במאמר הגדרת סוכן תפעול.

עלות

‫Amazon מחייבת על כל בקשת API של CloudWatch או על כל מדד CloudWatch שאתם מבקשים. במחירון של Amazon CloudWatch תוכלו לעיין ברשימת התעריפים העדכניים. ל-Prometheus CloudWatch exporter יש את מאפייני השאילתה הבאים, שיכולים להשפיע על העלויות ב-Amazon:

  • כשמשתמשים ב-method ‏GetMetricStatistics (ברירת מחדל), כל מדד דורש בקשת API אחת. כל בקשה יכולה לכלול כמה נתונים סטטיסטיים.
  • כשמשתמשים ב-aws_dimensions, הכלי לייצוא צריך לשלוח בקשות API כדי לקבוע אילו מדדים לבקש. בדרך כלל, מספר הבקשות למאפיינים זניח בהשוואה למספר הבקשות למדדים.

ב-Cloud Monitoring, החיוב על מדדים של AWS CloudWatch שמיוצאים מ-Prometheus מתבצע לפי מספר הדגימות שנקלטו. בקטעים בנושא Cloud Monitoring במחירון של Google Cloud Observability מופיעים המחירים העדכניים.

הגדרות של כלי לייצוא נתונים של Prometheus CloudWatch להעברה

בקטע הזה מפורטות הגדרות שמשכפלות, בצורה הכי מדויקת שאפשר, את מדדי השירות של AWS שמתועדים ברשימה מדדי AWS. קבצי ההגדרות האלה מיועדים ללקוחות שעוברים מפתרון מדור קודם אל Prometheus CloudWatch exporter. אם אתם משתמשים חדשים ולא משתמשים שעוברים מיגרציה, ואתם מגדירים את כלי הייצוא Prometheus CloudWatch, ואתם משתמשים בהגדרות האלה, אתם לא אוספים את כל המדדים של AWS שזמינים בכלי הייצוא Prometheus CloudWatch.

כדי לראות קובץ תצורה לדוגמה של מדדים ב-AWS CloudWatch, מרחיבים את אחד מהקטעים הבאים.