代码之家  ›  专栏  ›  技术社区  ›  Nicholas K

用java语言编写的Fluent bit

  •  -1
  • Nicholas K  · 技术社区  · 6 年前

    我正在尝试将基本javamaven项目的日志发送到远程机器上配置的fluent位。Fluent bit会将它们写入一个文件。这是我的基本java配置。

    Java

    private final static Logger logger = LoggerFactory.getLogger(App.class);
    
    public static void main(String[] args) {
       for (int i = 0; ; i++) {
          logger.debug("Warn msg");
          try {
             Thread.sleep(5000);
           } catch (InterruptedException e) {
            // do nothing now
          }
       }
    }
    

    以及logback.xml

    <appender name="fluentd" class="ch.qos.logback.more.appenders.DataFluentAppender">
       <remoteHost>xx.xxx.xxx.xxx</remoteHost>
       <port>7777</port>
       <encoder>
                <pattern>%message%n</pattern>
        </encoder>
    </appender>
    
    <root level="DEBUG">
        <appender-ref ref="fluentd" />
    </root>
    

    Fluent位配置:

    td-agent-bit.conf文件

    [INPUT]
        Name          tcp
        Listen        xx.xxx.xxx.xxx
        Port          7777
        Parsers_File  /etc/td-agent-bit/parsers.conf
        Parser        custom_parser
    
    [OUTPUT]
        Name          file
        Match         *
        Path          /home/td-agent-bit/output.txt
    

    解析器.conf

    [PARSER]
        Name    custom_parser
        Format  regex
        Regex   .*
    

    [2018/09/27 08:29:13][trace][in\u tcp]read()=74 pre\u len=370 now\u len=444

    [2018/09/27 08:29:13][debug][in \u serial]JSON消息无效,正在跳过

    但是,当我尝试通过命令行测试配置时,它是有效的

    echo '{"key 1": 10, "key 2": "YYY"}' | nc xx.xxx.xxx.xxx 7777
    

    我没有得到任何异常,输出文件拥有所有权限。另外,远程机器是基于光子操作系统的系统。

    任何想法都将不胜感激。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Nicholas K    6 年前

    所以经过研究和一张票我打开了 here ,我发现我使用了错误的插件。

    所有java配置都是正确的。只需要对 td-agent-bit.conf

    [INPUT]
        Name          forward
        Listen        xx.xxx.xxx.xxx
        Port          7777
    

    我们需要使用 forward 插件而不是 tcp

    注意,TCP输入插件只接受JSON映射作为记录,而不像转发协议那样接受msgpack。