[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-blogs-th-1-1-all-audit-log-websocket-server-all--*":3,"academy-blog-translations-vgfsb9f5tx6cg3u":79},{"data":4,"page":67,"perPage":67,"totalItems":67,"totalPages":67},[5],{"alt":6,"collectionId":7,"collectionName":8,"content":9,"cover_image":10,"cover_image_path":11,"created":12,"created_by":13,"expand":14,"id":73,"keywords":74,"locale":49,"published_at":75,"scheduled_at":13,"school_blog":71,"short_description":76,"slug":77,"status":69,"title":6,"updated":78,"updated_by":13,"views":72},"EP.67 การสร้างระบบบันทึกการใช้งาน (Audit Log) ใน WebSocket Server","sclblg987654321","school_blog_translations","\u003Cp>ใน EP.67 นี้เราจะมาดูวิธีการ สร้างระบบบันทึกการใช้งาน (Audit Log) ใน WebSocket Server เพื่อช่วยให้สามารถตรวจสอบและติดตามการกระทำต่าง ๆ ที่เกิดขึ้นภายใน WebSocket Chat เช่น การเชื่อมต่อและตัดการเชื่อมต่อของผู้ใช้, ข้อความที่ถูกส่ง, หรือการกระทำอื่น ๆ ในระบบ การบันทึกการใช้งาน (Audit Log) เป็นเครื่องมือที่สำคัญในการติดตามกิจกรรมภายในระบบเพื่อช่วยในการตรวจสอบความปลอดภัยและการปฏิบัติตามข้อกำหนด\u003C\u002Fp>\u003Cp>การบันทึกการใช้งานช่วยให้ผู้ดูแลระบบสามารถตรวจสอบกิจกรรมที่เกิดขึ้นในระบบ WebSocket Chat และแก้ไขปัญหาหรือป้องกันการกระทำที่ไม่เหมาะสมได้\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>ทำไมต้องมีระบบบันทึกการใช้งาน (Audit Log) ใน WebSocket Server?\u003C\u002Fh2>\u003Ch3>ระบบ Audit Log ช่วยให้:\u003C\u002Fh3>\u003Cul>\u003Cli>การติดตามกิจกรรมในระบบ: ผู้ดูแลระบบสามารถติดตามกิจกรรมของผู้ใช้ในห้องแชท เช่น การส่งข้อความ การเชื่อมต่อและตัดการเชื่อมต่อ\u003C\u002Fli>\u003Cli>การตรวจสอบความปลอดภัย: ช่วยในการตรวจสอบว่ามีการกระทำที่ไม่เหมาะสมหรือไม่ เช่น ผู้ใช้ที่พยายามโจมตีหรือกระทำผิดกฎหมาย\u003C\u002Fli>\u003Cli>การปฏิบัติตามข้อกำหนด: ช่วยในการเก็บข้อมูลบันทึกตามข้อกำหนดด้านการรักษาความปลอดภัยของข้อมูลและการควบคุมการเข้าถึง\u003C\u002Fli>\u003C\u002Ful>\u003Ch3>ข้อดีของการมีระบบ Audit Log:\u003C\u002Fh3>\u003Cul>\u003Cli>เพิ่มความโปร่งใส: ผู้ดูแลสามารถตรวจสอบกิจกรรมที่เกิดขึ้นในห้องแชทได้ตลอดเวลา\u003C\u002Fli>\u003Cli>ช่วยในการตรวจสอบ: สามารถตรวจสอบพฤติกรรมของผู้ใช้และการกระทำต่าง ๆ ได้อย่างมีประสิทธิภาพ\u003C\u002Fli>\u003Cli>ช่วยในการรักษาความปลอดภัย: ป้องกันและระบุการกระทำที่อาจเป็นอันตรายจากผู้ใช้\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>โครงสร้างของระบบบันทึกการใช้งาน (Audit Log) ใน WebSocket Server\u003C\u002Fh2>\u003Cp>ระบบบันทึกการใช้งานจะต้องมีโครงสร้างที่สามารถเก็บข้อมูลทุกการกระทำที่เกิดขึ้นใน WebSocket Server และส่งข้อมูลเหล่านั้นไปยังระบบเก็บบันทึก เช่น ฐานข้อมูลหรือไฟล์บันทึก\u003C\u002Fp>\u003Ch3>ส่วนประกอบหลักของระบบบันทึกการใช้งาน:\u003C\u002Fh3>\u003Col>\u003Cli>การเก็บข้อมูลบันทึก:\u003Cbr>เราจะเก็บข้อมูลเกี่ยวกับกิจกรรมต่าง ๆ เช่น ผู้ใช้ที่เชื่อมต่อเข้ามา, ข้อความที่ถูกส่ง, และกิจกรรมอื่น ๆ\u003C\u002Fli>\u003Cli>การส่งข้อมูลบันทึก:\u003Cbr>ข้อมูลเหล่านี้จะถูกส่งไปยังฐานข้อมูลหรือที่เก็บข้อมูลบันทึก (Log System) สำหรับการตรวจสอบย้อนหลัง\u003C\u002Fli>\u003Cli>การจัดเก็บบันทึก:\u003Cbr>ข้อมูลบันทึกเหล่านี้จะถูกจัดเก็บและเข้าถึงได้ง่ายเพื่อให้สามารถตรวจสอบได้หากเกิดเหตุการณ์ที่ต้องการการสืบสวน\u003C\u002Fli>\u003C\u002Fol>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>การเพิ่มฟีเจอร์การบันทึกการใช้งาน (Audit Log) ใน WebSocket Server\u003C\u002Fh2>\u003Cp>การเพิ่มฟีเจอร์ Audit Log ใน WebSocket Server ต้องอัปเดตโค้ดของเซิร์ฟเวอร์ให้สามารถเก็บข้อมูลทุกการกระทำที่เกิดขึ้น\u003C\u002Fp>\u003Ch3>ขั้นตอนที่ต้องทำ:\u003C\u002Fh3>\u003Col>\u003Cli>การเก็บข้อมูลบันทึกในฐานข้อมูล:\u003Cul>\u003Cli>เพิ่มคอลัมน์ในฐานข้อมูลเพื่อเก็บข้อมูลการกระทำต่าง ๆ เช่น \u003Ccode inline=\"\">user_id\u003C\u002Fcode>, \u003Ccode inline=\"\">action\u003C\u002Fcode>, \u003Ccode inline=\"\">message\u003C\u002Fcode>, \u003Ccode inline=\"\">timestamp\u003C\u002Fcode>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>\u003Cli>การบันทึกกิจกรรมต่าง ๆ:\u003Cul>\u003Cli>ทุกครั้งที่มีการกระทำใน WebSocket Server เช่น การส่งข้อความ, การเชื่อมต่อ, หรือการตัดการเชื่อมต่อ ระบบจะบันทึกข้อมูลเหล่านั้น\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>\u003Cli>การส่งข้อมูลบันทึกไปยังระบบเก็บบันทึก:\u003Cul>\u003Cli>ข้อมูลเหล่านี้จะถูกส่งไปยังระบบเก็บบันทึก เช่น ฐานข้อมูล SQL หรือระบบที่เก็บไฟล์\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>\u003C\u002Fol>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch2>ตัวอย่างโค้ดการบันทึกการใช้งานใน WebSocket Server\u003C\u002Fh2>\u003Col>\u003Cli>\u003Ch3>การบันทึกข้อมูลกิจกรรมผู้ใช้\u003C\u002Fh3>\u003C\u002Fli>\u003C\u002Fol>\u003Cpre>\u003Ccode class=\"language-plaintext language-go\">package main\n\nimport (\n    \"fmt\"\n    \"net\u002Fhttp\"\n    \"github.com\u002Fgorilla\u002Fwebsocket\"\n    \"time\"\n    \"log\"\n    \"database\u002Fsql\"\n    _ \"github.com\u002Flib\u002Fpq\"\n)\n\nvar upgrader = websocket.Upgrader{\n    CheckOrigin: func(r *http.Request) bool {\n        return true\n    },\n}\n\nvar db *sql.DB\n\nfunc init() {\n    var err error\n    db, err = sql.Open(\"postgres\", \"user=postgres dbname=chat sslmode=disable\")\n    if err != nil {\n        log.Fatal(err)\n    }\n}\n\nfunc logActivity(userID, action, message string) {\n    timestamp := time.Now()\n    _, err := db.Exec(\"INSERT INTO activity_logs (user_id, action, message, timestamp) VALUES ($1, $2, $3, $4)\", userID, action, message, timestamp)\n    if err != nil {\n        fmt.Println(\"Error logging activity:\", err)\n    }\n}\n\nfunc handleConnection(w http.ResponseWriter, r *http.Request) {\n    conn, err := upgrader.Upgrade(w, r, nil)\n    if err != nil {\n        fmt.Println(\"Error upgrading connection:\", err)\n        return\n    }\n    defer conn.Close()\n\n    \u002F\u002F Log user connection\n    logActivity(\"user123\", \"CONNECTED\", \"User connected to WebSocket\")\n\n    for {\n        _, msg, err := conn.ReadMessage()\n        if err != nil {\n            fmt.Println(\"Error reading message:\", err)\n            break\n        }\n\n        \u002F\u002F Log the message sent\n        logActivity(\"user123\", \"MESSAGE_SENT\", string(msg))\n\n        err = conn.WriteMessage(websocket.TextMessage, msg)\n        if err != nil {\n            fmt.Println(\"Error sending message:\", err)\n            break\n        }\n    }\n}\n\nfunc main() {\n    http.HandleFunc(\"\u002Fws\", handleConnection)\n    fmt.Println(\"WebSocket server running on port 8080\")\n    http.ListenAndServe(\":8080\", nil)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>ในตัวอย่างนี้ ระบบจะบันทึกกิจกรรมผู้ใช้ เช่น การเชื่อมต่อและข้อความที่ถูกส่งไปยัง ฐานข้อมูล PostgreSQL โดยใช้ฟังก์ชัน \u003Ccode inline=\"\">logActivity\u003C\u002Fcode> เพื่อบันทึกข้อมูล\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>การทดสอบระบบบันทึกการใช้งาน\u003C\u002Fh3>\u003Cp>หลังจากที่เพิ่มฟีเจอร์การบันทึกการใช้งานแล้ว จำเป็นต้องทดสอบให้แน่ใจว่า:\u003C\u002Fp>\u003Cul>\u003Cli>ข้อมูลบันทึกที่เกิดขึ้นถูกบันทึกและเก็บไว้อย่างถูกต้อง\u003C\u002Fli>\u003Cli>ข้อมูลการกระทำของผู้ใช้สามารถเข้าถึงและตรวจสอบได้\u003C\u002Fli>\u003Cli>ระบบบันทึกสามารถใช้งานได้ทั้งการเชื่อมต่อและการส่งข้อความ\u003C\u002Fli>\u003C\u002Ful>\u003Cp>&nbsp;\u003C\u002Fp>\u003Chr>\u003Cp>&nbsp;\u003C\u002Fp>\u003Ch3>ท้าให้ลอง!\u003C\u002Fh3>\u003Cp>ลองเพิ่ม \u003Cstrong>ฟีเจอร์การกรองข้อมูลในระบบบันทึกการใช้งาน\u003C\u002Fstrong> เช่น การบันทึกเฉพาะกิจกรรมที่สำคัญหรือกรองตามประเภทของการกระทำ (เช่น การส่งข้อความหรือการเชื่อมต่อ)\u003C\u002Fp>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp>\u003Cstrong>EP ถัดไป:\u003C\u002Fstrong>\u003Cbr>ใน \u003Cstrong>EP.68\u003C\u002Fstrong> เราจะมาดู \u003Cstrong>การเพิ่มระบบการตรวจสอบและป้องกันการโจมตี (Security Enhancements) ใน WebSocket Chat\u003C\u002Fstrong> เพื่อให้ผู้ใช้สามารถได้รับการแจ้งเตือนเมื่อมีข้อความสำคัญหรือกิจกรรมเกิดขึ้นในห้องแชท!\u003C\u002Fp>","105_11zon_g7j567886x.webp","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclblg987654321\u002Fc5vwrn61xeuvxd4\u002F105_11zon_g7j567886x.webp","2026-03-04 08:48:15.075Z","",{"keywords":15,"locale":43,"school_blog":53},[16,23,28,33,38],{"collectionId":17,"collectionName":18,"created":19,"created_by":13,"id":20,"name":21,"updated":22,"updated_by":13},"sclkey987654321","school_keywords","2026-03-04 08:48:11.618Z","0sj071so7shimea","WebSocket Server tracking","2026-04-10 16:13:42.292Z",{"collectionId":17,"collectionName":18,"created":24,"created_by":13,"id":25,"name":26,"updated":27,"updated_by":13},"2026-03-04 08:48:10.919Z","2kuwy2wtyko9i05","Golang WebSocket logging","2026-04-10 16:13:42.002Z",{"collectionId":17,"collectionName":18,"created":29,"created_by":13,"id":30,"name":31,"updated":32,"updated_by":13},"2026-03-04 08:48:12.318Z","85b9we0aqny6dq3","การติดตามกิจกรรมผู้ใช้","2026-04-10 16:13:42.524Z",{"collectionId":17,"collectionName":18,"created":34,"created_by":13,"id":35,"name":36,"updated":37,"updated_by":13},"2026-03-04 08:48:13.279Z","yi5b1evn7cw4nsq","Audit Log WebSocket","2026-04-10 16:13:42.849Z",{"collectionId":17,"collectionName":18,"created":39,"created_by":13,"id":40,"name":41,"updated":42,"updated_by":13},"2026-03-04 08:48:13.876Z","rfq5qjqrq2q1yg0","การบันทึกกิจกรรม WebSocket","2026-04-10 16:13:43.015Z",{"code":44,"collectionId":45,"collectionName":46,"created":47,"flag":48,"id":49,"is_default":50,"label":51,"updated":52},"th","pbc_1989393366","locales","2026-01-22 10:59:55.832Z","twemoji:flag-thailand","s8wri3bt4vgg2ji",true,"Thai","2026-04-10 15:42:46.614Z",{"category":54,"collectionId":55,"collectionName":56,"expand":57,"id":71,"views":72},"wqxt7ag2gn7xcmk","pbc_2105096300","school_blogs",{"category":58},{"blogIds":59,"collectionId":60,"collectionName":61,"created":62,"created_by":13,"id":54,"image":63,"image_alt":13,"image_path":64,"label":65,"name":66,"priority":67,"publish_at":68,"scheduled_at":13,"status":69,"updated":70,"updated_by":13},[],"sclcatblg987654321","school_category_blogs","2026-03-04 08:33:53.210Z","59ty92ns80w_15oc1implw.png","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclcatblg987654321\u002Fwqxt7ag2gn7xcmk\u002F59ty92ns80w_15oc1implw.png",{"en":66,"th":66},"Golang The Series",1,"2026-03-16 04:39:38.440Z","published","2026-04-25 02:32:15.470Z","vgfsb9f5tx6cg3u",229,"c5vwrn61xeuvxd4",[20,25,30,35,40],"2025-07-17 01:50:05.172Z","เรียนรู้วิธีสร้าง ระบบบันทึกการใช้งาน (Audit Log) ใน WebSocket Server เพื่อให้สามารถติดตามการกระทำต่าง ๆ ภายใน WebSocket Chat ได้อย่างมีประสิทธิภาพและปลอดภัย","audit-log-websocket-server","2026-04-22 07:10:09.455Z",{"th":77}]