Su un cluster di oltre 12 centos 5,8 server, ho distribuito logstash usando lo shipper logstash nativo, che rimanda /var/log/*/*.log
a un server logstash centrale.
Abbiamo provato a utilizzare rsyslogd come mittente, ma a causa di un bug nel modulo ImFile di rsyslogd, se l'estremità remota non rispondeva, i log si accumulerebbero in memoria.
Attualmente stiamo usando Redis come meccanismo di trasporto, quindi logstash01 ha redis in esecuzione localmente, associato all'IP della VLAN per questi registri.
Quindi logstash-shipper invia a redis su logstash01. logstash01 invia a Elasticsearch in esecuzione in un processo separato.
Ecco cosa stiamo vedendo. Elasticsearch ha 141 thread bloccati. Stracing mostra il genitore di elasticsearch:
futex(0x7f4ccd1939d0, FUTEX_WAIT, 26374, NULL
Ecco il jstack di elasticsearch
Quindi .. La scorsa notte, alcuni dei server web (i cui registri sono corretti dal logstash) sono impazziti, con medie di carico superiori a 500.
Su logstash01, c'è questo
Dec 19 00:44:45 logstash01 kernel: [736965.925863] Killed process 23429 (redis-server) total-vm:5493112kB, anon-rss:4248840kB, file-rss:108kB
Quindi OOM-killer ha ucciso redis-server, il che significava che i registri si accumulavano in memoria sui server che stavano spedendo roba .. Il che in qualche modo significa che Apache ha una svolta. (Francamente, non sono sicuro di come, presumo solo che stia seguendo il registro) ..
Questa è la mia teoria di come si sono svolti gli eventi:
- Abbiamo avuto un picco di traffico.
- È stata generata un'enorme quantità di registri.
- Questi si sono accumulati in Redis, poiché logstash / elasticsearch sembra essere in grado di gestire solo 300-400 nuovi eventi / secondo.
- Redis si era riempito completamente fino al punto in cui l'assassino di OOM lo aveva massacrato senza senso.
- Redis smette di accettare nuovi articoli.
- Gli oggetti ora iniziano ad accumularsi sul lato host remoti.
- Tutto va dadi . Apache smette di accettare richieste. (Perché?).
Le domande sono queste:
Perché apache impazzisce se c'è solo qualcosa che fa la coda al suo registro. È forse la cosa che fa la coda a bloccare l'apache dalla scrittura?
Esiste un modo sano per rendere elasticsearch più veloce / migliore / resiliente?
C'è un modo sano per rendere i redis resilienti e non morire a causa della loro OOM
C'è un difetto fondamentale nel modo in cui ho impostato tutto o tutti hanno questo problema?
-- MODIFICARE --
Alcune specifiche per @lusis.
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