בדף הזה מוסבר על הגדרות ברירת המחדל וההגדרות המותאמות אישית של הסוכן Cloud Logging.
רוב המשתמשים לא צריכים לקרוא את הדף הזה. כדאי לקרוא את הדף הזה אם:
אתם רוצים ללמוד פרטים טכניים מעמיקים על ההגדרה של סוכן Cloud Logging.
אתם רוצים לשנות את ההגדרה של סוכן Cloud Logging.
הגדרות ברירת מחדל
הסוכן Logging google-fluentd הוא גרסה שעברה שינוי של כלי איסוף נתוני היומן fluentd.
לסוכן Logging יש הגדרת ברירת מחדל, וברוב המקרים הנפוצים לא נדרשת הגדרה נוספת.
בהגדרת ברירת המחדל שלו, סוכן Logging מעביר יומנים באופן שוטף, כפי שמופיע ברשימת יומני ברירת המחדל, אל Cloud Logging. אפשר להגדיר את סוכן Logging כך שיזרים יומנים נוספים. פרטים נוספים זמינים בקטע התאמה אישית של ההגדרה של סוכן Logging בדף הזה.
הסוכן Logging משתמש בתוספים של fluentd קלט כדי לאחזר ולמשוך יומני אירועים ממקורות חיצוניים, כמו קבצים בדיסק, או כדי לנתח רשומות יומן נכנסות. פלאגינים לקלט נכללים בחבילה עם הסוכן או שאפשר להתקין אותם בנפרד כ-Ruby gems. אפשר לעיין ברשימה של פלאגינים כלולים.
הסוכן קורא רשומות יומן שמאוחסנות בקובצי יומן במכונת ה-VM באמצעות התוסף המובנה in_tail של fluentd. כל רשומה ביומן מומרת למבנה של רשומה ביומן ב-Cloud Logging. התוכן של כל רשומה ביומן מתועד בעיקר במטען הייעודי של הרשומות ביומן, אבל הרשומות ביומן מכילות גם רכיבים סטנדרטיים כמו חותמת זמן וחומרה. סוכן הרישום ביומן דורש שכל רשומה ביומן תתויג בתג בפורמט מחרוזת. כל התוספים של שאילתות ופלט תואמים לקבוצה ספציפית של תגים. שם היומן בדרך כלל מופיע בפורמט projects/[PROJECT-ID]/logs/[TAG]. לדוגמה, שם היומן הזה כולל את התג structured-log:
projects/my-sample-project-12345/logs/structured-log
תוסף הפלט משנה כל הודעה מובנית שהופנמה לרשומה ביומן ב-Cloud Logging. המטען הייעודי (payload) הופך לטקסט או למטען ייעודי (payload) בפורמט JSON.
בקטעים הבאים בדף הזה מפורטת הגדרת ברירת המחדל.
הגדרות ברירת המחדל
בקטעים הבאים מוסבר על הגדרות ברירת המחדל של syslog, של פלאגין הקלט forward, של הגדרות קלט ליומנים של אפליקציות צד שלישי, כמו אלה שמופיעים ברשימת יומני ברירת המחדל, ושל פלאגין הפלט fluentd של Google Cloud.
מיקום קובץ התצורה של שורש
Linux:
/etc/google-fluentd/google-fluentd.confקובץ התצורה הראשי הזה מייבא גם את כל קובצי התצורה מהתיקייה
/etc/google-fluentd/config.d.ב-Windows:
C:\Program Files (x86)\Stackdriver\LoggingAgent\fluent.confאם אתם מפעילים סוכן Logging לפני גרסה v1-5, המיקום הוא:
C:\GoogleStackdriverLoggingAgent\fluent.conf
הגדרת Syslog
מיקומי קובצי התצורה:
/etc/google-fluentd/config.d/syslog.confתיאור: הקובץ הזה כולל את ההגדרה לציון syslog כקלט של יומן.
בודקים את מאגר התצורה.
| שם ההגדרה | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
format |
מחרוזת | /^(?<message>(?<time>[^ ]*\s*[^ ]* [^ ]*) .*)$/ |
הפורמט של syslog. |
path |
מחרוזת | /var/log/syslog |
הנתיב של קובץ ה-syslog. |
pos_file |
מחרוזת | /var/lib/google-fluentd/pos/syslog.pos |
הנתיב של קובץ המיקום עבור קלט היומן הזה. fluentd מתעד את המיקום האחרון שקרא בקובץ הזה. אפשר לעיין בfluentdמסמכי התיעוד המפורטים. |
read_from_head |
bool | true |
האם להתחיל לקרוא את הרישומים מתחילת הקובץ במקום מהסוף. אפשר לעיין בfluentdמסמכי התיעוד המפורטים. |
tag |
מחרוזת | syslog |
תג היומן של קלט היומן הזה. |
הגדרת פלאגין של קלט in_forward
מיקומי קובצי התצורה:
/etc/google-fluentd/config.d/forward.confתיאור: הקובץ הזה כולל את ההגדרה להגדרת פלאגין הקלט
in_forwardfluentd. תוסף הקלטin_forwardמאפשר להעביר יומנים באמצעות שקע TCP.כדאי לעיין ב
fluentdמסמכי התיעוד המפורטים של הפלאגין הזה ובמאגר התצורה.
| שם ההגדרה | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
port |
int | 24224 |
היציאה למעקב. |
bind |
מחרוזת | 127.0.0.1 |
כתובת ה-bind למעקב. כברירת מחדל, מתקבלים רק חיבורים מ-localhost. כדי לפתוח את האפשרות הזו, צריך לשנות את ההגדרה ל-0.0.0.0. |
הגדרת קלט של יומנים מאפליקציות צד שלישי
מיקומי קובצי התצורה:
/etc/google-fluentd/config.d/[APPLICATION_NAME].confתיאור: הספרייה הזו כוללת קובצי הגדרות שמשמשים לציון קובצי יומן של אפליקציות צד שלישי כקלט ליומן. כל קובץ, למעט
syslog.confו-forward.conf, מייצג אפליקציה אחת (לדוגמה,apache.confלאפליקציית Apache).בודקים את מאגר התצורה.
| שם ההגדרה | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
format1 |
מחרוזת | משתנה לפי אפליקציה | הפורמט של היומן. אפשר לעיין בfluentdמסמכי התיעוד המפורטים. |
path |
מחרוזת | משתנה לפי אפליקציה | הנתיב של קובצי היומן. אפשר לציין כמה נתיבים, מופרדים באמצעות ','. אפשר לכלול את הפורמט * ו-strftime כדי להוסיף או להסיר קובץ מעקב באופן דינמי. אפשר לעיין בfluentdמסמכי התיעוד המפורטים. |
pos_file |
מחרוזת | משתנה לפי אפליקציה | הנתיב של קובץ המיקום עבור קלט היומן הזה. fluentd מתעד את המיקום האחרון שקרא בקובץ הזה. אפשר לעיין בfluentdמסמכי התיעוד המפורטים). |
read_from_head |
bool | true |
האם להתחיל לקרוא את הרישומים מתחילת הקובץ במקום מהסוף. אפשר לעיין בfluentdמסמכי התיעוד המפורטים. |
tag |
מחרוזת | משתנה; שם האפליקציה. | תג היומן של קלט היומן הזה. |
1 אם משתמשים בפסקה <parse>, צריך לציין את הפורמט של היומן באמצעות @type.
הגדרת פלאגין הפלטGoogle Cloud fluentd
מיקומי קובצי התצורה:
- Linux:
/etc/google-fluentd/google-fluentd.conf ב-Windows:
C:\Program Files (x86)\Stackdriver\LoggingAgent\fluent.confאם אתם מפעילים סוכן Logging לפני גרסה v1-5, המיקום הוא:
C:\GoogleStackdriverLoggingAgent\fluent.conf
- Linux:
תיאור: הקובץ הזה כולל אפשרויות הגדרה לשליטה בהתנהגות של תוסף הפלטGoogle Cloud
fluentd.עוברים אל מאגר התצורה.
| שם ההגדרה | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
buffer_chunk_limit |
מחרוזת | 512KB |
כשמתקבלות רשומות ביומן, רשומות שלא ניתן לכתוב לרכיבים במורד הזרם מספיק מהר מועברות לתור של נתחים. ההגדרה הזו קובעת את הגודל המקסימלי של כל נתח. כברירת מחדל, אנחנו מגדירים את מגבלת הגודל של כל נתח בצורה שמרנית כדי להימנע מחריגה מגודל הנתח המומלץ של 5MB לכל בקשת כתיבה ב-Logging API. רשומות ביומן בבקשת ה-API יכולות להיות גדולות פי 5 עד פי 8 מגודל היומן המקורי, עם כל המטא-נתונים הנוספים שמצורפים אליהן. באפר נמחק אם אחד משני התנאים הבאים מתקיים: 1. flush_interval מתחיל לפעול. 2. גודל המאגר מגיע ל- buffer_chunk_limit. |
flush_interval |
מחרוזת | 5s |
כשמתקבלות רשומות ביומן, רשומות שלא ניתן לכתוב לרכיבים במורד הזרם מספיק מהר מועברות לתור של נתחים. ההגדרה קובעת כמה זמן יעבור עד שנצטרך לרוקן את מאגר הנתונים הזמני של נתחי הנתונים. באפר נמחק אם אחד משני התנאים הבאים מתקיים: 1. flush_interval מתחיל לפעול. 2. גודל המאגר מגיע ל- buffer_chunk_limit. |
disable_retry_limit |
bool | false |
מגדיר מגבלה על מספר הניסיונות החוזרים של שטיפת נתונים שנכשלה מתוך חלקי מאגר. אפשר לעיין במפרטים מפורטים ב-retry_limit, ב-retry_wait וב-max_retry_wait. |
retry_limit |
int | 3 |
כשחלק מהמאגר לא מצליח להתרוקן, fluentd מנסה שוב מאוחר יותר כברירת מחדל. ההגדרה הזו קובעת כמה ניסיונות חוזרים יבוצעו לפני שחלק בעייתי במאגר יוסר. |
retry_wait |
int | 10s |
כשחלק מהמאגר לא מצליח להתרוקן, fluentd מנסה שוב מאוחר יותר כברירת מחדל. ההגדרה הזו קובעת את מרווח הזמן להמתנה בשניות לפני הניסיון החוזר הראשון. מרווח ההמתנה מוכפל בכל ניסיון חוזר (20 שניות, 40 שניות וכו') עד שמגיעים ל-retry_ limit או ל-max_retry_wait. |
max_retry_wait |
int | 300 |
כשחלק מהמאגר לא מצליח להתרוקן, fluentd מנסה שוב מאוחר יותר כברירת מחדל. מרווח ההמתנה מוכפל בכל ניסיון חוזר (20 שניות, 40 שניות וכו'). בהגדרה הזו מציינים את מספר השניות המקסימלי של מרווחי ההמתנה. אם מגיעים למגבלה הזו של פרק הזמן להמתנה, ההכפלה נפסקת. |
num_threads |
int | 8 |
מספר הפעמים שבהן אפשר להריץ בו-זמנית את הפלאגין של הפלט. |
use_grpc |
bool | true |
האם להשתמש ב-gRPC במקום ב-REST/JSON כדי לתקשר עם Logging API. בדרך כלל, השימוש במעבד נמוך יותר כש-gRPC מופעל |
grpc_compression_algorithm |
enum | none |
אם משתמשים ב-gRPC, מגדירים את סכמת הדחיסה שבה רוצים להשתמש. הערך יכול להיות none או gzip. |
partial_success |
bool | true |
האם לתמוך בהצלחה חלקית של הטמעת יומנים. אם true, רשומות יומן לא תקינות בסט מלא מושמטות, ורשומות יומן תקינות מוזנות בהצלחה ל-Logging API. אם false, המערכת תבטל את כל קבוצת הרשומות אם היא תכיל רשומות לא תקינות. |
enable_monitoring |
bool | true |
כשההגדרה היא true, סוכן ה-Logging מייצא טלמטריה פנימית. פרטים נוספים זמינים במאמר בנושא טלמטריה של תוסף פלט. |
monitoring_type |
מחרוזת | opencensus |
סוג המעקב. האפשרויות הנתמכות הן opencensus ו-prometheus. פרטים נוספים זמינים במאמר בנושא טלמטריה של תוסף פלט. |
autoformat_stackdriver_trace |
bool | true |
אם הערך הוא true, המעקב מעוצב מחדש אם הערך של שדה המטען הייעודי המובנה logging.googleapis.com/trace תואם לפורמט traceId של ResourceTrace. פרטים על העיצוב האוטומטי מופיעים בקטע שדות מיוחדים במטענים מובְנים בדף הזה. |
הגדרת המעקב
טלמטריה של פלאגין הפלט
האפשרות enable_monitoring קובעת אם תוסף הפלט Google Cloud fluentd
יאסוף את נתוני הטלמטריה הפנימיים שלו. אם הערך הוא true, סוכן Logging עוקב אחרי מספר רשומות היומן שנדרש לשלוח ל-Cloud Logging, ומספר רשומות היומן שנקלטו בפועל ב-Cloud Logging. אם המצב מוגדר ל-false, תוסף הפלט לא אוסף מדדים.
האפשרות monitoring_type קובעת איך נתוני הטלמטריה האלה נחשפים על ידי הסוכן. רשימת המדדים מופיעה בהמשך.
אם מגדירים את הערך prometheus, סוכן Logging חושף מדדים בפורמט Prometheus בנקודת הקצה של Prometheus (localhost:24231/metrics כברירת מחדל; לפרטים על התאמה אישית של ההגדרה הזו, אפשר לעיין במאמר הגדרת התוספים prometheus ו-prometheus_monitor). כדי שהמדדים האלה ייכתבו ל-Monitoring API במכונות וירטואליות ב-Compute Engine, צריך להתקין ולהפעיל גם את סוכן Monitoring.
כשההגדרה היא opencensus (ברירת המחדל מאז v1.6.25), סוכן ה-Logging כותב ישירות את מדדי הבריאות שלו ל-Monitoring API. לשם כך, צריך להקצות את התפקיד roles/monitoring.metricWriter לחשבון השירות שמשמש כברירת מחדל של Compute Engine, גם אם סוכן Monitoring לא מותקן.
המדדים הבאים נכתבים ל-Monitoring API על ידי סוכן Monitoring וסוכן Logging במצב opencensus:
-
agent.googleapis.com/agent/uptimeעם התוויתversion: זמן הפעולה של סוכן Logging. -
agent.googleapis.com/agent/log_entry_countעם התוויתresponse_code: מספר רשומות היומן שנכתבו על ידי סוכן Logging. -
agent.googleapis.com/agent/log_entry_retry_countwith aresponse_codelabel: מספר הרשומות ביומן שנכתבו על ידי סוכן ה-Logging. -
agent.googleapis.com/agent/request_countעם תוויתresponse_code: מספר בקשות ה-API מסוכן ה-Logging.
תיאורים מפורטים יותר של המדדים האלה מופיעים בדף מדדים של נציגים.
בנוסף, הפלאגין של הפלט חושף את מדדי Prometheus הבאים במצב prometheus:
-
uptimeעם התוויתversion: זמן הפעולה של סוכן Logging. -
stackdriver_successful_requests_countעם התוויותgrpcו-code: מספר הבקשות שבוצעו בהצלחה אל Logging API. -
stackdriver_failed_requests_countעם התוויותgrpcו-code: מספר הבקשות שנכשלו ב-Logging API, עם פירוט לפי קוד השגיאה. -
stackdriver_ingested_entries_countעם תוויותgrpcו-code: מספר רשומות היומן שנקלטו על ידי Logging API. -
stackdriver_dropped_entries_countעם תוויותgrpcו-code: מספר רשומות היומן שנדחו על ידי Logging API. -
stackdriver_retried_entries_countעם התוויותgrpcו-code: מספר רשומות היומן שלא נקלטו על ידי Google Cloud תוסף הפלטfluentdבגלל שגיאה זמנית, והניסיון לקלוט אותן נכשל.
הגדרת הפלאגינים prometheus ו-prometheus_monitor
מיקומי קובצי התצורה:
/etc/google-fluentd/google-fluentd.confתיאור: הקובץ הזה כולל אפשרויות הגדרה לשליטה בהתנהגות של הפלאגינים
prometheusו-prometheus_monitor. תוסףprometheus_monitorעוקב אחרי התשתית המרכזית של Fluentd. התוסףprometheusחושף את המדדים, כולל אלה מהתוסףprometheus_monitorואלה מהתוסףgoogle_cloudשלמעלה, דרך יציאה מקומית בפורמט Prometheus. פרטים נוספים זמינים בכתובת https://docs.fluentd.org/deployment/monitoring-prometheus.עוברים אל מאגר התצורה.
כדי לנטר את Fluentd, מופעל כברירת מחדל שרת מדדי ה-HTTP המובנה של Prometheus. כדי למנוע את ההפעלה של נקודת הקצה הזו, אפשר להסיר את הקטע הבא מההגדרה:
# Prometheus monitoring.
<source>
@type prometheus
port 24231
</source>
<source>
@type prometheus_monitor
</source>
עיבוד של מטען ייעודי (payload)
רוב היומנים הנתמכים בהגדרת ברירת המחדל של סוכן Logging מגיעים מקובצי יומן, והם מוזנים כנתוני מטען ייעודי (payload) לא מובנים (טקסט) ברשומות ביומן.
היוצא מן הכלל היחיד הוא תוסף הקלט in_forward, שמופעל גם הוא כברירת מחדל, אבל הוא מקבל רק יומנים מובנים ומעביר אותם כמטענים ייעודיים (payloads) מובנים (JSON) ברשומות היומן. פרטים נוספים מופיעים בקטע הזרמת רשומות יומן מובְנות (JSON) באמצעות התוסף in_forward בדף הזה.
כאשר שורת היומן היא אובייקט JSON שעבר סריאליזציה והאפשרות detect_json מופעלת, תוסף הפלט הופך את רשומת היומן למטען ייעודי (payload) מובנה (JSON). האפשרות הזו מופעלת כברירת מחדל במכונות וירטואליות שפועלות בסביבה הגמישה של App Engine וב-Google Kubernetes Engine. האפשרות הזו לא מופעלת כברירת מחדל במופעי מכונות וירטואליות שפועלים בסביבה רגילה של App Engine. כל קובץ JSON שמנותח כשהאפשרות detect_json מופעלת תמיד נטמע כ-jsonPayload.
אתם יכולים להתאים אישית את ההגדרות של הסוכנים כדי לתמוך בהטמעה של יומנים מובנים ממקורות נוספים. פרטים נוספים זמינים במאמר בנושא הזרמת רשומות יומן מובְנות (JSON) אל Cloud Logging.
המטען הייעודי (payload) של רשומות ביומן שמוזרמות על ידי סוכן Logging שהוגדר בהתאמה אישית יכול להיות הודעת טקסט לא מובנית יחידה (textPayload) או הודעת JSON מובנית (jsonPayload).
שדות מיוחדים במטענים מובנים
כשסוכן Logging מקבל רשומה של יומן מובנה, הוא מעביר כל מפתח שתואם לטבלה הבאה לשדה המתאים באובייקט LogEntry. אחרת, המפתח הופך לחלק מהשדה LogEntry.jsonPayload. ההתנהגות הזו מאפשרת להגדיר שדות ספציפיים באובייקט LogEntry, שזה מה שנכתב ב-Logging API.
לדוגמה, אם רשומת היומן המובנית מכילה מפתח של severity, סוכן Logging מאכלס את השדה LogEntry.severity.
| שדה ביומן JSON |
LogEntry
שדה
|
פונקציית הסוכן של Cloud Logging | ערך לדוגמה |
|---|---|---|---|
severity
|
severity
|
הסוכן של Logging מנסה להתאים מגוון של מחרוזות נפוצות של חומרת הבעיה, כולל הרשימה של מחרוזות LogSeverity שמזוהות על ידי Logging API. | "severity":"ERROR"
|
message
|
textPayload
(או חלק מ-
jsonPayload)
|
ההודעה שמופיעה בשורת רשומה ביומן בכלי Logs Explorer. | "message":"There was an error in the application." הערה: הערך message נשמר כ-textPayload אם זה השדה היחיד שנשאר אחרי שהסוכן Logging מעביר את שאר השדות המיוחדים ו
detect_json לא הופעל. אחרת, הערך message נשאר ב-jsonPayload. detect_json לא רלוונטי לסביבות ניהול רישום ביומן כמו Google Kubernetes Engine. אם רשומת היומן מכילה מעקב אחר מחסנית חריגים, צריך להגדיר את המעקב אחר מחסנית החריגים בשדה היומן message בפורמט JSON, כדי שאפשר יהיה לנתח את המעקב אחר מחסנית החריגים ולשמור אותו ב-Error Reporting. |
log
(legacy
Google Kubernetes Engine
only) |
textPayload
|
ההגדרה הזו רלוונטית רק לגרסה הקודמת של Google Kubernetes Engine:
אם אחרי העברת שדות מיוחדים נשאר רק שדה log, השדה הזה יישמר בתור textPayload. |
|
httpRequest
|
httpRequest
|
רשומה מובנית בפורמט של השדה LogEntry
HttpRequest. |
"httpRequest":{"requestMethod":"GET"}
|
| שדות שקשורים לזמן | timestamp
|
מידע נוסף זמין במאמר בנושא שדות שקשורים לזמן. | "time":"2020-10-12T07:20:50.52Z"
|
logging.googleapis.com/insertId
|
insertId
|
מידע נוסף זמין במאמר insertId בדף LogEntry. |
"logging.googleapis.com/insertId":"42"
|
logging.googleapis.com/labels
|
labels
|
הערך בשדה הזה חייב להיות רשומה מובנית.
מידע נוסף זמין במאמר labels בדף LogEntry. |
"logging.googleapis.com/labels":
{"user_label_1":"value_1","user_label_2":"value_2"}
|
logging.googleapis.com/operation
|
operation
|
הערך של השדה הזה משמש גם את הכלי Logs Explorer לקיבוץ רשומות יומן שקשורות זו לזו.
מידע נוסף זמין במאמר בנושא operation בדף LogEntry. |
"logging.googleapis.com/operation":
{"id":"get_data","producer":"github.com/MyProject/MyApplication",
"first":"true"}
|
logging.googleapis.com/sourceLocation
|
sourceLocation
|
מידע על מיקום קוד המקור שמשויך לרשומה ביומן, אם יש.
מידע נוסף זמין במאמר LogEntrySourceLocation בדף LogEntry. |
"logging.googleapis.com/sourceLocation":
{"file":"get_data.py","line":"142","function":"getData"}
|
logging.googleapis.com/spanId
|
spanId
|
מזהה הטווח בתוך המעקב שמשויך לרשומה ביומן.
מידע נוסף זמין במאמר spanId בדף LogEntry. |
"logging.googleapis.com/spanId":"000000000000004a"
|
logging.googleapis.com/trace
|
trace
|
שם המשאב של ה-trace שמשויך לרשומה ביומן, אם יש כזה.
מידע נוסף זמין במאמר trace בדף LogEntry.
|
"logging.googleapis.com/trace":"projects/my-projectid/traces/0679686673a" הערה: אם לא כותבים ל- stdout או ל-stderr, הערך של השדה הזה צריך להיות בפורמט projects/[PROJECT-ID]/traces/[TRACE-ID], כדי ש-Logs Explorer ומציג העקבות יוכלו להשתמש בו כדי לקבץ רשומות ביומן ולהציג אותן בשורה עם העקבות.
אם autoformat_stackdriver_trace הוא true ו-[V] תואם לפורמט של ResourceTrace
traceId הערך בשדה LogEntry trace הוא projects/[PROJECT-ID]/traces/[V]. |
logging.googleapis.com/trace_sampled
|
traceSampled
|
הערך בשדה הזה חייב להיות true או false.
מידע נוסף זמין במאמר traceSampled בדף LogEntry. |
"logging.googleapis.com/trace_sampled": false
|
שדות שקשורים לזמן
באופן כללי, מידע שקשור לזמן לגבי רשומה ביומן מאוחסן בשדה timestamp של אובייקט LogEntry:
{
insertId: "1ad8d08f-6529-47ea-832e-467f869a2da4"
...
resource: {2}
timestamp: "2023-10-30T16:33:15.505196Z"
}
כשמקור של רשומה ביומן הוא נתונים מובְנים, סוכן Logging משתמש בכללים הבאים כדי לחפש בשדות של הרשומה jsonPayload מידע שקשור לזמן:
מחפשים שדה
timestampשהוא אובייקט JSON שכולל את השדותsecondsו-nanos, שמייצגים, בהתאמה, מספר חתום של שניות מאז תקופת ה-UTC ומספר לא שלילי של שניות חלקיות:jsonPayload: { ... "timestamp": { "seconds": CURRENT_SECONDS, "nanos": CURRENT_NANOS } }אם החיפוש הקודם נכשל, צריך לחפש זוג שדות
timestampSecondsו-timestampNanos:jsonPayload: { ... "timestampSeconds": CURRENT_SECONDS, "timestampNanos": CURRENT_NANOS }אם החיפוש הקודם נכשל, מחפשים שדה
timeשהוא מחרוזת בפורמט RFC 3339:jsonPayload: { ... "time": CURRENT_TIME_RFC3339 }
כשסוכן Logging מוצא מידע שקשור לזמן, הוא משתמש במידע הזה כדי להגדיר את הערך של LogEntry.timestamp, והוא לא מעתיק את המידע הזה מהרשומה המובנית לאובייקט LogEntry.jsonPayload.
שדות שקשורים לזמן ולא משמשים להגדרת הערך של השדה LogEntry.timestamp מועתקים מהרשומה המובנית לאובייקט LogEntry.jsonPayload. לדוגמה, אם הרשומה המובנית מכילה אובייקט JSON timestamp ושדה time, הנתונים באובייקט ה-JSON timestamp ישמשו להגדרת השדה LogEntry.timestamp. האובייקט LogEntry.jsonPayload מכיל את השדה time, כי השדה הזה לא שימש להגדרת הערך LogEntry.timestamp.
התאמה אישית של הגדרות הנציג
בנוסף לרשימת היומנים שמוגדרים כברירת מחדל שסוכן Logging מעביר בסטרימינג כברירת מחדל, אפשר להתאים אישית את סוכן Logging כדי לשלוח יומנים נוספים ל-Logging או לשנות את הגדרות הסוכן על ידי הוספת הגדרות קלט.
הגדרות התצורה שמופיעות בקטעים האלה חלות רק על תוסף הפלט fluent-plugin-google-cloud, ומציינות איך היומנים עוברים טרנספורמציה ואיך הם מוזנים ל-Cloud Logging.
מיקומים של קובץ התצורה הראשי:
- Linux:
/etc/google-fluentd/google-fluentd.conf ב-Windows:
C:\Program Files (x86)\Stackdriver\LoggingAgent\fluent.confאם אתם מריצים סוכן Logging בגרסה שלפני v1-5, המיקום הוא:
C:\GoogleStackdriverLoggingAgent\fluent.conf
- Linux:
תיאור: הקובץ הזה כולל אפשרויות הגדרה לשליטה בהתנהגות של תוסף הפלט
fluent-plugin-google-cloud.בודקים את מאגר התצורה.
הזרמת יומנים מקלט נוסף
אתם יכולים להתאים אישית את סוכן Logging כדי לשלוח יומנים נוספים ל-Logging על ידי הוספת הגדרות קלט.
הזרמת יומנים לא מובנים (טקסט) באמצעות קובצי יומן
משורת הפקודה של Linux, יוצרים קובץ יומן:
touch /tmp/test-unstructured-log.logיוצרים קובץ תצורה חדש בשם
test-unstructured-log.confבספריית ההגדרות הנוספות/etc/google-fluentd/config.d:sudo tee /etc/google-fluentd/config.d/test-unstructured-log.conf <<EOF <source> @type tail <parse> # 'none' indicates the log is unstructured (text). @type none </parse> # The path of the log file. path /tmp/test-unstructured-log.log # The path of the position file that records where in the log file # we have processed already. This is useful when the agent # restarts. pos_file /var/lib/google-fluentd/pos/test-unstructured-log.pos read_from_head true # The log tag for this log input. tag unstructured-log </source> EOFאפשרות נוספת היא להוסיף את פרטי התצורה לקובץ תצורה קיים, במקום ליצור קובץ חדש.
מפעילים מחדש את הסוכן כדי להחיל את השינויים בהגדרות:
sudo service google-fluentd restartיצירת רשומת יומן בקובץ היומן:
echo 'This is a log from the log file at test-unstructured-log.log' >> /tmp/test-unstructured-log.logבודקים ב-Logs Explorer כדי לראות את רשומת היומן שהועברה:
{ insertId: "eps2n7g1hq99qp" labels: { compute.googleapis.com/resource_name: "add-unstructured-log-resource" } logName: "projects/my-sample-project-12345/logs/unstructured-log" receiveTimestamp: "2018-03-21T01:47:11.475065313Z" resource: { labels: { instance_id: "3914079432219560274" project_id: "my-sample-project-12345" zone: "us-central1-c" } type: "gce_instance" } textPayload: "This is a log from the log file at test-unstructured-log.log" timestamp: "2018-03-21T01:47:05.051902169Z" }
הזרמת יומנים מובנים (JSON) באמצעות קובצי יומן
אפשר להגדיר את סוכן Logging כך שכל רשומה ביומן עבור קלט מסוים ביומן תהיה מובנית. אפשר גם להתאים אישית את סוכן Logging כדי להטמיע תוכן בפורמט JSON מקובץ יומן. כשסוכן מוגדר להטמעת תוכן JSON, קלט חייב להיות בפורמט שבו כל אובייקט JSON נמצא בשורה חדשה:
{"name" : "zeeshan", "age" : 28}
{"name" : "reeba", "age" : 15}
כדי להגדיר את סוכן Logging להטמעת תוכן בפורמט JSON:
משורת הפקודה של Linux, יוצרים קובץ יומן:
touch /tmp/test-structured-log.logיוצרים קובץ תצורה חדש בשם
test-structured-log.confבספריית ההגדרות הנוספות/etc/google-fluentd/config.d:sudo tee /etc/google-fluentd/config.d/test-structured-log.conf <<EOF <source> @type tail <parse> # 'json' indicates the log is structured (JSON). @type json </parse> # The path of the log file. path /tmp/test-structured-log.log # The path of the position file that records where in the log file # we have processed already. This is useful when the agent # restarts. pos_file /var/lib/google-fluentd/pos/test-structured-log.pos read_from_head true # The log tag for this log input. tag structured-log </source> EOFאפשרות נוספת היא להוסיף את פרטי התצורה לקובץ תצורה קיים, במקום ליצור קובץ חדש.
מפעילים מחדש את הסוכן כדי להחיל את השינויים בהגדרות:
sudo service google-fluentd restartיצירת רשומת יומן בקובץ היומן:
echo '{"code": "structured-log-code", "message": "This is a log from the log file at test-structured-log.log"}' >> /tmp/test-structured-log.logבודקים ב-Logs Explorer כדי לראות את רשומת היומן שהועברה:
{ insertId: "1m9mtk4g3mwilhp" jsonPayload: { code: "structured-log-code" message: "This is a log from the log file at test-structured-log.log" } labels: { compute.googleapis.com/resource_name: "add-structured-log-resource" } logName: "projects/my-sample-project-12345/logs/structured-log" receiveTimestamp: "2018-03-21T01:53:41.118200931Z" resource: { labels: { instance_id: "5351724540900470204" project_id: "my-sample-project-12345" zone: "us-central1-c" } type: "gce_instance" } timestamp: "2018-03-21T01:53:39.071920609Z" }בכלי Logs Explorer, מסננים לפי סוג המשאב וlogName של
structured-log.
אפשרויות נוספות להתאמה אישית של פורמט קלט היומן עבור אפליקציות נפוצות של צד שלישי מפורטות במאמר פורמטים נפוצים של יומנים ואיך לנתח אותם.
הזרמת יומנים מובנים (JSON) באמצעות התוסף in_forward
בנוסף, אפשר לשלוח יומנים באמצעות התוסף fluentd in_forward.
fluentd-cat הוא כלי מובנה שעוזר לשלוח בקלות יומנים לתוסף in_forward. במאמרי העזרה של fluentd יש פרטים נוספים על הכלי הזה.
כדי לשלוח רישומים באמצעות הפלאגין fluentd in_forward, קוראים את ההוראות הבאות:
מריצים את הפקודה הבאה במכונת ה-VM שבה מותקן סוכן Logging:
echo '{"code": "send-log-via-fluent-cat", "message": "This is a log from in_forward plugin."}' | /opt/google-fluentd/embedded/bin/fluent-cat log-via-in-forward-pluginבודקים ב-Logs Explorer כדי לראות את רשומת היומן שהועברה:
{ insertId: "1kvvmhsg1ib4689" jsonPayload: { code: "send-log-via-fluent-cat" message: "This is a log from in_forward plugin." } labels: { compute.googleapis.com/resource_name: "add-structured-log-resource" } logName: "projects/my-sample-project-12345/logs/log-via-in-forward-plugin" receiveTimestamp: "2018-03-21T02:11:27.981020900Z" resource: { labels: { instance_id: "5351724540900470204" project_id: "my-sample-project-12345" zone: "us-central1-c" } type: "gce_instance" } timestamp: "2018-03-21T02:11:22.717692494Z" }
הזרמת רשומות יומן מובנות (JSON) מקוד האפליקציה
אפשר להפעיל מחברים בשפות שונות כדי לשלוח יומנים מובנים מקוד האפליקציה. מידע נוסף זמין במסמכי התיעוד של fluentd.
המחברים האלה מבוססים על התוסף in_forward.
הגדרת תוויות של רשומות ביומן
אפשרויות ההגדרה הבאות מאפשרות לכם לשנות את התוויות של LogEntry ואת התוויות של MonitoredResource כשמייבאים יומנים ל-Cloud Logging. כל רשומת יומן משויכת למשאבים במעקב. למידע נוסף, אפשר לעיין ברשימת סוגי המשאבים במעקב ב-Cloud Logging.
| שם ההגדרה | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
label_map |
hash | nil | label_map (שמצוין כאובייקט JSON) הוא קבוצה לא מסודרת של שמות שדות fluentd שהערכים שלהם נשלחים כתוויות ולא כחלק מהמטען הייעודי המובנה. כל רשומה במפה היא זוג {field_name: label_name}. כשנתקלים ב-field_name (כפי שמנותח על ידי תוסף הקלט), מתווספת רשומה ליומן עם label_name התואם. הערך של השדה משמש כערך של התווית. המיפוי מאפשר לכם גמישות נוספת בציון שמות התוויות, כולל האפשרות להשתמש בתווים שלא יכולים להיות חלק משמות השדות fluentd. דוגמה מופיעה במאמר בנושא הגדרת תוויות ברשומות יומן מובנות. |
labels |
hash | nil | labels (שמצוין כאובייקט JSON) הוא קבוצה של תוויות בהתאמה אישית שסופקו בזמן ההגדרה. היא מאפשרת להוסיף מידע סביבתי לכל הודעה או להתאים אישית תוויות שזוהו באופן אוטומטי. כל רשומה במפה היא זוג {label_name: label_value}. |
פלאגין הפלט של סוכן Logging תומך בשלוש דרכים להגדרת תוויות של LogEntry:
- באופן דינמי, החלפת תוויות ספציפיות ברשומה מובנית בתוויות שונות. פרטים נוספים מופיעים בקטע הגדרת תוויות ברשומות יומן מובְנות בדף הזה.
- באופן סטטי, צירוף תווית לכל מופע של ערך. פרטים נוספים מופיעים בקטע הגדרת תוויות באופן סטטי בדף הזה.
הגדרת תוויות ברשומות יומן מובנות
נניח שכתבתם מטען ייעודי (payload) של רשומה מובנית ביומן שנראה כך:
{ "message": "This is a log message", "timestamp": "Aug 10 20:07:00", "env": "production" }
נניח שרוצים לתרגם את שדה המטען הייעודי (payload) env לתווית מטא-נתונים environment. כדי לעשות זאת, מוסיפים את השורות הבאות להגדרות של תוסף הפלט בקובץ התצורה הראשי (/etc/google-fluentd/google-fluentd.conf ב-Linux או C:\Program Files (x86)\Stackdriver\LoggingAgent\fluent.conf ב-Windows):
# Configure all sources to output to Cloud Logging
<match **>
@type google_cloud
label_map {
"env": "environment"
}
...
</match>
ההגדרה label_map מחליפה את התווית env במטען הייעודי (payload) בתווית environment, כך שרשומת היומן שמתקבלת כוללת את התווית environment עם הערך production.
הגדרת תוויות באופן סטטי
אם המידע הזה לא מופיע במטען הייעודי (payload) ואתם רוצים רק להוסיף תווית סטטית של מטא-נתונים בשם environment, מוסיפים את השורה הבאה להגדרת התוסף של הפלט בקובץ התצורה הראשי (/etc/google-fluentd/google-fluentd.conf ב-Linux או C:\Program Files (x86)\Stackdriver\LoggingAgent\fluent.conf ב-Windows):
# Configure all sources to output to Cloud Logging
<match **>
@type google_cloud
labels {
"environment": "production"
}
...
</match>
במקרה הזה, במקום להשתמש במיפוי כדי להחליף תווית אחת באחרת, אנחנו משתמשים בהגדרה labels כדי לצרף תווית עם ערך מילולי נתון לרשומה ביומן, בלי קשר לשאלה אם לרשומה כבר יש תווית או לא. אפשר להשתמש בגישה הזו גם אם אתם שולחים יומנים לא מובנים.
מידע נוסף על הגדרת labels, label_map והגדרות אחרות של סוכן Logging זמין בקטע הגדרת תוויות של רשומות ביומן בדף הזה.
שינוי רשומות ביומן
Fluentd מספק פלאגינים מובנים לסינון שאפשר להשתמש בהם כדי לשנות רשומות ביומן.
התוסף הנפוץ ביותר לסינון הוא filter_record_transformer. היא מאפשרת לכם:
- הוספת שדות חדשים לרשומות ביומן
- עדכון שדות ברשומות ביומן
- מחיקת שדות ברשומות ביומן
חלק מתוספי הפלט מאפשרים גם לשנות את רשומות היומן.
פלאגין הפלט fluent-plugin-record-reformer מספק פונקציונליות דומה לפלאגין המסנן filter_record_transformer, אבל הוא גם מאפשר לשנות תגי יומן.
צפוי שימוש רב יותר במשאבים עם הפלאגין הזה: בכל פעם שתג יומן מתעדכן, נוצרת רשומה חדשה ביומן עם התג החדש.
שימו לב ששדה tag בהגדרה הוא שדה חובה. מומלץ גם לשנות את השדה הזה כדי להימנע מכניסה ללולאה אינסופית.
תוסף הפלט fluent-plugin-detect-exceptions סורק זרם יומן, לא מובנה (טקסט) או רשומות יומן בפורמט JSON, כדי למצוא עקבות של מחסנית חריגים מרובת שורות. אם רצף עוקב של רשומות ביומן יוצר דוח קריסה של חריגה,
הרשומות ביומן מועברות כהודעת יומן משולבת אחת. אחרת,
רשומת היומן מועברת כמו שהיא.
הגדרות מתקדמות (לא ברירת מחדל)
אם רוצים להתאים אישית את ההגדרה של סוכן Logging, מעבר להגדרת ברירת המחדל שלו, צריך להמשיך לקרוא את הדף הזה.
אפשרויות הגדרה שקשורות למאגר
אפשרויות ההגדרה הבאות מאפשרות לכם להתאים את מנגנון האגירה הזמנית הפנימי של סוכן הרישום ביומן.
| שם ההגדרה | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
buffer_type |
מחרוזת | buf_memory |
רשומות שלא ניתן לכתוב ל-Logging API מספיק מהר נדחפות למאגר זמני. המאגר יכול להיות בזיכרון או בקבצים בפועל. הערך המומלץ: buf_file. ברירת המחדל buf_memory היא מהירה אבל לא קבועה. יש סיכון לאובדן יומנים. אם הערך של buffer_type הוא buf_file, צריך לציין גם את buffer_path. |
buffer_path |
מחרוזת | בהגדרת משתמש | הנתיב שבו מאוחסנים מקטעי המאגר. חובה לכלול את הפרמטר הזה אם הערך של buffer_type הוא file. ההגדרה הזו צריכה להיות ייחודית כדי למנוע מרוץ תהליכים. |
buffer_queue_limit |
int | 64 |
מציין את מגבלת האורך של תור המקטעים. כשמספר הצ'אנקים בתור במאגר נתונים זמני (buffer queue) מגיע למספר הזה, התנהגות המאגר נשלטת על ידי buffer_queue_full_action. כברירת מחדל, הפונקציה מחזירה חריגים. האפשרות הזו, בשילוב עם buffer_chunk_limit, קובעת את נפח הדיסק המקסימלי שנדרש לזיכרון המטמון fluentd. |
buffer_queue_full_action |
מחרוזת | exception |
קובע את התנהגות המאגר כשתור המאגר מלא. ערכים אפשריים: 1. exception: הפקודה להריץ ב-BufferQueueLimitError כשלוחצים על הכפתור האופן שבו BufferQueueLimitError מטופל תלוי בתוספי הקלט. לדוגמה, תוסף הקלט in_tail מפסיק לקרוא שורות חדשות, ותוסף הקלט in_forward מחזיר שגיאה. 2. block: במצב הזה, השרשור של פלאגין הקלט מופסק עד שמתבצע פתרון של התנאי 'המאגר מלא'. הפעולה הזו מתאימה לתרחישי שימוש שדומים לעיבוד אצווה. fluentd לא ממליץ להשתמש בפעולת חסימה כדי להימנע מ-BufferQueueLimitError. אם אתם נתקלים בבעיה הזו BufferQueueLimitError לעיתים קרובות, זה אומר שהקיבולת של היעד לא מספיקה לתנועת הגולשים שלכם. 3. drop_oldest_chunk: במצב הזה, החלקים הכי ישנים מושמטים. |
אפשרויות הגדרה שקשורות לפרויקט ולמשאב שבמעקב
אפשרויות ההגדרה הבאות מאפשרות לציין באופן ידני פרויקט ושדות מסוימים מאובייקט MonitoredResource. הערכים האלה נאספים באופן אוטומטי על ידי סוכן Logging, ולא מומלץ לציין אותם באופן ידני.
| שם ההגדרה | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
project_id |
מחרוזת | nil | אם מציינים את הפרמטר הזה, הוא מבטל את הפרמטר project_id שמזהה את פרויקט Google Cloud או AWS שבו פועל סוכן Logging. |
zone |
מחרוזת | nil | אם מציינים את האפשרות הזו, היא מבטלת את האזור. |
vm_id |
מחרוזת | nil | אם מציינים את האפשרות הזו, היא מבטלת את מזהה המכונה הווירטואלית. |
vm_name |
מחרוזת | nil | אם מציינים שם, הוא מבטל את שם המכונה הווירטואלית. |
אפשרויות הגדרה אחרות של פלאגין פלט
| שם ההגדרה | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
detect_json1 |
bool | false |
האם לנסות לזהות אם רשומת היומן היא רשומה ביומן טקסט עם תוכן JSON שצריך לנתח. אם האפשרות הזו היא true, ומזוהה רשומה ביומן לא מובנה (טקסט) בפורמט JSON, היא מנותחת ונשלחת כמטען ייעודי מובנה (JSON). |
coerce_to_utf8 |
bool | true |
האם לאפשר תווים שאינם בפורמט UTF-8 ביומני משתמשים. אם הערך מוגדר כ-true, כל תו שאינו UTF-8 יוחלף במחרוזת שצוינה על ידי non_utf8_replacement_string. אם הערך הוא false, כל תו שאינו UTF-8 יגרום לשגיאה בתוסף. |
require_valid_tags |
bool | false |
האם לדחות רשומות ביומן עם תגים לא תקינים. אם האפשרות הזו מוגדרת לערך false, התגים הופכים לתקינים על ידי המרה של כל תג שאינו מחרוזת למחרוזת, וניקוי של כל התווים שאינם UTF-8 או תווים לא חוקיים אחרים. |
non_utf8_replacement_string |
מחרוזת | ""(מרחב) |
אם coerce_to_utf8 מוגדר כ-true, כל תו שאינו UTF-8 יוחלף במחרוזת שצוינה כאן. |
1התכונה הזו מופעלת כברירת מחדל במכונות וירטואליות שפועלות בסביבה הגמישה של App Engine וב-Google Kubernetes Engine.
החלת הגדרת נציג בהתאמה אישית
התאמה אישית של סוכן Logging מאפשרת להוסיף קובצי הגדרה משלכם fluentd:
מופע Linux
מעתיקים את קובצי ההגדרות לתיקייה הבאה:
/etc/google-fluentd/config.d/סקריפט ההתקנה של סוכן Logging מאכלס את הספרייה הזו בקובצי התצורה של ברירת המחדל לכלל המשתמשים. מידע נוסף זמין במאמר בנושא קבלת קוד המקור של סוכן Logging.
זה שינוי אופציונלי. מריצים את הפקודה הבאה כדי לאמת את שינוי ההגדרה:
sudo service google-fluentd configtestמפעילים מחדש את הסוכן באמצעות הפקודה הבאה:
sudo service google-fluentd force-reload
מכונה וירטואלית ב-Windows
מעתיקים את קובצי ההגדרות לספריית המשנה
config.dשל ספריית ההתקנה של הסוכן. אם אישרתם את ספריית ברירת המחדל להתקנה, הספרייה הזו היא:C:\Program Files (x86)\Stackdriver\LoggingAgent\config.d\מפעילים מחדש את הסוכן על ידי הרצת הפקודות הבאות במעטפת של שורת פקודה:
net stop StackdriverLogging net start StackdriverLogging
מידע נוסף על קובצי הגדרות של fluentd זמין במאמר fluentd's Configuration File Syntax documentation.