InfluxDB의 공식 데이터 수집 에이전트인 Telegraf의 설정과 활용을 정리합니다.

Telegraf란?

Telegraf는 InfluxData에서 개발한 플러그인 기반 메트릭 수집 에이전트입니다.
200개 이상의 입력/출력 플러그인을 지원하며, 시스템 메트릭, 애플리케이션 메트릭, 로그 등을 수집하여 InfluxDB에 전송합니다.

아키텍처

[Input Plugins] → [Processor Plugins] → [Aggregator Plugins] → [Output Plugins]
  (데이터 수집)      (데이터 변환)          (데이터 집계)          (데이터 전송)

설치

Linux

sudo apt install telegraf
# 또는
wget https://dl.influxdata.com/telegraf/releases/telegraf_1.x.x_amd64.deb
sudo dpkg -i telegraf_1.x.x_amd64.deb

Mac

brew install telegraf

Docker

docker run -d --name telegraf \
  -v /path/to/telegraf.conf:/etc/telegraf/telegraf.conf:ro \
  telegraf

설정 파일 (telegraf.conf)

기본 구조

# 글로벌 설정
[agent]
  interval = "10s"              # 수집 간격
  round_interval = true
  flush_interval = "10s"        # 전송 간격
  flush_jitter = "0s"

# 출력: InfluxDB 2.x
[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "my-super-secret-token"
  organization = "myorg"
  bucket = "mybucket"

# 입력: CPU
[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false

# 입력: 메모리
[[inputs.mem]]

# 입력: 디스크
[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs"]

# 입력: 네트워크
[[inputs.net]]

주요 Input 플러그인

시스템 메트릭

플러그인 수집 항목
inputs.cpu CPU 사용률
inputs.mem 메모리 사용량
inputs.disk 디스크 사용량
inputs.diskio 디스크 I/O
inputs.net 네트워크 트래픽
inputs.system 부하, 가동 시간
inputs.processes 프로세스 수

애플리케이션/서비스

플러그인 대상
inputs.nginx Nginx 상태
inputs.apache Apache 상태
inputs.mysql MySQL 메트릭
inputs.postgresql PostgreSQL 메트릭
inputs.redis Redis 메트릭
inputs.mongodb MongoDB 메트릭
inputs.docker Docker 컨테이너
inputs.kubernetes Kubernetes 메트릭

기타

플러그인 용도
inputs.http_response HTTP 엔드포인트 모니터링
inputs.ping 네트워크 연결 확인
inputs.snmp SNMP 장비 모니터링
inputs.mqtt_consumer MQTT 메시지 수집
inputs.tail 로그 파일 추적
inputs.exec 커스텀 스크립트 실행

설정 예시

MySQL 모니터링

[[inputs.mysql]]
  servers = ["user:password@tcp(localhost:3306)/"]
  gather_table_schema = true
  gather_process_list = true
  gather_slave_status = true

Docker 모니터링

[[inputs.docker]]
  endpoint = "unix:///var/run/docker.sock"
  container_names = []
  timeout = "5s"
  perdevice = true
  total = true

HTTP 엔드포인트 체크

[[inputs.http_response]]
  urls = ["https://myapp.com/health", "https://api.myapp.com/status"]
  response_timeout = "5s"
  method = "GET"
  follow_redirects = true

커스텀 스크립트

[[inputs.exec]]
  commands = ["/opt/scripts/custom_metric.sh"]
  timeout = "5s"
  data_format = "influx"    # Line Protocol 형식 출력

실행 및 관리

# 설정 파일 테스트
telegraf --config telegraf.conf --test

# 포그라운드 실행
telegraf --config telegraf.conf

# 서비스 시작
sudo systemctl start telegraf
sudo systemctl enable telegraf

# 로그 확인
sudo journalctl -u telegraf -f

Telegraf + Grafana + InfluxDB 연동 구성

[서버/앱] → [Telegraf] → [InfluxDB] → [Grafana 대시보드]

이 구성은 서버 모니터링의 가장 일반적인 오픈소스 스택입니다.

단계 역할
Telegraf 10초마다 시스템 메트릭 수집 → InfluxDB 전송
InfluxDB 시계열 데이터 저장, 30일 보존
Grafana InfluxDB를 데이터 소스로 대시보드 시각화

관련된 글 (influxdb > lecture-influxdb)