最近,我尝试从DialogFlow检索StackDriver日志(即包含与会话信息/交互有关的所有内容),以便通过启用以下选项来执行仪表板的自定义分析:

但是,在我检查了DialogFlow日志条目的格式之后,似乎只有非结构化 text_payload可用(即)而没有结构化的 json_payload。
痛苦的是,我无法轻松地解析text_payload以从它获取我想要的数据。因此,我的问题是:
提前谢谢。
对话框请求的日志输入格式:
{ "textPayload":“对话框请求:{”会话“:”44885105“,"query_input":"{\n \”事件\:{\n \“名称\”:\“欢迎”,\n \“参数\”:{\n } }\n },“时区”:“澳大利亚/悉尼”},"insertId":"gnp3xsg27351ns",“资源”:{ "type":“全局”,“标签”:{ "project_id":“ai-hackath-2020-lrwc”},“时间戳”:"2020-08-07T04:11:29.737Z",“严重性”:"INFO",“标签”:{ "request_id":request_id协议:"V2","type":"dialogflow_request“},“"projects/ai-hackathon-2020-lrwc/logs/dialogflow_agent",”:"logName":"44885105","receiveTimestamp":"2020-08-07T04:11:29.800030654Z“}
对话框响应的日志输入格式:"05f6f343-a646-42e0-8181-48c2e853e21b-0820055c"\nlang:{ "textPayload":“对话框流响应: id: "en"\nsession_id:”44885105“\n时间戳:”2020-08-07T04:11:29.747Z“\n源:”代理“\n resolved_query:”欢迎“\n动作:"input.welcome"\n得分: 1.0\n参数{\n }N上下文{\n名称:“默认十二意图-后续”\n生命周期: 2\n参数{\n }\n元数据{\n intent_id:“22498e9a-EFCF-43e0-A 945-36a7ef4c702d”\n intent_name:“默认欢迎意向”webhook_used:"false"\n webhook_for_slot_filling_used:"false"\n is_fallback_intent:"false"\n is_fallback_intent:“false”\n is_fallback_intent\n履行{\n个演讲:“嘿,好日子!您想报告什么样的问题?\n消息{\n lang:"en"\n类型{\n number_value: 0.0\n }\n string_value:“嘿,好日子!你想报道什么样的问题?“\n }\n状态{\n代码: 200\n error_type:“成功”\n }\n“,"insertId":"gnp3xsg27351nt",”资源“:{ "type":”全局“,”标签“:{ "project_id":”ai-hackath-2020-lrwc“},”时间戳“:"2020-08-07T04:11:29.789Z",”严重性“:"INFO",“标签”:{“类型”:"dialogflow_response",“协议”:"V2","request_id":"projects/ai-hackathon-2020-lrwc/logs/dialogflow_agent",},"logName":“跟踪”:"44885105","receiveTimestamp":"2020-08-07T04:11:29.800030654Z“}
发布于 2020-08-11 23:43:19
我查看了处理有效载荷上的这个文档,发现当日志行是一个序列化的JSON对象,并且启用了detect_json选项时,输出插件将日志条目转换为一个结构化的(JSON)有效负载。默认情况下,对于运行在App灵活环境上的VM实例和Google Engine.Whereas,在运行在App标准环境中的VM实例中,默认情况下不启用此选项。
但是,可以自定义代理的配置,以支持从其他资源中摄取结构化日志。关于流结构化(JSON)日志记录到云日志记录的文档可能会有所帮助。
自定义配置日志代理流的日志记录的有效负载可以是单个非结构化文本消息(textPayload),也可以是结构化JSON消息(jsonPayload)。
发布于 2022-06-21 09:33:55
您可以使用解析对话框流日志模块,如下所示:
对于前三个,只需使用JSON.parse()解析最后一个带有解析-对话框流-日志模块的模块,如我所做的这个简单函数所示。(提高效率可以使其变得更好)
async function parsePayload(odj){
let result = await odj.map((e)=>{
let a = e.textPayload;
let g;
let c;
let w = a.slice(0, 31);
if(w.includes(':')){
let t = a.slice(0,21)
g = a.replace(t, '{') + '}'
try {
c = parser.parse(g);
e.textPayload = c;
} catch (error) {
console.log('ERROR AT: ' + t)
try {
g = a.replace(t, '');
let df = JSON.parse(g)
e.textPayload = df
} catch (error) {
console.log('cannot parse req')
}
}
}else{
let u = a.slice(0, 32)
if(u.includes(':')){
g = a.replace(u, '')
try {
c = parser.parse(g);
console.log(u)
console.log(c)
} catch (error) {
console.log('ERROR AT: ' + u)
try {
let dd = JSON.parse(g)
e.textPayload = dd;
} catch (error) {
console.log('cannot parse')
}
}
}else{
let v = a.slice(0, 34);
g = a.replace(v, '')
try {
c = parser.parse(g);
} catch (error) {
console.log('ERROR AT: ' + v)
try {
let dd = JSON.parse(g)
e.textPayload = dd;
} catch (error) {
console.log('cannot parse')
}
}
}
}
return e
})
return result}
https://stackoverflow.com/questions/63322254
复制相似问题