[SQLServer]-MsSQL with ELK on Docker — (Experimental study)

RootFy22
Artisan Brain Academy
2 min readJul 13, 2019

--

สวัสดีครับพี่น้องทุกท่านครับ
หลังจากห่างหายไปนาน ด้วยติดภารกิจงานเดฟ งานวางแผน และงานสอน วันนี้ผมกลับมาแล้วครับ เรื่องมีอยู่ว่า ผมได้มีโอกาสทำการ POC (Proof Of Concept) ว่าหากมีโจทย์ว่า มีระบบฐานข้อมูล SQL Server หรือ ฐานข้อมูลอื่นๆนั้น สามารถที่จะเก็บ Log หรือดึงข้อมูลออกมา เพื่อมาทำระบบแสดงผ่านข้อมูลบนเว็บโดยใช้ ELK (Elastic Search (es), Logstash (ls) and Kibana (kb))

ผมก็เลยไปค้นคว้าหาความรู้จากหลายๆแหล่ง เรามาทำการทดสอบปรับแก้ไข โดยสุดท้ายแล้ว ผมเลือกทีจะทดสอบโดยใช้ docker บนตัวรัน ทั้ง 4 containers คือ

1) SQL Server 2019 CTP 3.1 for Linux ที่เลือกใช้เพราะว่าต้องการเรียนรุ้การทำงาน และติดตั้งค่าต่างๆของ SQL Server เวอร์ชั่นล่าสุด ที่เขาว่ามีประสิทธิ์ภาพไม่แพ้บนวินโดวส์ แต่ ไม่เสีย License Windows นั้นเอง :)

2) ELK เป็น Product stack สำหรับ Enterprise (มีคนบอก) ที่ช่วยจัดการเลือกการตั้งเวลา Job ในการรับข้อมูลจากหลายๆ source (.log, csv, xls ฯลฯ) ได้แล้วนำมาแสดงผลแบบเป็น viusalization format ได้หลายๆแบบ ซึ่งผมใช้ version 7.0.0 (ปัจจุบัน 7.2)

โดยทั้งหมดนี้ผมได้สร้างไฟล์ docker-compose.yml ขึ้นมาแล้วปรับแต่งแค่ดังรูปนี้ครับ

สภาพแวดล้อมในการทดสอบ
- เครื่องคอมพิวเตอร์สำหรับทดสอบคือลง MacOS หรือ Ubuntu 18+
- แรมในเครื่อง 8 GB+
- CPU 4 core+
- ลง Docker
- ลง Docker-compose

วิธีการทดลอง
-
รันคำสั่ง docker-compose u -d
- สร้างฐานข้อมูลชื่อ mydb
- สร้างตารางชื่อ customer
- สร้างข้อมูลทดสอบเข้าไป 1–2 rows ใน customer

ผลการทดลอง
พบว่าข้อมูบจาก customer จะส่งเข้าไปยัง es ซึ่งเราสามารถตรวจสอบจำนวนข้อมูลที่เพิ่มขึ้นได้ทาง kb (http://localhost:5601)

สิ่งที่ต้องแก้ไขและทดสอบต่อไป
-
ข้อมูล customer ที่ถูกส่งเข้าไปใน es จะบวกเพิ่มขึ้นแบบทบต้น คือ ถ้ามีข้อมูล 1 rows ครั้งแรก es จะเก็บ 1 rows วินาทีถัดไปจะเก็บเป็น 2 rows และ n+1 เพื่อไปเรื่อยๆ โดยไม่สนว่าใน es จะมีข้อมูลซ้ำหรือไม่ นั้นคืองานหลักของ es คือรวบรวมข้อมูลมาทำ index เก็บไว้เรื่อยๆ ซึ่ง ต้องหาทางแก้ไขว่าจะเอาเฉพาะข้อมูลใหม่เข้าไปทำอย่างไรดี
- หากต้องการใข้ฐานข้อมูล postgres / mysql / docker losgs ที่เป็นที่นิยมในหมู่ คนส่วนใหญ่นั้น จะมีวิธีการแตกต่างกันอย่างไรหรือไม่
- หากต้องการส่งข้อมูลจาก ls ออกมาเป็นไฟล์ หรือส่งต่อไปที่ระบบอื่นๆผ่าน API จะต้องทำอย่างไรเช่น อยากให้มีการเตือนว่าเกิด deadlock แล้ว ผ่าน Line เป็นต้น

Data flow framework

สามารถดาวโหลดไปศึกษาได้จาก https://github.com/digital-old-school-journey/docker-elk-mssql

ขอบคุณที่อ่านนนะครับ น้อมรับคำติชมครับผมม แล้วผมกันใหม่อีกครั้ง
Happy Coding….

--

--