寻求腾讯云CDN日志适配Logstash的Grok解析格式
腾讯云CDN日志Logstash Grok解析方案
日志字段拆解
先梳理每条日志的字段对应关系:
- 访问时间戳(格式:yyyyMMddHHmmss)
- 客户端IP地址
- CDN加速域名
- 请求完整URI(含查询参数)
- 响应内容大小(字节)
- 响应耗时(毫秒)
- 未知状态值(示例中为-1)
- HTTP响应状态码
- 占位字段(固定为NULL)
- 缓存命中计数
- User-Agent(带引号)
- 请求媒体片段范围(带引号)
- HTTP请求方法
- HTTP协议版本
- 缓存命中状态(hit/miss等)
- 未知标识字段(示例中为-或0)
对应的Grok模式
%{NUMBER:access_time:date{yyyyMMddHHmmss}} %{IP:client_ip} %{HOSTNAME:cdn_domain} %{URIPATHPARAM:request_uri} %{NUMBER:response_size:int} %{NUMBER:response_time:int} %{NUMBER:unknown_status:int} %{NUMBER:http_status:int} %{DATA:placeholder} %{NUMBER:cache_hit_count:int} %{QS:user_agent} %{QS:segment_range} %{WORD:request_method} %{DATA:http_version} %{WORD:cache_status} %{DATA:last_unknown_field}
Logstash Filter配置示例
在Logstash的filter块中使用该Grok模式:
filter { grok { match => { "message" => "%{NUMBER:access_time:date{yyyyMMddHHmmss}} %{IP:client_ip} %{HOSTNAME:cdn_domain} %{URIPATHPARAM:request_uri} %{NUMBER:response_size:int} %{NUMBER:response_time:int} %{NUMBER:unknown_status:int} %{NUMBER:http_status:int} %{DATA:placeholder} %{NUMBER:cache_hit_count:int} %{QS:user_agent} %{QS:segment_range} %{WORD:request_method} %{DATA:http_version} %{WORD:cache_status} %{DATA:last_unknown_field}" } remove_field => ["message"] # 解析后可移除原始日志字段 } # 可选:将access_time转换为Logstash标准@timestamp字段 date { match => ["access_time", "yyyyMMddHHmmss"] target => "@timestamp" remove_field => ["access_time"] } }
注意事项
- 日志中两个未知字段若后续明确含义,可直接修改字段名(如
unknown_status、last_unknown_field) - 若日志出现特殊字符,可调整
URIPATHPARAM或DATA对应的Grok模式适配 - 测试Grok模式可使用Logstash自带的
logstash-plugin logstash-filter-grok test命令,本地调试更安全
内容的提问来源于stack exchange,提问作者Gaurav Toshniwal
相关产品推荐
相关产品推荐

