12/04/2026 18:17น.

EP.67 การสร้างระบบบันทึกการใช้งาน (Audit Log) ใน WebSocket Server
#WebSocket Server tracking
#Golang WebSocket logging
#การติดตามกิจกรรมผู้ใช้
#Audit Log WebSocket
#การบันทึกกิจกรรม WebSocket
ใน EP.67 นี้เราจะมาดูวิธีการ สร้างระบบบันทึกการใช้งาน (Audit Log) ใน WebSocket Server เพื่อช่วยให้สามารถตรวจสอบและติดตามการกระทำต่าง ๆ ที่เกิดขึ้นภายใน WebSocket Chat เช่น การเชื่อมต่อและตัดการเชื่อมต่อของผู้ใช้, ข้อความที่ถูกส่ง, หรือการกระทำอื่น ๆ ในระบบ การบันทึกการใช้งาน (Audit Log) เป็นเครื่องมือที่สำคัญในการติดตามกิจกรรมภายในระบบเพื่อช่วยในการตรวจสอบความปลอดภัยและการปฏิบัติตามข้อกำหนด
การบันทึกการใช้งานช่วยให้ผู้ดูแลระบบสามารถตรวจสอบกิจกรรมที่เกิดขึ้นในระบบ WebSocket Chat และแก้ไขปัญหาหรือป้องกันการกระทำที่ไม่เหมาะสมได้
ทำไมต้องมีระบบบันทึกการใช้งาน (Audit Log) ใน WebSocket Server?
ระบบ Audit Log ช่วยให้:
- การติดตามกิจกรรมในระบบ: ผู้ดูแลระบบสามารถติดตามกิจกรรมของผู้ใช้ในห้องแชท เช่น การส่งข้อความ การเชื่อมต่อและตัดการเชื่อมต่อ
- การตรวจสอบความปลอดภัย: ช่วยในการตรวจสอบว่ามีการกระทำที่ไม่เหมาะสมหรือไม่ เช่น ผู้ใช้ที่พยายามโจมตีหรือกระทำผิดกฎหมาย
- การปฏิบัติตามข้อกำหนด: ช่วยในการเก็บข้อมูลบันทึกตามข้อกำหนดด้านการรักษาความปลอดภัยของข้อมูลและการควบคุมการเข้าถึง
ข้อดีของการมีระบบ Audit Log:
- เพิ่มความโปร่งใส: ผู้ดูแลสามารถตรวจสอบกิจกรรมที่เกิดขึ้นในห้องแชทได้ตลอดเวลา
- ช่วยในการตรวจสอบ: สามารถตรวจสอบพฤติกรรมของผู้ใช้และการกระทำต่าง ๆ ได้อย่างมีประสิทธิภาพ
- ช่วยในการรักษาความปลอดภัย: ป้องกันและระบุการกระทำที่อาจเป็นอันตรายจากผู้ใช้
โครงสร้างของระบบบันทึกการใช้งาน (Audit Log) ใน WebSocket Server
ระบบบันทึกการใช้งานจะต้องมีโครงสร้างที่สามารถเก็บข้อมูลทุกการกระทำที่เกิดขึ้นใน WebSocket Server และส่งข้อมูลเหล่านั้นไปยังระบบเก็บบันทึก เช่น ฐานข้อมูลหรือไฟล์บันทึก
ส่วนประกอบหลักของระบบบันทึกการใช้งาน:
- การเก็บข้อมูลบันทึก:
เราจะเก็บข้อมูลเกี่ยวกับกิจกรรมต่าง ๆ เช่น ผู้ใช้ที่เชื่อมต่อเข้ามา, ข้อความที่ถูกส่ง, และกิจกรรมอื่น ๆ - การส่งข้อมูลบันทึก:
ข้อมูลเหล่านี้จะถูกส่งไปยังฐานข้อมูลหรือที่เก็บข้อมูลบันทึก (Log System) สำหรับการตรวจสอบย้อนหลัง - การจัดเก็บบันทึก:
ข้อมูลบันทึกเหล่านี้จะถูกจัดเก็บและเข้าถึงได้ง่ายเพื่อให้สามารถตรวจสอบได้หากเกิดเหตุการณ์ที่ต้องการการสืบสวน
การเพิ่มฟีเจอร์การบันทึกการใช้งาน (Audit Log) ใน WebSocket Server
การเพิ่มฟีเจอร์ Audit Log ใน WebSocket Server ต้องอัปเดตโค้ดของเซิร์ฟเวอร์ให้สามารถเก็บข้อมูลทุกการกระทำที่เกิดขึ้น
ขั้นตอนที่ต้องทำ:
- การเก็บข้อมูลบันทึกในฐานข้อมูล:
- เพิ่มคอลัมน์ในฐานข้อมูลเพื่อเก็บข้อมูลการกระทำต่าง ๆ เช่น
user_id,action,message,timestamp
- เพิ่มคอลัมน์ในฐานข้อมูลเพื่อเก็บข้อมูลการกระทำต่าง ๆ เช่น
- การบันทึกกิจกรรมต่าง ๆ:
- ทุกครั้งที่มีการกระทำใน WebSocket Server เช่น การส่งข้อความ, การเชื่อมต่อ, หรือการตัดการเชื่อมต่อ ระบบจะบันทึกข้อมูลเหล่านั้น
- การส่งข้อมูลบันทึกไปยังระบบเก็บบันทึก:
- ข้อมูลเหล่านี้จะถูกส่งไปยังระบบเก็บบันทึก เช่น ฐานข้อมูล SQL หรือระบบที่เก็บไฟล์
ตัวอย่างโค้ดการบันทึกการใช้งานใน WebSocket Server
การบันทึกข้อมูลกิจกรรมผู้ใช้
package main
import (
"fmt"
"net/http"
"github.com/gorilla/websocket"
"time"
"log"
"database/sql"
_ "github.com/lib/pq"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
var db *sql.DB
func init() {
var err error
db, err = sql.Open("postgres", "user=postgres dbname=chat sslmode=disable")
if err != nil {
log.Fatal(err)
}
}
func logActivity(userID, action, message string) {
timestamp := time.Now()
_, err := db.Exec("INSERT INTO activity_logs (user_id, action, message, timestamp) VALUES ($1, $2, $3, $4)", userID, action, message, timestamp)
if err != nil {
fmt.Println("Error logging activity:", err)
}
}
func handleConnection(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
fmt.Println("Error upgrading connection:", err)
return
}
defer conn.Close()
// Log user connection
logActivity("user123", "CONNECTED", "User connected to WebSocket")
for {
_, msg, err := conn.ReadMessage()
if err != nil {
fmt.Println("Error reading message:", err)
break
}
// Log the message sent
logActivity("user123", "MESSAGE_SENT", string(msg))
err = conn.WriteMessage(websocket.TextMessage, msg)
if err != nil {
fmt.Println("Error sending message:", err)
break
}
}
}
func main() {
http.HandleFunc("/ws", handleConnection)
fmt.Println("WebSocket server running on port 8080")
http.ListenAndServe(":8080", nil)
}
ในตัวอย่างนี้ ระบบจะบันทึกกิจกรรมผู้ใช้ เช่น การเชื่อมต่อและข้อความที่ถูกส่งไปยัง ฐานข้อมูล PostgreSQL โดยใช้ฟังก์ชัน logActivity เพื่อบันทึกข้อมูล
การทดสอบระบบบันทึกการใช้งาน
หลังจากที่เพิ่มฟีเจอร์การบันทึกการใช้งานแล้ว จำเป็นต้องทดสอบให้แน่ใจว่า:
- ข้อมูลบันทึกที่เกิดขึ้นถูกบันทึกและเก็บไว้อย่างถูกต้อง
- ข้อมูลการกระทำของผู้ใช้สามารถเข้าถึงและตรวจสอบได้
- ระบบบันทึกสามารถใช้งานได้ทั้งการเชื่อมต่อและการส่งข้อความ
ท้าให้ลอง!
ลองเพิ่ม ฟีเจอร์การกรองข้อมูลในระบบบันทึกการใช้งาน เช่น การบันทึกเฉพาะกิจกรรมที่สำคัญหรือกรองตามประเภทของการกระทำ (เช่น การส่งข้อความหรือการเชื่อมต่อ)
EP ถัดไป:
ใน EP.68 เราจะมาดู การเพิ่มระบบการตรวจสอบและป้องกันการโจมตี (Security Enhancements) ใน WebSocket Chat เพื่อให้ผู้ใช้สามารถได้รับการแจ้งเตือนเมื่อมีข้อความสำคัญหรือกิจกรรมเกิดขึ้นในห้องแชท!