java - 精通java
问题描述
我正在尝试将日志从基本的 java maven 项目发送到远程机器上配置的 fluent-bit。Fluent-bit 然后将它们写入文件。这是我的基本 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>
流利位配置:
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
解析器配置文件
[PARSER]
Name custom_parser
Format regex
Regex .*
应用程序运行时,我不断收到以下异常
[2018/09/27 08:29:13] [trace] [in_tcp] read()=74 pre_len=370 now_len=444
[2018/09/27 08:29:13] [debug] [in_serial] JSON 消息无效,跳过
但是当我尝试通过命令行测试配置时,它可以工作
echo '{"key 1": 10, "key 2": "YYY"}' | nc xx.xxx.xxx.xxx 7777
我没有得到任何异常,并且输出文件具有所有权限。远程机器也是基于光子操作系统的系统。
任何想法将不胜感激。
解决方案
所以经过一些研究和我在这里打开的票后,我发现我使用了错误的插件。
所有java配置都是正确的。只需对td-agent-bit.conf
[INPUT]
Name forward
Listen xx.xxx.xxx.xxx
Port 7777
我们需要使用forward
插件而不是tcp
插件。该插件将侦听 7777 端口上的任何传入消息并将其重定向到文件。
请注意,TCP Input 插件只接受 JSON 映射作为记录,而不接受 msgpack 作为转发协议。
推荐阅读
- vue.js - 如何在调用完成之前停止渲染我的 vue 组件
- excel - 更新命名单元格值
- c# - 没有派生的 ViewModel 但行为相同?
- matplotlib - 使用 matplotlib 绘制一个矩阵,其中第三个变量作为颜色图的源
- machine-learning - 什么是机器学习中的张量核?
- rally - 如果我创建了一个用户故事商店。有没有办法获取与故事相关的父程序名称的名称
- reactjs - 本地 Mac 和 CI 构建服务器上生成的 React 测试快照不匹配
- sql-server-2016 - 使用 VB.Net 未打开端口为 1600 的 SQL Server 2016 的连接
- 3d - 在 three.js 中弯曲 .glb 对象
- robotframework - RobotFramework 的 java 库中的 libdoc