无法分解logstash消息字段

ymdaylpp  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(139)

输入如下

...,
"message": [
      ",{\"Timestamp\":\"2022-07-10T15:19:26.5172555Z\",\"Level\":\"Error\",\"MessageTemplate\":\"this is an error\",\"RenderedMessage\":\"this is an error\",\"Properties\":{\"RequestId\":\"0HMJ2FOA0IL5B:00000002\",\"RequestPath\":\"/\",\"ConnectionId\":\"0HMJ2FOA0IL5B\"}}\r"
],
...

我尝试了以下方法:

filter {
    split {
        field => "message"
    }
}

filter {
    json {
        source => "message"
    }
}

我认为它的格式可能有问题,因为消息字符串的开头有一个逗号,
下面是我为测试这一点而制作的最小API的一个示例

using Elastic.CommonSchema.Serilog;
using Serilog;

var builder = WebApplication.CreateBuilder(args);
builder.Host
    .UseSerilog((ctx, lc) => lc
        .WriteTo.Http(textFormatter: new EcsTextFormatter(), requestUri: "http://localhost:5000", queueLimitBytes: null)
        .Enrich.FromLogContext()
    );

var app = builder.Build();
app.MapGet("/", (Serilog.ILogger logger) =>
{
    logger.Error("this is an error");
    return "logged an error";
});
app.Run("http://localhost:3000");
vawmfj5a

vawmfj5a1#

我遇到的问题是由于不正确的logstash输入设置,以前我有:

input {
    beats {
        port => 5044
    }

    tcp {
        port => 5000
        tags => ["API"]
    }
}

我通过Serilog.Sinks.Http将HTTP日志写入端口5000
正确的logstash输入如下:

input {
    http {
        #default host 0.0.0.0:8080
        codec => json
    }
}

然后写日志到8080,事后看来很明显,但这是我坚持了几天的事情。
怀疑人们经常犯这个错误(如果有的话),因为我在网上找不到任何关于它的东西,但我还是要写这个答案!

相关问题