使用 filebeat 传送 XML 元素之间没有换行符的数据

Use filebeat to ship XML data which does not have newline between the elements

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

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

我想在 ES 中单独存储 E2ETraceEvents。

文件由 运行 WCF 服务追加。是否可以通过 filebeat 将其发送到 logstash? filebeat 可以匹配标签吗?还是 filebeat 需要出现换行符?还有其他选择吗?

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

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

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

其次,可以使用Elasticsearchv5.x的_ingestAPI。查看 Elasticsearch 文档:

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

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。