Ho appena installato haproxy sul mio server di prova.

Cè un modo per fargli scrivere i suoi log in un file locale, invece che in syslog?

Questo è solo per il test, quindi non voglio iniziare ad aprirlo port / ingombrare syslog con tutti i miei dati di test.

Sfortunatamente, le uniche informazioni che riesco a trovare ruotano tutte attorno alla registrazione su un server syslog.

Ho provato a usare:

log /home/user/ha.log local0 

nella mia configurazione. Ma questo mi diceva:

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

Quando ho riavviato. Quindi ho creato il file con touch /home/user/ha.log e ho riavviato a quel punto ho ottenuto:

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

È possibile, o devo configurare syslog ecc. per vedere i miei dati di prova?

Commenti

  • Non ‘ Penso che HAProxy possa accedere a un file, e sospetto che il motivo sia che le scritture su disco sono unoperazione di blocco. Perché davvero non vuoi usare syslog? La configurazione non è poi così complicata. Puoi assegnare una struttura locale a HAProxy e configurare il tuo demone syslog per scrivere quelle voci in un file diverso e non in altri file syslog (o flussi di rete), se ‘ non lo sei desidera che i log di HAProxy non vengano mischiati con tutto il resto.

Risposta

Haproxy semplicemente non supporta registrazione ai file. Come indicato nella documentazione ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), listruzione “log” accetta come primo parametro un indirizzo. Se quel “file sa” è un socket unix e HAProxy parlerà in formato syslog a questo socket. Haproxy è progettato in questo modo perché la sua responsabilità è di richieste proxy, non di scrivere file, delega la scrittura di file di log a syslog . Se non vuoi fare confusione con la tua macchina, puoi ad esempio installare logstash ed eseguire: logstash -e "input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }" e aggiungere: log /tmp/haprxoy_log.sock In il tuo haproxy.cfg per testarlo.

Commenti

  • I ‘ ricevo ” E: Impossibile individuare il pacchetto logstash “. Logstash è stato rimosso da ubuntu?
  • @ user568021 sembra che logstash non sia fornito in ubuntu, ma elastic (logstash ‘ s manutentore) fornisce un sorgente apt. Inoltre, logstash è un software java, quindi potresti essere in grado di eseguirlo scaricando un file jar eseguendolo con un JRE (fornito da ubuntu)

Risposta

Puoi modificare il file di configurazione del log haproxy in /etc/rsyslog.d/ per indirizzare il file al percorso che preferisci. Non sono sicuro di altre distribuzioni. Per me, sto utilizzando Debian. Ho cambiato /etc/rsyslog.d/49-haproxy.conf in modo che punti a /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 &~ 

Dovresti anche aggiornare il percorso di log in /etc/logrotate.d/haproxy al nuovo percorso. In modo che ruoti e comprimi il file di log nel percorso appena configurato utilizzando gzip.

Quindi riavvia rsyslog.service.

sudo systemctl restart rsyslog.service 

Ora haproxy.log.* il file si troverà nella directory /var/log/haproxy/.

Commenti

  • Come faccio a creare log per errori come /var/log/haproxy-errors.log senza influire sul file haproxy.log originale?

Risposta

Dalla versione 1.9 HAProxy supporta la registrazione a stdout e stderr.

Con questo in mente è piuttosto banale reindirizzarlo a un file.

# change haproxy.cfg file with the following global log stdout local0 debug defaults log global option httplog 

E poi puoi semplicemente eseguire HAProxy in questo modo:

haproxy -f haproxy.cfg > haproxy.log 2>&1 & 

Come probabilmente saprai > pipe stdout al file haproxy.log e quindi 2>&1 pipe stderr anche nello stesso file. Termina con & che metterà il processo in background.

Puoi diventare più elaborato e provare a impostare uno script per uccidere listanza precedente di haproxy facendo qualcosa del genere:

#!/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 

Difficile, come probabilmente puoi dire … sconsigliato.

Modifica: laccesso ai file era un evento di blocco e quindi non consigliato, specialmente per qualcosa come HAProxy. Il team di HAProxy ha chiarito ampiamente nel post di rilascio collegato sopra che questo non è più il caso .

Abbiamo ricevuto spesso questa richiesta e abbiamo dedicato del tempo a pianificare il modo migliore per implementarla, senza bloccarla, e siamo lieti di annunciare che abbiamo trovato una soluzione!

Commenti

  • perché sta accedendo a stdout / err ” sconsigliato “? è questa la tua opinione o cè documentazione ufficiale su problemi con questo?
  • @Florian, hai ragione. Sono stato fuorviato dal comportamento passato. Non si blocca sulle versioni recenti, quindi la frase è stata supponente (e sbagliata). Ha modificato la risposta. Grazie!

Risposta

Hai provato a configurare nella home directory dellutente, haproxy non ha il permesso per accedere alla directory home dellutente, in modo da causare problemi.

Prova invece in unaltra posizione, crea la directory in /var/<directory>

log /var/<directory>/ha.log 

Commenti

  • Ho provato sudo touch /var/log/ha.log e aggiunto log /var/log/ha.log local0 alla mia configurazione, ma ho ricevuto lo stesso errore di cui sopra connection refused.
  • Nel log perché hai dato local0 alla fine?
  • Ho provato a lasciarlo fuori, ma quando ho riavviato ho ricevuto lerrore 'log' expects <address> and <facility> as arguments. quindi ho richiesto qualcosa lì. Secondo le istruzioni <facility> must be one of the 24 standard syslog facilities (che penso possa essere parte del problema)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *