Logstash如何将Apache与应用日志分别输出到ES独立索引
Logstash 按日志类型分流写入ES独立索引配置方法
核心逻辑是先在过滤阶段区分Apache日志和应用日志,给两类日志打专属标识,再在输出阶段根据标识路由到不同索引。
配置调整步骤
- 首先修改filter段逻辑,避免全局执行grok和json解析产生冗余错误标签,同时给日志打类型标记:
filter { # 优先匹配Apache标准组合日志格式 grok { match => { "message" => "%{COMBINEDAPACHELOG}" } tag_on_failure => ["_not_apache"] } # grok匹配成功即为Apache日志,打类型标记 if "_not_apache" not in [tags] { mutate { add_field => { "log_category" => "apache" } } } # 匹配失败的走JSON解析,即为应用日志 else { json { source => "message" remove_tag => ["_not_apache"] } mutate { add_field => { "log_category" => "application" } } } }
- 调整output段配置,根据
log_category字段的值自动写入对应索引,这里默认配置了按日期滚动的索引名,方便日志生命周期管理:
output { elasticsearch { hosts => "http://elasticsearch-master:9200" index => "%{log_category}-logs-%{+YYYY.MM.dd}" } }
配置生效后,Apache日志会写入apache-logs-年.月.日格式的索引,应用日志会写入application-logs-年.月.日格式的索引。如果不需要按日期滚动,直接把index配置里的-%{+YYYY.MM.dd}部分删掉即可。
补充说明:如果你的Beats采集端已经给不同日志加了自定义type字段,也可以直接用自带的type字段做路由判断,不需要在Logstash里重复打标。配置修改完成后记得重启Logstash服务,建议先拿测试日志验证分流规则正常再上线。
内容的提问来源于stack exchange,提问作者Aishwarya
相关产品推荐
相关产品推荐

