Promtail - syslog 配置仅记录 localhost 的主机名和 IP

Promtail - syslog 配置仅记录 localhost 的主机名和 IP

我有许多运行 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'

相关内容