GKE结构化日志可识别的JSON键及相关配置咨询
GKE日志代理版本与JSON日志字段映射解决方案
GKE日志代理版本说明
目前GKE默认部署的是Ops Agent,旧版Stackdriver Logging Agent已逐步被替代。Ops Agent完全兼容旧版日志代理支持的特殊JSON字段列表,包括官方最佳实践提到的severity、pid、source_file、source_line等结构化字段。
解决level字段映射到severity的两种方案
方案1:修改Logback配置直接输出severity字段(推荐)
如果可以调整OpenMetadata的Logback配置,直接将日志输出的键名从level改为severity是最直接的方式。使用logstash-logback-encoder的话,可通过自定义字段映射实现:
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp/> <!-- 替换level为severity --> <field> <key>severity</key> <value>%level</value> </field> <!-- 输出GKE最佳实践要求的其他字段 --> <field> <key>pid</key> <value>${PID:-}</value> </field> <field> <key>source_file</key> <value>%logger{0}</value> </field> <field> <key>source_line</key> <value>%line</value> </field> <message/> <!-- 按需添加其他字段(如MDC、栈信息等) --> </providers> </encoder>
配置后,Logback直接输出符合GKE预期的severity字段,无需额外代理配置。
方案2:通过Ops Agent配置字段映射(无需修改应用)
如果无法调整应用日志输出,可通过Ops Agent的日志处理管道将level字段映射为severity。修改Ops Agent的配置文件(通常位于/etc/google-cloud-ops-agent/config.yaml):
logging: receivers: openmetadata_logs: type: files include_paths: - /path/to/openmetadata/logs/*.json record_log_file_path: true processors: map_severity: type: modify_fields fields: severity: move_from: jsonPayload.level # 可选:若level值与GKE severity枚举不匹配,添加值映射 # severity: # map_values: # from: jsonPayload.level # mappings: # - key: INFO # value: INFO # - key: ERROR # value: ERROR # - key: WARN # value: WARNING service: pipelines: default_pipeline: receivers: [openmetadata_logs] processors: [map_severity]
配置完成后重启Ops Agent:
sudo systemctl restart google-cloud-ops-agent
注意事项
- GKE对
severity字段的有效值为:DEFAULT、DEBUG、INFO、NOTICE、WARNING、ERROR、CRITICAL、ALERT、EMERGENCY,需确保映射后的字段值符合该范围。 - 容器化部署场景下,可通过ConfigMap挂载Ops Agent配置,或在GKE集群层面配置日志采集规则。
内容的提问来源于stack exchange,提问作者RubenLaguna
相关产品推荐
相关产品推荐

