Поддерживает ли HAProxy ведение журнала в файл?

14

Я только что установил haproxy на моем тестовом сервере.

Есть ли способ заставить его записывать свои журналы в локальный файл, а не в системный журнал?

Это только для тестирования, поэтому я не хочу начинать открывать порты / загромождать системный журнал всеми моими тестовыми данными.

К сожалению, единственная информация, которую я могу найти, связана с регистрацией на сервере системного журнала.

Я пытался с помощью:

log /home/user/ha.log local0

в моем конфиге. Но это сказало мне:

[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2)

Когда я перезапустил. Итак, я создал файл touch /home/user/ha.logи перезапустил его, и в этот момент я получил:

[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111)

Возможно ли это, или мне придется настроить системный журнал и т. Д., Чтобы увидеть мои тестовые данные?

IGGt
источник
2
Я не думаю, что HAProxy может войти в файл, и я подозреваю, что причина этого в том, что запись на диск является операцией блокировки. Почему вы действительно не хотите использовать системный журнал? Конфиг не так уж и сложен. Вы можете назначить локальное средство для HAProxy и настроить демон syslog для записи этих записей в другой файл, а не в другие файлы syslog (или сетевые потоки), если вы не хотите, чтобы журналы HAProxy не смешивались со всем остальное.
Майкл - sqlbot

Ответы:

14

Haproxy просто не поддерживает запись в файлы. Как указано в документации ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), оператор "log" принимает в качестве первого параметра адрес. Если это файл, это сокет unix, и HAProxy будет говорить в формате syslog с этим сокетом. Haproxy спроектирован так, потому что он отвечает за запросы прокси, а не за запись файлов, он делегирует запись файлов журнала в syslog. Если вы не хотите связываться с вашим компьютером, вы можете, например, установить logstash и запустить: logstash -e 'input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }' and add: log /tmp/haprxoy_log.sock в своем haproxy.cfg, чтобы протестировать его.

user801247
источник
Я получаю «E: Невозможно найти пакет logstash». Был ли удален logstash из Ubuntu?
user568021
@ user568021, кажется, logstash не предоставляется в Ubuntu, но эластичный (сопровождающий logstash) предоставляет подходящий источник. Кроме того, logstash - это программное обеспечение java, поэтому вы можете запустить его, загрузив jar-файл, запустив его с JRE (который предоставляется ubuntu)
user801247
7

Вы можете изменить конфигурационный файл журнала haproxy, /etc/rsyslog.d/чтобы указать путь к файлу, который вам нравится. Не уверен насчет другого распределения. Для меня я использую Debian. Я изменил, /etc/rsyslog.d/49-haproxy.confчтобы указать на /var/log/haproxy/haproxy.log,

# Create an additional socket in haproxy's chroot in order to allow logging via
# /dev/log to chroot'ed HAProxy processes
$AddUnixListenSocket /var/lib/haproxy/dev/log

# Send HAProxy messages to a dedicated logfile
if $programname startswith 'haproxy' then /var/log/haproxy/haproxy.log
&~

Вам также следует обновить путь /etc/logrotate.d/haproxyк журналу до нового. Так что он будет вращать и сжимать файл журнала по вновь настроенному пути, используя gzip.

Затем перезапустите rsyslog.service.

sudo systemctl restart rsyslog.service

Теперь haproxy.log.*файл будет в /var/log/haproxy/каталоге.

Fonzie
источник
Как создать отдельный журнал для ошибок, таких как /var/log/haproxy-errors.log, не затрагивая исходный haproxy.log?
Хуршид Алам
0

Вы попытались настроить в домашнем каталоге пользователя, haproxy не имеет разрешения на доступ к домашнему каталогу пользователя, поэтому возникает проблема.

Вместо этого попробуйте в другом месте, создайте каталог в /var/<directory>

log /var/<directory>/ha.log
ККД
источник
2
Я попытался sudo touch /var/log/ha.logи добавил log /var/log/ha.log local0к моей конфигурации, но получил ту же ошибку, что и выше connection refused.
IGGt
В логе, почему вы дали local0 в конце?
KKD
1
Я попытался пропустить это, но когда я перезапустил, я получил ошибку, 'log' expects <address> and <facility> as arguments.поэтому потребовал что-то там. Согласно инструкции <facility> must be one of the 24 standard syslog facilities(которая, я думаю, может быть частью проблемы)
IGGt