구성에도 불구하고 Haproxy는 127.0.0.1:514로 로그를 보내지 않는 것 같습니다.

구성에도 불구하고 Haproxy는 127.0.0.1:514로 로그를 보내지 않는 것 같습니다.

편집: 실제 문제는 local0과 local2의 차이 또는 rsyslog 처리의 끝으로 끝납니다.

kubernetes/openshift 클러스터를 구축 중인데, 그 전에 API 서버 및 애플리케이션 서비스용 L4 LB를 설정해야 합니다. 트래픽 자체가 실제로는 https이지만 트래픽은 tcp 수준에서 처리됩니다. 이렇게 설정하는 이유는 apiserver / http 앱 와일드카드 레코드에 대해 DNS가 가리키는 IP 주소가 haproxy 호스트에 있더라도 kubernetes/openshift가 인증서와 해당 키를 소유하기 때문입니다.

로드 밸런싱이 작동합니다. 즉, 트래픽은 문제 없이 있어야 할 곳으로 이동하지만 haproxy는 이를 달성하기 위한 모든 노력에도 불구하고 /var/log/messages대신 모든 로그를 작성해야 한다고 주장합니다. /var/log/haproxy/haproxy.log내가 아는 한:

  • rsyslog가 UDP 포트 514에서 수신 대기 중입니다.
  • rsyslog는 haproxy 문서 및 많은 답변의 지시에 따라 이를 haproxy 파일에 쓰도록 지시됩니다.
  • haproxy는 로그를 127.0.0.514로 보내도록 지시받습니다.

호스트 시스템은 RHEL8이고 haproxy 1.8.15 및 rsyslog 8.37은 공식 저장소에서 설치됩니다.

나에게 관련 부분은 다음과 같습니다 /etc/haproxy/haproxy.cfg.

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local0

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    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

.
.
.

# ---------------------------------------------------------------------
#  round robin balancing for OCP Ingress Insecure Port
# ---------------------------------------------------------------------
frontend ingress_insecure
    bind               *:80
    mode               tcp
    option  tcplog
    default_backend    ingress_insecure_backend

backend ingress_insecure_backend
    balance  roundrobin
    mode     tcp

        server worker1.cluster.example.com <ip address>:80 check
        server worker2.cluster.example.com <ip address>:80 check

이 내 꺼야 /etc/rsyslog.d/haproxy:

local0.* /var/log/haproxy/haproxy.log
& stop

이 줄은 다음 위치에 있습니다 /etc/rsyslog.conf.

# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

이것은 다음의 출력입니다 netstat -tulpn.

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
--- clip ---          
udp        0      0 0.0.0.0:514             0.0.0.0:*                           8031/rsyslogd
udp6       0      0 :::514                  :::*                                15270/rsyslogd 
--- clip ---

이것은 다음의 출력입니다 ls.(디렉토리를 수동으로 생성하고 거기에 도달하지 않도록 매우 허용적인 액세스 모드를 부여했습니다)

# ls -ld /var/log/haproxy
drwxrwxrwx 2 root root 6 Dec 18 14:40 /var/log/haproxy
# ls -la /var/log/haproxy
total 12
drwxrwxrwx   2 root root    6 Dec 18 14:40 .
drwxr-xr-x. 11 root root 8192 Dec 18 14:50 ..

그러나 haproxy 로그 데이터는 여전히 아래에만 표시되고 /var/log/messages아래에는 표시되지 않습니다 /var/log/haproxy/. 더 자세히 살펴봐야 할 조언이 있나요?

답변1

알았어, 이렇게 생겼어https://linuxconfig.org/install-and-configure-haproxy-on-redhat-8내 문제를 해결했습니다.

다음과 같이 변경합니다.

/etc/haproxy/haproxy.cfg:

global
    -- clip --
    log         127.0.0.1 local2
    -- clip --

/etc/rsyslog.d/haproxy.conf:

local2.=info     /var/log/haproxy/haproxy-access.log
local2.notice    /var/log/haproxy/haproxy-info.log

파일명도 주의하세요! 또 다른 문제는 내 ansible 스크립트(이러한 파일을 적절한 위치에 배치하는)에 버그가 있고 rsyslog 구성 파일에 ".conf" 부분이 없다는 것입니다!

그런 다음 관련 서비스를 다시 시작합니다.

# systemctl restart rsyslog
# systemctl restart haproxy

참고로 tcpdump는 실제로 syslog 트래픽이 있음을 보여주었습니다.

# tcpdump  -i lo
-- clip --
17:11:35.178564 IP localhost.58466 > localhost.syslog: SYSLOG local2.info, length: 157
-- clip -- 

(다른 터미널에서 이 작업을 수행하는 경우 curl 127.0.0.1- 그러나 다른 트래픽이 많이 발생하는 경우 이러한 종류의 디버깅은 약간 실행 가능하지 않습니다. 운이 좋게도 현재 이 컴퓨터에 요청을 보내는 유일한 사람/물이 될 수 있습니다.)

이제 또 다른 점은 로깅이 /var/log/messages 및 /var/log/haproxy/에 중복된다는 것입니다. 동료 덕분에 다른 줄을 바꿔서 문제를 해결했습니다/etc/rsyslog.conf:

# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none               /var/log/messages

로 변경:

# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local2.none    /var/log/messages

관련 정보