Promtail — конфигурация системного журнала регистрирует только локальный хост для имени хоста и IP
У меня есть несколько ящиков, на которых работают докер-контейнеры. Чтобы вести учет всех журналов, у нас есть 1 экземпляр logspout на каждом ящике, который собирает все журналы контейнера в этом ящике и направляет их в экземпляр syslog-ng (докер-контейнер) на центральном хосте, который сохраняет их на определенный путь.
Я пытаюсь расширить эту настройку, чтобы использовать графану/локи. Проблема в том, что метка __syslog_connection_hostname всегда имеет значение «[локальный хост fdqn].,[имя хоста],localhost.localdomain». неважно откуда берутся логи. Я знаю, что syslog-ng знает, где находятся настоящие хосты, потому что маршрут, по которому мы храним журналы, выглядит примерно так:date_underscore/hostname/containername.log
Я попробовал установитьkeep-hostname(yes)
в syslog-ng нет игральных костей. Не уверен, что мне не хватает.
системный журнал-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'