יצירה וקריאה של דוח

במאמר הזה מוסבר איך ליצור דוח של App Optimize API על ההוצאות שלכם, לעקוב אחרי יצירת הדוח ולקרוא את הנתונים שמתקבלים כשהם מוכנים. Google Cloudבמדריך הזה לתחילת העבודה, אפשר להשתמש ב-API בארכיטקטורת REST או בספריית הלקוח של Python.

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

  • כדי לנתח את הדוגמאות במדריך הזה, צריך Google Cloud פרויקט עם משאבים פעילים. כדי להפיק תוצאות משמעותיות, App Optimize API צריך נתוני חיוב ונתוני שימוש. דוחות שמופעלים בפרויקטים חדשים או ריקים יהיו ריקים.

    במדריך הזה, הפרויקט שמזוהה בתור PROJECT_ID מספק את היקף הנתונים ומארח את משאב הדוח.

    ‫App Optimize API תומך ביצירת דוחות בפרויקט אחד שמנתחים נתונים מפרויקט אחר או מאפליקציות בגבולות של פרויקט יחיד או של תיקייה. כדי ליצור דוח על אפליקציה ב-App Hub, שיכולה לכלול כמה פרויקטים, צריך לקבל את הרשאות המעקב והחיוב הנדרשות בכל הפרויקטים שמשויכים לאפליקציה.

  • מוודאים שApp Optimize API מופעל בפרויקט שבו תשתמשו כדי ליצור ולנהל את משאב הדוח.

gcloud

במסוף Google Cloud , מפעילים את Cloud Shell.

הפעלת Cloud Shell

בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

למידע נוסף על הגדרת אימות בסביבת ייצור, ראו את המאמר בנושא הגדרת Application Default Credentials לקוד שפועל ב- Google Cloud במאמרי העזרה בנושא אימות ב- Google Cloud .

Python

  1. מתקינים את ספריית הלקוח של Python עבור App Optimize API.
  2. כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Python שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

    1. התקינו את ה-CLI של Google Cloud.

    2. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

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

      gcloud auth application-default login

      אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.

      אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

    למידע נוסף על הגדרת אימות בסביבת ייצור, ראו את המאמר בנושא הגדרת Application Default Credentials לקוד שפועל ב- Google Cloud במאמרי העזרה בנושא אימות ב- Google Cloud .

REST

כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.

    התקינו את ה-CLI של Google Cloud.

    אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .

למידע נוסף על הגדרת אימות בסביבת ייצור, ראו את המאמר בנושא הגדרת Application Default Credentials לקוד שפועל ב- Google Cloud במאמרי העזרה בנושא אימות ב- Google Cloud .

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות ליצירה ולקריאה של דוח באמצעות המדריך הזה להתחלה מהירה, אתם צריכים לבקש מהאדמין להקצות לכם בפרויקט עם משאבים פעילים את תפקידי ה-IAM הבאים:

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

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

מידע נוסף על ההרשאות והתפקידים שנדרשים ל-App Optimize API זמין במאמר בקרת גישה באמצעות IAM.

יצירת דוח

בדוגמה הזו נוצר דוח של ההוצאה הכוללת בPROJECT_ID שנבחר. בדוח מפורטות העלויות לפי כלGoogle Cloud מוצר שבו נעשה שימוש, כמו Compute Engine ו-Cloud Storage, ולפי המק"ט והמיקום הספציפיים. הדוח כולל נתונים משלושת הימים האחרונים.

כדי ליצור את משאב הדוח, פועלים לפי ההוראות לשיטה המועדפת:

gcloud

משתמשים בפקודה gcloud beta app-optimize reports create כדי ליצור את הדוח.

gcloud beta app-optimize reports create REPORT_ID \
  --project=PROJECT_ID \
  --location=global \
  --dimensions=location,product_display_name,project,sku \
  --metrics=cost \
  --report-filter='hour >= now - duration("72h")' \
  --scopes=project=projects/PROJECT_ID

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • REPORT_ID: מזהה ייחודי לדוח החדש, לדוגמה my-first-report

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

Python

קוד ה-Python הבא משתמש ב-AppOptimizeClient.create_report() כדי ליצור דוח.

from google.cloud import appoptimize_v1beta

project_id = "PROJECT_ID"
report_id = "REPORT_ID"

# Create the App Optimize client and prepare a request for a new report
client = appoptimize_v1beta.AppOptimizeClient()
report = appoptimize_v1beta.Report(
    dimensions=['location', 'product_display_name', 'project', 'sku'],
    metrics=['cost'],
    filter='hour >= now - duration("72h")',
    scopes=[
        appoptimize_v1beta.Scope(project=f"projects/{project_id}"),
    ],
)
request = appoptimize_v1beta.CreateReportRequest(
    parent=f"projects/{project_id}/locations/global",
    report=report,
    report_id=report_id,
)

# Request the creation of the report and wait until the process is done
operation = client.create_report(request=request)
print("Waiting for report creation operation to complete...")
response = operation.result()
print(response)

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • REPORT_ID: מזהה ייחודי לדוח החדש, לדוגמה: my-first-report.

השיטה operation.result() ממתינה לסיום פעולת יצירת הדוח.

REST

שליחת בקשת HTTP POST לנתיב המשאב projects.locations.reports של REST API.

  1. כדי לשלוח את הבקשה, משתמשים בפקודה curl הבאה:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d '{
        "scopes": [
          {
            "project": "projects/PROJECT_ID"
          }
        ],
        "dimensions": [
          "location",
          "product_display_name",
          "project",
          "sku"
        ],
        "metrics": [
          "cost"
        ],
        "filter": "hour >= now - duration(\"72h\")"
      }' \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports?report_id=REPORT_ID"
    

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

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • REPORT_ID: מזהה ייחודי לדוח החדש, לדוגמה my-first-report

    ה-API מחזיר אובייקט של פעולה ממושכת (LRO), שמייצג את תהליך יצירת הדוח. זוהי דוגמה לתשובה:

    {
      "name": "projects/PROJECT_ID/locations/global/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.OperationMetadata"
      },
      "done": false
    }
    

    הסטטוס "done": false מציין שהדוח עדיין בתהליך יצירה. חשוב לשים לב ל-OPERATION_ID כי תצטרכו להשתמש בו בשלב הבא.

  2. יצירת הדוח יכולה לקחת זמן, ולכן צריך לבצע שאילתות חוזרות ל-LRO עד שהוא מציין שתהליך היצירה הושלם ונתוני הדוח מוכנים להורדה.

    כדי לבדוק את הסטטוס של תהליך היצירה, שולחים בקשת HTTP GET לשם המשאב של הפעולה:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/operations/OPERATION_ID"
    

    בודקים את התשובה. אם "done" הוא false, מחכים 5 עד 15 שניות וחוזרים על השלב הזה. אם "done" הוא true, הדוח מוכן.

    הדוגמה הבאה היא של תשובה שמתקבלת כשהפעולה מסתיימת:

    {
      "name": "projects/PROJECT_ID/locations/global/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.OperationMetadata"
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.appoptimize.v1beta.Report",
        "name": "projects/PROJECT_ID/locations/global/reports/REPORT_ID",
        "scopes": [
          {
            "project": "projects/PROJECT_ID"
          }
        ],
        "dimensions": [
          "location",
          "product_display_name",
          "project",
          "sku"
        ],
        "metrics": [
          "cost"
        ],
        "filter": "hour >= now - duration(\"72h\")",
        "expireTime": "2026-02-04T22:05:05Z"
      }
    }
    

קריאת נתוני הדוח

כדי לאחזר את נתוני הדוח, פועלים לפי ההוראות לשיטה המועדפת:

gcloud

כדי לאחזר את נתוני הדוח, משתמשים בפקודה gcloud beta app-optimize reports read הבאה.

gcloud beta app-optimize reports read REPORT_ID \
  --project=PROJECT_ID \
  --location=global

Python

קוד Python הבא משתמש ב-AppOptimizeClient.read_report() כדי לאחזר את נתוני הדוח.

from google.cloud import appoptimize_v1beta

project_id = "PROJECT_ID"
report_id = "REPORT_ID"
name = f"projects/{project_id}/locations/global/reports/{report_id}"

# Create the App Optimize client and read your report's data
client = appoptimize_v1beta.AppOptimizeClient()
request = appoptimize_v1beta.ReadReportRequest(
        name=name,
)
result = client.read_report(request=request)

# Display the report's data
print(result)

REST

אחרי שה-LRO מסתיים, משתמשים בשיטה המותאמת אישית :read של ה-API ל-REST:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{}' \
  "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports/REPORT_ID:read"

התשובה מה-API מכילה את שורות הנתונים של הדוח ואת הגדרות העמודות. דוגמה לתשובה מוצלחת:

{
  "rows": [
    [
      "us-central1",
      "Compute Engine",
      "projects/PROJECT_ID",
      "6EC2-384A-47D9",
      {
        "currency_code": "USD",
        "units": "25",
        "nanos": 750000000
      }
    ],
    [
      "us-central1",
      "Cloud Storage",
      "projects/PROJECT_ID",
      "9ADA-9ADC-2FBE",
      {
        "currency_code": "USD",
        "units": "5",
        "nanos": 100000000
      }
    ],
    [
      "europe-west1",
      "Compute Engine",
      "projects/PROJECT_ID",
      "6EC2-384A-47D9",
      {
        "currency_code": "USD",
        "units": "18",
        "nanos": 500000000
      }
    ],
    [
      "us-central1",
      "Compute Engine",
      "projects/PROJECT_ID",
      "F61D-4D51-AAFC",
      {
        "currency_code": "USD",
        "units": "12",
        "nanos": 200000000
      }
    ]
  ],
  "columns": [
    {
      "name": "location",
      "type": "STRING",
      "mode": "NULLABLE"
    },
    {
      "name": "product_display_name",
      "type": "STRING",
      "mode": "NULLABLE"
    },
    {
      "name": "project",
      "type": "STRING",
      "mode": "NULLABLE"
    },
    {
      "name": "sku",
      "type": "STRING",
      "mode": "NULLABLE"
    },
    {
      "name": "cost",
      "type": "RECORD",
      "mode": "NULLABLE",
      "columns": [
        {
          "name": "currency_code",
          "type": "STRING",
          "mode": "NULLABLE"
        },
        {
          "name": "units",
          "type": "INT64",
          "mode": "NULLABLE"
        },
        {
          "name": "nanos",
          "type": "INT64",
          "mode": "NULLABLE"
        }
      ]
    }
  ],
  "next_page_token": ""
}

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

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

הסרת המשאבים

‫App Optimize API מוחק אוטומטית את הדוח 24 שעות אחרי שהוא נוצר. כדי למחוק את הדוח לפני כן, פועלים לפי ההוראות לשיטה המועדפת:

gcloud

משתמשים בפקודה gcloud beta app-optimize reports delete כדי להסיר את הדוח.

gcloud beta app-optimize reports delete REPORT_ID \
  --project=PROJECT_ID \
  --location=global

Python

הקוד הבא משתמש בפקודה AppOptimizeClient.delete_report() כדי להסיר את הדוח.

from google.cloud import appoptimize_v1beta

project_id = "PROJECT_ID"
report_id = "REPORT_ID"

name = f"projects/{project_id}/locations/global/reports/{report_id}"
client = appoptimize_v1beta.AppOptimizeClient()
request = appoptimize_v1beta.DeleteReportRequest(name=name)
client.delete_report(request=request)
print(f"Deleted report: {name}")

REST

שליחת בקשת HTTP DELETE לנקודת הקצה של המשאב בדוח:

curl -X DELETE \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports/REPORT_ID"

המאמרים הבאים