Haproxy

Haproxy log 설정

babbeolicoding 2023. 6. 15. 23:30

생성할 조건

haproxy.log를 일별로 30일 동안 생성

 

로그를 남기는 원리

- rsyslog

haproxy는 rsyslog를 통해서 로그를 남겨야 한다.

- logrotate

logrotate는 log를 일자별로 생성해준다.

haproxy.log를 haproxy.log-yyyymmdd로 파일을 변경
기존 haproxy.log는 /dev null처리를 해준다.

 

로그 생성 방법

1.  rsyslog를 통해 haproxy로그를 남길 수 있도록 세팅

vi /etc/rsyslog.d/haproxy.conf


$AddUnixListenSocket /var/lib/haproxy/dev/log
# Send HAProxy messages to a dedicated logfile
if $programname startswith 'haproxy' then {원하는 path 입력 ex> /var/log/haproxy/haproxy.log}
&~

rsyslog 서비스 재시작
systemctl restart rsyslog

 

2.  logrotate를 통해 haproxy.log가 일자별로 남겨질 수 있도록 세팅

 

2-1. 기본 스크립트

vi /etc/logrotate.d/haproxy

/var/log/haproxy/haproxy.log {
    daily
    rotate 30
    dateext
    missingok
    notifempty
    compress
    delaycompress
    postrotate
        invoke-rc.d rsyslog rotate >/dev/null 2>&1 || true
    endscript
}

 

2-2. 정상적으로 작동하지 않는 경우 스크립트

 

만약 위 2-1 스크립트를 적용했는데

다음날 haproxy.log-yyyymmdd가 생성되었지만
log가 haproxy.log로 쌓이지 않고 변경된 haproxy.log-yyyymmdd로 쌓인다면
아래 부분 스크립트를 사용하면 된다.

/var/log/haproxy/haproxy.log {
    daily
    rotate 30
    dateext
    missingok
    notifempty
    compress
    delaycompress
    postrotate
         /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
         /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}


HUP hangup, 로그아웃등의 접속이 끊을 때 발생하는 신호(Signal)로 
특정 실행 중인 프로그램이 사용하는 설정 파일을 변경시키고 
변화된 내용을 적용할때 사용

 

logrotate 옵션에 대한 설명

create 0644 root root : 생성된 파일은 0644권한을 주며 root유저와 root그룹을 가지도록 한다.
daily : 일 단위로 rotate한다.
rotate 30 : 30개 이상된 로그파일을 삭제
missingok : 로그파일이 없더라도 오류를 발생시키지 않는다.
notifempty : 파일의 내용이 없을 경우 파일을 생성하지 않는다.
dateext : 1,2,3… 같은 라벨이 아닌 날짜를 붙여서 파일을 생성한다.
dateformat .%Y-%m-%d.log : 파일에 .YYYY-MM-DD.log를 뒤에 붙인다. dateexe옵션과 같이 쓰인다.
sharedscripts : postrotate ~ endscript안에 script가 동작할때 각각의 로그마다 실행 되는 것이 아니라 1번만 실행되도록 하는 옵션이다. (즉) /home/user/log/nginx/*.log{ ... } 으로 확장자가 log라는 파일을 rotate할때 각각의 파일이 아닌 1번만 
postrotate ~ endscript안의 스크립트를 실행하도록 하는 옵션이다.
maxage 30 : 30일 이상된 로그파일 삭제
size 용량 : 지정된 용량이 되면 rotate한다.
ifempty : 로그파일이 비어있는 경우에도 rotate한다.
monthly : 월단위로 rotate한다.
weekly : 주단위로 rotate한다.
compress : gzip으로 압축한다.
nocompress : 압축하지 않는다.
mail 메일주소 : 설정에 의해 보관 기간이 끝난 파일을 메일주소로 발송한다.
mailfirst 메일주소 : 원본파일을 메일주소로 보낸다.
nomail : 메일을 받지 않는다.
errors 메일주소 : rotate중 오류발생시 메일주소로 통보한다.
logrotate : 사용자가 정한 주기 마다 쌓인 로그를 아카이브하고, 아카이브된 파일의 갯수가 사용자가 정한 최대 갯수보다 많아지면, 가장 오래된 순서로 아카이브된 로그 파일을 삭제
copytruncate : 로그파일의 내용을 복사하고 로그파일의 크기를 0으로 만들도록 동작하게 하는 옵션. (만약 파일용량이 크다면 하지 복사하는데 I/O자원이 소모되므로 피해야 한다)