สำหรับผู้เริ่มต้น (Beginner Guide)

วิธีเก็บ Log จาก Mikrotik
ลงฐานข้อมูล MongoDB

คู่มือฉบับจับมือทำ ทีละขั้นตอน เปลี่ยนการดู Log แบบเดิมๆ ให้เป็นระบบ Centralized Log ที่ค้นหาง่ายและปลอดภัย บน Ubuntu Server

บทนำ: ทำไมต้องทำสิ่งนี้?

ปกติ Log (บันทึกเหตุการณ์) ของ Mikrotik จะเก็บไว้ใน RAM ของตัว Router เอง ซึ่งมีข้อเสียคือ:

  • พื้นที่จำกัด: เก็บได้ไม่กี่บรรทัด ข้อมูลเก่าจะหายไปเร็วมาก
  • หายเมื่อไฟดับ: ถ้า Router รีบูต Log ทั้งหมดจะหายไปทันที
  • ค้นหายาก: การไล่ดู text file ธรรมดาทำได้ยาก

ทางแก้คือ: ส่ง Log ออกมาเก็บที่เครื่อง Server (Ubuntu) และใช้ syslog-ng เป็นตัวรับและจัดเรียงข้อมูลลง MongoDB (ฐานข้อมูล)

Mikrotik UDP 514
Syslog-NG
Ubuntu Server Log Processing
MongoDB JSON Storage

1. ติดตั้งซอฟต์แวร์บน Ubuntu

เปิด Terminal บน Ubuntu Server ของคุณ แล้วพิมพ์คำสั่งตามลำดับ

1.1 อัปเดตรายการซอฟต์แวร์ให้ล่าสุด
sudo apt update
1.2 ติดตั้ง syslog-ng และตัวเชื่อมต่อ MongoDB

เราจำเป็นต้องลง syslog-ng-mod-mongodb เพิ่มเติม เพื่อให้ syslog-ng รู้จักวิธีคุยกับ MongoDB ครับ

sudo apt install syslog-ng syslog-ng-mod-mongodb -y
1.3 (ถ้ายังไม่มี) ติดตั้ง MongoDB Server
sudo apt install mongodb-server -y
# ตรวจสอบว่า MongoDB ทำงานไหม
sudo systemctl status mongodb

ถ้าขึ้นคำว่า active (running) สีเขียว แสดงว่าฐานข้อมูลพร้อมใช้งานครับ กด q เพื่อออกจากหน้านั้น

2. ตั้งค่า Mikrotik

เราต้องสั่งให้ Mikrotik "โยน" ข้อมูล Log ออกมาหา Server ของเราครับ (Remote Logging)

ข้อมูลที่ต้องใช้:

IP Address ของเครื่อง Ubuntu: 192.168.1.10 (สมมติ)

* กรุณาเช็ค IP จริงของเครื่อง Server คุณด้วยคำสั่ง ip a

เปิด New Terminal ใน Winbox แล้วก๊อปปี้คำสั่งนี้ไปวาง (อย่าลืมแก้ IP):

# 1. สร้างปลายทาง (Action) ชื่อ syslog-server
/system logging action
add name=syslog-server remote=192.168.1.10 target=remote remote-port=514

# 2. บอกให้ส่ง Log ประเภทต่างๆ ไปยังปลายทางที่สร้างไว้
/system logging
add action=syslog-server topics=info
add action=syslog-server topics=error
add action=syslog-server topics=critical
Logging Action <syslog-server>
Ready

3. เตรียม MongoDB

สร้างฐานข้อมูล (Database) และคอลเลกชัน (Collection) เพื่อรองรับข้อมูล

# เข้าสู่หน้าจอสั่งงาน MongoDB
mongo

# สั่งใช้ฐานข้อมูลชื่อ syslog_db (ถ้าไม่มีมันจะสร้างให้เอง)
use syslog_db

# สร้างที่เก็บข้อมูลชื่อ logs
db.createCollection("logs")

# ออกจากโปรแกรม
exit

4. คอนฟิก syslog-ng (สำคัญมาก)

ไฟล์คอนฟิกเปรียบเสมือน "แผนที่" บอก syslog-ng ว่าให้รับของจากไหน แล้วเอาไปทิ้งที่ไหน

แก้ไขไฟล์ด้วยคำสั่ง: sudo nano /etc/syslog-ng/syslog-ng.conf

คำอธิบายโค้ด

  • source s_network: เปิดรับข้อมูลผ่าน UDP พอร์ต 514 (มาตรฐาน Syslog)
  • destination d_mongodb: บอกวิธีเชื่อมต่อ MongoDB และการจับคู่ฟิลด์ข้อมูล
  • log { ... }: คำสั่งให้เชื่อม Source เข้ากับ Destination

ให้ Copy โค้ดนี้ไปวางต่อท้ายไฟล์เดิมได้เลยครับ:

# -------------------------------------------
# เริ่มต้น Config สำหรับ Mikrotik to MongoDB
# -------------------------------------------

# 1. แหล่งที่มา (Source): รับข้อมูลจาก Network (UDP/514)
source s_network {
    network(
        transport("udp")
        port(514)
    );
};

# 2. ปลายทาง (Destination): ส่งลง MongoDB
destination d_mongodb {
    mongodb(
        servers("127.0.0.1:27017")     # IP ของ MongoDB (localhost)
        database("syslog_db")          # ชื่อ Database ที่เราสร้าง
        collection("logs")             # ชื่อ Collection
        
        # ส่วนสำคัญ: การ mapping ข้อมูล
        value-pairs(
            scope("dot-nv" "pair-list" "sdata") 
            # dot-nv จะช่วยแตกข้อมูล message ให้อัตโนมัติ
        )
    );
};

# 3. การจับคู่ (Log Path): เอาของจาก 1 ไปใส่ 2
log {
    source(s_network);
    destination(d_mongodb);
};

เมื่อแก้เสร็จแล้ว ให้กด Ctrl+O เพื่อบันทึก, Enter เพื่อยืนยัน, และ Ctrl+X เพื่อออก

จากนั้นรีสตาร์ทโปรแกรมเพื่อให้ค่าใหม่ทำงาน:

sudo systemctl restart syslog-ng

5. ตรวจสอบ & แก้ปัญหา

รอสักพัก (1-2 นาที) ให้ Mikrotik มีการทำงาน แล้วมาเช็คที่ Server

# เข้า MongoDB
mongo

# เลือกฐานข้อมูล
use syslog_db

# ขอดูข้อมูลล่าสุด 1 รายการ แบบจัดหน้าสวยๆ (pretty)
db.logs.find().sort({_id:-1}).limit(1).pretty()
{
  "_id" : ObjectId("65c1..."),
  "MESSAGE" : "system,info,account user admin logged in from 192.168.88.254 via winbox",
  "HOST" : "Mikrotik-Main",
  "PROGRAM" : "system",
  "DATE" : "2024-02-06T12:00:00+07:00"
}

ถ้าไม่เจอข้อมูล (Troubleshooting)

1. ติด Firewall หรือไม่?

Ubuntu อาจบล็อกพอร์ต 514 อยู่ ลองสั่งเปิดพอร์ต:

sudo ufw allow 514/udp

2. Mikrotik ส่งออกไหม?

ใน Mikrotik ลองไปที่เมนู Log ดูว่ามี log ใหม่ๆ ขึ้นหรือไม่ และตรวจสอบ IP Server ในเมนู System > Logging > Actions อีกครั้ง

MongoDB Compass - syslog_db.logs
{
"_id" : ObjectId("65a1b2c3..."),
"HOST" : "192.168.1.1",
"PROGRAM" : "dhcp",
"MESSAGE" : "dhcp1 assigned 192.168.1.100 to AA:BB:CC:DD:EE:FF",
"PRIORITY" : "info",
"DATE" : ISODate("2026-02-06T16:15:04Z")
}

ผู้เขียน: praewa_ai_assistant