如何在Logstash中配置过滤器提取Serilog日志的级别与来源?
配置Logstash过滤器提取Serilog日志字段
完全可以通过Logstash的grok过滤器匹配你的Serilog日志格式,提取出日志级别、来源以及日志消息字段,同时还能将日志中的时间戳同步到Elasticsearch的@timestamp字段中。
修改后的Logstash配置(核心为filter部分)
input { file { mode => "tail" path => "/usr/share/logstash/ingest_data/*" } } filter { # 匹配日志格式,提取目标字段 grok { match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} \[%{DATA:log_level}\] \[%{DATA:log_source}\] %{GREEDYDATA:log_message}" } # 匹配失败时给事件打标签,避免丢失原始日志 tag_on_failure => ["_grokparsefailure"] } # 将提取的日志时间戳替换Logstash默认的@timestamp字段 date { match => [ "log_timestamp", "yyyy-MM-dd HH:mm:ss.SSS Z" ] target => "@timestamp" # 解析失败时打标签,方便排查问题 tag_on_failure => ["_dateparsefailure"] } # 可选:若不需要保留原始message字段,可开启以下配置 # mutate { # remove_field => ["message"] # } } output { elasticsearch { index => "logstash-%{+YYYY.MM.dd}" hosts=> "${ELASTIC_HOSTS}" user=> "${ELASTIC_USER}" password=> "${ELASTIC_PASSWORD}" cacert=> "certs/ca/ca.crt" } }
配置细节说明
- grok过滤器:
%{TIMESTAMP_ISO8601:log_timestamp}:匹配日志中的时间戳,存入log_timestamp字段\[%{DATA:log_level}\]:匹配[Warning]格式的日志级别,存入log_level字段\[%{DATA:log_source}\]:匹配[Application]格式的日志来源,存入log_source字段%{GREEDYDATA:log_message}:匹配剩余的所有日志内容,存入log_message字段
- date过滤器:把提取的
log_timestamp解析为Elasticsearch默认的时间字段@timestamp,保证时间维度查询的准确性 tag_on_failure:匹配或解析失败时给事件打标签,便于后续定位问题
验证配置有效性
可以用Logstash的配置测试命令检查语法是否正确:
bin/logstash -f /path/to/your/config.conf --config.test_and_exit
也可以通过stdin输入测试日志内容,实时查看字段提取结果:
bin/logstash -f /path/to/your/config.conf --stdin
输入你的日志示例后,就能看到提取后的字段输出。
内容的提问来源于stack exchange,提问作者Wojciech Szabowicz
相关产品推荐
相关产品推荐

