儘管配置,Haproxy 似乎沒有將日誌發送到 127.0.0.1:514
編輯:實際問題最終是 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