การดำเนินงาน
เฝ้าระวังเซิร์ฟเวอร์, ทำให้รองรับผู้ใช้ได้มากขึ้น, ตัดสินใจว่าข้อมูลจะถูกเก็บไว้เป็นเวลานานเท่าใด, และแก้ไขปัญหาที่ผู้ดูแลระบบมักพบมากที่สุด
การตรวจสอบสถานะ
amctl --local system status(ในคอนเทนเนอร์:docker compose exec antimatter amctl --local system status). การตรวจสอบสถานะของ Docker image จะรันคำสั่งนี้ทุก 30 วินาที ดังนั้นdocker compose psจะแสดงhealthyหรือunhealthyGET /api/v4/system/pingตอบกลับโดยไม่ต้องเข้าสู่ระบบ สำหรับตัวเฝ้าระวังภายนอกหรือ load balancer:curl -fsS https://chat.example.com/api/v4/system/pingantimatter db pingตรวจสอบว่าฐานข้อมูลสามารถเข้าถึงได้ด้วยการตั้งค่าที่ระบุไว้- คอนโซลระบบ › การรายงาน › สถิติระบบ แสดงจำนวนผู้ใช้ โพสต์ และเซสชัน และ การปรับพื้นที่ทำงานให้ดีขึ้น จะระบุปัญหาการตั้งค่าที่ต้องตรวจสอบ
ตัวชี้วัด
เซิร์ฟเวอร์สามารถเผยแพร่เมตริก Prometheus ได้: อัตราและระยะเวลาของคำขอ การเชื่อมต่อ websocket การใช้ฐานข้อมูลและแคช งาน (jobs) และปลั๊กอินฮุค (plugin hooks) รวมถึงข้อมูลอื่น ๆ เปิดใช้งานได้ที่ คอนโซลระบบ › สภาพแวดล้อม › การตรวจสอบประสิทธิภาพ:
| การตั้งค่า | คีย์และตัวแปร | ค่าเริ่มต้น |
|---|---|---|
| เปิดใช้งานการตรวจสอบประสิทธิภาพ | MetricsSettings.Enable, AM_METRICSSETTINGS_ENABLE | ปิด |
| ที่อยู่ที่จะฟัง | MetricsSettings.ListenAddress, AM_METRICSSETTINGS_LISTENADDRESS | :8067 |
| เปิดใช้งานการตรวจสอบประสิทธิภาพของไคลเอนต์ | MetricsSettings.EnableClientMetrics | เปิด: เบราว์เซอร์และแอปจะรายงานเวลาทำงานของตนเอง |
Prometheus จะ scrape จาก http://<server>:8067/metrics แต่ละตัวชี้วัดจะเผยแพร่ภายใต้ชื่อ Mattermost (mattermost_…) และชื่อ Antimatter (antimatter_…) ดังนั้นแดชบอร์ด Mattermost ที่มีอยู่เดิมจะยังคงทำงานได้ แอปจะเผยแพร่ตัวชี้วัดของตนเอง ตัวอย่างเช่น แอป Agents ที่ /plugins/mattermost-ai/metrics
พอร์ตตัวชี้วัดไม่จำเป็นต้องเข้าสู่ระบบ: ควรเก็บไว้ในเครือข่ายส่วนตัว ไฟล์ compose ของเว็บไซต์ไม่ได้เผยแพร่พอร์ตนี้; หากต้องการ scrape จากโฮสต์ ให้เพิ่ม "127.0.0.1:8067:8067" ใน ports ของ service antimatter
แอป Metrics
หากไม่มีเซิร์ฟเวอร์ Prometheus แอป Metrics (ปิดไว้โดยค่าเริ่มต้น ดู แอปที่รวมมา) จะรวบรวมเมตริกเดียวกันนี้ลงในฐานข้อมูลอนุกรมเวลาขนาดเล็กภายใน Antimatter: เก็บทุก 60 วินาที และเก็บข้อมูลไว้ 15 วัน แอปนี้จะเปิดใช้งานจุดเชื่อมต่อเมตริก (metrics endpoint) เมื่อเริ่มทำงาน หน้าของแอปใน คอนโซลระบบ › ปลั๊กอิน จะแสดงขนาดของฐานข้อมูล และให้คุณดาวน์โหลดข้อมูล (dumps) เพื่อวิเคราะห์ด้วยตนเองหรือแนบไปกับรายงานข้อบกพร่อง (bug report) ข้อมูลของวันล่าสุดยังถูกเพิ่มลงในแพ็กเก็ตสนับสนุน (support packets) ด้วย
Support packet
Support packet คือไฟล์ zip ที่รวมสิ่งที่จำเป็นในการวินิจฉัยปัญหา: เวอร์ชัน สถิติ การตั้งค่าโดยลบข้อมูลลับออก รายการแอปและงาน (jobs) โครงสร้างฐานข้อมูล (schema) และโปรไฟล์ของบันทึก (log) และประสิทธิภาพที่เพิ่งเกิดขึ้น สร้างไฟล์นี้ด้วย amctl system supportpacket หรือใน System Console จากเมนูที่ด้านบนของแถบด้านข้าง (Commercial Support ซึ่งจากนั้นจะให้คุณเลือกสิ่งที่ต้องการรวม) อ่านไฟล์นี้ก่อนแชร์: แม้จะไม่ประกอบด้วยข้อความ แต่จะประกอบด้วยชื่อของชุมชน ผู้ใช้ และการตั้งค่า
ประสิทธิภาพและการขยายขนาด
เซิร์ฟเวอร์หนึ่งเครื่องที่มี 2 คอร์ CPU และ 4 GB ของหน่วยความจำ สามารถรองรับผู้ใช้ได้หลายร้อยคน ก่อนเพิ่มเซิร์ฟเวอร์ ให้ดูที่:
- ฐานข้อมูล. PostgreSQL ทำหน้าที่ส่วนใหญ่: ให้พื้นที่จัดเก็บข้อมูลและหน่วยความจำที่รวดเร็ว Read replicas สามารถรับภาระการอ่านได้ (
SqlSettings.DataSourceReplicasซึ่งเป็นรายการของ URL การเชื่อมต่อ) - ค้นหา ข้อความจะถูกค้นหาในฐานข้อมูลโดยค่าเริ่มต้น สำหรับเซิร์ฟเวอร์ขนาดใหญ่ Elasticsearch หรือ OpenSearch สามารถรับหน้าที่ค้นหาและสร้างดัชนี (indexing) แทนได้: คอนโซลระบบ › สภาพแวดล้อม › Elasticsearch (
ElasticsearchSettings: ประเภทของระบบค้นหา เป็น Elasticsearch หรือ OpenSearch, ที่อยู่การเชื่อมต่อเซิร์ฟเวอร์, ข้อมูลรับรอง (credentials) จากนั้นเปิดใช้งานการสร้างดัชนี สร้างดัชนี และเปิดใช้งานการค้นหา) - การโทร. สื่อ (media) ของการโทรเป็นภาระที่หนักที่สุด ย้ายไปยังเซิร์ฟเวอร์ rtcd: ดู การโทรและเสียง
- ไฟล์ที่เปิด. ผู้ใช้แต่ละคนที่เชื่อมต่อจะเปิด websocket ไว้ ไฟล์ compose สำหรับ production ของ antimatter-docker เพิ่มขีดจำกัดเป็น 49152 (
ulimits: nofile); ทำเช่นเดียวกันกับ systemd (LimitNOFILE) - บันทึก (Logs). ลด
LogSettings.ConsoleLevelลงเป็นINFOหรือWARN:DEBUGจะบันทึกข้อมูลจำนวนมากบนเซิร์ฟเวอร์ที่ใช้งานหนัก
ความพร้อมใช้งานสูง (High availability)
เซิร์ฟเวอร์ Antimatter หลายตัวสามารถทำงานร่วมกันเป็นคลัสเตอร์ (cluster) อยู่เบื้องหลังโหลดบาลานเซอร์ (load balancer) โดยไม่จำเป็นต้องมีใบอนุญาต (licence) เซิร์ฟเวอร์เหล่านี้ต้องใช้ฐานข้อมูล PostgreSQL เดียวกัน ที่เก็บไฟล์ S3 เดียวกัน และการตั้งค่าในฐานข้อมูล (AM_CONFIG) ใน คอนโซลระบบ › สภาพแวดล้อม › ความพร้อมใช้งานสูง (ClusterSettings): เปิด เปิดโหมด High Availability (ClusterSettings.Enable) ตั้ง ชื่อคลัสเตอร์ (ClusterSettings.ClusterName) ให้เหมือนกันทุกโหนด และให้โหนดสามารถเข้าถึงกันได้ผ่านพอร์ต gossip 8074 TCP และ UDP (ClusterSettings.GossipPort) โหนดจะค้นหาซึ่งกันและกันผ่านฐานข้อมูล โหลดบาลานเซอร์ต้องส่งต่อ (pass) websocket สำหรับการโทรในคลัสเตอร์ ให้ใช้ rtcd
การเก็บรักษาข้อมูล
โดยค่าเริ่มต้น Antimatter จะเก็บทุกข้อความและไฟล์ไว้ตลอดไป หากต้องการลบข้อมูลเก่าโดยอัตโนมัติ ให้ไปที่ คอนโซลระบบ › การปฏิบัติตามกฎระเบียบ › นโยบายการเก็บรักษาข้อมูล:
- นโยบายการเก็บรักษาข้อมูลแบบรวม กำหนด ระยะเวลาการเก็บรักษาข้อมูลในช่องและข้อความส่วนตัว และ ระยะเวลาการเก็บรักษาไฟล์ สำหรับเซิร์ฟเวอร์ทังหมด: เก็บถาวร หรือกำหนดเป็นจำนวนชั่โมง วัน หรือปี (
DataRetentionSettings.EnableMessageDeletion,MessageRetentionHours,EnableFileDeletion,FileRetentionHours). - นโยบายการเก็บรักษาข้อมูลแบบกำหนดเอง (Custom retention policies) กำหนดระยะเวลาที่แตกต่างกันสำหรับชุมชนและช่องที่เลือก
- งานลบข้อมูลจะรันทุกวันในเวลาที่คุณเลือก (
DataRetentionSettings.DeletionJobStartTime, ค่าเริ่มต้นคือ02:00UTC) รันงานลบข้อมูลทันที จะรันงานทันที และ บันทึกนโยบาย จะแสดงรายชื่อบทความที่ถูกลบในแต้ละครัง
การส่งออกข้อมูลเพื่อการปฏิบัติตามกฎระเบียบและบันทึกการตรวจสอบ
- คอนโซลระบบ › การปฏิบัติตามกฎระเบียบ › การส่งออกข้อมูลเพื่อกำกับดูแล จะส่งออกข้อความและไฟล์ทังหมดทุกวัน (เปิดใช้งานการส่งออกเพื่อการปฏิบัติตามกฎระเบียบ,
MessageExportSettings.EnableExport, ปิดโดยค่าเริ่มต้น; เวลาการส่งออกข้อมูลการปฏิบัติตามกฎระเบียบ, ค่าเริ่มต้นคือ01:00) ในรูปแบบที่ระบบเก็บถาวรสามารถอ่านได้: CSV, Actiance XML หรือ Global Relay (ไฟล์ zip หรือ EML ที่ส่งผาน SMTP) คำสั่งamctl compliance-exportใช้สำหรับรันและดาวน์โหลดข้อมูลที่ส่งออกผานบรรทัดคำสั่ง - การเฝ้าระวังการกำกับดูแล (
ComplianceSettings) จะบันทึกรายงานประจำวันลงในไดเรกทอรี เป็นกลไกที่เก่ากว่า แนะนำให้อาศัยการส่งออกข้อมูลเพื่อกำกับดูแล - บันทึกการตรวจสอบ (เบต้า,
ExperimentalAuditSettings) จะบันทึกรายการเหตุการณ์ด้านบริหารและความปลอดภัย (การลงชื่อเข้าใช้, การเปลียนแปลงสิทธิ์และการตั้ngค่า) ลงในไฟล์ท่ีแยกต่างหาก - ข้อกำหนดในการให้บริการแบบกำหนดเอง จะขอให้สมาชิกทุกคนยอมรับข้อกำหนดของคุณก่อนใช้ Antimatter และจะขอให้ยอมรับอีกครังเมื่อคุณเปลียนแปลงข้อกำหนด
ปัญหาที่พบบ่อย
“ไม่สามารถเชื่อมต่อเซิร์ฟเวอร์ได้” หรือข้อความปรากฏขึ้นก็ต่อเมื่อรีโหลดหน้า
WebSocket ไม่สามารถเชื่อมต่อได้ ตรวจสอบว่า reverse proxy ส่งต่อ header Upgrade และ Connection (ดูตัวอย่าง nginx) และว่า URL ของเว็บไซต์ตรงกับที่อยู่บนเบราว์เซอร์อย่างแม่นยำ รวมถึง https
การอัปโหลดล้มเหลวพร้อมข้อความ “413 Request Entity Too Large”
พร็อกซีจะปฏิเสธขนาดไฟล์ท่ีเกินพิกัด ให้เพิ่่มขีดจำกัดของพร็อกซี (nginx client_max_body_size) ให้สูงถึงอย่างน้อย ขนาดไฟล์สุงสุด ใน คอนโซลระบบ › สภาพแวดล้อม › พื้่นท่ีจัดเก็บไฟล์ (FileSettings.MaxFileSize, ค่าเริ่มต้นคือ 100 MB)
ผู้ใช้ไม่สามารถเริ่มการโทรได้ หรือเข้าร่วมแล้วแต่ไม่ได้ยินเสียง
หากมีเพียงผู้ดูแลระบบเท่านั้นที่สามารถเริ่มการโทรได้ ให้ปิด Test mode ของ Calls หากไม่พบปุ่มการโทรในช่องของชุมชน ชุมชนนั้นจะเป็นประเภท Community ซึ่งปิดการโทรไว้โดยค่าเริ่มต้น: ผู้ดูแลระบบของช่องหรือชุมชนสามารถเปิดการโทรในช่องได้ หรือเปลี่ยนประเภทของชุมชน (ดู Where calls are on) หากผู้คนเข้าร่วมแต่ไม่ได้ยินเสียงเลย แสดงว่าพอร์ตสื่อถูกบล็อกหรือเซิร์ฟเวอร์ประกาศที่อยู่ที่ไม่ถูกต้อง: เปิด 8443 UDP และ TCP และตั้งค่า ICE Host Override เบื้องหลัง NAT ผู้คนบนเครือข่ายที่บล็อกทั้งสองอย่างต้องการเซิร์ฟเวอร์ TURN ดู Calls and voice
ตัวเลือก GIF ว่างเปล่า
ตรวจสอบ URL ของบริการ GIF (http://gifs:8080/v2 ใน compose file ของเว็บไซต์) และ API key (ค่า GIFS_API_KEY ในไฟล์ .env) ใน คอนโซลระบบ › ปลั๊กอิน › GIF และตรวจสอบว่าบริการ gifs ทำงานอยู่: docker compose ps gifs
อีเมลไม่มาถึง
ใช้งาน ทดสอบการเชื่่อมต่อ ใน คอนโซลระบบ › สภาพแวดล้อม › SMTP ตรวจสอบว่า ท่ีอยู่่อีเมลผ้้ส่่งการแจ้่งเตือน ไม่ได้นังคงเป็น test@example.com และค้้นหา smtp หรือ mail ในบันทึกรายงาน
แอปแสดงข้อความ “Failed to start”
ค้นหา id ของแอปในล็อก (docker compose logs antimatter | grep <app id>) ปิดแล้วเปิดแอปอีกครั้งใน Plugin Management เพื่อรีสตาร์ท
เซิร์ฟเวอร์ไม่เริ่มทำงาน
อ่านส่วนท้ายของล็อก ส่วนใหญ่แล้วฐานข้อมูลไม่สามารถเข้าถึงได้ (ตรวจสอบ AM_SQLSETTINGS_DATASOURCE ด้วย antimatter db ping) การย้ายฐานข้อมูล (migration) ล้มเหลว (กู้คืนสำรองข้อมูลที่ทำไว้ก่อนอัปเกรดและรายงานข้อผิดพลาด) หรือพอร์ตที่รับฟัง (listen port) ถูกใช้งานอยู่
ถูกล็อกออกจากบัญชีผู้ดูแลระบบ
จากเซิร์ฟเวอร์ โหมดโลคอลไม่จำเป็นต้องใช้รหัสผ่าน:
docker compose exec antimatter amctl --local user change-password admin --password 'a-new-password'
docker compose exec antimatter amctl --local user resetmfa admin
docker compose exec antimatter amctl --local roles system-admin admin
การรายงานบั๊ก
เปิด issue ใน Antimatter community repository พร้อมระบุเวอร์ชัน วิธีที่ติดตั้งไว้ สิ่งที่คุณทำ และบรรทัด log ที่เกี่ยวข้อง สำหรับปัญหาความปลอดภัย กรุณารายงานเป็นการส่วนตัว ตามที่ นโยบายความปลอดภัย ระบุไว้