איסוף מדדים של 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 exporter, צריך את הדברים הבאים:

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

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

מומלץ ליצור מכונה וירטואלית של Linux Compute Engine לשימוש ספציפי להרצת סוכן התפעול והכלי Prometheus CloudWatch exporter. המכונה הווירטואלית הזו משמשת כאתר איסוף לכל המדדים של 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 exporter ושל JRE

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

  1. כדי להוריד את קובץ ה-JAR שמכיל את Prometheus CloudWatch exporter, מריצים את הפקודה הבאה במופע 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 exporter, יוצרים קובץ הגדרה לשירות או לשירותים של AWS שמהם רוצים לאסוף מדדים. מידע כללי זמין במסמכי ההגדרות של Prometheus CloudWatch exporter.

  • העברת משתמשים: אם אתם מעבירים את המדדים הקיימים של 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, צריך גם את הרשאת AWS IAM‏ tag:GetResources.

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

כדי להריץ את הכלי לייצוא נתונים מ-CloudWatch ל-Prometheus:

  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 exporter, משתמשים ב-Prometheus receiver של הסוכן. במסמך הזה מתוארות שתי הגדרות בסיסיות של סוכן תפעול. בוחרים אחת מההגדרות ומוסיפים אותה לקובץ user-configuration:

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

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

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

  • יוצרת מקבל בשם 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 exporter תומכת בשימוש באזור אחד בלבד לכל קובץ הגדרה. אם אתם צריכים לעקוב אחרי כמה אזורים, מומלץ להריץ כמה מופעים של Prometheus exporter, אחד לכל אזור שאתם רוצים לעקוב אחריו. אפשר להפעיל כמה כלי ייצוא במכונה וירטואלית אחת, או לפזר אותם בין כמה מכונות וירטואליות. יכול להיות שקובצי האימג' של Prometheus exporter ב-Docker יהיו שימושיים במצב הזה.

אתם יכולים להגדיר את סוכן תפעול שפועל במכונת ה-VM ב-Compute Engine כדי לבצע סקריפט של כמה נקודות קצה של 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 exporter מתבצע לפי מספר הדגימות שנקלטו. בקטעים בנושא Cloud Monitoring בדף המחירון של Google Cloud Observability מופיעים המחירים העדכניים.

הגדרות של Prometheus CloudWatch exporter להעברה

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

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