You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:08:29