Cloud Logging לפעולות באצווה של אחסון

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

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

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

מוודאים שיש לכם גישה ל-Cloud Logging. כדי להשתמש ב-Cloud Logging, מומלץ להקצות את התפקיד Logs Viewer (roles/logging.viewer) בניהול הזהויות והרשאות הגישה (IAM). התפקיד Logs Viewer (roles/logging.viewer) בניהול הזהויות והרשאות הגישה (IAM) מספק את ההרשאות הנדרשות כדי להציג את הנתונים שלכם ב-Cloud Logging. מידע נוסף על הרשאות גישה ל-Logging זמין במאמר בקרת גישה באמצעות IAM.

כדי לאמת ולהעניק את הרשאות ה-IAM:

הסבר על פרטי הרישום ביומן

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

  • פעולה שניתן לתעד ביומן: הערך של הפעולה שניתן לתעד ביומן הוא תמיד transform.

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

    • ‫SUCCEEDED: הפעולה בוצעה בהצלחה.
    • ‫FAILED: הפעולה נכשלה.

הפעלת הרישום ביומן

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

שורת הפקודה

כשיוצרים משימה של פעולות רבות על פריטי אחסון באמצעות gcloud storage batch-operations jobs create, משתמשים בדגלים --log-actions ו---log-action-states כדי להפעיל את הרישום ביומן.

gcloud storage batch-operations jobs create JOB_NAME \
  --manifest-location=MANIFEST_LOCATION \
  --delete-object \
  --log-actions=transform \
  --log-action-states=LOG_ACTION_STATES

כאשר:

  • ‫JOB_NAME הוא השם שרוצים לתת למשימה. לדוגמה, my-job.
  • ‫MANIFEST_LOCATION הוא המיקום של המניפסט. לדוגמה, gs://my-bucket/manifest.csv.
  • ‫LOG_ACTION_STATES היא רשימה מופרדת בפסיקים של מצבים לרישום ביומן. לדוגמה, succeeded,failed.

‫API בארכיטקטורת REST

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

{
   "loggingConfig": {
      "logActions": ["TRANSFORM"],
      "logActionStates": ["LOG_ACTION_STATES"],
        }
}

כאשר:

‫LOG_ACTION_STATES היא רשימה מופרדת בפסיקים של מצבים לרישום ביומן. לדוגמה, "SUCCEEDED","FAILED".

צפייה ביומנים

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

המסוף

  1. בתפריט הניווט Google Cloud , בוחרים באפשרות Logging > Logs Explorer :<br\></br\>

    כניסה לדף Logs Explorer

  2. בוחרים פרויקט ב- Google Cloud .

  3. בתפריט Upgrade, עוברים מ-מציג היומנים מדור קודם ל-Logs Explorer.

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

  5. בחלונית Query results, לוחצים על Edit time כדי לשנות את התקופה שלגביה רוצים לקבל תוצאות.

למידע נוסף על השימוש ב-Logs Explorer, קראו את המאמר שימוש ב-Logs Explorer.

שורת הפקודה

כדי לחפש ביומנים של פעולות רבות על פריטי אחסון באמצעות ה-CLI של gcloud, משתמשים בפקודה gcloud logging read.

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

gcloud logging read "resource.type=storage_batch_operations_job"

‫API בארכיטקטורת REST

משתמשים ב-method ‏entries.list של Cloud Logging API.

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

{
"resourceNames":
  [
    "projects/MY_PROJECT_NAME"
  ],
  "orderBy": "timestamp desc",
  "filter": "resource.type=\"storage_batch_operations_job\""
}

כאשר:

‫MY_PROJECT_NAME הוא שם הפרויקט.

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

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

  • שדות נפוצים ביומן

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

    jsonPayload: {
    "@type": "type.googleapis.com/google.cloud.storagebatchoperations.logging.TransformActivityLog",
    "completeTime": "YYYY-MM-DDTHH:MM:SS.SSSSSSSSSZ",
    "status": {
      "errorMessage": "String indicating error",
      "errorType": "ENUM_VALUE",
      "statusCode": "ENUM_VALUE"
    },
    "logName": "projects/PROJECT_ID/logs/storagebatchoperations.googleapis.com%2Ftransform_activity",
    "receiveTimestamp": "YYYY-MM-DDTHH:MM:SS.SSSSSSSSSZ",
    "resource": {
      "labels": {
        "location":"us-central1",
        "job_id": "BATCH_JOB_ID",
        "resource_container": "RESOURCE_CONTAINER",
        // ... other labels
      },
      "type": "storagebatchoperations.googleapis.com/Job"
    },
    // Operation-specific details will be nested here (for example,
    // "DeleteObject", "PutObjectHold", "RewriteObject", "PutMetadata")
    // Each operation-specific object will also contain the following
    // object: "objectMetadataBefore": {
    //   "gcsObject": {
    //     "bucket": "BUCKET_NAME",
    //     "generation": "GENERATION_NUMBER",
    //     "objectKey": "OBJECT_PATH"
    //   }
    // }
    }
    

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

    שדות נפוצים ביומן סוג תיאור
    @type String מציין את סוג המטען הייעודי (payload) של הרשומה ביומן, ומציין שהיומן מייצג TransformActivityLog לפעולות רבות על פריטי אחסון.
    completeTime חותמת הזמן חותמת הזמן שבה הפעולה הושלמה, בפורמט תואם לתקן ISO 8601.
    status אובייקט מספק מידע על התוצאה של פעילות האצווה.
    status.errorMessage String הודעת שגיאה אם הפעולה נכשלת. הודעת השגיאה מופיעה רק אם הערך של status.statusCode הוא לא OK.
    status.errorType String סוג השגיאה. סוג השגיאה מופיע רק אם הערך של status.statusCode הוא לא OK.
    status.statusCode String קוד הסטטוס של הפעולה. הפעולה הצליחה אם הערך הוא OK. כל ערך אחר מציין שהפעולה נכשלה.
    logName String השם המלא של משאב היומן, שמציין את הפרויקט ואת זרם היומן.
    receiveTimestamp חותמת הזמן חותמת הזמן שבה הרשומה ביומן התקבלה במערכת הרישום ביומן.
    resource אובייקט מידע על המשאב שיצר את הרשומה ביומן.
    resource.labels אובייקט צמדי מפתח/ערך שמספקים פרטים אישיים מזהים נוספים לגבי המשאב.
    resource.type String סוג המשאב שיצר את היומן.
    objectMetadataBefore אובייקט מכיל את המטא-נתונים של האובייקט לפני הניסיון לבצע את הפעולה באצווה.
    objectMetadataBefore.gcsObject אובייקט פרטים על האובייקט.
    objectMetadataBefore.gcsObject.bucket String שם הקטגוריה שבה נמצא האובייקט.
    objectMetadataBefore.gcsObject.generation String מספר הגנרציה של האובייקט לפני הפעולה.
    objectMetadataBefore.gcsObject.objectKey String הנתיב המלא של האובייקט בתוך הקטגוריה.
  • תוכן jsonPayload ספציפי לפעולה

    ההבדל בין רשומות ביומן של פעולות שונות באצווה הוא באובייקט ברמה העליונה שמוטמע בתוך jsonPayload. רק אחד מהאובייקטים הבאים זמין ברשומת יומן נתונה, בהתאם לפעולת האצווה הספציפית שבוצעה:

    • מחיקת האובייקט (DeleteObject)

      jsonPayload:
      {
      "DeleteObject": {
        "objectMetadataBefore": {
          "gcsObject": {
            "bucket": "test-bucket",
            "generation": "1678912345678901",
            "objectKey": "test_object.txt"
          }
        }
        }
      }
      
    • החזקת אובייקט (PutObjectHold)

      jsonPayload:
      {
      "PutObjectHold": {
        "objectMetadataBefore": {
          "gcsObject": {
            "bucket": "test-bucket",
            "generation": "1678912345678901",
            "objectKey": "test_object.txt"
          }
        },
        "temporaryHoldAfter": True,
        "eventBasedHoldAfter": True
      }
      }
      
    • כתיבה מחדש של אובייקט (RewriteObject)

      jsonPayload:
      {
      "RewriteObject": {
        "objectMetadataBefore": {
          "gcsObject": {
            "bucket": "test-bucket",
            "generation": "1678912345678901",
            "objectKey": "test_object.txt"
          }
        },
        "kmsKeyVersionAfter": "projects/my-gcp-project/locations/us-central1/keyRings/my-keyring-01/cryptoKeys/my-encryption-key/cryptoKeyVersions/1"
      }
      }
      
    • הוספת מטא-נתונים (PutMetadata)

      jsonPayload:
      {
      "PutMetadata": {
        "objectMetadataBefore": {
          "gcsObject": {
            "bucket": "test-bucket",
            "generation": "1678912345678901",
            "objectKey": "test_object.txt"
          }
        },
        "content_disposition_after": "attachment; filename=\"report_final.pdf\"",
        "content_encoding_after": "gzip",
        "content_language_after": "en-US",
        "content_type_after": "application/pdf",
        "cache_control_after": "public, max-age=3600",
        "custom_time_after": "2025-06-27T10:00:00Z",
        "custom_metadata_after": {
          "project": "marketing",
          "version": "2.0",
          "approvedBy": "Admin"
        }
      }
      }
      

    בטבלה הבאה מתוארים שדות היומן הספציפיים לפעולה:

    שדות ביומן שספציפיים לפעולה סוג תיאור
    PutObjectHold אובייקט מציין פעולת השהיה באובייקט.
    PutObjectHold.temporaryHoldAfter בוליאני אם הערך הוא True, סימן שהוחלה השהיה זמנית על האובייקט אחרי שהמשימה של פעולות רבות על פריטי אחסון הסתיימה. הערכים התקינים הם True או False.
    PutObjectHold.eventBasedHoldAfter בוליאני אם הערך הוא True, סימן שהוחלה על האובייקט החזקה מבוססת-אירוע אחרי שהסתיימה המשימה של הפעולות הרבות על פריטי אחסון. הערכים התקינים הם True או False.
    RewriteObject אובייקט מציין פעולת שכתוב של אובייקט.
    RewriteObject.kmsKeyVersionAfter String גרסת המפתח של Cloud Key Management Service שבה נעשה שימוש אחרי משימת הכתיבה מחדש. השדה kmsKeyVersionAfter מאוכלס אם מפתח ההצפנה של האובייקט השתנה כתוצאה מהכתיבה מחדש. זה שדה אופציונלי, כלומר יכול להיות שהוא לא יופיע אם גרסת המפתח של Cloud KMS לא השתנתה אחרי הכתיבה מחדש.
    PutMetadata אובייקט מציינת פעולה של עדכון מטא-נתונים באובייקט.
    PutMetadata.content_disposition_after String מציין את ערך הכותרת Content-Disposition אחרי השלמת המשימה PutMetadata. זהו שדה אופציונלי והוא מאוכלס רק אם הוגדר או שונה מאפיין ה-content-disposition.
    PutMetadata.content_encoding_after String מציין את ערך הכותרת Content-Encoding אחרי השלמת המשימה PutMetadata. זהו שדה אופציונלי והוא מאוכלס רק אם קידוד התוכן הוגדר או שונה.
    PutMetadata.content_language_after String מציין את ערך הכותרת Content-Language אחרי השלמת המשימה PutMetadata. זהו שדה אופציונלי והוא מאוכלס רק אם שפת התוכן הוגדרה או שונתה.
    PutMetadata.content_type_after String מציין את ערך הכותרת Content-Type אחרי השלמת המשימה PutMetadata. זהו שדה אופציונלי והוא מאוכלס רק אם סוג התוכן הוגדר או שונה.
    PutMetadata.cache_control_after String מציין את ערך הכותרת Cache-Control אחרי השלמת המשימה PutMetadata. זהו שדה אופציונלי והוא מאוכלס רק אם בקרת המטמון הוגדרה או שונתה.
    PutMetadata.custom_time_after String מציין את ערך הכותרת Custom-Time אחרי השלמת המשימה PutMetadata. זהו שדה אופציונלי והוא מאוכלס רק אם הזמן המותאם אישית הוגדר או שונה.
    PutMetadata.custom_metadata_after מפה (מפתח: מחרוזת, ערך: מחרוזת) מכיל מפה של צמדי מפתח/ערך מסוג Custom- Metadata אחרי הטרנספורמציה. השדה הזה כולל את כל המטא-נתונים שהמשתמש הגדיר או שינה באובייקט. הוא מאפשר אחסון גמיש של מטא-נתונים נוספים.