Cloud Composer 结构化日志记录到 Stackdriver
Cloud Composer Structured Logging to Stackdriver
我想知道将结构化日志记录发送到 Stackdriver 的适当方法对于 Cloud Composer 部署是什么。我查看了 python 的 google-cloud-logging 模块以调用插件或 DAG,但看起来这是为尚未部署日志记录的项目设计的。
我已按照 this guide 将我的记录器的输出修改为 stdin / stderr 为 json 格式,输出类似于:{"message": "test error", "severity": "ERROR"}
然而,当检查 Stackdriver 日志时,它不会被解析为 JSON,而是按原样放置在消息正文中。
下面是它在 Stackdriver UI 中的样子(我已经用泛型替换了敏感信息。消息字符串中 json 之后的新行是它在 Stackdriver 控制台中的样子)。
{
insertId: "xxxxxxxxx"
jsonPayload: {
message: "{"message": "This is WARN TEST", "severity": "WARNING"}
"
python_logger: "airflow.processor"
}
logName: "projects/project_name/logs/airflow-scheduler"
receiveTimestamp: "2000-01-01T00:00:0.0000000Z"
resource: {
labels: {
environment_name: "ariflow-environment-name"
location: "us-location2"
project_id: "project_name"
}
type: "cloud_composer_environment"
}
severity: "INFO"
timestamp: "2000-01-01T00:00:0.0000000Z"
}
有没有人使用上述或其他方法成功地将结构化日志从 Composer 发送到 Stackdriver?
调用 log_struct 时,client.logger() 对象返回的文档和 400 错误让我大吃一惊。这意味着传递给 client.logger(LOG_NAME)
的 LOG_NAME 变量的格式为 '/projects/[your-project-id]/logs/[log-id]'
(例如,我在输入 '/projects/my-project/logs/airflow-worker'
时收到的错误是 400 Received unexpected value: airflow-worker. Expected the form projects/[PROJECT_ID]/logs/[ID]
)。
在 Composer 环境中,正确的调用方式是:
from google.cloud import logging
LOG_NAME = 'airflow-worker' # or 'airflow-scheduler' etc.
logger = client.logger(LOG_NAME)
logger.log_struct({
'message': 'message text to appear in StackDriver',
'custom_key': 'value_pair'
},
severity='ERROR')
希望这能为其他人节省一些时间。
我想知道将结构化日志记录发送到 Stackdriver 的适当方法对于 Cloud Composer 部署是什么。我查看了 python 的 google-cloud-logging 模块以调用插件或 DAG,但看起来这是为尚未部署日志记录的项目设计的。
我已按照 this guide 将我的记录器的输出修改为 stdin / stderr 为 json 格式,输出类似于:{"message": "test error", "severity": "ERROR"}
然而,当检查 Stackdriver 日志时,它不会被解析为 JSON,而是按原样放置在消息正文中。
下面是它在 Stackdriver UI 中的样子(我已经用泛型替换了敏感信息。消息字符串中 json 之后的新行是它在 Stackdriver 控制台中的样子)。
{
insertId: "xxxxxxxxx"
jsonPayload: {
message: "{"message": "This is WARN TEST", "severity": "WARNING"}
"
python_logger: "airflow.processor"
}
logName: "projects/project_name/logs/airflow-scheduler"
receiveTimestamp: "2000-01-01T00:00:0.0000000Z"
resource: {
labels: {
environment_name: "ariflow-environment-name"
location: "us-location2"
project_id: "project_name"
}
type: "cloud_composer_environment"
}
severity: "INFO"
timestamp: "2000-01-01T00:00:0.0000000Z"
}
有没有人使用上述或其他方法成功地将结构化日志从 Composer 发送到 Stackdriver?
调用 log_struct 时,client.logger() 对象返回的文档和 400 错误让我大吃一惊。这意味着传递给 client.logger(LOG_NAME)
的 LOG_NAME 变量的格式为 '/projects/[your-project-id]/logs/[log-id]'
(例如,我在输入 '/projects/my-project/logs/airflow-worker'
时收到的错误是 400 Received unexpected value: airflow-worker. Expected the form projects/[PROJECT_ID]/logs/[ID]
)。
在 Composer 环境中,正确的调用方式是:
from google.cloud import logging
LOG_NAME = 'airflow-worker' # or 'airflow-scheduler' etc.
logger = client.logger(LOG_NAME)
logger.log_struct({
'message': 'message text to appear in StackDriver',
'custom_key': 'value_pair'
},
severity='ERROR')
希望这能为其他人节省一些时间。