Rhel

儘管配置,Haproxy 似乎沒有將日誌發送到 127.0.0.1:514

  • December 22, 2019

編輯:實際問題最終是 local0 與 local2 的區別和 rsyslog 交易結束。

我正在建構一個 kubernetes / openshift 集群,在此之前,我需要為 api-server 和應用程序服務設置一個 L4 LB。流量在 tcp 級別處理,即使流量本身實際上是 https。此設置的原因是 kubernetes/openshift 擁有證書及其密鑰,即使 DNS 為 apiserver / http 應用程序萬用字元記錄指向的 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 是從官方 repos 安裝的。

這是我的相關部分/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 日誌數據仍然只出現在 in/var/log/messages而不是 under /var/log/haproxy/。有什麼可以進一步看的指針嗎?

好的,看來這個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

引用自:https://unix.stackexchange.com/questions/557880