json - syslog-ng json 解析器什么都不做
问题描述
我的 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");
结果完全相同。我会很感激任何帮助!
解决方案
我更新到最新版本的 syslog-ng 并通过对配置进行细微调整使其运行:
@version: 3.16
@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 {
wildcard-file(
base-dir("/var/log/worker/")
filename-pattern("error*.log")
flags(no-parse)
);
};
template unitManagerTemplate {
template("<${LEVEL_NUM}>1 ${.json.timestamp} ${HOST} worker ${PID} - [sdid@32473 X-OVH-TOKEN=\"XXXXXXXXXXXXXXXXXXXXXXXXXXX\" pid=\"${PID}\" facility=\"${FACILITY}\" priority=\"${.json.level}\"] ${.json.message}\n");
template_escape(no);
};
destination ovhPaaSLogs {
network("gra2.logs.ovh.com"
port(6514),
transport("tls")
tls(
ca-dir("/etc/ssl/certs")
peer-verify("required-trusted")
)
template(unitManagerTemplate),
ts_format("iso"),
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/"
推荐阅读
- python - plotly python 中的 include_plotlyjs="cdn" 对生成的 HTML 有什么作用?
- python - Django 频道 - 如何从外部脚本向组发送消息?
- mysql - SUBSTRING 函数 mysql
- node.js - -bash: npm: 使用Node LTS安装包后找不到命令
- python - csv.writerow 在添加 for 循环后现在可以工作了吗?
- azure-devops-migration-tools - 使用 VSTS 同步迁移工具配置文件中的 DevOps 查询 ID 迁移 Azure DevOps 工作项
- sql - SQL:使用案例在单独的列中查找重复项和标记
- javascript - setState 函数没有有效地更新 rows 变量,因此它没有反映在 UI 中?
- python - 为什么在其包中导入的模块会带有自己的模块名称
- git - 从提交 ID 中查找父分支