Мой конфиг syslog-ng сводит меня с ума.У меня есть приложение, которое выдает простые сообщения журнала json, такие как:
{"level":"error","message":"connection ended without disconnect receipt","timestamp":"2018-10-12T17:49:08.650Z"}
Все, что я хочу сделать, - это проанализировать эти 3 значения и отправить их в размещенный кластер Graylog.Отправка работает, но сообщение вставляется как
application name: {"level"
message: "error","message":"connection ended without disconnect receipt","timestamp":"2018-10-12T17:49:08.650Z"}
, почти как syslog-ng даже не интерпретирует файл как json.Я пробовал другие варианты, прочитал документы, но сейчас у меня остроумие ...
Это мой конфиг (на хосте приложения; он должен отправлять журналы напрямую в кластер журналов)
@version: 3.5
@include "scl.conf"
@include "`scl-root`/system/tty10.conf"
options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no);
owner("root"); group("adm"); perm(0640); stats_freq(0);
bad_hostname("^gconfd$");
};
source s_src {
file(
"{{syslog_ng_src}}"
flags(no-parse)
);
};
template unitManagerTemplate {
template("$(format-json --scope dot-nv-pairs) [sdid@123456 X-OVH-TOKEN=\"XXXXXXXXXXXXXXXXXXXXXXXXXX\"\n");
};
destination ovhPaaSLogs {
tcp("gra2.logs.ovh.com"
port(6514),
template(unitManagerTemplate),
ts_format("iso"),
tls(peer-verify("require-trusted") ca_dir("/etc/ssl/certs/")),
keep-alive(yes),
so_keepalive(yes),
);
};
parser p_json {
json-parser(prefix(".json."));
};
log {
source(s_src);
parser(p_json);
destination(ovhPaaSLogs);
};
@include "/etc/syslog-ng/conf.d/"
Я пробовал другой вариант шаблона, подобный этому:
template("${.json.level} ${.json.message} ${.json.timestamp} [sdid@123456 X-OVH-TOKEN=\"XXXXXXXXXXXXXXXXXXXXXXXXXX\"\n");
Результаты абсолютно идентичны.Буду признателен за любую помощь!