[英]In Google Cloud's Logs Explorer, how do you query for a key's existence in the jsonPayload dict?
[英]How do you pass labels to Google Cloud Logs Explorer through log4js-node?
我已经使用log4js
npm 库和下面的log4js
功能成功地将消息及其严重性从 Node 应用程序记录到 Google Cloud Platform 的 Logs Explorer(带有内置日志记录代理的 k8s)。 但是,标签 object 不会记录。
标准输出附加器
"type": "stdout",
"layout": {
"type": "json"
}
添加布局()
log4js.addLayout('json', () => {
const foo = 'bar';
const biz = 'baz';
return (logEvent) => {
const severity = logEvent.level.levelStr;
const labels = {
foo,
biz,
};
const message = `[${logEvent.categoryName}] ${logEvent.data} [${logEvent.level}]`;
const logEntry = { severity, message, ['logging.googleapis.com/labels']: labels };
return JSON.stringify(logEntry);
};
});
按照有关结构化日志记录的 GCP 文档,我还尝试使用labels
作为标签键,例如:
const logEntry = { severity, message, labels };
我在log4js
文档(或代码)中找不到任何关于将日志条目传递到云日志的内容。 如何传递标签以便 GCP 识别它们并将它们记录在顶级labels
或jsonPayload
或resource
中的labels
中:
{
"insertId": "r286o2xnfzsq955d",
"jsonPayload": {
"labels": {},
"message": "this is my test message"
},
"resource": {
"type": "k8s_container",
"labels": {
"namespace_name": "development",
"container_name": "myContainer",
"project_id": "123abc",
}
},
"timestamp": "2022-09-15T18:29:41.020140836Z",
"severity": "INFO",
"labels": {
"compute.googleapis.com/resource_name": "gke-machina...",
"k8s-pod/app": "myApp",
"k8s-pod/pod-template-hash": "123..."
},
"receiveTimestamp": "2022-09-15T18:30:00.835752120Z"
}
发现问题; 我需要在addLayout
function 但高于return (logEvent)
之前定义内联标签。 对于 GCP, labels
是正确的键名。
log4js.addLayout('json', () => {
return (logEvent) => {
const severity = logEvent.level.levelStr;
const labels = {
foo: 'bar', // define inline here
biz: 'baz',
};
const message = `[${logEvent.categoryName}] ${logEvent.data} [${logEvent.level}]`;
const logEntry = { severity, message, labels };
return JSON.stringify(logEntry);
};
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.