Yazılara geri dön
Yazı

RateLimitInterval ve Burst Ayarlarıyla journald Disk Anomalilerini Önle

systemd-journald.conf dosyasını nasıl ayarlayacağınızı öğrenin, günlüklerin diski doldurmasını engellemek için günlük fırtınalarını durdurun ve günlük kullanımını etkili bir şekilde izleyin.

Sistemsystemdloggingjournalctllog management

Bu bölümü çok kez gördüm: davranışı bozuk bir hizmet günlüğüyle spam yapmaya başlar ve aniden kök bölümünüz %100 dolar. Sistem yavaşlar, loglar yazılmayı durdurur ve kritik bir şey bozulmadan önce boş alan açmak için çaba harcarsınız. Ortamımda, günlük hacmini kontrol altında tutmak için systemd-journald’ın yerleşik hız sınırlama özelliğine güvenirim. /etc/systemd/journald.conf dosyasındaki RateLimitInterval ve Burst ayarlarını değiştirerek, tek bir hizmetin günlüğü doldurmasını ve disk alanını tüketmesini önleyebilirsiniz.

journald Hız Sınırlamasını Anlamak

systemd-journald, log giriş akışını kontrol etmek için iki temel ayar içerir: RateLimitInterval ve Burst. Bu iki ayar birlikte, belirli bir zaman penceresi içinde izin verilen log giriş sayısını tanımlar ve bu sınırı aşan mesajlar düşürülür. RateLimitInterval, zaman penceresini saniye cinsinden ayarlar; Burst ise bu pencere içinde izin verilen maksimum mesaj sayısını tanımlar. Bir hizmet bu sınırı aşarsa, journald daha fazla mesajı işlemeyi durdurur ve zaman penceresi sıfırlanana kadar bekler; bu sayede aşırı loglama diskin I/O ve depolama alanını tüketmesini önler.

Varsayılan olarak, bu değerler normal işleme izin vermek için konservatif olarak ayarlanmış ve aynı zamanda koruma sağlar. Ancak yoğun sistemlerde veya gürültülü uygulamalar hata ayıklanırken, varsayılan değerler çok izin verici olabilir. Ben, cron çalıştırmaları veya uygulama yeniden başlatmaları sırasında journal büyümesinde ani artışlar gözlemledikten sonra, çeşitli üretim sunucularında bu değerleri ayarladım.

Mevcut Günlük Kullanımını Kontrol Etme

Ayarlamalardan önce, günlüğün şu anda ne kadar alan kullandığını ve hız sınırlamasının zaten aktif olup olmadığını her zaman kontrol ederim. Disk kullanımını journalctl --disk-usage komutuyla görebilirsiniz. Bu komut, arşivlenmiş ve aktif günlüklerin tükettiği toplam alanı gösterir.

Mesajların hız sınırlaması nedeniyle düşürülüp düşürülmediğini görmek için, "Journal file /var/log/journal/... is full" gibi girişleri arayabilir veya hız sınırı sayaçlarını şu komutla kontrol edebilirsiniz:

journalctl --since "1 hour ago" | grep -i "rate limit"

Sık sık düşürme görüyorsanız, bu mevcut ayarlarınızın düzenli olarak aşıldığı bir işaretidir. Bu her zaman sınırların artırılması gerektiği anlamına gelmez—bazen bir hizmetin çok ayrıntılı log tutması ve bu sorunun kaynaktan düzeltilmesi gerektiği anlamına gelebilir.

RateLimitInterval ve Burst Ayarları

/etc/systemd/journald.conf dosyasını root olarak düzenleyin. Çoğu sunucu için RateLimitInterval'i 30s ve Burst'i 5000 olarak ayarlarım. Bu, her 30 saniyede en fazla 5.000 mesajın kaydedilmesine izin verir—başlangıç veya log dönüşü sırasında ani artışlar için yeterli, ancak bir sürecin kontrolsüz çalışıp diski hızla doldurmasını önlemek için yeterli değildir.

# /etc/systemd/journald.conf
RateLimitInterval=30
RateLimitBurst=5000

Dosyayı değiştirdikten sonra systemd-journald'i yeniden başlatın:

systemctl restart systemd-journald

Ardından ayarların aktif olduğunu doğrulayın:

systemctl show systemd-journald --property=RateLimitInterval --property=RateLimitBurst

Ayarladığınız değerleri görmelisiniz. Görmezseniz, yapılandırma dosyasındaki yazım hatalarını veya sözdizimi hatalarını kontrol edin.

Günlük Taşmalarını İzleme

Rate limiting mevcut olsa bile, sorunları erken yakalamak için günlük büyümesini izliyorum. Kullanım sınırının %80'ini aşarsa uyarı veren basit bir kontrol, journalctl --disk-usage komutunu kullanarak bir cron betiğinde kurarım. Maksimum günlük boyutu, SystemMaxUse tarafından kontrol edilir; bu, dosya sisteminin %10'u olarak varsayılan olarak ayarlanır ancak ayarlanabilir.

İzleme betiğimde kullandığım bir kod parçacığı şu şekildedir:

#!/bin/bash
USAGE=$(journalctl --disk-usage | awk '/total/ {print $3}' | tr -d 'MB')
LIMIT=$(grep SystemMaxUse /etc/systemd/journald.conf | cut -d'=' -f2 | tr -d 'M')
if [ -z "$LIMIT" ]; then
  LIMIT=1024  # örnek olarak 10G diskte %10'un varsayılan değeri
fi
PERCENT=$((USAGE * 100 / LIMIT))
if [ $PERCENT -gt 80 ]; then
  echo "UYARI: Günlük kullanımı ${PERCENT}%" | systemd-cat -t journald-check -p warning
fi

Bu betik saatlik olarak çalışır ve kullanım yüksek olduğunda uyarıyı günlüğe kaydeder. İsterseniz, e-posta gönderme veya izleme sistemi uyarısı tetikleme gibi işlevleri de ekleyebilirsiniz.

Ne Zaman Ayarlamalı vs. Ne Zaman Kaynak Düzeltmeli

Rate limiting, bir güvenlik ağıdır, gürültülü loglamanın bir çözümü değildir. Sürekli burst limitine takılıyorsanız, nedenini sorun. Bir hizmet üretim ortamında INFO seviyesinde mi hata ayıklama yapıyor? Bir cron işi mi başarısız ve her dakika aynı hatayı logluyor? Bu gibi durumlarda, log ayrıntılığını azaltmak veya temel sorunu düzeltmek, sınırları sadece artırmaktan çok daha iyidir.

Bir takımı, uyarıları susturmak için Burst’i 20000’ye kadar çıkarttığını gördüm, ancak gerçek sorun kötüleştiğinde birkaç gün sonra diskleri doldu. Rate limiting’i bir tampon olarak ele alın, gürültü loglarını görmezden gelmek için bir lisans olarak değil.

Sonuç

systemd-journald.conf dosyasındaki RateLimitInterval ve Burst ayarlarını ayarlamak, disk tükenme riskini ortadan kaldırarak günlük artışlarını emmek için pratik bir yol sunar. Bu ayarlar, journalctl --disk-usage komutunu düzenli olarak kontrol etme alışkanlığıyla ve izlemeyle birleştirildiğinde, systemd çalıştıran herhangi bir Linux sunucusu için düşük çaba, yüksek etki sağlayan bir kontrol mekanizması haline gelir.

Önceden auditd ile /etc/passwd izleme konulu yazımda da belirttiğim gibi, proaktif günlük hijyeni daha büyük sorunların önüne geçer. Öncelikle konservatif sınırlar ile başlayın, kullanımı izleyin ve günlük fırtınasının kaynağını gerçekten anladığınızda sadece o zaman ayarları ayarlayın.


Kapak görseli: Unknown · CC0 (Openverse / kamu malı) · https://www.rawpixel.com/image/5906903/photo-image-background-public-domain-technology