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

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

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

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

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

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

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

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

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

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

כשמצטרפים לפלאגין Microservices observability (יכולת צפייה במיקרו-שירותים), שמתואר במאמר Instrument your applications for the observability plugin (הטמעה של פלאגין 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‏ Google Cloud או במסוף Google Cloud כדי להפעיל את Microservices API בפרויקטים. הפעלת Microservice 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 observabillity, פועלים לפי ההוראות הבאות ל-C++‎, ל-Java ול-Go.

C++‎

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

שינויים בבנייה

התמיכה ב-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 האובייקט הנלווה שולט במשך הזמן שבו אפשר לצפות בנתונים, והוא נסגר אוטומטית ומנקה את נתוני התצפית כשהוא יוצא מההקשר.

Go

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

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

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

כדי להשתמש ב-Microservices 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-resources באופן הבא:

...
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 לבנייה, צריך לכלול את הקוד הבא:

<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
    

Go

  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.

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

ניראות (observability) של מיקרו-שירותים מספקת לוח בקרה של ניטור בשם Microservices (gRPC) Monitoring למדדים שמוגדרים בהגדרות המדדים. לוח הבקרה מוצג במסוף רק אם מופעל 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.

בדיקת רשומות ביומן ב-Logs 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 (unary או streaming). בדוגמה הבאה מוצגת רשומה ביומן:

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.

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