12'den fazla centos 5.8 sunucusundan oluşan bir kümede, logstash'ı /var/log/*/*.log
merkezi bir logstash sunucusuna geri gönderen yerel logstash göndericisini kullanarak dağıttım.
Gönderici olarak rsyslogd kullanmayı denedik, ancak rsyslogd'ın ImFile modülündeki bir hata nedeniyle, uzak uç cevap vermezse, günlükler bellekte birikir.
Şu anda taşıma mekanizması olarak Redis kullanıyoruz, bu nedenle logstash01 yerel olarak çalışan redislere sahip ve bu günlükler için VLAN için IP'ye bağlı.
Yani logstash-nakliyeci logstash01'deki yeniden gönderime gönderir. logstash01, ayrı bir işlemde çalışan Elasticsearch'e gönderir.
İşte gördüğümüz şey. Elasticsearch adlı kullanıcı 141 adet konuya sahip. Elasticsearch üst öğesinin izlenmesi şunları gösterir:
futex(0x7f4ccd1939d0, FUTEX_WAIT, 26374, NULL
Dün gece, (günlükleri logtastas tarafından kuyruklanan) bazı web sunucuları kuruydu ve yük ortalamaları 500'ün üzerinde.
Logstash01 üzerinde bu var
Dec 19 00:44:45 logstash01 kernel: [736965.925863] Killed process 23429 (redis-server) total-vm:5493112kB, anon-rss:4248840kB, file-rss:108kB
OOM katili sonra geliyordu günlükleri .. şeyler nakliye Hangi edildi sunucularında bellekte yığılı Redis-sunucu, öldürülen Yani nasılsa apache bir büküm kendi kısa pantolon aldığını demektir. (Açıkçası, nasıl olduğundan emin değilim, sadece kütüğü izlediğini varsayıyorum) ..
Olaylarımın nasıl geliştiğine dair teorim budur:
- Trafik ani yükseldik.
- Çok büyük miktarda günlük oluşturuldu.
- Bunlar, logstash / elasticsearch'ün sadece 300-400 yeni olayla başa çıkabildiği için Redis'te birikti.
- Redis tamamen OOM-katilinin anlamsızca katledildiği noktaya kadar dolmuştu.
- Redis, yeni öğeleri kabul etmeyi durdurur.
- Öğeler artık uzak ana bilgisayarlar tarafında birikmeye başlıyor.
- Herşey deliriyor . Apache istekleri kabul etmeyi durdurur. (Neden?).
Sorular:
Günlüğünde bir şey varsa neden apache çıldırır? Onu takip eden şey apache'nin yazmasını engelliyor mu?
Elastics aramasını daha hızlı / daha iyi / esnek hale getirmenin akılcı bir yolu var mı?
Redis'i dayanıklı hale getirmenin ve OOM olduğu için ölmemenin akılcı bir yolu var mı?
Her şeyi kurma şeklimde temel bir kusur var mı, yoksa herkesin bu sorunu var mı?
-- DÜZENLE --
@Lusis için bazı özellikler.
admin@log01:/etc/init$ free -m
total used free shared buffers cached
Mem: 7986 6041 1944 0 743 1157
-/+ buffers/cache: 4140 3845
Swap: 3813 3628 185
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 5.3G 13G 31% /
udev 3.9G 4.0K 3.9G 1% /dev
tmpfs 1.6G 240K 1.6G 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 3.9G 0 3.9G 0% /run/shm
/dev/sda1 90M 72M 14M 85% /boot
/dev/mapper/data-disk 471G 1.2G 469G 1% /data
/dev/sda2 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda1 on /boot type ext2 (rw)
/dev/mapper/data-disk on /data type ext3 (rw)
/data/elasticsearch on /var/lib/elasticsearch type none (rw,bind)
log01:/etc/init$ top
top - 14:12:20 up 18 days, 21:59, 2 users, load average: 0.20, 0.35, 0.40
Tasks: 103 total, 1 running, 102 sleeping, 0 stopped, 0 zombie
Cpu0 : 3.0%us, 1.0%sy, 0.0%ni, 95.7%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu1 : 12.0%us, 1.0%sy, 0.0%ni, 86.6%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu2 : 4.7%us, 0.3%sy, 0.0%ni, 94.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 5.6%us, 1.3%sy, 0.0%ni, 93.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 5.3%us, 1.3%sy, 0.0%ni, 93.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 6.4%us, 1.0%sy, 0.0%ni, 92.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Mem: 8178120k total, 6159036k used, 2019084k free, 761780k buffers