構成にもかかわらず、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- しかし、他のトラフィックが多い場合、この種のデバッグは少し実行可能ではありません。

もう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

おすすめ記事