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.local0ilelocal7arası özel uygulamalar için ayrılmıştır.local2yaygın bir seçimdir ve Rsyslog’da bu facility’ye göre filtreleme yapabiliriz.info: Log seviyesini belirtir.infoseviyesi, bilgilendirici mesajları içerir. Daha detaylı loglar içindebugveya daha az detay içinnotice,warninggibi 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,defaultsbölümündeki tüm ön uçlar (frontends) ve arka uçlar (backends) içinglobalbö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,local2facility’sinden (HAProxy’nin kullandığı) gelen tüm log seviyelerini ()/var/log/haproxy.logdosyası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. İstersenizdailyveyamonthlyyapabilirsiniz.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
globalbölümündekilogsatırında doğru IP ve portu belirttiğinizden emin olun (varsayılan olarak 127.0.0.1 ve 514).
- HAProxy servisi çalışıyor mu?
- Rsyslog’un UDP 514 portunu dinlediğini kontrol etme:
sudo netstat -tulnp | grep 514Çıktıda
udpve514iç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/messagesdosyası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’ninlocal2yerine başka bir facility ile log gönderdiğini gösterebilir.haproxy.cfgversyslog.d/haproxy.confdosyaları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. Genelliklesetsebool -P haproxy_connect_any=1gibi 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.logdosyası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.
local2yerine başka bir syslog facility kullanabilir miyim?- Evet, kullanabilirsiniz.
local0‘danlocal7‘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’delocal3kullanıyorsanız, Rsyslog’da dalocal3.*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
infogenellikle iyi bir başlangıç noktasıdır, ancak daha fazla detay içindebugveya daha az detay içinwarningkullanabilirsiniz. - HAProxy loglarını uzak bir Rsyslog sunucusuna gönderebilir miyim?
- Evet, gönderebilirsiniz. HAProxy yapılandırmasındaki
log 127.0.0.1 local2 infosatırındaki127.0.0.1yerine 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,
logrotateservisi 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/haproxydosyasındaki ayarları ihtiyaçlarınıza göre (örneğin, döndürme sıklığı veya saklanacak dosya sayısı) değiştirebilirsiniz.
