เอกสารอ้างอิง: รายละเอียดการเชื่อมต่อ MySQL ฉบับเต็มและคำอธิบายฟิลด์อยู่ใน TrueWatch MySQL Integration Docs
สิ่งที่คุณจะทำได้
เมื่อทำตามคู่มือทีละขั้นตอนนี้ คุณจะสามารถ:
- ติดตั้งและกำหนดค่า TrueWatch DataKit เพื่อเชื่อมต่อกับ MySQL
- สร้างผู้ใช้สำหรับการมอนิเตอร์ที่ปลอดภัยด้วยสิทธิ์น้อยที่สุด
- เปิดใช้งานและเก็บ general/slow query log ของ MySQL (ไม่บังคับ)
- สร้างแดชบอร์ดมอนิเตอร์ MySQL ที่ใช้งานได้จริงใน TrueWatch
เหมาะสำหรับ: วิศวกรแบ็กเอนด์ SRE และ DBA ที่ต้องการมอนิเตอร์ MySQL ระดับองค์กรได้อย่างรวดเร็ว
สิ่งที่ต้องมีก่อนเริ่ม
- อินสแตนซ์ MySQL 5.7+ / 8.0+ ที่เข้าถึงได้ (ใช้ RDS บนคลาวด์ได้เช่นกัน)
- แนะนำ: MySQL 8.0 เพื่อให้ครอบคลุม
performance_schemaอย่างสมบูรณ์ - สิทธิ์ในการสร้างผู้ใช้และกำหนดสิทธิ์
- สามารถติดตั้ง TrueWatch DataKit ได้ (Docker หรือติดตั้งบนโฮสต์)
ภาพรวมสถาปัตยกรรม
MySQL ← (monitoring user, performance_schema)
↑
DataKit (container or host) → ships Metrics / Logs / Slow Queries to TrueWatchต้องการเทเลเมทรีระดับ eBPF/โฮสต์ใช่ไหม แนะนำให้ติดตั้งบนโฮสต์ หากมอนิเตอร์เฉพาะฐานข้อมูล ใช้คอนเทนเนอร์ได้
ขั้นตอนที่ 1: ตรวจสอบและเปิดใช้งาน performance_schema
เมตริกฐานข้อมูลจำนวนมากมาจาก performance_schema ของ MySQL ตรวจสอบว่าเปิดใช้งานอยู่หรือไม่:
SHOW VARIABLES LIKE 'performance_schema';หากพบ Value = OFF ให้เปิดใช้งานตามสภาพแวดล้อมของคุณ:
- ใน
my.cnf:
[mysqld]
performance_schema=ONรีสตาร์ต MySQL แล้วตรวจสอบว่าเป็น ON
บริการแบบมีผู้ดูแล (เช่น Aliyun RDS) อาจจำกัดบาง measurement (เช่น
mysql_user_status) หากperformance_schemaถูกปิดหรือถูกจำกัด ดูคำถามที่พบบ่อยและวิธีแก้ไขอย่างเป็นทางการได้ใน TrueWatch MySQL Integration Docs
ขั้นตอนที่ 2: สร้างผู้ใช้มอนิเตอร์ด้วยสิทธิ์น้อยที่สุด
เพื่อความปลอดภัยและการสังเกตการณ์ ให้สร้างผู้ใช้แบบอ่านอย่างเดียวโดยเฉพาะ (ปรับชื่อผู้ใช้/รหัสผ่านได้ตามต้องการ):
CREATE USER 'datakit'@'%' IDENTIFIED WITH caching_sha2_password BY 'datakit_password';
GRANT PROCESS ON *.* TO 'datakit'@'%';
GRANT SELECT ON *.* TO 'datakit'@'%';
GRANT SELECT ON performance_schema.* TO 'datakit'@'%';
GRANT SELECT ON mysql.user TO 'datakit'@'%';
GRANT REPLICATION CLIENT ON *.* TO 'datakit'@'%';
FLUSH PRIVILEGES;เหตุผลที่สิทธิ์เหล่านี้สำคัญ:
- PROCESS: ตรวจดูคิวรีและการเชื่อมต่อที่กำลังทำงาน
- SELECT (รวมถึง performance_schema): อ่านข้อมูลประสิทธิภาพและสถิติ
- REPLICATION CLIENT: อ่านสถานะการทำ replication (หากมี)
ขั้นตอนที่ 3: ติดตั้งและเริ่มต้น DataKit (เลือกอย่างใดอย่างหนึ่ง)
ติดตั้ง DataKit เป็นคอนเทนเนอร์หรือบนโฮสต์ (คำสั่งที่ปรับให้ง่ายขึ้นจากคู่มืออย่างเป็นทางการ):
3A. Docker (เริ่มต้นอย่างรวดเร็ว)

#1) ใน TrueWatch Console → DataKit → Docker เลือก DataWay ของคุณ แล้วคัดลอกคำสั่ง/โทเค็นที่สร้างขึ้น #2) บนโฮสต์เป้าหมาย รันคำสั่ง:
docker run -d --name datakit \
--hostname "$(hostname)" \
-p 9529:9529 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd)/conf.d:/usr/local/datakit/conf.d \
-e ENV_DATAWAY="https://<your-openway-host>?token=<your_token>" \
-e ENV_HTTP_LISTEN="0.0.0.0:9529" \
pubrepo.truewatch.com/truewatch/datakit:1.80.1#3) วางไฟล์ mysql.conf จากขั้นตอนถัดไปไว้ในไดเรกทอรี conf.d/ ที่เมานต์ไว้ (แนะนำ conf.d/db/) DataKit จะโหลดให้อัตโนมัติ
ดูตัวแปรสภาพแวดล้อมเพิ่มเติมและตัวเลือกขั้นสูง (พร็อกซี ข้อจำกัดทรัพยากร การบันทึกล็อก ฯลฯ) ได้ในเอกสารอย่างเป็นทางการ: DataKit Installation Docs
3B. ติดตั้งบนโฮสต์ (แนะนำสำหรับเมตริก eBPF/โฮสต์)

#1) ใน TrueWatch Console → DataKit → Linux เลือก DataWay แล้วคัดลอกคำสั่งที่มีโทเค็น
#2) บนโฮสต์เป้าหมาย รันคำสั่ง (ติดตั้งและเริ่มต้น DataKit):
DK_DATAWAY="https://<your-openway-host>?token=<your_token>" bash -c "$(curl -L https://static.truewatch.com/datakit/install.sh)"#3) วาง mysql.conf ไว้ใน conf.d/db/ ของ DataKit แล้วรีสตาร์ตบริการ:
sudo systemctl restart datakitสำหรับตัวเลือกเพิ่มเติม เช่น
DK_INSTALL_ONLYพร็อกซี และการอัปเกรด โปรดดูเอกสารอย่างเป็นทางการ: DataKit Installation Docs
ขั้นตอนที่ 4: กำหนดค่า DataKit MySQL input (inputs.mysql)
สร้างหรือแก้ไข mysql.conf ในไดเรกทอรี conf.d/db ของ DataKit:
[[inputs.mysql]]
host = "db" # or your MySQL address (FQDN/IP)
user = "datakit" # monitoring user
pass = "datakit_password"
port = 3306
interval = "10s"
innodb = true # collect key InnoDB metrics
dbm = true # enable Database Monitoring (query analysis)
election = true # single leader collects when multiple DataKits existความหมายของฟิลด์และเคล็ดลับการปรับแต่ง: ดู TrueWatch MySQL Integration Docs
รีสตาร์ต (หรือรีโหลดแบบฮอต) DataKit แล้วเมตริกจะเริ่มส่งเข้ามา
ขั้นตอนที่ 5 (ไม่บังคับ): เก็บ general/slow query log ของ MySQL
TrueWatch สามารถนำเข้า general และ slow query log ของ MySQL เพื่อระบุ SQL ที่มีความหน่วงสูงได้อย่างแม่นยำ
5A. เปิดใช้งาน slow query log (MySQL)
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL log_queries_not_using_indexes = 'ON'; -- optional: flag queries without indexes
-- Recommended tuning (persist via my.cnf):
SET GLOBAL long_query_time = 1; -- seconds threshold for slow queryหากต้องการให้คงค่าไว้ ให้เพิ่มลงใน my.cnf (ตัวอย่าง):
[mysqld]
slow_query_log=ON
long_query_time=1
log_queries_not_using_indexes=ON
log_output=FILE
slow_query_log_file=/var/log/mysql/slow.log5B. การเก็บล็อกด้วย DataKit (มักใช้กับการติดตั้งบนโฮสต์)
เพิ่มต่อท้ายใน conf.d/mysql.conf (หรือสร้างส่วนใหม่):
[inputs.mysql.log]
files = ["/var/log/mysql/*.log"] # adjust to your absolute pathsสำหรับการแมปฟิลด์ล็อกโดยละเอียด (ปกติ/slow) ดู TrueWatch MySQL Integration Docs
ขั้นตอนที่ 6: ตรวจสอบการนำเข้าข้อมูล
#1) ตรวจสอบหน้าสถานะของ DataKit (พอร์ตเริ่มต้น 9529) เพื่อยืนยันว่า input ทำงานปกติ
#2) ใน TrueWatch Explorer ค้นหา measurement เช่น mysql, mysql_replication_log
#3) มองหาฟิลด์ เช่น connections, query_time, lock_time, rows_examined, rows_sent
หากไม่พบบาง measurement (เช่น mysql_user_status) ให้ตรวจสอบว่าเปิดใช้งาน performance_schema แล้ว หรือตรวจสอบข้อจำกัดของ RDS ดูคำถามที่พบบ่อยได้ใน TrueWatch MySQL Integration Docs
ขั้นตอนที่ 7: สร้างแดชบอร์ด MySQL ที่ใช้งานได้จริง
A. ใช้แดชบอร์ดเทมเพลต (แนะนำ)
#1) ไปที่ Scenes ทางซ้าย → Dashboards ด้านบน → คลิก Create

#2) ภายใต้ System Views ค้นหา mysql แล้วเลือก Mysql Monitor View (หรือเทมเพลต MySQL เฉพาะของผู้ให้บริการคลาวด์)

#3) เทมเพลตมีแผนภูมิที่ใช้บ่อยสำหรับการเชื่อมต่อ ความหน่วงของคิวรี InnoDB และ replication ปรับแต่งได้ตามต้องการ
แหล่งที่มาของเทมเพลตและข้อมูลอ้างอิงฟิลด์: TrueWatch MySQL Integration Docs
B. สร้างวิดเจ็ตเอง (ยืดหยุ่น)
ตัวอย่างแดชบอร์ด


ตัวอย่างการกำหนดค่าวิดเจ็ต (QPS / TPS)
- QPS: ใช้เมตริก
mysqlกับQuestionsแล้วใช้non_negative_derivativeเพื่อให้ได้จำนวนคิวรีต่อวินาที

- TPS: ใช้นิพจน์ A+B เพื่อรวม
Handler_commitและHandler_rollbackโดยแต่ละตัวใช้non_negative_derivativeเพื่อให้ได้จำนวนทรานแซกชันต่อวินาที

ด้านล่างคือวิดเจ็ตที่ผ่านการใช้งานจริงสำหรับความต้องการมอนิเตอร์ฐานข้อมูลทั่วไป เพิ่มลงในแดชบอร์ด TrueWatch โดยใช้คิวรีแบบ Simple/Expression/DQL ตามความเหมาะสม
ตัวอย่างฟิลด์อ้างอิง measurement เช่น
mysqlและmysql_replication_logโปรดตรวจสอบว่ามีฟิลด์ดังกล่าวใน Explorer ของคุณ
A. ภาพรวม
-
อนุกรมเวลา (Connections)
- แหล่งข้อมูล:
mysql.connections - มิติ:
server(host:port) - วัตถุประสงค์: ติดตามความพร้อมกันและช่วงที่พุ่งสูง
- แหล่งข้อมูล:
-
ค่าเดี่ยว/แนวโน้ม (เวลาคิวรี p95)
- แหล่งข้อมูล:
mysql.query_time - การรวมค่า: p95 ในช่วง 5 นาที
- วัตถุประสงค์: ดูความหน่วงส่วนท้ายได้ในพริบตา
- แหล่งข้อมูล:
-
ค่าเดี่ยว/แนวโน้ม (เวลารอ lock)
- แหล่งข้อมูล:
mysql.lock_time - การรวมค่า: ค่าเฉลี่ยในช่วง 5 นาที (หรือ p95)
- วัตถุประสงค์: ตรวจจับการแย่งชิง lock และการบล็อก
- แหล่งข้อมูล:
-
ค่าเดี่ยว (สโลว์เคียวรีต่อนาที)
- แหล่งข้อมูล: slow query log (
inputs.mysql.log) - วิธีการ: นับเหตุการณ์ที่มี
db_slow_statement - วัตถุประสงค์: จับการเพิ่มขึ้นอย่างฉับพลันของสโลว์เคียวรี
- แหล่งข้อมูล: slow query log (
B. InnoDB และปริมาณงาน
-
อนุกรมเวลา (Rows Examined / Rows Sent)
- แหล่งข้อมูล:
mysql.rows_examined,mysql.rows_sent - การรวมค่า: ผลรวมหรืออัตรา
- วัตถุประสงค์: เข้าใจปริมาณการอ่านเทียบกับแถวที่ส่งกลับ เพื่อประเมินประสิทธิภาพ
- แหล่งข้อมูล:
-
ตาราง (ตาราง/อินเด็กซ์ที่ถูกใช้งานหนักสูงสุด)
- แหล่งข้อมูล:
mysql.index_name,mysql.object_name,mysql.object_schema - การรวมค่า: จัดกลุ่มตาม
query_signatureหรือobject_nameแสดงค่าเฉลี่ยquery_timeและจำนวน - วัตถุประสงค์: ค้นหาตาราง/อินเด็กซ์ที่ถูกใช้งานหนักและการดำเนินการที่ช้า
- แหล่งข้อมูล:
C. คิวรีที่มีปัญหา Top-N (ล็อก/เหตุการณ์)
-
ตาราง (สโลว์เคียวรีสูงสุดตามระยะเวลาเฉลี่ย)
- แหล่งข้อมูล: slow query log หรือเหตุการณ์
mysql - คอลัมน์:
query_signature,sql_text(หรือmessageที่ทำให้เป็นมาตรฐานแล้ว) - เมตริก: avg(
query_time), count()
- แหล่งข้อมูล: slow query log หรือเหตุการณ์
-
ตาราง (เหตุการณ์รอสูงสุด)
- แหล่งข้อมูล:
mysql.wait_event,event_name - เมตริก: sum(
event_timer_wait)
- แหล่งข้อมูล:
D. Replication (หากมี)
- ค่าเดี่ยว/ตาราง (สรุป Master / Executed GTID Set)
- แหล่งข้อมูล:
mysql_replication_log.Executed_Gtid_Set,Master_Host,Master_Port - วัตถุประสงค์: ยืนยันความสัมพันธ์ของ master และความคืบหน้าของ GTID
- แหล่งข้อมูล:
เคล็ดลับ: หากมี ให้เพิ่ม
Seconds_Behind_Masterเป็นค่าเดี่ยว/อนุกรมเวลาเพื่อดูความหน่วงของ replication
แนวปฏิบัติที่ดีและความปลอดภัย
- ใช้ผู้ใช้มอนิเตอร์เฉพาะที่มีสิทธิ์น้อยที่สุด แยกจากบัญชีของแอปพลิเคชัน
- ความถี่ในการเก็บข้อมูลที่สูงขึ้น (เช่น
interval = "10s") ใช้ได้ในสภาพแวดล้อม staging แต่ควรปรับให้เหมาะกับต้นทุน/ประสิทธิภาพของ prod - ปรับ
long_query_timeและlog_queries_not_using_indexesเพื่อสร้างสมดุลระหว่างสัญญาณรบกวนกับสัญญาณที่มีประโยชน์ - ในคอนเทนเนอร์ ควรใช้ stdout/log-driver แทนการเมานต์ไฟล์ เพื่อหลีกเลี่ยงการเปิดเผยพาธที่ละเอียดอ่อน
- เก็บข้อมูลรับรองไว้ใน secrets/ตัวแปรสภาพแวดล้อม แทนการบันทึกลงไฟล์
คำถามที่พบบ่อยและการแก้ไขปัญหา
ถาม: ฉันไม่เห็น measurement mysql_user_status
ตอบ: ตรวจสอบให้แน่ใจว่า
performance_schemaเป็นON:
SHOW VARIABLES LIKE 'performance_schema';หากเป็น OFF ให้เปิดใช้งานตามผู้ให้บริการฐานข้อมูล/RDS ของคุณ RDS บางผลิตภัณฑ์มีข้อจำกัดในเรื่องนี้ ดู TrueWatch MySQL Integration Docs
ถาม: DataKit ทำงานอยู่แต่ไม่มีข้อมูลเข้ามา
- ตรวจสอบรายละเอียดการเชื่อมต่อใน
mysql.conf(host/user/pass/port) - ตรวจสอบให้แน่ใจว่า security group/ไฟร์วอลล์อนุญาตให้ DataKit เข้าถึง MySQL ได้
- ตรวจสอบหน้าสถานะ/ล็อกของ DataKit เพื่อหาข้อผิดพลาดด้านการเชื่อมต่อหรือสิทธิ์
ถาม: สโลว์เคียวรีไม่ปรากฏ
- ยืนยันว่าเปิดใช้งาน
slow_query_logแล้ว - หากเก็บไฟล์จากคอนเทนเนอร์ ตรวจสอบให้แน่ใจว่าพาธแบบสัมบูรณ์สามารถอ่านได้ (การใช้ stdout/sidecar มักง่ายกว่า)
- ใน Explorer ค้นหาดัชนีล็อกด้วยเครื่องหมาย (เช่น
[MYSQL_QUERY]) หรือฟิลด์ของ slow log
เอกสารอ้างอิง
- เอกสารการเชื่อมต่ออย่างเป็นทางการและคำอธิบายฟิลด์: TrueWatch MySQL Integration Docs
- เส้นทางการเชื่อมต่อและเหตุผลของเรา (ผู้ใช้มอนิเตอร์ DataKit inputs sidecar):
demo-project/INTEGRATION_GUIDE.md
เมื่อทำตามขั้นตอนเหล่านี้ คุณได้เชื่อมต่อ MySQL กับ TrueWatch และสร้างแดชบอร์ดที่นำไปใช้งานได้จริงแล้ว ขั้นต่อไปให้เพิ่มการแจ้งเตือน (Monitors) รายงานตามกำหนดเวลา และการวิเคราะห์ความสัมพันธ์ข้ามบริการ เพื่อให้ได้การสังเกตการณ์ฐานข้อมูลแบบครบวงจรที่พร้อมใช้งานจริงในระดับโปรดักชัน

