ลองใช้งาน ELK Stack ด้วย Docker Compose

เพิ่งเห็นข่าวว่าhttps://www.elastic.co/ ออกเวอร์ชันใหม่ของ Elasticsearch, Logstash และ Kibana เลยมาเขียนตัวอย่างการติดตั้ง ELK Stack ด้วย Docker Compose เพื่อเป็นแนวทางให้กับใครที่จะลองศึกษาเรื่องนี้

สำหรับ Docker Compose เป็นเครื่องมือสำหรับสร้าง Docker Orchestration ตัวหนึ่งที่นิยมใช้สำหรับการแชร์สภาพแวดล้อมการทำงานกันในทีม ช่วยให้นักพัฒนาไม่ต้องพะวงเรื่องการตั้งค่าเซิร์ฟเวอร์หรือ dependencies ที่ต้องใช้มานักเพียงแค่รันด้วย Docker Compose ก็พร้อมสำหรับการทำงานต่อได้ทันที ส่วนข้อเสียคือมันก็ใช้ resources ในการรันอยู่พอสมควร…

การติดตั้ง Docker ยุคนี้ค่อนข้างสะดวกมากแล้วสำหรับ macOS และ Linux เข้าไปที่ https://www.docker.com/ จัดการดาวน์โหลดและติดตั้งให้เรียบร้อย โดย Docker Compose จะติดตั้งมาพร้อมกันโดยอัตโนมัติ

ตัวอย่างไฟล์​ docker-compose.yml

บรรทัดแรกสุดจะเป็นการประกาศเวอร์ชันของ​ Docker Compose ซึ่งเวอร์ชัน 2 เป็นเวอร์ชันล่าสุด และส่วนของ services จะเป็นรายการ containers ที่เราต้องการรันโดยที่ property ต่าง ๆ จะเหมือนกับ CLI arguments เวลาเราใช้คำสั่ง docker run สามารถดูเพิ่มเติมได้ที่ https://docs.docker.com/compose/compose-file/

มาดูตัวแรก elasticsearch คือฐานข้อมูลที่รองรับการทำ Full-Text Search ซึ่งเราจะใช้ในการเก็บข้อมูล logs จาก Logstash และ query มาแสดงผลด้วย Kibana การ query ใน Elasticsearch จะผ่าน RESTful API และผลลัพธ์ที่ได้จะออกมาในรูปของ JSON แบบนี้

$ curl -XGET http://localhost:9200/logstash-*
{
"logstash-2016.10.31": {
"aliases": {},
"mappings": {
...
}
}
}

ส่วนต่อมาคือ logstash นี้คือ Log Parser ความสามารถตั้งแต่อ่านไฟล์ syslog และ parse ข้อมูลตาม pattern ไปจนถึงการรับข้อมูลจาก Standard Input/Ouput ได้ตรง ๆ และตัวอย่างนี้ก็ใช้หลักการอ่านไฟล์​ log และแปลงเป็น JSON ก่อนจะส่งเข้าไปเก็บที่ Elasticsearch

ตัวอย่างไฟล์​ logstash.conf

สุดท้าย kibana นี้คือส่วนของ UI สำหรับแสดงผล ซึ่งไม่เพียงแค่ใช้สำหรับแสดง logs เท่านั้นยังสามารถทำ Virtualization ต่าง ๆ ที่ต้องการเพื่อใช้สำหรับ mornitoring ระบบได้อีกด้วย

ตัวอย่างหน้าสำหรับกำหนด Index Patterns ของ Kibana

Index Patterns

เนื่องจาก Kibana จะแสดงผลข้อมูลตามเวลาที่เรากำหนดดังนั้นจึงจำเป็นต้องกำหนดฟิลด์ที่เป็น timestamp ด้วยเสมอในการอ่านอินเด็กซ์


ตัวอย่างของบล็อกนี้อยู่ที่ https://github.com/nomkhonwaan/example-elk-stack โดยมีโปรแกรมสำหรับสร้าง logs จากการเรียกไปยังเว็บไซต์ http://httpbin.org/get เก็บเวลาที่ใช้ตั้งแต่เรียกจนได้ผลลัพธ์ log ลงไฟล์

เริ่มต้นจาก clone ด้วยคำสั่ง

$ git clone https://github.com/nomkhonwaan/example-elk-stack.git

จากนั้นรันด้วยคำสั่ง

$ cd /path/to/example-elk-stack
$ docker-compose up

กรณีที่ไม่เคยรันมาก่อน Docker จะทำการ pull images ก่อนอาจใช้เวลาสักพักขึ้นกับความเร็วอินเตอร์เน็ตครับ จากนั้นให้เปิดบราวเซอร์แล้วเข้าไปที่ http://localhost:5601 ก็จะเจอกับ Kibana

เนื่องจากตัวอย่างมีโปรแกรมที่ใช้สร้าง logs มาด้วยอยู่แล้วแค่ตั้งค่าอินเด็กซ์ก็พร้อมใช้งานได้ทันทีครับ หลังจากลองเล่นจนพอใจก็สามารถใช้คำสั่ง docker-compose down เพื่อลบ containers ทั้งหมดที่สร้างไว้

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.