我有许多运行 docker 容器的机器。为了记录所有日志,我们有一个日志输出在每个盒子上抓取该盒子上的所有容器日志,并将其路由到中央主机上的 syslog-ng 实例(docker 容器),然后将其存储到特定路径。
我正在尝试扩展此设置以使用 grafana/loki。问题是__syslog_connection_hostname 标签总是评估为“[本地主机 fdqn].,[主机名],localhost.localdomain。”无论日志来自何处。我知道 syslog-ng 知道实际主机在哪里,因为我们存储日志的路由是这样的:date_underscore/hostname/containername.log
我试过keep-hostname(yes)
在 syslog-ng 中设置,没有成功。不知道我遗漏了什么。
syslog-ng 配置
@version: 3.37
@include "scl.conf"
options {
dir-perm(0755);
keep-hostname(yes);
};
source s_network {
default-network-drivers();
};
destination d_local {
file("/logs/${YEAR}_${MONTH}_${DAY}/${HOST_FROM}/${PROGRAM}.log" perm(0755) create_dirs(yes));
};
destination d_loki {
syslog("localhost" transport("tcp") port(1514));
};
log {
source(s_network);
destination(d_local);
destination(d_loki);
};
promtail 配置片段
- job_name: syslog
syslog:
listen_address: 0.0.0.0:1514
idle_timeout: 60s
label_structured_data: yes
labels:
job: "syslog"
relabel_configs:
- source_labels: ['__syslog_message_hostname']
target_label: 'container_name'
- source_labels: ['__syslog_connection_hostname']
target_label: 'hostname'
- source_labels: ['__syslog_connection_ip_address']
target_label: 'ip'
- source_labels: ['__syslog_message_severity']
target_label: 'severity'