הגדרת ניראות (observability) של מיקרו-שירותים (microservices)

במאמר הזה מוסבר איך להגדיר את הפלאגין Microservices observability, איך להוסיף מכשור לאפליקציות gRPC ואיך לקבל מידע מ-Cloud Monitoring, מ-Cloud Logging ומ-Cloud Trace.

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

התכונה 'יכולת צפייה במיקרו-שירותים' פועלת בכל פריסה שקיבלה הרשאה לגשת אל Cloud Monitoring, אל Cloud Logging ואל Cloud Trace באמצעות הפעלת Microservices API. במדריך הזה אנחנו מספקים דוגמה להגדרה של ניראות (observability) של מיקרו-שירותים באמצעות דוגמה של Compute Engine.

באופן כללי, השלבים הם:

  1. מפתחי שירותים יכולים להפעיל את התוסף Microservices observability ולשלוט בו.
  2. מפעיל שירות יכול לצרוך את הנתונים שנאספו בדרכים שונות.

מאגרי gRPC (C++,‏ Go ו-Java) כוללים דוגמאות להדגמה של יכולת התבוננות במיקרו-שירותים.

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

  1. סקירה כללית על יכולת התצפית (Observability) על מיקרו-שירותים
  2. מוודאים שיש לכם פרויקט קיים או יוצרים פרויקט חדש.
  3. מוודאים שיש לכם חשבון שירות קיים או יוצרים חשבון חדש.
  4. קוראים על שני משתני הסביבה הנתמכים, מחליטים באיזה מהם להשתמש ומגדירים את הערכים הנדרשים למשתנה הסביבה.
  5. מפעילים את Microservices API.

בחירת משתנה סביבה להגדרה

כשמצטרפים לפלאגין ניראות (observability) של מיקרו-שירותים (Microservices), שמתואר במאמר לבצע אינסטרומנטציה של האפליקציות לשימוש בפלאגין ניראות (observability), צריך לספק פרטי הגדרה באמצעות משתנה סביבה. כברירת מחדל, אף אחת מתכונות הניטור לא מופעלת. מגדירים את משתנה הסביבה במכונה הווירטואלית או בקונטיינר שבהם מורצים האפליקציה או עומס העבודה של gRPC.

אלה משתני הסביבה:

  • GRPC_GCP_OBSERVABILITY_CONFIG_FILE: הערך הוא נתיב שמצביע על קובץ הגדרות בקידוד JSON.
  • GRPC_GCP_OBSERVABILITY_CONFIG: הערך הוא גוף ההגדרה שמקודד ב-JSON.

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

כדי להחיל את ההגדרה, צריך להפעיל מחדש את אפליקציית gRPC. אי אפשר להגדיר או לראות את הערכים של משתני הסביבה במסוף Google Cloud .

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

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

הפעלת Microservices API

אפשר להשתמש ב-CLI של gcloud או במסוף Google Cloud כדי להפעיל את Microservices API בפרויקטים. הפעלת Microservices API מפעילה באופן אוטומטי את Cloud Logging API,‏ Cloud Monitoring API ו-Cloud Trace API.

כדי להפעיל את ה-API:

gcloud services enable microservices.googleapis.com

הגדרת הרשאות לחשבון שירות

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

  • PROJECT_ID: מחליפים את מזהה הפרויקט.
  • SERVICE_ACCOUNT_NAME: מחליפים את השם של חשבון השירות בפרויקט.
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID> \
  --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/monitoring.metricWriter
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/cloudtrace.agent

ביצוע אינסטרומנטציה באפליקציות עבור פלאגין ה-observability

כדי להוסיף לאפליקציות את האפשרות להשתמש בפלאגין Microservices observability, פועלים לפי ההוראות הבאות ל-C++‎, ל-Java ול-Go.

C++‎

אפשר להשתמש ב-C++‎ עם יכולת מעקב אחרי מיקרו-שירותים החל מ-gRPC C++‎ v1.54. מאגר לדוגמה נמצא ב-GitHub.

שינויים ב-Build

התמיכה ב-Observability זמינה רק דרך מערכת ה-build של Bazel. מוסיפים את יעד grpcpp_gcp_observability כתלות.

שינויים נדרשים בקוד

כדי להפעיל את התכונה 'יכולת צפייה במיקרו-שירותים', צריך להוסיף תלות (מודול יכולת צפייה) ולבצע את שינויי הקוד הבאים בלקוחות, בשרתים או בשניהם של gRPC:

#include <grpcpp/ext/gcp_observability.h>

int main(int argc, char** argv) {
  auto observability = grpc::GcpObservability::Init();
  assert(observability.ok());
  
  // Observability data flushed when object goes out of scope
}

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

grpc::GcpObservability::Init();

הפונקציה מחזירה את הערך absl::StatusOr<GcpObservability>, שצריך לשמור. הסטטוס עוזר לקבוע אם ההגדרה של יכולת הצפייה בוצעה בהצלחה. האובייקט GcpObservability שמצורף שולט במשך הזמן שבו אפשר לצפות בנתונים, והוא נסגר אוטומטית ומנקה את נתוני התצפית כשהוא יוצא מההקשר.

המשך

יש תמיכה בתוספים של יכולת צפייה במיקרו-שירותים בגרסאות gRPC Go‏ v1.54.0 ומעלה. מאגר הדוגמאות נמצא ב-GitHub.

כדי להפעיל את האפשרות 'שקיפות של מיקרו-שירותים' באמצעות מודול Go, צריך מודול שקיפות ואת הקוד הבא:

import "google.golang.org/grpc/gcp/observability"

func main() {
       ctx, cancel := context.WithTimeout(context.Background(), time.Second)
       defer cancel()
       if err := observability.Start(ctx); err != nil {
              log.Warning("Unable to start gRPC observability:", err)
       }
       defer observability.End()
       
}

הקריאה observability.Start מנתחת את ההגדרה ממשתני הסביבה, יוצרת בהתאם את רכיבי הייצוא ומזריקה לוגיקה של איסוף לחיבורי לקוח ולשרתים שנוצרו אחרי הקריאה. הקריאה המושעית observability.End מנקה את המשאבים ומוודאת שהנתונים שנשמרו במאגר זמני נמחקים לפני שהאפליקציה נסגרת.

אחרי שמעדכנים את קוד האפליקציה, מריצים את הפקודה הבאה כדי לעדכן את הקובץ go.mod.

go mod tidy

Java

כדי להשתמש בניראות (observability) של מיקרו-שירותים באפליקציות Java, צריך לשנות את ה-build כך שיכלול את ארטיפקט grpc-gcp-observability. משתמשים בגרסה 1.54.1 ואילך של gRPC.

בקטעים בנושא יצירת קטעי קוד בכלי Gradle ובכלי Maven, הערך grpcVersion מוגדר ל-1.54.1.

מאגר הדוגמאות נמצא ב-GitHub.

שינויים נדרשים בקוד Java

כדי להטמיע בהצלחה את האפשרות למעקב אחרי מיקרו-שירותים באפליקציות Java, מוסיפים את הקוד הבא ל-main().

...
import io.grpc.gcp.observability.GcpObservability;
...

// Main application class
...

public static void main(String[] args) {
...
   // call GcpObservability.grpcInit() to initialize & get observability
   GcpObservability observability = GcpObservability.grpcInit();

...
   // call close() on the observability instance to shutdown observability
   observability.close();
...
}

שימו לב שצריך להפעיל את הפונקציה GcpObservability.grpcInit() לפני שיוצרים ערוצי gRPC או שרתים. הפונקציה GcpObservability.grpcInit() קוראת את ההגדרה של יכולת הצפייה במיקרו-שירותים ומשתמשת בה כדי להגדיר את המיירטים והעוקבים הגלובליים שנדרשים לרישום ביומן, למדדים ולפונקציונליות של מעקב בכל ערוץ ובכל שרת שנוצר. GcpObservability.grpcInit() is thread safe and must be called exactly once. היא מחזירה מופע של GcpObservability שצריך לשמור כדי להפעיל את close() מאוחר יותר.

GcpObservability.close() מבטלת את ההקצאה של משאבים. ערוצים או שרתים שנוצרו אחרי כן לא יתועדו.

GcpObservability מטמיע את java.lang.AutoCloseable, שנסגר אוטומטית אם משתמשים ב-try-with-resource באופן הבא:

...
import io.grpc.gcp.observability.GcpObservability;
...

// Main application class
...

public static void main(String[] args) {
...
   // call GcpObservability.grpcInit() to initialize & get observability
   try (GcpObservability observability = GcpObservability.grpcInit()) {

...
   } // observability.close() called implicitly
...
}

שימוש בכלי Gradle לבנייה

אם אתם משתמשים בכלי Gradle build, אתם צריכים לכלול את הקוד הבא:

def grpcVersion = '1.54.1'

...

dependencies {
...
   implementation "io.grpc:grpc-gcp-observability:${grpcVersion}"
...
}

שימוש בכלי Maven לבנייה (pom.xml)

אם משתמשים בכלי Maven build, צריך לכלול את הקוד הבא:

<properties>
...
  <grpc.version>1.54.1</grpc.version>
...
</properties>

...

<dependencies>
...
 <dependency>
   <groupId>io.grpc</groupId>
   <artifactId>grpc-gcp-observability</artifactId>
   <version>${grpc.version}</version>
 </dependency>
...
</dependencies>

הפעלה של איסוף מדדים, מעקב ונתוני רישום

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

הפעלת מדדים

כדי להפעיל מדדים, מוסיפים את האובייקט cloud_monitoring להגדרה ומגדירים את הערך שלו ל-{}.

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

הפעלת מעקב

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

כדי להפעיל את האפשרות 'מעקב':

  1. מוסיפים את האובייקט cloud_trace להגדרה.
  2. מגדירים את cloud_trace.sampling_rate להסתברות שרוצים שאפליקציית המעקב תתחיל מעקבים חדשים.
    • לדוגמה, 1.0 פירושו מעקב אחרי כל RPC.
    • 0.0 פירושו לא להתחיל מעקבים חדשים.
    • 0.5 פירושו ש-50% מה-RPC נסרקים באופן אקראי.

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

מידע נוסף על מעקב זמין במאמר הגדרות מעקב.

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

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

  1. מוסיפים את האובייקט cloud_logging להגדרה.
  2. מוסיפים תבנית ל-client_rpc_events או ל-server_rpc_events או לשניהם, ומציינים את קבוצת השירותים או השיטות שרוצים ליצור עבורם רישום ביומן של אירועים ברמת התעבורה, ואת מספר הבייטים שרוצים לרשום ביומן עבור כותרות והודעות.

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

דוגמה למשתנה סביבה

בדוגמה הבאה מוגדרים משתני היכולת להתבוננות במשתנה הסביבה GRPC_GCP_OBSERVABILITY_CONFIG:

export GRPC_GCP_OBSERVABILITY_CONFIG='{
     "project_id": "your-project-here",
     "cloud_logging": {
         "client_rpc_events": [
         {
             "methods": ["google.pubsub.v1.Subscriber/Acknowledge", "google.pubsub.v1.Publisher/CreateTopic"],
             "exclude": true
         },
         {
             "methods": ["google.pubsub.v1.Subscriber/*", "google.pubsub.v1.Publisher/*"],
             "max_metadata_bytes": 4096,
             "max_message_bytes": 4096
         }],
         "server_rpc_events": [{
             "methods": ["*"],
             "max_metadata_bytes": 4096,
             "max_message_bytes": 4096
         }],
     },
     "cloud_monitoring": {},
     "cloud_trace": {
         "sampling_rate": 1.00
     },
     "labels": {
         "SOURCE_VERSION": "J2e1Cf",
         "SERVICE_NAME": "payment-service-1Cf",
         "DATA_CENTER": "us-west1-a"
     }
}'

יצירת דוגמה של יכולת התבוננות

כדי ליצור מכונת VM ב-Compute Engine ולהתחבר אליה, ואז להגדיר את דוגמת ה-Observability, פועלים לפי ההוראות האלה.

  1. יוצרים מופע של VM:

    gcloud compute instances create grpc-observability-vm \
      --image-family=debian-11 \
      --image-project=debian-cloud \
      --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    
  2. מתחברים למופע של מכונת ה-VM:

    gcloud compute ssh --project=PROJECT_ID grpc-observability-vm
    

ממשיכים עם ההוראות ל-Java,‏ C++‎ או Go, בהתאם לשפה של אפליקציות gRPC.

Java

  1. אחרי שמתחברים למופע של מכונת ה-VM, מוודאים שגרסה Java 8 או גרסה מתקדמת יותר מותקנת.

    sudo apt update
    sudo apt upgrade
    sudo apt install git
    sudo apt-get install -y openjdk-11-jdk-headless
    
  2. משכפלים את מאגר grpc-java.

    export EXAMPLES_VERSION=v1.54.1
    git clone -b $EXAMPLES_VERSION --single-branch --depth=1 \
    https://github.com/grpc/grpc-java.git
    
  3. עוברים לספריית הדוגמאות.

    cd grpc-java/examples/example-gcp-observability
    
  4. בתיקיית הדוגמאות, פותחים את קובץ ה-README ופועלים לפי ההוראות בקובץ.

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

    gcloud compute ssh --project=PROJECT_ID grpc-observability-vm
    

C++‎

  1. אחרי שמתחברים למכונה הווירטואלית, מריצים קובץ בינארי של שרת hello-world בחלון טרמינל.

    sudo apt-get update -y
    sudo apt-get install -y git build-essential clang
    git clone -b v1.54.0 https://github.com/grpc/grpc.git --depth=1
    cd grpc
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/server_config.json"
    tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_server
    
  2. בחלון טרמינל אחר, מתחברים שוב למכונה הווירטואלית באמצעות SSH ומריצים את הפקודות הבאות, שמריצות את הקובץ הבינארי של הלקוח hello-world.

    cd grpc
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE="$(pwd)/examples/cpp/gcp_observability/helloworld/client_config.json"
    tools/bazel run examples/cpp/gcp_observability/helloworld:greeter_client
    

המשך

  1. מוודאים ש-Go מותקן.

    sudo apt-get install -y git
    sudo apt install wget
    wget https://go.dev/dl/go1.20.2.linux-amd64.tar.gz
    sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf \
    go1.20.2.linux-amd64.tar.gz
    export PATH=$PATH:/usr/local/go/bin
    
  2. משכפלים את הדוגמאות של gRPC-Go.

    git clone https://github.com/grpc/grpc-go.git
    cd grpc-go/
    git checkout -b run-observability-example
    875c97a94dca8093bf01ff2fef490fbdd576373d
    
  3. עוברים לשיבוט של ספריית gRPC-Go:

    cd examples/features/observability
    
  4. מפעילים את השרת.

    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./server/serverConfig.json
    go run ./server/main.go
    
  5. בחלון טרמינל נפרד, מריצים את הפקודות הבאות.

    export PATH=$PATH:/usr/local/go/bin
    cd grpc-go/examples/features/observability
    export GRPC_GCP_OBSERVABILITY_CONFIG_FILE=./client/clientConfig.json
    go run ./client/main.go
    

צפייה בנתוני מעקב, במדדים וברשומות ביומן

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

צפייה בנתוני מעקב ב-Cloud Trace

אחרי שמגדירים את הדוגמאות או אחרי שמטמיעים את עומסי העבודה, אמורים לראות עקבות שנוצרו על ידי לקוחות gRPC ושרתי gRPC במסוףGoogle Cloud ברשימה של העקבות האחרונים.

רשימת מעקב של מיקרו-שירותים.
רשימת מעקב של מיקרו-שירותים (לחצו כדי להגדיל)

צפייה ביומנים של פרטי ההעברה

אם מפעילים גם רישום ביומן וגם מעקב, אפשר לראות את הרשומות ביומן של המעקבים לצד תרשים המפל של Cloud Trace או ב-Logs Explorer.

הצגת מדדים במרכז הבקרה

הניראות של מיקרו-שירותים מספקת לוח בקרה של מעקב שנקרא Microservices (gRPC) Monitoring (מעקב אחרי מיקרו-שירותים (gRPC)) עבור המדדים שמוגדרים בהגדרות המדדים. לוח הבקרה מוצג במסוף רק אם מופעל Microservices API. Google Cloud המסוף Google Cloud קורא ל-Service Usage API כדי לוודא ש-Microservices API מופעל בפרויקט. למשתמש צריכה להיות הרשאת serviceusage.services.list כדי להציג את לוח הבקרה.

מרכז הבקרה Microservices (gRPC) Monitoring הוא Google Cloud מרכז בקרה ואין אפשרות לשנות אותו ישירות. כדי להתאים אישית את לוח הבקרה, צריך להעתיק אותו ללוח בקרה מותאם אישית. לאחר מכן תוכלו לעדכן את מרכז הבקרה המותאם אישית, למשל להוסיף, למחוק או לסדר מחדש את התרשימים.

הצגת מדדים ב-Metrics Explorer

אחרי שמגדירים את הדוגמה ל-gRPC או מוסיפים מכשור לעומס העבודה, אמורים לראות את המדדים שנוצרו על ידי לקוחות gRPC ושרתי gRPC בGoogle Cloud מסוף.

כדי לראות מדדים בתרשים, פועלים לפי ההוראות במאמר איך בוחרים מדדים כשמשתמשים ב-Metrics Explorer.

בדיקת רשומות ביומן ב-Log Explorer

התכונה 'הצעה לשאילתה' היא תכונה של Cloud Logging שבה Google Cloud מוצעות קבוצות של שאילתות על סמך היומנים שהוטמעו. אפשר ללחוץ על המסננים המוכנים ולהשתמש בהם.

הצעות לשאילתות ב-Logs Explorer.
הצעות לשאילתות ב-Logs Explorer. (לחצו להגדלה)

אחרי שרשומות היומן שתואמות לשאילתות המוצעות יופיעו ב-Cloud Logging, צפויות להופיע שאילתות מוצעות חדשות תוך כ-6 דקות. ברוב המקרים, תוכלו לראות הצעות חדשות לשאילתות מוקדם יותר. אם יש רשומות ביומן שתואמות להצעה ב-15 הדקות הקודמות, ההצעות לשאילתות ימשיכו להופיע. ההמלצות ימשיכו להופיע עד שלא יהיו יותר רשומות תואמות ביומן ב-15 הדקות האחרונות.

אפשר ליצור שאילתות בהתאמה אישית. הוראות מפורטות זמינות במדריך לשפת שאילתות לרישום ביומן. לדוגמה, בחלונית Query של Logs Explorer, אפשר לנסות להציג את כל יומני הניפוי באגים של gRPC באמצעות הקוד הבא:

log_id("microservices.googleapis.com/observability/grpc")

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

{
  "insertId": "17kh8vafzuruci",
  "jsonPayload": {
    "authority": "10.84.1.15:50051",
    "sequenceId": "6",
    "serviceName": "helloworld.Greeter",
    "peer": {
      "ipPort": 50051,
      "address": "10.84.1.10",
      "type": "IPV4"
    },
    "callId": "d9577780-c608-4bff-9e12-4d9cdea6b298",
    "type": "SERVER_TRAILER",
    "methodName": "SayHello",
    "payload": {},
    "logger": "CLIENT"
  },
  "resource": {
    "type": "k8s_container",
    "labels": {
      "pod_name": "grpc-client-deployment-155-6967959544-x8ndr",
      "container_name": "grpc-client-container-155",
      "cluster_name": "o11y-cluster",
      "namespace_name": "grpc-client-namespace-155",
      "location": "us-west1-b",
      "project_id": "grpc-greeter"
    }
  },
  "timestamp": "2023-04-05T23:33:41.718523Z",
  "severity": "DEBUG",
  "labels": {
    "environment": "example-client"
  },
  "logName": "projects/grpc-greeter/logs/microservices.googleapis.com%2Fobservability%2Fgrpc",
  "receiveTimestamp": "2023-04-05T23:33:42.712682457Z"
}

הצעות לשאילתות

הניראות של מיקרו-שירותים מספקת את השאילתות המוצעות הבאות ל-Cloud Logging:

רשומות ביומן של כותרות או נתונים בסוף של gRPC

השאילתה הזו מספקת תצוגה בסיסית של קריאות RPC, ומציגה מידע על עמיתים ותוצאות של קריאות RPC.

log_id("microservices.googleapis.com/observability/grpc") AND
jsonPayload.type=("CLIENT_HEADER" OR "SERVER_TRAILER")

קריאות gRPC שנכשלו

השאילתה הזו מוצאת את קריאות ה-RPC שמסתיימות בסטטוס שאינו OK.

log_id("microservices.googleapis.com/observability/grpc") AND
jsonPayload.type="SERVER_TRAILER" AND
jsonPayload.payload.statusCode!="OK"

רישום רשומות ביומן עבור בקשות gRPC שבוטלו או שחרגו מהמועד האחרון

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

log_id("microservices.googleapis.com/observability/grpc") AND
((jsonPayload.type="SERVER_TRAILER" AND jsonPayload.payload.statusCode=("CANCELLED" OR "DEADLINE_EXCEEDED")) OR (jsonPayload.type="CANCEL"))

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

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

log_id("microservices.googleapis.com/observability/grpc")
jsonPayload.callId="a358c7b80-3548-4bc8-a33f-b93ba1514904"

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

log_id("microservices.googleapis.com/observability/grpc")
jsonPayload.serviceName="helloworld.Greeter"
jsonPayload.methodName="SayHello"

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

log_id("microservices.googleapis.com/observability/grpc")
jsonPayload.payload.statusCode!="OK"
תוצאות השאילתה: קוד סטטוס של חריגה מהמועד האחרון.
תוצאות השאילתה: קוד סטטוס של חריגה מהמועד האחרון (לחצו כדי להגדיל)

אפשרויות ניראות

התכונות האופציונליות הבאות כלולות ב-Microservices observability.

הגדרת תוויות מותאמות אישית

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

תוויות מותאמות אישית מוגדרות בהגדרה עם רשימה של צמדי מפתח/ערך בשדה labels. כל המפתחות והערכים של תוויות מותאמות אישית הם מסוג STRING. ההטמעה קוראת את ההגדרה ויוצרת תווית נפרדת לכל צמד מפתח/ערך, ואז מצרפת את התוויות לנתוני יכולת הצפייה.

לדוגמה, זו הגדרת תווית:

"labels": {
    "DATACENTER": "SAN_JOSE_DC",
    "APP_ID": "24512"
  }

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

{
   "DATACENTER" : "SAN_JOSE_DC"
   "APP_ID" : "24512"
}
שאילתות לגבי תוויות ברשומה ביומן.
שאילתות לגבי תוויות ברשומה ביומן (לחצו כדי להגדיל)
תרשים קו שמציג תוויות מותאמות אישית ותוויות משאבים.
תרשים קו שמציג תוויות בהתאמה אישית ותוויות משאבים (לחצו כדי להגדיל)

הפעלת רישום ביומן של מטען ייעודי (payload)

כדי להפעיל את רישום היומנים של מטען הייעודי (payload), משתמשים במשתני הסביבה שמספקים לעומס העבודה. כדי להפעיל את רישום המטען הייעודי (payload) ביומן עבור הודעות וכותרות של HelloWorld, צריך לעדכן את הערך של קובצי ההגדרות gcp_observability_server_config.json, gcp_observability_client_config.json או שניהם בדוגמאות של gRPC באופן הבא:

{
   "cloud_monitoring":{
   },
   "cloud_trace":{
      "sampling_rate":1.0
   },
   "cloud_logging":{
      "client_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ],
            "max_metadata_bytes":4096,
            "max_message_bytes":4096
         }
      ],
      "server_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ],
            "max_metadata_bytes":4096,
            "max_message_bytes":4096
         }
      ]
   }
}

הגדרת ניראות (observability) בין פרויקטים

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

{
   "project_id":"core-platform-stats",
   "cloud_monitoring":{
   },
   "cloud_trace":{
      "sampling_rate":1.0
   },
   "cloud_logging":{
      "client_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ]
         }
      ],
      "server_rpc_events":[
         {
            "methods":[
               "helloworld.Greeter/*"
            ]
         }
      ]
   }
}

הערכת נפח היומן

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

פריט פרטים
אירועים שנוצרו עבור קריאה יחידה (unary) תקינה ‫6 אירועים

קריאת RPC חד-פעמית עם סטטוס OK יוצרת את 6 האירועים הבאים עבור הלקוח או השרת:

  • CLIENT_HEADER
  • SERVER_HEADER
  • CLIENT_MESSAGE
  • SERVER_MESSAGE
  • CLIENT_HALF_CLOSE
  • SERVER_TRAILER
גודל ממוצע של רשומה ביומן ‫500 בייט כברירת מחדל

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

אפשר להגדיר את הגודל המקסימלי של מטען ייעודי (payload) בהגדרות של יכולת התצפית. כברירת מחדל, לא מתבצעת רישום ביומן של מטען ייעודי (Payload).
גודל תוויות מותאמות אישית 0 כברירת מחדל, אפשר להגדיר

תוויות מותאמות אישית מסופקות לאפליקציה באמצעות משתני סביבה. אם לא מציינים תוויות, לא יהיו תוויות מותאמות אישית

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

Monthly Log Ingestion = QPS * 6 * (500B + Payload Logging Size + Custom Labels Size) * 2592000

לדוגמה, אם QPS של שיטת קריאה יחידה הוא 1 ולא מופעלות תכונות נוספות, הגודל המשוער של הטמעת היומן הוא בערך 7.24 GiB.

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