簡體   English   中英

Google StackDriver 將日志與父請求 python 3 相關聯

[英]Google StackDriver correlating logs with parent request python 3

在 python 2.7 中,應用程序引擎 sdk 在后台進行工作,將所有日志與父請求嵌套,以便在 Google StackDriver 中建立關聯。

在過渡到 python 3 時,它是通過使用谷歌雲日志記錄或結構化日志記錄,從我能找到的所有不同參考資料中,重要的是在堆棧驅動程序的“子”日志中具有相同的跟蹤 ID與“請求”日志匹配。

正如您在下面看到的那樣,它仍然顯示為不同的日志。

對於上下文,我什至在應用引擎上部署的一個空 django 項目上嘗試了這個。

得到相同的結果,即使遵循文檔中的示例: https://cloud.google.com/run/docs/logging#writing_structured_logs

日志堆棧驅動程序

嘗試登錄到標准輸出會給出相同的結果。

記錄 StackDriver 2

編輯:

在初始請求之后,使用標准輸出時,所有其他請求都將嵌套在初始請求下。

但是,“父”日志不采用“子”日志的最高嚴重性,因此過濾器不會獲取實際日志。 見下文:

在此處輸入圖像描述

感謝您的提問!

看起來您正在正確記錄跟蹤,但您的 logName 表明您沒有使用 stdout 或 stderr。 如果您將其中之一用於您的日志,它們將正確關聯,如下所示:

StackDriver 日志截圖

可以看到 logName 以 stdout 結尾。 標准輸出或標准錯誤將相關。 您可以按照教程中的此處所示創建它:

# Build structured log messages as an object.
global_log_fields = {}

# Add log correlation to nest all log messages
# beneath request log in Log Viewer.
trace_header = request.headers.get('X-Cloud-Trace-Context')

if trace_header and PROJECT:
    trace = trace_header.split('/')
    global_log_fields['logging.googleapis.com/trace'] = (
        f"projects/{PROJECT}/traces/{trace[0]}")

# Complete a structured log entry.
entry = dict(severity='NOTICE',
             message='This is the default display field.',
             # Log viewer accesses 'component' as jsonPayload.component'.
             component='arbitrary-property',
             **global_log_fields)

print(json.dumps(entry))

編輯:

要過濾掉標准輸出並僅在堆棧驅動程序 UI 中看到請求日志,您可以從過濾器中取消選擇標准輸出。 日志過濾器

有關使用 python 客戶端 API 的示例,請參閱本文和隨附的示例 Flask 應用程序。 在 Google Stackdriver 中組合相關的日志行

我能夠在 Google Cloud Logging Console 上實現這種日志記錄結構: 在此處輸入圖像描述

我使用的是 Django 框架。 我編寫了 Django 中間件,它集成了 Google Cloud Logging API。

“Trace”需要添加到指向其父日志 object 的每個日志 object 中。

請檢查使用 Django 在 Google Stackdriver 中管理日志嵌套

請檢查 Github 上的 django-google-stackdriver-nested-logging log_middleware.py 源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM