การดู : 0

12/04/2026 18:17น.

EP.67 การสร้างระบบบันทึกการใช้งาน (Audit Log) ใน WebSocket Server

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 และส่งข้อมูลเหล่านั้นไปยังระบบเก็บบันทึก เช่น ฐานข้อมูลหรือไฟล์บันทึก

ส่วนประกอบหลักของระบบบันทึกการใช้งาน:

  1. การเก็บข้อมูลบันทึก:
    เราจะเก็บข้อมูลเกี่ยวกับกิจกรรมต่าง ๆ เช่น ผู้ใช้ที่เชื่อมต่อเข้ามา, ข้อความที่ถูกส่ง, และกิจกรรมอื่น ๆ
  2. การส่งข้อมูลบันทึก:
    ข้อมูลเหล่านี้จะถูกส่งไปยังฐานข้อมูลหรือที่เก็บข้อมูลบันทึก (Log System) สำหรับการตรวจสอบย้อนหลัง
  3. การจัดเก็บบันทึก:
    ข้อมูลบันทึกเหล่านี้จะถูกจัดเก็บและเข้าถึงได้ง่ายเพื่อให้สามารถตรวจสอบได้หากเกิดเหตุการณ์ที่ต้องการการสืบสวน

 

การเพิ่มฟีเจอร์การบันทึกการใช้งาน (Audit Log) ใน WebSocket Server

การเพิ่มฟีเจอร์ Audit Log ใน WebSocket Server ต้องอัปเดตโค้ดของเซิร์ฟเวอร์ให้สามารถเก็บข้อมูลทุกการกระทำที่เกิดขึ้น

ขั้นตอนที่ต้องทำ:

  1. การเก็บข้อมูลบันทึกในฐานข้อมูล:
    • เพิ่มคอลัมน์ในฐานข้อมูลเพื่อเก็บข้อมูลการกระทำต่าง ๆ เช่น user_id, action, message, timestamp
  2. การบันทึกกิจกรรมต่าง ๆ:
    • ทุกครั้งที่มีการกระทำใน WebSocket Server เช่น การส่งข้อความ, การเชื่อมต่อ, หรือการตัดการเชื่อมต่อ ระบบจะบันทึกข้อมูลเหล่านั้น
  3. การส่งข้อมูลบันทึกไปยังระบบเก็บบันทึก:
    • ข้อมูลเหล่านี้จะถูกส่งไปยังระบบเก็บบันทึก เช่น ฐานข้อมูล SQL หรือระบบที่เก็บไฟล์

 

ตัวอย่างโค้ดการบันทึกการใช้งานใน WebSocket Server

  1. การบันทึกข้อมูลกิจกรรมผู้ใช้

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 เพื่อให้ผู้ใช้สามารถได้รับการแจ้งเตือนเมื่อมีข้อความสำคัญหรือกิจกรรมเกิดขึ้นในห้องแชท!