การทำ Proactive Monitor ด้วยวิธีการ Anomaly detection โดยใช้ ZABBIX

Softnix
Softnix
Published in
3 min readMar 2, 2018
ภาพจาก https://www.zabbix.com/features#problem_detection

ปัจจุบันเรา Monitor อุปกรณ์ Server และอุปกรณ์เครือข่าย เพื่อวัตถุประสงค์สูงสุดคือเพื่อให้ทราบและแจ้งเตือนเราทันทีเมื่อระบบนั้นไม่ทำงานหรือมีปัญหาเกิดขึ้น แต่ท่านทราบแน่นอนใช่ไหมครับว่า นั้นคือการแจ้งเตือนเมื่อพบปัญหาแล้ว เกิดความเสียหายแล้ว ไม่มากก็น้อย ซึ่งสิ่งที่ท้าทายสำหรับคนที่เป็น IT Admin คือ จะทำอย่างไรจะให้แจ้งเตือนให้เราทราบก่อนปัญหาที่จะเกิด นั้นคือสิ่งที่หลายๆคนต้องการแน่นอนใช่ไหมครับ แต่มันทำยังไงล่ะ เน้นถูกๆด้วยนะ :)

วันนี้เรา Softnix ซึ่งเป็น Certified Partner ของ ZABBIX จะนำเสนอวิธีการเซ็ตค่าเพื่อประยุกต์ใช้งาน ให้ Zabbix ทำการ alert ก่อนเมื่อพบเหตุการณ์ที่คาดว่าจะผิดปกติ เราเรียกเหตุการณ์ที่คาดว่าจะผิดปกติ นั้นว่า Anomaly Detection

Anomaly detection คือการตรวจจับเหตุการณ์ที่คาดว่าจะผิดปกติ เป็นวิธีการหนึ่งที่เหมาะสมสำหรับการนำมาประยุกต์ใช้ในการตรวจจับเหตุการณ์ที่คาดว่าจะผิดปกติ เพื่อให้เราทราบก่อนที่ปัญหาจะเกิดที่เรียกว่าการทำงานในเชิง Proactive Monitor นั้นเอง

ก่อนจะอธิบายว่า Zabbix ทำงานอย่างไร ขอยกตัวอย่างคำถามเพื่อให้เราเข้าใจมากยิ่งขึ้นก่อน 2 คำถาม คือ

คำถามที่ 1 เราทำได้อยู่แล้วนี่ ง่ายนิดเดียวเอง แค่ตั้งค่า Trigger ใน Zabbix ว่า ถ้าค่าที่เราจับ เท่ากับค่า xx ให้ alert เลย ทันที

คำตอบ แล้วเราจะตั้งค่า Trigger ที่ว่านี้เท่าไหร่ดีล่ะ ถึงจะเหมาะสม แถมท่านต้องได้ค่า Alert ที่ผิดๆเป็น False Positive แน่นอน คล้ายภาพนี้ ถ้าคุณตั้งค่าว่า ถ้าค่าเกิน 7.5 ให้ alert จากภาพล่าง คง alert ไม่ต่ำกว่า 5 ครั้งแน่นอน

ภาพจาก https://datascience.stackexchange.com/questions/6547/open-source-anomaly-detection-in-python

คำถามที่ 2 เราทำได้อยู่แล้วนี่ ง่ายนิดเดียวเอง โดยการตั้งค่า Trigger ใน Zabbix ว่า ถ้าค่าที่เราจับ เท่ากับค่า xx นาน 10 นาที ให้ Alert เลย แสดงว่ามีปัญหาแน่นอน

คำตอบ คำตอบอยู่ในคำถามแล้วครับ คือ มันมีปัญหาเกิดขึ้นแล้ว เราถึงจะได้รับแจ้งเตือน ก็ยังไม่ Proactive. อยู่ดีตามวัตถุประสงค์ แล้วเรายังไม่รู้ Capability ของระบบเราอีกว่า เท่าไหร่จะมีปัญหา

จากคำถามข้อที่ 2 ดังนั้น Zabbix จึงใช้ค่าในอดีตมาเปรียบเทียบเพื่อให้ทราบว่า สถานการณ์ปกติใช้เท่าไหร่ โดยเอาค่าเฉลี่ยเป็นเกณฑ์ แล้วถ้าค่าเฉลี่ยปัจจุบันเปลี่ยนไปมากแสดงว่ามีความผิดปกติแน่นอนหรือคาดว่าจะผิดปกติ Anomaly Event นั้นเอง

Anomaly Detection ที่ Zabbix สามารถทำได้โดยง่าย ใช้หลักการง่ายๆ คือ การนำค่าเฉลี่ยในช่วงระยะเวลาปัจจุบัน ไปเทียบกับค่าเฉลี่ยในช่วงเวลาเดียวกันย้อนหลัง เช่น ค่าเฉลี่ยย้อนหลัง 1 ชั่วโมงในเวลาปัจจุบันคือ 10 เทียบกับค่าเฉลี่ย 1 ชั่วโมงเมื่อ 7 วันที่แล้วว่าต่างกันมากน้อยเท่าไหร่ โดยปกติจะใช้ 2 เท่าเป็นเกณฑ์ นั้นก็คือ ถ้ามากกว่า 20 แสดงว่ามีความผิดปกติเกิดขึ้นแน่นอน

หลักการนี้ใช้สมมุติฐานที่ว่า ค่าเฉลี่ยต่างมากกว่า 2 เท่า แสดงว่าระบบมี Change ใดๆเกิดขึ้นแน่นอน เช่น มี Traffic สูงมากผิดปกติ หรือ CPU Load Average สูงผิดปกติ หรืออัตราการ Harddisk Growth มากกว่าปกติ เพื่อที่เราจะต้องเข้าไปวิเคราะห์อีกครั้งว่าปัญหาเกิดจากอะไร ก่อนที่ปัญหานั้นจะเกิด

คราวนี้มาดูวิธีการเซ็ตค่าบน ZABBIX ว่าทำยังไง

จากตัวอย่างจะเซ็ตค่าบน Template Active Windows OS โดยจับค่า CPU Load Average ที่ 1 ชั่วโมง

ไปที่เมนู Configuration > Templates

ที่ Active Windows OS คลิ๊กที่ Triggers

สร้าง Trigger ขึ้นมาใหม่ แล้วระบุดังภาพ

ในช่วง Expression อธิบายดังนี้

{Active OS Windows:system.cpu.load[percpu,avg1].avg(1h)}> 2* {Active OS Windows:system.cpu.load[percpu,avg1].avg(1h,7d)}

ใน Template ชื่อ Active OS Windows ค่า Item ชื่อ system.cpu.load โดยเอาค่า load average ที่ 1 นาที ต่อ CPU core โดยเอาค่าเฉลี่ย (avg) ที่ 1 houre ถ้ามากกว่า 2 เท่า ของค่าเดียวกัน แต่ 7วันที่แล้ว ถ้าเป็นจริง (TRUE) ให้ Trigger ทำงาน (Activate) นั้นเอง

สรุป

วิธีการตรวจจับ Anomaly Event ลักษณะนี้สามารถนำไปใช้ได้กับค่า monitor ต่างๆในเชิงตัวเลข ที่เกิดจากการใช้งานหรือที่เราเรียกในภาษา Network Monitoring ว่า ค่า Utilization เช่น CPU Load, Disk Read/Write Ratio, Traffic In/Out, Memory Usage, Disk Usage เป็นต้นได้ครับ และสุดท้ายในบางสถานการณ์อาจจะใช้ไม่ได้เสมอไป แต่หลักการพื้นฐานคือ น่าจะมี Change ใดๆเกิดขึ้นในระบบแน่นอน เพราะมันไม่ได้ค่าเช่นเดิมในอดีต ซึ่งปัญหา Change ต่างๆ ล้วนทำให้เกิด Incident เกิดขึ้นมากมายในโลกของ IT Operation หัวอกชาว Admin ที่ต้องมาทำงานวันจันทร์หรือนอนๆอยู่ต้องผวารุกขึ้นมากลางดึก มาแก้ไขปัญหา……ใครเป็นบ้าง ยกมือขึ้น :)

--

--