En un clúster de más de 12 centos 5.8 servidores, implementé logstash utilizando el cargador de logstash nativo, que envía de /var/log/*/*.log
vuelta a un servidor central de logstash.
Intentamos usar rsyslogd como el remitente, pero debido a un error en el módulo ImFile de rsyslogd, si el extremo remoto no respondía, los registros se acumularían en la memoria.
Actualmente estamos utilizando Redis como mecanismo de transporte, por lo que logstash01 tiene redis ejecutándose localmente, vinculado a la IP para la VLAN para estos registros.
Entonces logstash-shipper envía a redis en logstash01. logstash01 envía a Elasticsearch ejecutándose en un proceso separado.
Esto es lo que estamos viendo. Elasticsearch tiene 141 hilos bloqueados. Enderezar el padre elástico de búsqueda muestra:
futex(0x7f4ccd1939d0, FUTEX_WAIT, 26374, NULL
Aquí está el jstack de elasticsearch
Aquí está el jstack de logstash
Entonces ... Anoche, algunos de los servidores web (cuyos registros son seguidos por logstash) se volvieron locos, con promedios de carga superiores a 500.
En logstash01, hay esto
Dec 19 00:44:45 logstash01 kernel: [736965.925863] Killed process 23429 (redis-server) total-vm:5493112kB, anon-rss:4248840kB, file-rss:108kB
Así OOM-asesino mató a Redis-servidor, que a continuación, los registros destinados apilados en la memoria en los servidores de los que estaban entregando cosas .. ¿Qué de alguna manera significa que Apache consigue sus bragas en un giro. (Francamente, no estoy seguro de cómo, solo asumo que está siguiendo el registro) ...
Esta es mi teoría de cómo se desarrollaron los eventos:
- Tuvimos un pico de tráfico.
- Se generó una inmensa cantidad de registros.
- Estos se acumularon en Redis, ya que logstash / elasticsearch solo parece ser capaz de manejar 300-400 nuevos eventos / segundo.
- Redis se había llenado por completo hasta el punto en que el asesino de OOM lo mató sin sentido.
- Redis deja de aceptar nuevos artículos.
- Los elementos ahora comienzan a acumularse en el lado de los hosts remotos.
- Todo se vuelve loco . Apache deja de aceptar solicitudes. (¿Por qué?).
Las preguntas son estas:
¿Por qué Apache se vuelve loco si hay algo detrás de su registro? ¿Es que lo que sigue bloquea a Apache de la escritura?
¿Hay alguna forma sensata de hacer que la búsqueda elástica sea más rápida / mejor / resistente?
¿Hay alguna forma sensata de hacer que el redis sea resistente y no morir por ser OOM?
¿Existe una falla fundamental en la forma en que lo configuré todo, o todos tienen este problema?
- EDITAR -
Algunas especificaciones para @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