Takip et

HAProxy ve Rsyslog Entegrasyonuna Genel Bakış

HAProxy, yüksek performanslı bir yük dengeleyici ve ters proxy sunucusu olarak modern web altyapılarının vazgeçilmez bir parçasıdır. Uy

HAProxy, yüksek performanslı bir yük dengeleyici ve ters proxy sunucusu olarak modern web altyapılarının vazgeçilmez bir parçasıdır. Uygulama trafiğini yönetirken ürettiği loglar, sistem performansı, güvenlik olayları ve hata ayıklama süreçleri için kritik öneme sahiptir. Bu logların düzenli ve merkezi bir şekilde toplanması, izlenmesi ve analiz edilmesi, operasyonel verimlilik açısından hayati önem taşır. Rocky Linux 8 üzerinde Rsyslog ile HAProxy loglarını yapılandırmak, bu süreci standartlaştırmanın ve kolaylaştırmanın en etkili yollarından biridir.

Bu rehberde, HAProxy’nin loglarını Rsyslog servisine göndermesini, Rsyslog’un da bu logları özel bir dosyada toplamasını adım adım yapılandıracağız. Böylece, HAProxy trafiğiniz hakkında derinlemesine bilgi edinebilir ve olası sorunlara hızla müdahale edebilirsiniz.

HAProxy ve Rsyslog Entegrasyonuna Genel Bakış

HAProxy, varsayılan olarak loglarını syslog protokolü üzerinden gönderebilir. Syslog, Unix benzeri işletim sistemlerinde log mesajlarını iletmek için kullanılan standart bir protokoldür. Rocky Linux 8’de Rsyslog, sistem loglarını yöneten ana servistir. HAProxy’yi Rsyslog’a log gönderecek şekilde yapılandırdığımızda, Rsyslog bu logları alıp belirli kurallara göre işleyebilir; örneğin, bunları özel bir dosyaya yazabilir, uzak bir sunucuya iletebilir veya belirli bir kritere göre filtreleyebilir.

Bu entegrasyonun başlıca faydaları şunlardır:

  • Merkezi Log Yönetimi: HAProxy loglarını diğer sistem loglarıyla birlikte tek bir noktadan yönetebilirsiniz.
  • Kolay Analiz ve İzleme: Logları belirli bir dosyada toplayarak, analiz araçlarıyla veya basit komutlarla (tail, grep) kolayca izleyebilirsiniz.
  • Performans ve Güvenlik İzleme: HAProxy’nin trafik akışı, bağlantı durumları, hatalar ve potansiyel güvenlik ihlalleri hakkında detaylı bilgi edinirsiniz.
  • Hata Ayıklama: Sorun giderme süreçlerinde hızlı ve doğru bilgiye ulaşmanızı sağlar.

Ön Gereksinimler ve İlk Kurulum Kontrolleri

Bu rehbere başlamadan önce, Rocky Linux 8 işletim sisteminizin kurulu ve güncel olduğundan emin olun. Ayrıca HAProxy ve Rsyslog servislerinin çalışır durumda olması gerekmektedir.

HAProxy Kurulumu

Eğer HAProxy sunucunuzda kurulu değilse, aşağıdaki komutla kurabilirsiniz:

sudo dnf install haproxy -y
sudo systemctl enable haproxy
sudo systemctl start haproxy

Rsyslog Servis Kontrolü

Rsyslog, Rocky Linux’ta varsayılan olarak kurulu ve etkin gelir. Çalıştığından emin olmak için aşağıdaki komutu kullanın:

sudo systemctl status rsyslog

Eğer çalışmıyorsa, başlatın ve başlangıçta etkinleştirin:

sudo systemctl enable rsyslog
sudo systemctl start rsyslog

Firewall Ayarları (Gerekliyse)

HAProxy ve Rsyslog aynı sunucu üzerinde çalışıyorsa genellikle firewall ayarına gerek kalmaz. Ancak, HAProxy loglarını uzak bir Rsyslog sunucusuna gönderecekseniz veya HAProxy’nin kendi loglarını UDP 514 portundan localhost’a göndermesi için bir kurala ihtiyacınız olursa, Rsyslog’un bu portu dinlemesi için firewall’da izin vermeniz gerekebilir:

sudo firewall-cmd --add-port=514/udp --permanent
sudo firewall-cmd --reload

Bu adım, özellikle HAProxy’nin loglarını 127.0.0.1 adresine UDP 514 portu üzerinden göndereceksek önemlidir. Rsyslog bu portu dinleyecek şekilde yapılandırılacaktır.

HAProxy Loglamasını Yapılandırma

HAProxy’nin loglarını Rsyslog’a göndermesi için ana yapılandırma dosyası olan /etc/haproxy/haproxy.cfg üzerinde değişiklik yapmamız gerekiyor.

HAProxy Yapılandırma Dosyası Düzenlemesi

Yapılandırma dosyasını bir metin düzenleyici ile açın:

sudo nano /etc/haproxy/haproxy.cfg

HAProxy yapılandırması genellikle global, defaults, frontend, backend gibi bölümlerden oluşur. Loglama ayarlarını genellikle global ve defaults bölümlerine ekleriz.

Global Bölümüne Log Ayarları Ekleme

global bölümüne aşağıdaki satırı ekleyin veya mevcutsa düzenleyin:

[global]
    ...
    log 127.0.0.1 local2 info
    ...
  • log 127.0.0.1: Logların gönderileceği IP adresini belirtir. Burada localhost (127.0.0.1) kullanıyoruz, çünkü Rsyslog aynı sunucu üzerinde çalışacak.
  • local2: Syslog facility’sini belirtir. local0 ile local7 arası özel uygulamalar için ayrılmıştır. local2 yaygın bir seçimdir ve Rsyslog’da bu facility’ye göre filtreleme yapabiliriz.
  • info: Log seviyesini belirtir. info seviyesi, bilgilendirici mesajları içerir. Daha detaylı loglar için debug veya daha az detay için notice, warning gibi seviyeler kullanabilirsiniz.

Defaults Bölümüne Log Formatı ve Global Log Kullanımı

defaults bölümüne ise aşağıdaki satırları ekleyin:

[defaults]
    ...
    log global
    option httplog
    log-format "%ci:%cp [%t] %ft %b/%s %Tq/%Tw/%Tc/%Tr/%Tt %ST %B %CC %CS %HR %HM %PR %TR %CN %CR %SR %CD %RQ %UR %UN %US %uu %sv %ss %ac/%sc/%rc %sq/%bq %hr %hs %{+Q}r"
    ...
  • log global: Bu, defaults bölümündeki tüm ön uçlar (frontends) ve arka uçlar (backends) için global bölümünde tanımlanan log ayarlarını kullanmasını sağlar.
  • option httplog: HAProxy’nin HTTP isteklerini detaylı bir şekilde loglamasını sağlar. Bu, özellikle HTTP trafiğini izlemek ve hata ayıklamak için çok faydalıdır.
  • log-format "...": Bu satır, HAProxy loglarının çıktısını özelleştirmenizi sağlar. Yukarıdaki örnek, HAProxy’nin varsayılan HTTP log formatlarından biridir ve birçok faydalı bilgiyi içerir (istemci IP’si, bağlantı süresi, durum kodları vb.). Bu formatı ihtiyaçlarınıza göre değiştirebilirsiniz.

Değişiklikleri kaydettikten sonra HAProxy servisini yeniden başlatın:

sudo systemctl restart haproxy

HAProxy yapılandırmanızın doğru olup olmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

sudo haproxy -c -f /etc/haproxy/haproxy.cfg

Rsyslog Loglamasını Yapılandırma

HAProxy artık loglarını localhost’taki UDP 514 portuna local2 facility’si ile gönderecek. Şimdi Rsyslog’u bu logları alıp özel bir dosyaya yazacak şekilde yapılandırmamız gerekiyor.

Rsyslog Yapılandırma Dosyası Oluşturma

Rsyslog’un modüler yapısından faydalanarak, HAProxy logları için ayrı bir yapılandırma dosyası oluşturmak en iyi uygulamadır. Bu, ana rsyslog.conf dosyasını temiz tutar ve yönetimi kolaylaştırır.

Yeni bir dosya oluşturun:

sudo nano /etc/rsyslog.d/haproxy.conf

Bu dosyanın içine aşağıdaki içeriği ekleyin:

# Modülü yükle ve UDP 514 portunu dinle
module(load="imudp")
input(type="imudp" port="514")

HAProxy loglarını /var/log/haproxy.log dosyasına yaz

local2.* /var/log/haproxy.log
  • module(load="imudp"): Rsyslog’un UDP giriş modülünü yüklemesini sağlar. Bu modül, UDP üzerinden gelen logları dinlemek için gereklidir.
  • input(type="imudp" port="514"): Rsyslog’un UDP 514 portunu dinlemesini sağlar. HAProxy loglarını bu port üzerinden gönderecektir.
  • local2. /var/log/haproxy.log: Bu kural, local2 facility’sinden (HAProxy’nin kullandığı) gelen tüm log seviyelerini () /var/log/haproxy.log dosyasına yazılmasını sağlar.

Değişiklikleri kaydettikten sonra Rsyslog servisini yeniden başlatın:

sudo systemctl restart rsyslog

Rsyslog yapılandırmanızın doğru olup olmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

sudo rsyslogd -N1

Logrotate Yapılandırması (Önemli)

HAProxy logları zamanla oldukça büyüyebilir ve disk alanınızı tüketebilir. Bu durumu önlemek için logrotate servisini kullanarak log dosyalarını düzenli olarak döndürmeniz, sıkıştırmanız ve eski logları silmeniz önemlidir.

HAProxy logları için bir logrotate yapılandırma dosyası oluşturun:

sudo nano /etc/logrotate.d/haproxy

İçine aşağıdaki içeriği ekleyin:

/var/log/haproxy.log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /bin/kill -HUP cat /var/run/syslogd.pid 2> /dev/null 2> /dev/null || true
    endscript
    rotate 5
    weekly
    compress
    delaycompress
    create 0640 root adm
}
  • missingok: Log dosyası yoksa hata vermez.
  • notifempty: Log dosyası boşsa döndürmez.
  • sharedscripts: Birden fazla log dosyası tanımlıysa, postrotate betiğini sadece bir kez çalıştırır.
  • postrotate ... endscript: Log dosyası döndürüldükten sonra çalıştırılacak komutlardır. Rsyslog’a HUP sinyali göndererek yeni log dosyasına yazmaya başlamasını söyleriz.
  • rotate 5: Son 5 log dosyasını saklar.
  • weekly: Logları haftalık olarak döndürür. İsterseniz daily veya monthly yapabilirsiniz.
  • compress: Eski log dosyalarını sıkıştırır.
  • delaycompress: En son döndürülen dosyayı hemen sıkıştırmaz, bir sonraki döndürmeye kadar bekler. Bu, o anki loglara erişimi kolaylaştırır.
  • create 0640 root adm: Yeni log dosyasını belirtilen izinler ve sahip/grup ile oluşturur.

Bu yapılandırma ile logrotate, HAProxy log dosyasını düzenli olarak yönetecek ve disk alanınızın aşırı dolmasını engelleyecektir.

Doğrulama ve Sorun Giderme

Yapılandırma adımlarını tamamladıktan sonra, HAProxy loglarının doğru bir şekilde Rsyslog’a ulaştığını ve /var/log/haproxy.log dosyasına yazıldığını doğrulamamız gerekir.

Logları Kontrol Etme

HAProxy log dosyasını izlemeye başlayın:

sudo tail -f /var/log/haproxy.log

Şimdi HAProxy üzerinden birkaç istek gönderin (örneğin, HAProxy’nin arkasındaki bir web sitesini ziyaret edin). Log dosyasında yeni girdilerin belirdiğini görmelisiniz. Eğer görüyorsanız, yapılandırma başarılı demektir.

Yaygın Sorunlar ve Çözümleri

  • Loglar görünmüyor:
    • HAProxy servisi çalışıyor mu? sudo systemctl status haproxy
    • Rsyslog servisi çalışıyor mu? sudo systemctl status rsyslog
    • HAProxy yapılandırması doğru mu? sudo haproxy -c -f /etc/haproxy/haproxy.cfg
    • Rsyslog yapılandırması doğru mu? sudo rsyslogd -N1
    • Firewall kuralı eklediniz mi? sudo firewall-cmd --list-all (UDP 514 portunun açık olduğundan emin olun).
    • HAProxy’nin global bölümündeki log satırında doğru IP ve portu belirttiğinizden emin olun (varsayılan olarak 127.0.0.1 ve 514).
  • Rsyslog’un UDP 514 portunu dinlediğini kontrol etme:
    sudo netstat -tulnp | grep 514

    Çıktıda udp ve 514 içeren bir satır görmelisiniz (örneğin, udp 0 0 0.0.0.0:514 0.0.0.0:* 1234/rsyslogd).

  • Loglar /var/log/messages dosyasına düşüyor:

    Bu, Rsyslog’un HAProxy loglarını özel bir dosyaya yönlendirme kuralını (local2.* /var/log/haproxy.log) doğru uygulamadığını veya HAProxy’nin local2 yerine başka bir facility ile log gönderdiğini gösterebilir. haproxy.cfg ve rsyslog.d/haproxy.conf dosyalarındaki facility ayarlarının tutarlı olduğundan emin olun.

  • SELinux sorunları:

    Nadiren de olsa, SELinux politikaları logların yazılmasını engelleyebilir. Eğer yukarıdaki adımlar işe yaramazsa, SELinux audit loglarını kontrol edin (sudo ausearch -m AVC -ts recent) ve ilgili politikaları ayarlayın. Genellikle setsebool -P haproxy_connect_any=1 gibi bir komut gerekebilir, ancak bu genellikle uzak sunucuya bağlanırken daha olasıdır.

  • Manuel olarak Rsyslog’a test mesajı gönderme:

    Rsyslog’un doğru çalıştığını test etmek için HAProxy’den bağımsız olarak bir test mesajı gönderebilirsiniz:

    logger -p local2.info "Bu bir HAProxy log test mesajıdır."

    Bu mesajın /var/log/haproxy.log dosyasına düşüp düşmediğini kontrol edin.

Sonuç ve Sıkça Sorulan Sorular (SSS)

Bu rehberde, Rocky Linux 8 üzerinde HAProxy’nin loglarını Rsyslog aracılığıyla özel bir dosyaya nasıl göndereceğinizi adım adım öğrendiniz. Bu yapılandırma, HAProxy trafiğinizi daha etkin bir şekilde izlemenize, olası sorunları hızlıca tespit etmenize ve sisteminizin genel sağlığını korumanıza yardımcı olacaktır. Loglarınızı düzenli olarak kontrol etmek ve analiz etmek, operasyonel süreçlerinizin ayrılmaz bir parçası olmalıdır.

Sıkça Sorulan Sorular (SSS)

HAProxy loglarını neden UDP 514 portundan gönderiyoruz?
Syslog için varsayılan UDP portu 514’tür. UDP, bağlantısız bir protokoldür, bu da log gönderme işleminin hızlı ve kaynak tüketiminin düşük olmasını sağlar. Logların kaybolma riski olsa da, HAProxy gibi yüksek hacimli log üreten uygulamalar için performans genellikle önceliklidir.
local2 yerine başka bir syslog facility kullanabilir miyim?
Evet, kullanabilirsiniz. local0‘dan local7‘ye kadar farklı facility’ler mevcuttur. Önemli olan, HAProxy yapılandırmanızda belirttiğiniz facility ile Rsyslog yapılandırmanızdaki facility’nin eşleşmesidir. Örneğin, HAProxy’de local3 kullanıyorsanız, Rsyslog’da da local3.* ile filtreleme yapmalısınız.
Log seviyeleri (info, debug, warning vb.) ne anlama geliyor?
Syslog log seviyeleri, bir olayın önemini veya ciddiyetini belirtir:

  • emerg: Sistem kullanılamaz durumda.
  • alert: Hemen müdahale gerektiren durum.
  • crit: Kritik koşullar, donanım hataları vb.
  • err / error: Hata koşulları.
  • warning / warn: Uyarı koşulları.
  • notice: Normal ama önemli koşullar.
  • info: Bilgilendirici mesajlar, normal operasyonlar.
  • debug: Hata ayıklama mesajları, en detaylı loglar.

HAProxy’de info genellikle iyi bir başlangıç noktasıdır, ancak daha fazla detay için debug veya daha az detay için warning kullanabilirsiniz.

HAProxy loglarını uzak bir Rsyslog sunucusuna gönderebilir miyim?
Evet, gönderebilirsiniz. HAProxy yapılandırmasındaki log 127.0.0.1 local2 info satırındaki 127.0.0.1 yerine uzak Rsyslog sunucusunun IP adresini yazmanız yeterlidir. Uzak sunucudaki Rsyslog’un UDP 514 portundan gelen bağlantıları kabul edecek şekilde yapılandırıldığından ve firewall’da izin verildiğinden emin olmalısınız.
Log dosyaları çok büyürse ne yapmalıyım?
Yukarıda bahsettiğimiz gibi, logrotate servisi bu sorunu çözmek için tasarlanmıştır. Log dosyalarını düzenli aralıklarla döndürür, sıkıştırır ve eski dosyaları siler. /etc/logrotate.d/haproxy dosyasındaki ayarları ihtiyaçlarınıza göre (örneğin, döndürme sıklığı veya saklanacak dosya sayısı) değiştirebilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.