如何在Ops Agent配置中让Log Explorer显示Java日志原格式时间戳
解决方案
1. 修正时间格式解析规则
你的日志时间戳是2024-07-31 12:50:34,066,其中逗号后是3位毫秒数,当前配置用的%f是匹配6位微秒数,会导致时间解析失败,Ops Agent无法识别原时间戳,只能用 ingestion 时间作为timestamp。需要把time_format改为"%Y-%m-%d %H:%M:%S,%L"(%L专门匹配3位毫秒)。
2. 保留原时间戳字段到jsonPayload
默认情况下,parse_regex解析出time_key后会将其用于设置日志的timestamp字段,但不会保留原字段到jsonPayload。需要添加keep_time_key: true参数,让原时间戳以你定义的time字段名保留在jsonPayload中。
3. 完整修正后的processors配置
processors: parse_java_multiline: type: parse_multiline match_any: - type: language_exceptions language: java extract_structure: type: parse_regex field: message regex: "^(?<time>\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3}) (?<severity>\\S+) (?<message>(.|\\n)*)$" time_key: time time_format: "%Y-%m-%d %H:%M:%S,%L" keep_time_key: true move_severity: type: modify_fields fields: severity: move_from: jsonPayload.severity
4. 配置验证
修改后重启Ops Agent,在Log Explorer中查看日志:
timestamp字段会显示日志原时间戳(转换为ISO 8601格式,比如2024-07-31T12:50:34.066Z)jsonPayload.time会保留原格式的时间戳:2024-07-31 12:50:34,066jsonPayload.severity和jsonPayload.message会正确解析,且severity字段会被移动到日志根层级
注意:Google Cloud Logging的timestamp字段强制使用ISO 8601格式存储,无法改为原日志的非标准格式,但你可以通过jsonPayload.time字段查看原格式的时间戳。
内容的提问来源于stack exchange,提问作者topace
相关产品推荐
相关产品推荐

