ติดตั้ง Telegraf เก็บ Metrics บน VPS ส่งไป InfluxDB
Telegraf เป็น agent ที่ใช้เก็บข้อมูล metrics จากระบบ VPS เช่น CPU memory disk network ต่างๆ และส่งข้อมูลไปยัง InfluxDB เพื่อจัดเก็บแบบ time-series database จากนั้นสามารถแสดงผลด้วย Grafana ได้สวยงาม เครื่องมือนี้เบาและใช้ทรัพยากรน้อยเหมาะสำหรับการ monitor VPS อย่างต่อเนื่อง
Telegraf คืออะไร และเหตุใดถึงต้องใช้
Telegraf เป็น agent ที่เขียนด้วยภาษา Go ทำให้เบาและทำงานได้รวดเร็ว มันสามารถเก็บข้อมูล metrics จากหลายแหล่ง เช่น CPU usage memory disk I/O network traffic process สถานะ systemd service ข้อมูล MySQL Nginx Docker และอื่นๆ อีกมากมาย
ประโยชน์หลักของการใช้ Telegraf คือ:
- จัดเก็บแบบ time-series: ข้อมูล metrics ถูกเก็บพร้อมกับ timestamp ทำให้สามารถวิเคราะห์การเปลี่ยนแปลงของระบบเมื่อเวลาผ่านไป
- ตรวจสอบปัญหา: เมื่อระบบมีปัญหา สามารถกลับไปดูประวัติ metrics เพื่อหาสาเหตุของปัญหา
- วางแผนการขยายระบบ: จากข้อมูล metrics สามารถเห็นแนวโน้มของการใช้ทรัพยากร
- เตือนระบบ: สามารถตั้ง alert เมื่อ metrics เกินค่าที่กำหนด
ขั้นตอนการติดตั้ง Telegraf
เนื่องจาก Telegraf สถาปัตยกรรมจำหน่ายโดย InfluxData เราต้องเพิ่ม repository ของพวกเขาก่อน เหมาะสำหรับระบบ Ubuntu/Debian
1. เพิ่ม InfluxDB Repository
เปิด terminal และรันคำสั่งต่อไปนี้เพื่อเพิ่ม GPG key และ repository:
curl -s https://repos.influxdata.com/influxdata-archive_compat.key | gpg --dearmor | sudo tee /usr/share/keyrings/influxdata-archive-compat.gpg > /dev/null
echo 'deb [signed-by=/usr/share/keyrings/influxdata-archive-compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
2. อัปเดต Package List และติดตั้ง Telegraf
sudo apt-get update
sudo apt-get install -y telegraf
ระหว่างการติดตั้ง ระบบอาจถามให้ยืนยัน ให้พิมพ์ y แล้วกด Enter
3. เริ่มสตาร์ท Telegraf Service
sudo systemctl start telegraf
sudo systemctl enable telegraf
คำสั่ง enable จะทำให้ telegraf เริ่มต้นโดยอัตโนมัติเมื่อ VPS รีบูท
การตั้งค่า Telegraf พื้นฐาน
ไฟล์ config หลักของ Telegraf อยู่ที่ /etc/telegraf/telegraf.conf ซึ่งเป็นไฟล์ขนาดใหญ่ มันแบ่งออกเป็นสามส่วนหลัก: global tags, agent settings, input plugins, และ output plugins
ดูไฟล์ Config
sudo cat /etc/telegraf/telegraf.conf | head -50
แก้ไขไฟล์ Config เพื่อกำหนด InfluxDB Output
เปิดไฟล์ config ด้วย nano หรือ vim:
sudo nano /etc/telegraf/telegraf.conf
ค้นหาส่วน [[outputs.influxdb]] (ประมาณบรรทัดที่ 90-110) และแก้ไขตามนี้:
[[outputs.influxdb]]
urls = ["http://localhost:8086"]
database = "telegraf"
username = "telegraf"
password = "telegraf_password"
retention_policy = ""
write_consistency = "any"
timeout = "5s"
ในตัวอย่างนี้ Telegraf จะส่ง metrics ไปยัง InfluxDB ที่อยู่ที่ localhost:8086 โดยใช้ username telegraf และ password telegraf_password และจัดเก็บในฐานข้อมูลชื่อ telegraf
ตั้งค่า Input Plugins สำหรับ Monitoring ต่างๆ
Telegraf มี input plugins มากมายที่สามารถเลือกใช้ได้ ด้านล่างเป็นตัวอย่างการตั้งค่า plugins ที่นิยมใช้
CPU, Memory, และ Disk Usage (ค่าเริ่มต้นแล้ว)
plugins cpu mem disk diskio net มักจะเปิดใช้งานแล้วตั้งแต่ default config ให้ค้นหาส่วน:
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
[[inputs.mem]]
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs"]
[[inputs.net]]
MySQL Monitoring Plugin
หากต้องการติดตาม MySQL metrics ให้ค้นหา [[inputs.mysql]] และแก้ไข:
[[inputs.mysql]]
servers = ["user:password@tcp(127.0.0.1:3306)/"]
metric_collection_interval = "30s"
gather_global_variables = true
gather_slave_status = false
gather_table_io_waits = false
gather_index_io_waits = false
gather_event_waits = false
แทนที่ user และ password ด้วยข้อมูลจริงของ MySQL user ที่มีสิทธิ์เพียงพอ
Nginx Monitoring Plugin
สำหรับ Nginx ให้ค้นหา [[inputs.nginx]]:
[[inputs.nginx]]
urls = ["http://localhost:8080/nginx_status"]
ก่อนใช้งาน ต้องแน่ใจว่า Nginx ได้เปิดใช้งาน stub_status module ในไฟล์ /etc/nginx/nginx.conf:
server {
listen 8080;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
Docker Monitoring Plugin
หากใช้ Docker ให้ค้นหา [[inputs.docker]]:
[[inputs.docker]]
endpoint = "unix:///var/run/docker.sock"
gather_services = false
container_names = []
container_name_include = []
container_name_exclude = []
timeout = "5s"
perdevice = true
total = true
ตรวจสอบให้แน่ใจว่า telegraf user มีสิทธิ์เข้าถึง Docker socket:
sudo usermod -aG docker telegraf
บันทึกการเปลี่ยนแปลง และรีสตาร์ท Telegraf
หลังจากแก้ไขไฟล์ config ให้บันทึกการเปลี่ยนแปลง (ใน nano ให้กด Ctrl+O แล้ว Enter สำหรับ Ctrl+X เพื่อออก) จากนั้นรีสตาร์ท service:
sudo systemctl restart telegraf
ตรวจสอบสถานะ:
sudo systemctl status telegraf
ตรวจสอบว่า Telegraf ทำงานถูกต้อง
ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่า Telegraf ทำงานและส่งข้อมูลไปยัง InfluxDB สำเร็จหรือไม่
ตรวจสอบ Service Status
sudo systemctl status telegraf
ควรจะเห็น active (running) ถ้าเห็น failed แสดงว่า config มีปัญหา
ตรวจสอบ Logs
sudo journalctl -u telegraf -f
คำสั่งนี้จะแสดง log แบบเรียลไทม์ ให้ดูว่ามีข้อความ error หรือไม่ กด Ctrl+C เพื่อออก
ทดสอบการส่งข้อมูล
ใช้คำสั่งต่อไปนี้เพื่อทดสอบ config และดูว่าจะ output อะไร:
telegraf --config /etc/telegraf/telegraf.conf --test 2>&1 | head -100
หากการตั้งค่าถูกต้อง ควรจะเห็น output ของ metrics ที่เก็บได้
SELECT * FROM cpu LIMIT 5 เพื่อดู 5 rows แรกแก้ปัญหาที่พบบ่อย
Error: Connection Refused to InfluxDB
อาการ: ใน logs จะเห็นข้อความ failed to write to InfluxDB: connection refused
สาเหตุ: InfluxDB service ไม่ได้รันหรือ port ไม่ถูกต้อง
วิธีแก้:
# ตรวจสอบว่า InfluxDB ทำงาน
sudo systemctl status influxdb
# ตรวจสอบ port 8086
sudo netstat -tulpn | grep 8086
# ถ้า InfluxDB ไม่ทำงาน ให้เริ่มสตาร์ท
sudo systemctl start influxdb
Error: MySQL Permission Denied
อาการ: Error in plugin [inputs.mysql]: Error opening MySQL connection: access denied for user
สาเหตุ: Username password ไม่ถูกต้องหรือ user ไม่มี privileges ที่พอ
วิธีแก้:
# ลงชื่อเข้า MySQL
mysql -u root -p
# สร้าง user ใหม่สำหรับ Telegraf
CREATE USER 'telegraf'@'localhost' IDENTIFIED BY 'telegraf_password';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'telegraf'@'localhost';
FLUSH PRIVILEGES;
EXIT;
อัปเดต telegraf.conf ด้วย username password ใหม่ จากนั้น restart:
sudo systemctl restart telegraf
Error: Docker Socket Permission Denied
อาการ: Error in plugin [inputs.docker]: Cannot connect to Docker daemon socket
สาเหตุ: User telegraf ไม่มีสิทธิ์เข้าถึง Docker socket
วิธีแก้:
sudo usermod -aG docker telegraf
sudo systemctl restart telegraf
Error: Config Syntax Invalid
อาการ: Error loading config file: error parsing telegraf.conf
สาเหตุ: ไฟล์ config มี syntax error เมื่อแก้ไข
วิธีแก้:
# ตรวจสอบ config
telegraf --config /etc/telegraf/telegraf.conf --test
# ดูบรรทัดที่มี error อย่างเฉพาะเจาะจง
sudo nano /etc/telegraf/telegraf.conf
# ทั่วไปปัญหามักเป็น missing bracket หรือ quotes ที่ไม่สมดุล
คำถามที่พบบ่อย
สามารถเก็บข้อมูล metrics นานเท่าไหร่ได้
ระยะเวลาการเก็บข้อมูลขึ้นอยู่กับ retention policy ที่ตั้งใน InfluxDB ค่าเริ่มต้นส่วนใหญ่คือเก็บ 30 วัน ถ้าต้องการเก็บนานขึ้น ต้องแก้ไข retention policy ใน InfluxDB admin panel หรือใช้ CLI
Telegraf ใช้ทรัพยากร CPU Memory เท่าไหร่
Telegraf เป็น agent ที่เบาและใช้ทรัพยากรน้อย ส่วนใหญ่จะใช้ CPU น้อยกว่า 1% และ memory ราว 30-50 MB เท่านั้น ขึ้นอยู่กับจำนวน plugins และ frequency ของการเก็บข้อมูล หากต้องการลด resource ให้ลดจำนวน plugins หรือเพิ่ม interval time
ความเร็วในการส่งข้อมูลไปยัง InfluxDB
โดยค่าเริ่มต้น Telegraf จะเก็บข้อมูลและส่งไปยัง InfluxDB ทุก ๆ 10 วินาที สามารถปรับได้ในไฟล์ config โดยการแก้ไข interval และ flush_interval ถ้าต้องการเก็บบ่อยขึ้นให้ตั้งค่าต่ำลง แต่อย่าลดน้อยเกินไปเพราะจะใช้ bandwidth และ CPU มากขึ้น