Rsyslog günlük döndürüldükten sonra uzak sunucuya veri göndermeyi durduruyor


9

Benim yapılandırmada, ben değişikliklerini takip sorumlu kim rsyslog var /home/user/my_app/shared/log/unicorn.stderr.logkullanarak imfile. İçerik, TCP kullanılarak başka bir uzak günlük sunucusuna gönderilir.

Günlük dosyası döndüğünde, rsyslog uzak sunucuya veri göndermeyi durdurur.

Rsyslog'u yeniden yüklemeyi, bir HUP sinyali göndermeyi ve tamamen yeniden başlatmayı denedim, ancak hiçbir şey işe yaramadı.

Aslında işe yaradığını bulmak için tek yolu kirli:

  • hizmeti durdurun, rsyslog istatistik dosyalarını silin ve rsyslog'u yeniden başlatın. Bütün bunlar logrotate dosyamdaki bir postrotate kancasında.
  • kill -9 rsyslog ve yeniden başlatın.

Bunu rsyslog içlerine dokunmadan yapmamın uygun bir yolu var mı ?

Rsyslog dosyası

$ ModYük immark
$ ModLoad imudp
$ ModLoad imtcp
$ ModLoad imuxsock
$ ModLoad imklog
$ ModLoad imfile

$ template WithoutTimeFormat, "[ortam] [% syslogtag%] -% msg%"

$ WorkDirectory / var / spool / rsyslog

$ InputFileName /home/user/my_app/shared/log/unicorn.stderr.log
$ InputFileTag unicorn-stderr
$ InputFileStateFile stat-unicorn-stderr
$ InputFileSeverity bilgisi
$ InputFileFacility local8
$ InputFilePollInterval 1
$ InputFilePersistStateInterval 1
$ InputRunFileMonitor

# Uzak sunucuya iletme
$ syslogtag 'apache-' içeriyorsa @@ my_server: 5000; WithoutTimeFormat
: syslogtag, içerir, "apache-" ~

*. * @@ sunucum: 5000; SyslFormat

Logrotate dosyası

/home/user/my_app/shared/log/*.log {
  günlük
  missingok
  dateext
  30 döndür
  kompres
  notifempty
  uzatma gz
  copytruncate
  640 kullanıcı oluştur
  sharedscripts
  Post-döndür
    (rsyslog && rm / var / spool / rsyslog / stat- * && rsyslog 2'yi başlat> & 1) || doğru
  endscript
}

Bilginize, dosya rsyslog kullanıcısı tarafından okunabilir, sunucuma ulaşılabilir ve aynı döngüde dönmeyen diğer günlük dosyaları düzgün izlenmeye devam eder.

Ubuntu 12.04 kullanıyorum.

Yanıtlar:


8

Sorun aslında logrotattan geliyordu.

Temelde benim yapılandırmamla, tek boynuzlu at çalışıyorum, copytruncatedirektifi kullanmama gerek yok . (burada sorunlara neden olan şey budur)

USR1 - Alt işlemin sahip olduğu tüm günlükleri yeniden açın. Günlük olarak kabul edilenler için bkz. Unicorn :: Util.reopen_logs. Günlük dosyaları, geçerli istek işleninceye kadar yeniden açılmaz, bu nedenle bir istek için birden çok günlük satırı (Rails tarafından yapıldığı gibi) birden çok günlüğe bölünmez.

Bu, bu yapılandırmaya güncellendikten sonra düzgün çalışmaya başladı:

/home/user/my_app/shared/log/*.log {
  daily
  missingok
  dateext
  rotate 30
  compress
  notifempty
  extension gz
  create 640 user user
  sharedscripts

  post-rotate
    # Telling Unicorn to reload files
    test -s /home/user/my_app/shared/pids/unicorn.pid && kill -USR1 "$(cat /home/user/my_app/shared/pids/unicorn.pid)"

    # Reloading rsyslog telling it that files have been rotated
    reload rsyslog 2>&1 || true
  endscript
}

Bunlar dosyanızın doğrudan kopyalarıysa, sorununuzun aslında kullandığınız post-rotate(bir şey değil) postrotateolduğunu düşünüyorum, çünkü sahip olduğunuz orijinal logrotate komut dosyası rsyslog ile iyi çalışmış olmalıdır (postrotate komut dosyası çalışıyorsa ) ...?
mltsy

2
Ben ne zaman hatırlamıyorum, ama değişti post-rotateiçin lastaction. Yorumunuz hala çok mantıklı ve o zaman sorunumu çözmüş olabilir :). Yine de kayıt için copytruncate, ileride kullanmaktan kaçınacağım çünkü yavaş ve dosya tanıtıcılarıyla oynuyor.
Vincent B.

2

Logrotate dosyanız, için giriş dosyanızla /home/user/shared/log/*.logeşleşmeyen bir giriş içeriyor /home/user/my_app/shared/log/unicorn.stderr.log. Bu dizin için bir logrotate girdisi eklemeniz ve içerdiğinden emin olmanız gerekir copytruncate- olduğu gibi, rsyslog geçerli dosyayı yeniden adlandırıyor ve yeni bir dosya oluşturuyor ve imfile, şimdi yeniden adlandırılan dosyanın dosya işleyicisini izlemeye devam ediyor.


Maalesef dosya adı sadece bir yazım hatası. Ancak copytruncate iyi bir nokta olabilir. Sadece bir tanesine bakayım :).
Vincent B.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.