ในคลัสเตอร์ที่มีเซิร์ฟเวอร์มากกว่า 12 centos 5.8 ฉันปรับใช้ logstash โดยใช้ native logstash shipper ซึ่งส่ง/var/log/*/*.log
กลับไปยังเซิร์ฟเวอร์ logstash ส่วนกลาง
เราพยายามใช้ rsyslogd เป็นผู้ส่ง แต่เนื่องจากข้อผิดพลาดในโมดูล ImFile ของ rsyslogd หากปลายทางระยะไกลไม่ตอบกลับบันทึกจะซ้อนกันในหน่วยความจำ
ขณะนี้เรากำลังใช้ Redis เป็นกลไกการขนส่งดังนั้น logstash01 จึงมี redis ทำงานอยู่ภายในเครื่องซึ่งเชื่อมโยงกับ IP สำหรับ VLAN สำหรับบันทึกเหล่านี้
ดังนั้น logstash-shipper ส่งไปยัง redis เมื่อ logstash01 logstash01 ส่งไปยัง Elasticsearch ที่ทำงานในกระบวนการแยกต่างหาก
นี่คือสิ่งที่เราเห็น Elasticsearch มี 141 กระทู้ที่ถูกบล็อก การรัดพาเรนต์ของ ElasticSearch แสดง:
futex(0x7f4ccd1939d0, FUTEX_WAIT, 26374, NULL
นี่คือ jstack จาก elasticsearch
ดังนั้น .. เมื่อคืนที่ผ่านมาผู้ให้บริการเว็บบางคน (บันทึกของพวกเขาถูกปรับแต่งโดย logstash) ไปที่ถั่วโดยมีค่าเฉลี่ยการโหลดมากกว่า 500
ใน logstash01 มีสิ่งนี้
Dec 19 00:44:45 logstash01 kernel: [736965.925863] Killed process 23429 (redis-server) total-vm:5493112kB, anon-rss:4248840kB, file-rss:108kB
ดังนั้น OOM ฆาตกรฆ่า Redis เซิร์ฟเวอร์ซึ่งบันทึกแล้วความหมายซ้อนขึ้นในหน่วยความจำบนเซิร์ฟเวอร์ที่มีการจัดส่งสิ่ง .. ซึ่งอย่างใดหมายความว่า Apache ได้รับกางเกงในบิด (ตรงไปตรงมาฉันไม่แน่ใจว่าฉันแค่คิดว่ามันปรับแต่งบันทึก)
นี่คือทฤษฎีของฉันว่าเหตุการณ์ที่เกิดขึ้น:
- เรามีการจราจรติดขัด
- มีการสร้างบันทึกจำนวนมหาศาล
- สิ่งเหล่านี้ซ้อนกันใน Redis เนื่องจาก logstash / elasticsearch ดูเหมือนว่าจะสามารถจัดการเหตุการณ์ใหม่ได้ 300-400 ครั้ง / วินาที
- Redis เติมเต็มจนถึงจุดที่นักฆ่า OOM ฆ่ามันอย่างไร้สติ
- Redis หยุดรับรายการใหม่
- ตอนนี้ไอเท็มเริ่มซ้อนกันบนฝั่งโฮสต์รีโมต
- ทุกอย่างเป็นไปถั่ว Apache หยุดรับคำขอ (ทำไม?).
คำถามเหล่านี้:
ทำไมอาปาเช่จึงบ้าคลั่งถ้ามีบางสิ่งที่ปรับแต่งบันทึกของมัน มันเป็นสิ่งที่ tailing มันป้องกัน apache จากการเขียน?
มีวิธีที่มีเหตุผลเพื่อทำให้ ElasticSearch เร็วขึ้น / ดีขึ้น / ยืดหยุ่นหรือไม่?
มีวิธีที่มีเหตุผลที่จะทำให้ Redis มีความยืดหยุ่นและไม่ตายเพราะเป็น OOM'd
มีข้อบกพร่องพื้นฐานในวิธีที่ฉันตั้งไว้ทั้งหมดหรือทุกคนมีปัญหานี้หรือไม่?
- แก้ไข -
รายละเอียดบางอย่างสำหรับ @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