gpt4 book ai didi

spring-boot - Fluentd在写入Elasticsearch之前未按预期进行过滤

转载 作者:行者123 更新时间:2023-12-03 01:09:51 27 4
gpt4 key购买 nike

使用:

  • Elasticsearch 7.5.1。
  • Fluentd 1.11.2
  • Fluent-plugin-elasticsearch 4.1.3
  • Springboot 2.3.3

  • 我有一个配置了附加器的Logback的Springboot Artifact ,该附加器除了应用程序STDOUT之外,还向Fluentd发送日志:
    <appender name="FLUENT_TEXT"
    class="ch.qos.logback.more.appenders.DataFluentAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>INFO</level>
    </filter>

    <tag>myapp</tag>
    <label>myservicename</label>
    <remoteHost>fluentdservicename</remoteHost>
    <port>24224</port>
    <useEventTime>false</useEventTime>
    </appender>
    流利的配置文件如下所示:
    <ROOT>
    <source>
    @type forward
    port 24224
    bind "0.0.0.0"
    </source>

    <filter myapp.**>
    @type parser
    key_name "message"
    reserve_data true
    remove_key_name_field false
    <parse>
    @type "json"
    </parse>
    </filter>

    <match myapp.**>
    @type copy
    <store>
    @type "elasticsearch"
    host "elasticdb"
    port 9200
    logstash_format true
    logstash_prefix "applogs"
    logstash_dateformat "%Y%m%d"
    include_tag_key true
    type_name "app_log"
    tag_key "@log_name"
    flush_interval 1s
    user "elastic"
    password xxxxxx
    <buffer>
    flush_interval 1s
    </buffer>
    </store>
    <store>
    @type "stdout"
    </store>
    </match>
    </ROOT>
    因此,它只是添加了一个过滤器以结构化的方式解析信息(Json字符串),然后将其写入Elasticsearch(以及Fluentd的STDOUT)。检查如何添加myapp。**正则表达式,使其在过滤器和匹配块中匹配。
    在Openshift中,一切都已启动并正常运行。 Springboot将日志正确发送到Fluentd,然后Fluentd在Elasticsearch中写入。
    但是问题在于 从应用程序生成的每个日志也都写入。这意味着每个INFO日志(例如带有初始Spring配置或应用程序通过Logback发送给它的任何其他信息)也将被写入。
    “所需”日志的示例:
    2020-11-04 06:33:42.312840352 +0000 myapp.myservice: {"traceId":"bf8195d9-16dd-4e58-a0aa-413d89a1eca9","spanId":"f597f7ffbe722fa7","spanExportable":"false","X-Span-Export":"false","level":"INFO","X-B3-SpanId":"f597f7ffbe722fa7","idOrq":"bf8195d9-16dd-4e58-a0aa-413d89a1eca9","logger":"es.organization.project.myapp.commons.services.impl.LoggerServiceImpl","X-B3-TraceId":"f597f7ffbe722fa7","thread":"http-nio-8085-exec-1","message":"{\"traceId\":\"bf8195d9-16dd-4e58-a0aa-413d89a1eca9\",\"inout\":\"IN\",\"startTime\":1604471622281,\"finishTime\":null,\"executionTime\":null,\"entrySize\":5494.0,\"exitSize\":null,\"differenceSize\":null,\"user\":\"pmmartin\",\"methodPath\":\"Method Path\",\"errorMessage\":null,\"className\":\"CamelOrchestrator\",\"methodName\":\"preauthorization_validate\"}","idOp":"","inout":"IN","startTime":1604471622281,"finishTime":null,"executionTime":null,"entrySize":5494.0,"exitSize":null,"differenceSize":null,"user":"pmmartin","methodPath":"Method Path","errorMessage":null,"className":"CamelOrchestrator","methodName":"preauthorization_validate"}
    “不需要的”日志示例(检查每个意外日志消息中是否有Fluentd警告):
    2020-11-04 06:55:09.000000000 +0000 myapp.myservice: {"level":"INFO","logger":"org.apache.camel.impl.engine.InternalRouteStartupManager","thread":"restartedMain","message":"Route: route6 started and consuming from: servlet:/preAuth"}
    2020-11-04 06:55:09 +0000 [warn]: #0 dump an error event: error_class=Fluent::Plugin::Parser::ParserError error="pattern not matched with data 'Total 20 routes, of which 20 are started'" location=nil tag="myapp.myservice" time=1604472909 record={"level"=>"INFO", "logger"=>"org.apache.camel.impl.engine.AbstractCamelContext", "thread"=>"restartedMain", "message"=>"Total 20 routes, of which 20 are started"}
    2020-11-04 06:55:09.000000000 +0000 myapp.myservice: {"level":"INFO","logger":"org.apache.camel.impl.engine.AbstractCamelContext","thread":"restartedMain","message":"Total 20 routes, of which 20 are started"}
    2020-11-04 06:55:09 +0000 [warn]: #0 dump an error event: error_class=Fluent::Plugin::Parser::ParserError error="pattern not matched with data 'Apache Camel 3.5.0 (MyService DEMO Mode) started in 0.036 seconds'" location=nil tag="myapp.myservice" time=1604472909 record={"level"=>"INFO", "logger"=>"org.apache.camel.impl.engine.AbstractCamelContext", "thread"=>"restartedMain", "message"=>"Apache Camel 3.5.0 (MyService DEMO Mode) started in 0.036 seconds"}
    2020-11-04 06:55:09.000000000 +0000 myapp.myservice: {"level":"INFO","logger":"org.apache.camel.impl.engine.AbstractCamelContext","thread":"restartedMain","message":"Apache Camel 3.5.0 (MyService DEMO Mode) started in 0.036 seconds"}
    2020-11-04 06:55:09 +0000 [warn]: #0 dump an error event: error_class=Fluent::Plugin::Parser::ParserError error="pattern not matched with data 'Started MyServiceApplication in 15.446 seconds (JVM running for 346.061)'" location=nil tag="myapp.myservice" time=1604472909 record={"level"=>"INFO", "logger"=>"es.organization.project.myapp.MyService", "thread"=>"restartedMain", "message"=>"Started MyService in 15.446 seconds (JVM running for 346.061)"}
    问题是:什么以及如何告诉Fluentd真正过滤获得的信息,从而使不需要的信息被丢弃?

    最佳答案

    感谢@Azeem,并且根据grepregexp功能文档,我明白了:)。
    我刚刚将其添加到我的Fluentd配置文件中:

    <filter onpay.**>
    @type grep
    <regexp>
    key message
    pattern /^.*inout.*$/
    </regexp>
    </filter>
    现在不包括任何不包含单词“inout”的行。

    关于spring-boot - Fluentd在写入Elasticsearch之前未按预期进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64669749/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com