При настройках по умолчанию мои логи выглядят так:
2020-12-01T18:34:06+02:00 10.132.90.194 {"wfd_successful_hits_sec": "0", "sql_hits_sec_max": "0", "timestamp": "2020/12/01 18:34:01", "connection_sec_max": "1922", "http_hits_sec_max": "1106", "http_hits_sec": "106", "wfd_successful_hits_sec_max": "0", "sql_hits_sec": "0", "sql_audit_phase2_events_sec_max": "0", "hdfs_hits_sec": "0", "connection_sec": "26"}
Но как только я пытаюсь заставить его записать только сообщение, он терпит неудачу.
и дает мне сообщение с обрезанным началом.
"0", "timestamp": "2020/12/01 18:34:01", "connection_sec_max": "1922", "http_hits_sec_max": "1106", "http_hits_sec": "106", "wfd_successful_hits_sec_max": "0", "sql_hits_sec": "0", "sql_audit_phase2_events_sec_max": "0", "hdfs_hits_sec": "0", "connection_sec": "26"}
Моя конфигурация Rsyslog:
$template OnlyMsg,"%msg:2:2048%\n"
$template CustomLog,"/logs/host-%fromhost%-%$year%-%$month%.log"
local5.* ?CustomLog;OnlyMsg
решение1
Входная строка на самом деле не стандартизирована для syslog, поэтому, например, строка, {"wfd_successful_hits_sec":
вероятно, ошибочно принимается за тег, а поле msg находится после него.
Вероятно, вы можете просто использовать rawmsg
свойство вместо msg
, так как оно содержит всю входную строку (после приоритета). Попробуйте начальное смещение около 40 символов, чтобы учесть временную метку и IP-адрес. Если у вас IP-адреса разной длины, вы можете использовать регулярное выражение вместо этого, чтобы сопоставить начало.