如何为Google Cloud Ops Agent编写自定义多行日志解析器
配置Google Cloud Ops Agent解析PHP多行日志
问题场景
需要采集的PHP应用日志包含单行和多行格式(如带堆栈追踪的错误日志),当前配置会将多行日志拆分为独立条目展示在Log Explorer中,官方提供的Java/Python/Go多行解析规则无法适配PHP日志格式。
解决方案
使用parse_multiline处理器的正则匹配模式,自定义识别PHP日志的起始行,将后续关联行合并为单条日志条目。
完整配置示例
logging: receivers: customFile: type: files include_paths: - /var/www/html/storage/logs/error.log processors: parse_php_multiline: type: parse_multiline firstline_regex: '^\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\]' negate: false extract_structure: type: parse_regex field: message regex: '^\[(?<time>[\d-]*\s[\d:]*)]\sproduction.(?<severity>[^ :]*):\s(?<message>[\s\S]*)$' time_key: time time_format: "%Y-%m-%d %H:%M:%S" move_severity: type: modify_fields fields: jsonPayload."logging.googleapis.com/severity": move_from: jsonPayload.severity service: pipelines: default_pipeline: receivers: [customFile] processors: [parse_php_multiline, extract_structure, move_severity]
配置说明
parse_php_multiline处理器:- 用
firstline_regex定义日志起始行的正则:^\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\],匹配以[YYYY-MM-DD HH:MM:SS]开头的行作为单条日志的起始。 negate: false表示只有匹配该正则的行才是新日志的开始,其余行都合并到上一条日志中。
- 用
- 管道顺序调整:必须将多行合并处理器放在正则解析之前,确保先合并完整日志内容再进行结构提取。
验证步骤
- 保存配置后,重启Ops Agent:
sudo systemctl restart google-cloud-ops-agent - 触发应用生成多行错误日志,在Log Explorer中查看是否已合并为单条条目。
内容的提问来源于stack exchange,提问作者ursuleacv
相关产品推荐
相关产品推荐

