סטרימינג ורישום ביומן בזמן אמת של רשומות ביומן

במאמר הזה מוסבר איך לצפות ברשומות ביומן בזמן אמת באמצעות סטרימינג וזנב בזמן אמת. הזרמת יומנים מאפשרת לכם לראות את רשומות היומן בזמן אמת, והיא זמינה ב-Logs Explorer. התכונה 'מעקב בזמן אמת' מאפשרת לכם לראות את רשומות היומן בזמן אמת, והיא זמינה כפקודה gcloud alpha logging tail ב-ה-CLI של gcloud וכשיטה entries.tail ב-Cloud Logging API.

כשאתם צופים ביומנים ומנתחים אותם באמצעות Logs Explorer‏, gcloud logging read או שיטת ה-API‏ entries.list, אתם צופים ברשומות ביומן שאוחסנו ב-Cloud Logging. כשמבצעים סטרימינג או מעקב בזמן אמת של רשומות ביומן, רואים את הרשומות ביומן בזמן שהאפליקציות כותבות אותן ל-Cloud Logging API.

שידור יומנים ב-Logs Explorer

ב-Logs Explorer, אתם יכולים לראות את נתוני היומנים בזמן אמת באמצעות הזרמת יומנים. כשמשתמשים ביומני שידור, אפשר להוסיף שאילתה כדי לשדר רק את היומנים שתואמים לשאילתה. כדי להזרים יומנים:

  1. במסוף Google Cloud , נכנסים לדף Logs Explorer:

    כניסה אל Logs Explorer

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.

  2. בשדה Query (שאילתה), מזינים שאילתה ולוחצים על Stream logs (הזרמת יומנים).

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

    מידע על שאילתות זמין במאמר יצירת שאילתות ב-Logs Explorer.

שימוש במעקב בזמן אמת ב-Google Cloud CLI

באמצעות תכונת המעקב בזמן אמת, אתם יכולים לראות את רשומות היומן בזמן אמת בזמן ש-Cloud Logging כותב אותן, באמצעות Google Cloud CLI או Cloud Logging API.

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

מידע על שיטת ה-API לרישום ביומן בזמן אמת זמין במאמר על השיטה entries.tail.

ההתקנה של gcloud alpha logging tail מתבצעת

כדי להשתמש ב-gcloud alpha logging tail, צריך להתקין את Python 3 ואת חבילת Python‏ grpcio.

הוראות להתקנת Python מופיעות בדף Python. הוראות להתקנת מנהל החבילות של Python, ‏ pip, שנדרש להתקנת החבילה grpcio, מופיעות בדף של Python Package Installer.

כדי להתקין את gcloud alpha logging tail:

  1. מוודאים ש-Google Cloud CLI מותקן. הוראות להתקנת Google Cloud CLI מופיעות במאמר התקנת Google Cloud CLI.

  2. מוודאים שאתם משתמשים בגרסה 302.0.0 ואילך של ה-CLI של gcloud.

    gcloud version
    

    הוראות לעדכון ה-CLI של gcloud זמינות במאמר gcloud components update.

  3. מתקינים את רכיבי האלפא של ה-CLI של gcloud:

    gcloud components install alpha
    
  4. למשתמשי MacOS,‏ Linux ו-Cloud Shell:

    1. מתקינים את ספריות הלקוח של gRPC:

       sudo pip3 install grpcio
      
    2. מגדירים את משתנה הסביבה CLOUDSDK_PYTHON_SITEPACKAGES לכל ערך:

       export CLOUDSDK_PYTHON_SITEPACKAGES=1
      
  5. משתמשים בפקודות הבאות כדי להגדיר את מזהה הפרויקט Google Cloud ולבצע אימות:

    gcloud config set project PROJECT_ID
    gcloud auth login
    

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

  6. מריצים את הפקודה הבאה כדי לוודא ש-gcloud alpha logging tail מותקן:

    gcloud alpha logging tail
    

    הפקודה מציגה את ההודעה הבאה:

    Initializing tail session.

    עכשיו מוצגות רשומות היומן של הפרויקט בזמן שהן נכתבות על ידי Logging. Google Cloud

    רשומות ביומן במהלך סשן של מעקב בזמן אמת.

מידע נוסף על שימוש ב-live tailing זמין במדריך העזר של gcloud alpha logging tail.

אגירת נתונים והזמנה

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

חשוב לשים לב למאפיינים הבאים של חלון ההשהיה:

  • חלון מאגר הנתונים הזמני שמוגדר כברירת מחדל הוא שתי שניות.

  • הרישום ביומן מעכב את כתיבת הרשומות ביומן לקטגוריות יומנים למשך חלון המאגר.

  • אם רשומה ביומן נכתבת מחוץ לחלון המאגר, אז הרישום ביומן מחזיר את הרשומות ביומן כפי שהן מתקבלות.

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

חלון חיץ השפעה
0 שניות הערכים החדשים ביותר ביומן מוחזרים, אבל יש סיכוי גבוה יותר שהם לא יהיו מסודרים.
60 שניות הכניסות יוחזרו אחרי השהיה של 60 שניות, אבל רוב היומנים יוחזרו בסדר עולה.

מגבלות ומכסות

בטבלה הבאה מפורטות המגבלות והמכסות של רישום ביומן בזמן אמת:

מגבלות ומכסות ערך
מספר הרשומות שמוחזרות בדקה ‫60,000
אם יותר מ-60,000 רשומות תואמות למסנן, הרישום ביומן מחזיר את מספר הרשומות בתגובה.
פתיחת סשנים של מעקב בזמן אמת לכל Google Cloud פרויקט 10

מגבלות על לקוחות

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

שימוש במעקב בזמן אמת באמצעות ספריות לקוח

באמצעות מעקב בזמן אמת, אפשר לראות את הרשומות ביומן בזמן אמת בזמן ש-Cloud Logging כותב אותן. מידע על שיטת ה-API לרישום ביומן בזמן אמת זמין במאמר על השיטה entries.tail.

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

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

Go

מידע על התקנת ספריית הלקוח ל-Logging ושימוש בה מופיע במאמר ספריות הלקוח של Logging.

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

import (
	"context"
	"fmt"
	"io"

	logging "cloud.google.com/go/logging/apiv2"
	"cloud.google.com/go/logging/apiv2/loggingpb"
)

// tailLogs creates a channel to stream log entries that were recently ingested for a project
func tailLogs(projectID string) error {
	// projectID := "your_project_id"

	ctx := context.Background()
	client, err := logging.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("NewClient error: %w", err)
	}
	defer client.Close()

	stream, err := client.TailLogEntries(ctx)
	if err != nil {
		return fmt.Errorf("TailLogEntries error: %w", err)
	}
	defer stream.CloseSend()

	req := &loggingpb.TailLogEntriesRequest{
		ResourceNames: []string{
			"projects/" + projectID,
		},
	}
	if err := stream.Send(req); err != nil {
		return fmt.Errorf("stream.Send error: %w", err)
	}

	// read and print two or more streamed log entries
	for counter := 0; counter < 2; {
		resp, err := stream.Recv()
		if err == io.EOF {
			break
		}
		if err != nil {
			return fmt.Errorf("stream.Recv error: %w", err)
		}
		fmt.Printf("received:\n%v\n", resp)
		if resp.Entries != nil {
			counter += len(resp.Entries)
		}
	}
	return nil
}

Java

מידע על התקנת ספריית הלקוח ל-Logging ושימוש בה מופיע במאמר ספריות הלקוח של Logging.

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

import com.google.cloud.logging.LogEntry;
import com.google.cloud.logging.LogEntryServerStream;
import com.google.cloud.logging.Logging;
import com.google.cloud.logging.Logging.TailOption;
import com.google.cloud.logging.LoggingOptions;

public class TailLogEntries {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Optionally provide the logname as an argument.
    String logName = args.length > 0 ? args[0] : "";

    LoggingOptions options = LoggingOptions.getDefaultInstance();
    try (Logging logging = options.getService()) {

      // Optionally compose a filter to tail log entries only from specific log
      LogEntryServerStream stream;

      if (logName != "") {
        stream =
            logging.tailLogEntries(
                TailOption.filter(
                    "logName=projects/" + options.getProjectId() + "/logs/" + logName));
      } else {
        stream = logging.tailLogEntries();
      }
      System.out.println("start streaming..");
      for (LogEntry log : stream) {
        System.out.println(log);
        // cancel infinite streaming after receiving first entry
        stream.cancel();
      }
    }
  }
}

Node.js

מידע על התקנת ספריית הלקוח ל-Logging ושימוש בה מופיע במאמר ספריות הלקוח של Logging.

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

const {Logging} = require('@google-cloud/logging');
const logging = new Logging();

/**
 * TODO(developer): Replace logName with the name of your log.
 */
const log = logging.log(logName);
console.log('running tail log entries test');

const stream = log
  .tailEntries({
    filter: 'timestamp > "2021-01-01T23:00:00Z"',
  })
  .on('error', console.error)
  .on('data', resp => {
    console.log(resp.entries);
    console.log(resp.suppressionInfo);
    // If you anticipate many results, you can end a stream early to prevent
    // unnecessary processing and API requests.
    stream.end();
  })
  .on('end', () => {
    console.log('log entry stream has ended');
  });

// Note: to get all project logs, invoke logging.tailEntries