วิธีป้องกันไม่ให้ข้อความบันทึก haproxy ออกจาก / var / log / syslog


29

ฉันตั้งค่าการบันทึก haproxy ผ่าน rsyslogd โดยใช้เคล็ดลับจากบทความนี้และดูเหมือนว่าทุกอย่างจะทำงานได้ดี ไฟล์บันทึกจะได้รับข้อความบันทึก

อย่างไรก็ตามข้อความเข้าสู่ระบบจากทุก haproxy /var/log/syslogยังแสดงให้เห็นขึ้นที่ ซึ่งหมายความว่าเมื่อเซิร์ฟเวอร์เริ่มทำงาน syslog จะไร้ประโยชน์เพราะมันจะถูกเรียกใช้ด้วยข้อความบันทึก haproxy

/var/log/syslogผมอยากจะกรองข้อความเหล่านั้น หลังจากอ่านเอกสาร rsyslogd ฉันพยายามเปลี่ยนไฟล์/etc/rsyslog.d/50-default.confดังนี้:

*.*;auth,authpriv.none;haproxy.none     -/var/log/syslog

ฉันแค่เพิ่ม;haproxy.noneส่วน หลังจากรีสตาร์ท rsyslogd แล้วจะหยุดทำงานอย่างสมบูรณ์จนกว่าฉันจะยกเลิกการเปลี่ยนแปลงของฉันอีกครั้ง

ผมทำอะไรผิดหรือเปล่า?

คำตอบ:


26

คุณสามารถทำสิ่งต่อไปนี้ซึ่งจะทำให้มันไม่เข้าไปในบันทึกอื่น ๆ :

local0.*                        -/var/log/haproxy.log
& ~

& ~วิธีการที่จะไม่ใส่สิ่งที่จับคู่ในสายดังกล่าวข้างต้นอื่นใดสำหรับส่วนที่เหลือของกฎ


ขอบคุณ สิ่งนี้ดูเหมือนจะสมเหตุสมผลมากกว่าที่จะต้องแก้ไขการกำหนดค่าหลัก
itsadok

13
น่าสังเกตว่าถ้าคุณทำเช่นนี้บรรทัด local0. * ของคุณจะต้องดำเนินการก่อนบรรทัด " . " ใน /etc/rsyslog.d/50-default.conf ฉันสร้างไฟล์ชื่อ /etc/rsyslog.d/haproxy.conf เพื่อให้มีการกำหนดค่าการบันทึกเฉพาะ haproxy ของฉัน แต่มันเข้าสู่ syslog แม้จะมี "& ~" ในตอนท้าย นี่เป็นเพราะ (แน่นอน) 50-default.conf ถูกโหลดก่อน haproxy.conf ดังนั้น catchall " . " จึงถูกจับคู่ก่อนบรรทัด "local0. *" ของฉัน วิธีแก้ไขคือเปลี่ยนชื่อไฟล์เฉพาะ haproxy ของฉันเป็น /etc/rsyslog.d/49-haproxy.conf
Giles Thomas

1
FYI อัปเดตขนาดเล็กrsyslogd-2307: warning: ~ action is deprecated, consider using the 'stop' statement instead [try http://www.rsyslog.com/e/2307 ]
KCD

นี้จะกล่าวถึงการใช้งานของ& stopแทน& ~: rsyslog.com/doc/v8-stable/compatibility/v7compatibility.html
slm

14

การใช้งาน& ~ถูกเลิกใช้ใน v7 ของ rsyslogd และคุณควรใช้& stopแทน คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในส่วนนี้ของหน้า v7 ความเข้ากันได้

การดำเนินการ omruleset และยกเลิก (~) จะเลิก

ทั้งสองทำงานต่อไป แต่ถูกแทนที่ด้วยทางเลือกที่ดีกว่า

การกระทำที่ยกเลิก (ตัวละครตัวหนอน) ได้ถูกแทนที่ด้วยคำสั่ง“ หยุด” RainerScript ถือว่าใช้งานง่ายขึ้นและให้ประสิทธิภาพที่ดีขึ้นเล็กน้อย

โมดูล omruleset ถูกแทนที่ด้วยคำสั่ง“ เรียก” ของ RainerScript การอนุญาตให้เรียกใช้เพื่อเรียกใช้งาน ruleset เช่นรูทีนย่อยและทำเช่นนั้นด้วยประสิทธิภาพที่สูงกว่า omruleset โปรดทราบว่า omruleset สามารถวิ่งออกจากคิว async นี่คือด้านมากกว่าผลที่ต้องการและไม่ได้รับการสนับสนุนโดยคำสั่งโทร หากจำเป็นต้องใช้เอฟเฟกต์นั้นก็สามารถจำลองได้โดยการเรียกใช้การกระทำ rulesets ที่เรียกว่าแบบอะซิงโครนัส

โปรดทราบว่าโมดูลเลิกใช้ส่งข้อความเตือนเมื่อมีการใช้ พวกเขาบอกว่าการก่อสร้างจะเลิกและคำสั่งที่จะใช้แทน สิ่งนี้ไม่ส่งผลกระทบต่อการทำงาน: ทั้งสองโมดูลยังคงทำงานได้อย่างสมบูรณ์และจะไม่ถูกลบออกในกรอบเวลา v7

ดังนั้นสำหรับ HAProxy บางสิ่งเช่นนี้แทน:

$ more /etc/rsyslog.d/haproxy.conf
local2.*    /var/log/haproxy.log
& stop

สำหรับวิธีการทำงานนั้น& stoprsyslogd จะบอกให้ทิ้งข้อความเพิ่มเติมใด ๆ ที่ตรงกับกฎที่ตรงกันก่อนหน้านี้จนถึงจุดนี้ เพื่อรับประกันว่ากฎนี้จะถูกหยิบขึ้นมาในช่วงต้นของคุณสามารถเปลี่ยนชื่อของไฟล์จากไป/etc/rsyslog.d/haproxy.conf/etc/rsyslog.d/00-haproxy.conf


3

ตกลงฉันคิดออก นี่คือ/etc/rsyslog.d/20-haproxy.confหน้าตาของฉัน:

$ModLoad imudp
$UDPServerRun 514

local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log

ฉันเปลี่ยนบรรทัด50-default.confเป็น:

*.*;auth,authpriv,local0,local1.none     -/var/log/syslog

และตอนนี้ดูเหมือนว่าจะทำสิ่งที่ฉันต้องการ


โดยทั่วไปจะดีกว่าที่จะไม่แก้ไขไฟล์กำหนดค่าที่สร้างขึ้นโดยแพ็กเกจอื่นเนื่องจากสร้างปัญหาการอัพเกรด / ความเป็นเจ้าของ หากนี่เป็นเซิร์ฟเวอร์เกล็ดหิมะครั้งเดียวคุณสามารถปรับสิ่งใดก็ได้ แต่สำหรับการปรับใช้อัตโนมัติการแก้ไข 50-default.conf โดยทั่วไปจะเป็น "สิ่งเลวร้าย"
Bruce Edge

2

มีทางออกที่ดีกว่าสำหรับการบันทึก haproxy

  • HAproxy ทำงานเป็น chroot ดังนั้นจึงไม่สามารถเข้าถึงได้ /dev/log
  • ตามคู่มืออย่างเป็นทางการ rsyslog จำเป็นต้องกำหนดค่าให้ฟังซ็อกเก็ตเครือข่าย:

    # 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
    

แต่คุณสามารถใช้ซ็อกเก็ต rsyslog เท่านั้น:

rsyslog.d / haproxy.conf:

    # HAproxy local socket
    $AddUnixListenSocket /var/lib/haproxy/dev/log
    :programname, contains, "haproxy" /var/log/haproxy.log
    & stop

haproxy.cfg:

    global
          log         /dev/log daemon
          chroot      /var/lib/haproxy
          .......

1

ฉันไม่ต้องการยุ่งกับการสั่งซื้อของไฟล์เพื่อแทนฉันจะเพิ่ม local0.none ไป รายการโฆษณา กำหนดค่าดูเหมือนว่า:

*.info;mail.none;authpriv.none;cron.none;local2.none     /var/log/messages

local2.*                                                 /var/log/haproxy.log

(ทดสอบบน CentOS 7)

หวังว่าจะช่วย!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.