
編集:実際の問題は、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