หลังจากที่อธิบายเกี่ยวกับการสร้าง Dashboard ใน Kibana ไปแล้ว
ซึ่งมีการพูดถึง ELK stack นิดหน่อย
โดยมันใช้สำหรับการจัดการข้อมูลต่างๆ ด้วย Logstash
ข้อมูลที่จะนำมาใช้งานก็คือ log message จากระบบ
ที่เขียน log message ด้วย log4j มาจากระบบงานที่พัฒนาด้วยภาษา Java
มาดูกันว่าสามารถนำ ELK stack มาใช้อย่างไรกัน

เริ่มต้นด้วยรูปแสดงโครงสร้างการทำงาน

Screen Shot 2557-10-16 at 1.50.38 PM

และข้อมูลของ log message มีรูปแบบดังนี้

มาทำความรู้จักกับ Logstash กันนิดหน่อย

Logstash เป็นเครื่องมือสำหรับจัดการพวก log และ event ต่างๆ ที่เกิดขึ้นมา
สามารถใช้ Logstash เพื่อทำการสะสม กรอง และ จัดเก็บข้อมูล เพื่อใช้งานต่อไป
ตัวอย่างเช่น การค้นหาข้อมูล

ส่วนการทำงานของ Logstash ประกอบไปด้วย 4 ส่วน คือ

  1. Input คือ ข้อมูลเข้าต่างๆ หรือ source data  จากตัวอย่างคือ ไฟล์จาก log4j
  2. Codec คือ การเข้ารหัสข้อมูล จากตัวอย่างไม่ได้ใช้งาน
  3. Filter คือ การกรองข้อมูลให้อยู่ในรูปแบบที่ต้องการ จากตัวอย่างทำการกรองโดยใช้ multiple line
  4. Output คือ ข้อมูลออกในรูปแบบต่างๆ หรือ ที่จัดเก็บผลลัพธ์ต่างๆ จากตัวอย่างจะเก็บผลลัพธ์ไปไว้ที่ Elasticsearch

รูปแสดงส่วนการทำงานหลัก

Screen Shot 2557-10-16 at 2.03.11 PM

เริ่มต้นใช้งาน Logstash กันดีกว่า

1. ทำการ Download Logstash มาก่อน ซึ่งใช้งานเวอร์ชั่น 1.4.2
จากนั้นทำการ extract เท่านี้ก็จะใช้งานได้ล่ะ

2. ทำการสร้างไฟล์ configuration สำหรับจัดการข้อมูล log ของเรา
ไฟล์ชื่อว่า test.yml โดยประกอบไปด้วย 3 ส่วน คือ

  1. Input ทำการอ่านข้อมูลจากไฟล์
  2. Filter ทำการกรองข้อมูลให้อยู่ในรูปแบบที่ต้องการ
  3. Output ทำการเก็บผลลัพธ์จากการกรอง ไว้ใน Elasticsearch เพื่อใช้ค้นหาแบบง่ายๆ ต่อไป

จากข้อมูล log message พบว่า มีปัญหาดังนี้

  • ข้อมูลที่แสดง ERROR นั้นจะมีข้อมูล exception ต่างๆ ออกมามากมาย ถ้าเก็บแบบตรงๆ จะเก็บข้อมูลผิด เพราะว่าโดยค่าปกติ 1 message ต่อ 1 บรรทัด
  • ข้อมูล 1 message ที่เราต้องการต้องขึ้นต้นบรรทัดด้วย [XXXXX] เสมอ

ปัญหาดังกล่าวสามารถแก้ไขด้วยการใช้งาน filter โดยสามารถเขียน configuration ได้ดังนี้

ไฟล์ test.yml

คำอธิบาย

  • ในส่วนของ input ทำการเพิ่ม field ใหม่เข้าไป คือ host เพื่อกำหนด ip ของเครื่องที่เก็บหรือสร้าง log เพื่อใช้ในการค้นหาต่อไป
  • ในส่วนของ filter จะใช้งาน filter ชื่อว่า multipleline โดยกำหนด pattern ให้ขึ้นต้นด้วย [XXXX] เสมอ
  • ในส่วนของ output กำหนดให้ไปเก็บใน Elasticsearch โดยไปเก็บใน cluster ชื่อว่า elasticsearch

3. ทำการ Start agent ของ Elasticsearch เพื่อให้ monitoring log message 
ด้วยคำสั่ง

$ cd logstash-1.4.2
$ ./bin/logstash agent -f /<your path>/test.yml

ถ้าไม่มี error message อะไร แสดงว่า Logstash agent สามารถทำงานได้ปกติ

4. ทำการแก้ไขไฟล์ log message จากตัวอย่างแล้วบันทึก
ให้ทำการตรวจสอบข้อมูลใน Elasticsearch จะพบว่ามีข้อมูลเข้ามาดังรูป

Screen Shot 2557-10-16 at 2.24.34 PM

5. จากนั้นทำการสร้าง Dashboard เพื่อแสดง log message ที่อยู่ใน Elasticsearch ด้วย Kibana
ใน Logstash นั้นจะมี Kibana มาให้อยู่แล้ว
ทำการ Start server ของ Kibana ด้วยคำสั่งดังนี้

$ cd logstash-1.4.2
$ ./bin/logstash web

แล้วเข้าใช้งานผ่าน URL=http://localhost:9292
จะพบว่ามันมี Dashboard ของ Logstash มาให้แล้ว
ดังนั้นให้เลือกใช้เลย และบันทึกเก็บไว้
โดย Dashboard สำหรับ Logstash จะมีหน้าตาประมาณนี้

Screen Shot 2557-10-16 at 2.28.46 PM

และสามารถดูรายละเอียดของ log message ได้ จะสังเกตได้ว่า Error message นั้นเราสามารถทำให้มันอยู่ใน 1 message ได้นะ

Screen Shot 2557-10-16 at 2.29.48 PM

เพียงเท่านี้ ก็สามารถนำข้อมูล log message ที่สร้างด้วย log4j
มาแสดงผลอยู่ในรูปแบบสวยงาม
สามารถทำการค้นหาปัญหาต่างๆ ที่ต้องการได้อย่างสะดวกและง่ายดาย
ไม่ต้องไปนั่ง tail หรือ grep หรือค้นหาข้อมูลจากไฟล์อีกต่อไปแล้วนะครับ