ติดตั้ง Telegraf เก็บ Metrics บน VPS ส่งไป InfluxDB

ติดตั้ง Telegraf เก็บ Metrics บน VPS ส่งไป InfluxDB

มิถุนายน 2026 · อ่าน 8 นาที

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 คือ:

ขั้นตอนการติดตั้ง 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 ที่เก็บได้

Tip: ถ้าต้องการดูข้อมูลใน InfluxDB โดยตรง ให้ใช้ InfluxDB CLI เข้าไปดู ฐานข้อมูล telegraf และคำสั่ง 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 มากขึ้น