Свободный бит с Java
Я пытаюсь отправить журналы из базового проекта Java Maven на Fluent-бит, настроенный на удаленной машине. Затем 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-агент-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
parsers.conf
[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
Я не получаю никаких исключений, и выходной файл имеет все разрешения. Также удаленная машина представляет собой систему на основе фотонов.
Любые идеи будут высоко ценится.
1 ответ
Поэтому после некоторого исследования и билета, который я открыл здесь, я обнаружил, что использую не тот плагин.
Все настройки Java были правильными. Просто нужно внести следующие изменения в td-agent-bit.conf
[INPUT]
Name forward
Listen xx.xxx.xxx.xxx
Port 7777
Нам нужно использовать forward
плагин вместо tcp
плагин. Этот плагин будет прослушивать любые входящие сообщения через порт 7777 и перенаправлять его в файл.
Обратите внимание, что плагин TCP Input принимает только карты JSON как записи, а не msgpack, как это делает прямой протокол.