Haproxy Logging, L4 mode

송전영·2023년 4월 13일
0

도전과제

목록 보기
1/4
post-thumbnail

Haproxy가 L7, L4 모두 로드밸런싱 할수있다.
저번에는 설정을 L7 http로 리슨해서 받아넘겨주는 식이었는데
이번에는 L4 tcp로 리슨해서 넘겨주는 방식으로 하려고한다.

Logging

haproxy.conf

haproxy.conf 파일인데

로깅하는 법에 대해서 설명해주고 있다.

/var/log/haproxy.log로 로그를 받아보고 싶으면

1) 네트워크 로그이벤트를 로깅하려면
/etc/sysconfig/syslog 파일을 수정해서
SYSLOGD_OPTION에 '-r' 옵션을 추가해서
작성하면 되고

2) local2를 통해서 원하는 위치로 로깅하려면 /var/log/haproxy.log
/etc/sysconfig/syslog

local2.*		 /var/log/haproxy.log

이렇게 수정하면 된다고한다.

global 설정에서(전역설정)

log 옵션
127.0.0.1 인 지금 대상 장비랑
local2로 바인드 되어있다.

이중에서 2번째인 local2를 보면

rsyslog demo07 configure


/etc/rsyslog.conf
이런식으로 설정파일이 담겨있다.

여기에 /etc/rsyslog.d/ 도 참조한다고 하기때문에

/etc/rsyslog.d/haproxy.conf

# Provides UDP syslog reception

$ModLoad imudp

$UDPServerRun 514

$AllowedSender UDP, 127.0.0.1

$template Haproxy, "%msg%\n"

#rsyslog 에는 rsyslog 가 메세지를 수신한 시각 및 데몬 이름같은 추가적인 정보가 prepend 되므로
, message만 출력하는 템플릿 지정
# 이를 haproxy-info.log에만 적용한다.
# 모든 haproxy를 남기려면 다음을 주석 해제, 단 access log가 기록되므로, 양이 많다.
#local2.*   /var/log/haproxy/haproxy.log

# local2.info는 haproxy 에서 에러로 처리된 이벤트들만 기록하게 됨 (포맷 적용)
local2.info    /var/log/haproxy/haproxy-info.log;Haproxy

# local0.notice는 haproxy 가 재시작되는 경우와 같은 시스템 메세지를 기록하게됨 (포맷 미적용)
local2.notice   /var/log/haproxy/haproxy-notice.log

logrotate configure

yum install logrotate

로그를 관리하는 서비스이다.
자동 수집 삭제 압축등 로그를 관리하는 역할을 한다.

/etc/logrotate.d/haproxy

이렇게 서비스에대해서 저동적으로 생겨있는 설정 파일들을 볼 수 있다.

/var/log/haproxy/*.log {
    daily
    rotate 30 # 10-> 30, 30일 마다 실행
    create 0644 nobody nobody # 0644 권한, nobody, nobody 
    missingok
    notifempty
    compress
    sharedscripts
    postrotate

# rsyslog서비스를 재시작한 것에 대한 로그는 보이지 않도록 즉각 삭제처리
    /bin/systemctl restart rsyslog.service > /dev/null 2>/dev/null || true
        # /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
}

rsyslog 재시작 해보고

systemctl restart rsyslog
systemctl status rsyslog

/var/log/haproxy/ 경로에서 log에 대해서 info, notice 로그가
생성된것을 볼 수 있다.

참고링크 : https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=hanajava&logNo=221626055915&categoryNo=40&parentCategoryNo=40&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postList

rsyslog demo08 configuration

logrotate demo08 configuration

/var/log/haproxy.log

L4 mode

L4와 L7 차이는
HTTP 로드밸런싱과, TCP 로드밸런싱의 차이가 있다.

L4는
TCP는 전송제어 프로토콜로 데이터를 전달하는 목적이 아니라 어느곳으로 전송할지 IP, Port를 backend로 지정하여 사용하고

L7은
HTTP 와 REST API 호출 주소를 로드밸런싱할 대상으로 backend로 설정하는 방식인데 이런 로드밸런싱을 어플리케이션 로드밸런싱이라고한다.

config

default 설정

defaults
    mode                    tcp
        # http -> tcp , L7-> L4 mode
    log                     global
    option                  tcplog
        # httplog -> tcplog
    option                  dontlognull
    option http-server-close
#   option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
#    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
#    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend-backend

L7과 다르게 L4같은 경우는 static backend가 필요하지 않다.

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main
    bind 192.168.203.211:80
    #acl url_static       path_beg       -i /static /images /javascript /stylesheets
    #acl url_static       path_end       -i .jpg .gif .png .css .js

    #use_backend static          if url_static
    default_backend              tcp
    #httpd -> tcp
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
#backend http mode require this backend : static
#backend static
#    balance     roundrobin
#    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
#backend httpd
#    balance     roundrobin
#    server  haproxy0 192.168.203.201:85 check
#    server  haproxy1 192.168.203.202:85 check

backend tcp
    balance     roundrobin
    server  nginx0 192.168.203.201:85
    server  nginx1 192.168.203.202:85
profile
클라우드(9개월근무)퇴사, 정보컴퓨터교사 지망, 코딩트리에듀센터 학원 근무중.AI프롬프트공부중.

0개의 댓글