尽管配置,Haproxy 似乎没有将日志发送到 127.0.0.1:514

尽管配置,Haproxy 似乎没有将日志发送到 127.0.0.1:514

编辑:实际问题最终要么是 local0 与 local2 的区别,要么是 rsyslog 的处理结束。

我正在构建一个 kubernetes/openshift 集群,在此之前,我需要为 api 服务器和应用程序服务设置一个 L4 LB。即使流量本身实际上是 https,流量也是在 tcp 级别处理的。进行此设置的原因是 kubernetes/openshift 拥有证书及其密钥,即使 apiserver / http apps 通配符记录的 DNS 指向的 IP 地址位于 haproxy 主机上。

负载平衡有效,即流量毫无问题地到达应有的位置,但 haproxy 坚持将其所有日志写入/var/log/messages而不是 under /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 还让我看到确实存在系统日志流量:

# 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

相关内容