0

我在 XML 中有一组日志文件(WCF 跟踪文件),日志元素之间没有换行符。相反,有一个开始标签/结束标签。例子:

<E2ETraceEvent><log data/></E2ETraceEvent><E2ETraceEvent><logdata/></E2ETraceEvent>

我想将 E2ETraceEvents 单独存储在 ES 中。

该文件由正在运行的 WCF 服务附加。是否可以通过 filebeat 将其发送到 logstash?filebeat 可以在标签上匹配吗?或者 filebeat 需要换行符吗?还有其他选择吗?

4

2 回答 2

1

没有用于过滤或 grok 功能的功能,您可以查看以下讨论:

在这种情况下,您有一些选择,

首先,您可以将来自多个服务器的日志转发到具有多个 filebeat 的一个 logstash。这种结构使您能够过滤和操作您的日志。检查以下链接:

其次,您可以使用_ingestElasticsearch v5.x 的 API。查看 Elasticsearch 文档:

于 2016-09-01T11:04:06.800 回答
0

您应该能够覆盖 System.Diagnostics.XmlWriterTraceListener 类中的写入方法,并将您的新类用作跟踪侦听器。

public class TestPrettyPrint : System.Diagnostics.XmlWriterTraceListener
{
    public TestPrettyPrint(Stream stream) : base(stream) { }
    public TestPrettyPrint(string filename) : base(filename) { }
    public TestPrettyPrint(TextWriter tw) : base(tw) { }
    public TestPrettyPrint(Stream stream, string filename) : base(stream, filename) { }
    public TestPrettyPrint(string filename, string name) : base(filename, name) { }
    public TestPrettyPrint(TextWriter tw, string name) : base(tw, name) { }

    public override void Write(string message)
    {
        message = PrettyPrintMessage(message);
        base.Write(message);
    }

    public override void Write(string message, string category)
    {
        message = PrettyPrintMessage(message);
        base.Write(message, category);
    }

    public override void WriteLine(string message)
    {
        message = PrettyPrintMessage(message);
        base.WriteLine(message);
    }

    public override void WriteLine(string message, string category)
    {
        message = PrettyPrintMessage(message);
        base.WriteLine(message, category);
    }

    private string PrettyPrintMessage(string messageToPP)
    {
        try
        {
            XDocument doc = XDocument.Parse(messageToPP);
            return doc.ToString();
        }
        catch (Exception)
        {
            return messageToPP;
        }
    }
}

https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/tracing-and-message-logging

然后在 web.config 中设置跟踪侦听器时将 System.Diagnostics.XmlWriterTraceListener 替换为 MyNamespace.TestPrettyPrint。

然后,您可以在 filebeat 中设置多行探查器以将信息发送到 logstash。

于 2018-02-09T19:23:07.027 回答