HAProxy는 파일 로깅을 지원합니까?

HAProxy는 파일 로깅을 지원합니까?

방금 설치했어요하 요원내 테스트 서버에서.

시스템 로그 대신 로컬 파일에 로그를 쓰도록 하는 방법이 있습니까?

이는 단지 테스트용이므로 포트를 열거나 모든 테스트 데이터로 시스템 로그를 복잡하게 만들고 싶지 않습니다.

불행하게도 제가 찾을 수 있는 유일한 정보는 syslog 서버에 대한 로깅에 관한 것입니다.

나는 다음을 사용하려고합니다 :

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)

이것이 가능합니까, 아니면 내 테스트 데이터를 볼 수 있도록 syslog 등을 구성해야 합니까?

답변1

Haproxy는 파일 로깅을 전혀 지원하지 않습니다. 문서에 명시된 바와 같이 (https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log), "log" 문은 주소를 첫 번째 매개변수로 사용합니다. 파일인 경우 Unix 소켓이고 HAProxy는 syslog 형식으로 해당 소켓과 통신합니다. Haproxy는 파일 쓰기가 아닌 요청 프록시를 담당하고 로그 파일 쓰기를 syslog에 위임하기 때문에 이러한 방식으로 설계되었습니다. 컴퓨터를 엉망으로 만들고 싶지 않다면,logstash를 설치하고 다음을 실행 하고 haproxy.cfg에 logstash -e 'input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }' 다음을 추가하여 테스트할 수 있습니다. log /tmp/haprxoy_log.sock

답변2

아래의 haproxy 로그 구성 파일을 변경하여 /etc/rsyslog.d/해당 파일이 원하는 경로를 가리키도록 할 수 있습니다. 다른 배포판에 대해서는 잘 모르겠습니다. 저는 데비안을 사용합니다. 나는 대신 /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
:programname,startswith,"haproxy" /var/log/haproxy/haproxy.log

또한 로그 경로를 /etc/logrotate.d/haproxy새 경로로 업데이트해야 합니다. 이 방법을 사용하면 새로 구성된 경로에서 로그 파일을 회전하고 압축할 수 있습니다 gzip.

그런 다음 rsyslog.service를 다시 시작하십시오.

sudo systemctl restart rsyslog.service

이제 haproxy.log.*파일이 /var/log/haproxy/디렉터리에 위치하게 됩니다.

답변3

버전 이후1.9 HAProxy 지원stdout및 에 로그인하세요 stderr.

이를 염두에 두고 파일로 파이프하는 것은 매우 간단합니다.

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

defaults
    log global
    option httplog

그런 다음 다음과 같이 간단하게 HAProxy를 실행할 수 있습니다.

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

아마도 파일로 >파이핑 한 다음 동일한 파일로 파이핑한다는 것을 알고 있을 것입니다 . 마지막으로 프로세스가 백그라운드에 배치됩니다.stdouthaproxy.log2>&1stderr&

haproxy한 단계 더 나아가 다음을 수행하여 이전 인스턴스를 종료하는 스크립트를 설정할 수 있습니다 .

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

아시다시피 어려운 일입니다...권장되지 않습니다.

편집: 차단 이벤트였던 파일에 로깅하므로 특히 HAProxy와 같은 경우에는 권장되지 않습니다. HAProxy 팀은 위에 링크된 출시 게시물에서 이것이 다음과 같다는 점을 매우 명확하게 밝혔습니다.더 이상 그렇지 않아요.

우리는 이와 같은 많은 요청을 받았으며 이를 구현하는 가장 좋은 방법(비차단)을 계획하는 데 시간을 보냈으며 솔루션을 찾았음을 발표하게 되어 기쁘게 생각합니다!

답변4

haproxy가 특정 파일에 로깅할 수 있도록 로깅 서비스를 생성해야 합니다. EL7 및 HAProxy 2.7-dev5에서 나에게 도움이 된 다음 지침을 사용하십시오.

냠 rsyslog 설치

vi /etc/rsyslog.d/haproxy.conf

$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514

local2.*        /logdir/haproxy
local3.*        /logdir/haproxy-access_log

systemctl 재시작 rsyslog && ldconfig

vi /../../haproxy.cfg

global
        log stderr local0 info
        log 127.0.0.1 local2 notice
        log 127.0.0.1 local3

defaults 
        log global
        option httplog

systemctl 재시작 haproxy

불필요한 공간 소비를 피하기 위해 로그 회전 서비스를 설정하는 것을 잊지 마십시오. 다음 작업을 수행해야 합니다.

vi /etc/logrotate.d/haproxy

/logdir/logdir/haproxy-access_log {
  weekly
  rotate 7
  missingok
  size=5M
  notifempty
  dateext
  dateformat -%d%m%Y
  compress
  create 0644 logfileowner logfileowner
  su logfileowner logfileowner
  mail email@torecievelogs
  postrotate
    /usr/bin/systemctl reload haproxy
  endscript
}

또한 다음 두 명령을 실행하여 로그 회전에 문제가 있는지 확인하세요. -

logrotate --force /etc/logrotate.d/haproxy
grep logrotate /var/log/audit/audit.log | audit2why

마지막으로 보안 강화가 활성화된 경우 로그 파일 컨텍스트와 해당 상위 디렉터리를 조정해야 할 수도 있다는 점을 지적하고 싶습니다.

행운을 빌어요:).

자카리아.

관련 정보