Právě jsem nainstaloval haproxy na můj testovací server.
Existuje způsob, jak přimět protokoly zapisovat do místního souboru, nikoli do syslogu?
Toto je pouze pro testování, takže nechci začít otevírat porty / přeplnění syslogu se všemi mými testovacími daty.
Bohužel, jediné informace, které mohu najít, se točí kolem protokolování na server syslog.
Zkoušel jsem použít:
log /home/user/ha.log local0
v mé konfiguraci. Ale to mi řeklo:
[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2)
Když jsem restartoval. Vytvořil jsem tedy soubor s touch /home/user/ha.log
a restartoval jsem, kdy jsem dostal:
[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111)
Je to možné, nebo Budu muset nakonfigurovat syslog atd., aby se mi zobrazily moje testovací údaje?
Komentáře
- Nechci ' si nemyslím, že se HAProxy může přihlásit do souboru, a domnívám se, že důvodem je to, že zápisy na disk jsou blokovací operací. Proč opravdu nechcete používat syslog? Konfigurace není tak složitá. Můžete přiřadit místní zařízení k HAProxy a nakonfigurovat démona syslog tak, aby tyto položky zapisoval do jiného souboru, a ne do jiných souborů syslog (nebo síťových proudů), pokud ' nejste chceme, aby protokoly HAProxy nebyly kombinovány se vším ostatním.
Odpovědět
Haproxy jednoduše nepodporuje protokolování do souborů. Jak je uvedeno v dokumentaci ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), příkaz „log“ bere jako první parametr a adresa. Pokud je tento soubor „sa“, jedná se o unixový soket a HAProxy bude na tento soket mluvit ve formátu syslog. Haproxy je navrženo takto, protože jeho odpovědnost spočívá v požadavcích na proxy, nikoli v zápisu souborů, deleguje zápis logovacích souborů na syslog . Pokud se svým strojem nechcete rušit, můžete si například nainstalovat logstash a spustit: logstash -e "input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }"
a přidat: log /tmp/haprxoy_log.sock
do váš haproxy.cfg, abyste to otestovali.
Komentáře
- Z ' získávám " E: Nelze najít logstash balíčku ". Byl logstash odstraněn z ubuntu?
- @ user568021 se zdá, že logstash není v ubuntu k dispozici, ale pružný (správce logstash ' s) poskytuje vhodný zdroj. Logstash je také java software, takže jej můžete spustit stažením souboru jar, ve kterém je spuštěno JRE (které poskytuje ubuntu).
Odpovědět
Konfigurační soubor protokolu haproxy můžete změnit pod /etc/rsyslog.d/
tak, aby směřoval soubor na požadovanou cestu. Nejste si jisti jinou distribucí. Pro mě používám Debian. Změnil jsem /etc/rsyslog.d/49-haproxy.conf
tak, aby ukazoval na /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 &~
Měli byste také aktualizovat cestu protokolu v /etc/logrotate.d/haproxy
na novou cestu. Takže bude rotovat a komprimovat soubor protokolu v nově nakonfigurované cestě pomocí gzip
.
Poté restartujte rsyslog.service.
sudo systemctl restart rsyslog.service
Nyní haproxy.log.*
soubor bude v /var/log/haproxy/
adresáři.
Komentáře
- Jak vytvořím samostatný zaznamenávat chyby jako /var/log/haproxy-errors.log bez ovlivnění původního haproxy.log?
odpověď
Protože verze 1.9 HAProxy podporuje protokolování do stdout
a stderr
.
S ohledem na to je docela triviální přenést jej do souboru.
# change haproxy.cfg file with the following global log stdout local0 debug defaults log global option httplog
A pak můžete jednoduše spustit HAProxy takto:
haproxy -f haproxy.cfg > haproxy.log 2>&1 &
Jak pravděpodobně znáte >
potrubí stdout
do souboru haproxy.log
a poté 2>&1
pipe stderr
také do stejného souboru. Končí to &
, které proces umístí na pozadí.
Můžete získat lepší vkus a zkusit nastavit skript, který zabije předchozí instanci haproxy
provedením něčeho takového:
#!/bin/bash # mini launcher kill -9 `cat /home/user/haproxy.pid` /home/user/haproxy -f /home/haproxy.cfg > /home/user/haproxy.log 2>&1 & echo $! > /home/user/haproxy.pid
Tvrdý, jak asi víte … nedoporučeno.
Upravit: Přihlašování k souborům bývalo blokovací událostí, a tedy nikoli doporučeno, speciálně pro něco jako HAProxy. Tým HAProxy na výše uvedeném příspěvku k vydání jasně uvedl, že to již neplatí .
Tento požadavek jsme dost obdrželi a strávili jsme nějaký čas plánováním toho nejlepšího způsobu jeho implementace – bez blokování – a s potěšením oznamujeme, že jsme našel řešení!
Komentáře
- proč se přihlašuje k stdout / err " nedoporučuje se "? je to váš názor nebo existuje oficiální dokumentace o problémech s tím?
- @Florian, máte pravdu. Byl jsem zavádějící minulým chováním. Neblokuje poslední vydání, takže věta byla názorná (a nesprávná). Upravil odpověď. Děkujeme!
Odpověď
Pokusili jste se nakonfigurovat v domovském adresáři uživatele, haproxy nemá oprávnění pro přístup do domovského adresáře uživatele, což by způsobilo problém.
Místo toho zkuste jiné umístění, vytvořte adresář v /var/<directory>
log /var/<directory>/ha.log
Komentáře
- Vyzkoušel jsem
sudo touch /var/log/ha.log
a přidallog /var/log/ha.log local0
do mé konfigurace, ale došlo ke stejné chybě jako výšeconnection refused
. - V protokolu proč nakonec dáváte local0?
- Snažil jsem se to vynechat, ale když jsem restartoval, dostal jsem chybu
'log' expects <address> and <facility> as arguments.
, takže jsem tam něco potřeboval. Podle pokynů<facility> must be one of the 24 standard syslog facilities
(které podle mého názoru mohou být součástí problému)