개요
이번 게시글에서는 Telegraf
로 서버의 각종 지표(Metric)을 수집하고,
InfluxDB 라는 데이터 저장소에 차곡차곡 저장한 뒤,
Grafana를 통해 수집한 지표를 직관적인 대시보드로 시각화하는 방법에 대해 기록해보려고 합니다.
삼총사 소개!
본격적인 구축에 앞서, 우리가 사용할 세 가지 도구가 각각 어떤 역할을 하는지 이해해봅시다.
🧑🌾 Telegraf: 부지런한 데이터 수집가
- 역할: 데이터 수집 (Collect)
- 개념: 모니터링할 서버에 직접 설치되어, 시스템의 다양한 정보를 주기적으로 수집하는 에이전트입니다.
- CPU 사용률, 메모리 점유율, 디스크 I/O, 네트워크 트래픽 등 생각할 수 있는 거의 모든 시스템 지표를 수집할 수 있어요.
- 특징
- 플러그인 기반: 수백 개의 플러그인(Input/Output)을 지원하여 확장성이 매우 뛰어납니다.
- Docker, Nginx, MySQL 등 다양한 서비스의 지표도 플러그인 추가만으로 쉽게 수집할 수 있어요!
Go
언어로 작성되어 매우 가볍고 시스템에 부하를 주지 않습니다!
쉽게 말해서, Telegraf
는 서버 곳곳을 돌아다니며 서버의 리소스 현황을 물어보고 기록하는 부지런한 도구라고 생각하시면 될 것 같습니다.
🗄️ InfluxDB: 시계열 데이터 전문 창고
- 역할: 데이터 저장 (Store)
- 개념: '언제(Time)' 어떤 일이 있었는지'를 기록한 데이터, 즉 시계열 데이터(Time-Series Data) 를 저장하고 처리하는 데 특화된 데이터베이스(TSDB)입니다.
- 특징:
- 고성능: 대량의 시계열 데이터를 매우 빠르고 효율적으로 쓰고 읽을 수 있도록 설계되었습니다.
- 전용 쿼리 언어: InfluxQL 또는 Flux라는 자체 쿼리 언어를 통해 시계열 데이터를 쉽게 조회하고 집계할 수 있습니다.
- 데이터 보존 정책 (Retention Policies): 데이터 보관 기간을 설정하여 오래된 데이터는 자동으로 삭제할 수 있어 저장 공간을 효율적으로 관리할 수 있습니다.
🎨 Grafana: 데이터를 예술로 만드는 아티스트
Grafana는 워낙 유명해서 다들 아실거라고 생각합니다!
데이터 시각화를 해주는 역할이고, InfluxDB
와 같은 다양한 데이터 소스에 저장된 데이터를 가져와서,
사용자가 원하는 형태로 멋지게 시각화해주는 대시보드 툴이죠.
TIG 스택 구축 해보기
이제 이론은 충분히 익혔으니, 서버에 직접 TIG 스택을 구축해보겠습니다.
사전 준비
이 실습의 모든 과정은 Ubuntu
및 Docker
컨테이너 환경에서 진행됩니다.
먼저 docker
및 docker compose
를 설치하고 실습을 진행해주세요.
도커 및 도커 컴포즈 설치 방법
1단계: 프로젝트 폴더 및 설정 파일 생성
하나의 폴더 안에서 모든 것을 관리하도록 하겠습니다.
1. 작업할 폴더를 하나 생성해주세요.
mkdir my-tig-stack
cd my-tig-stack
2. 이 폴더 안에 docker-compose.yaml
파일을 생성하고 아래 내용을 붙여넣도록 하겠습니다.
# docker-compose.yml
version: '3'
services:
influxdb:
image: influxdb:2.7 # InfluxDB 이미지
container_name: influxdb
volumes:
- influxdb-data:/var/lib/influxdb2 # 데이터 영속성을 위한 볼륨
ports:
- "8086:8086" # InfluxDB 포트
environment:
# InfluxDB 초기 설정을 환경변수로 지정
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=admin # 원하는 유저명
- DOCKER_INFLUXDB_INIT_PASSWORD=your_secure_password # 강력한 비밀번호로 변경!
- DOCKER_INFLUXDB_INIT_ORG=my-org # 조직 이름
- DOCKER_INFLUXDB_INIT_BUCKET=my-bucket # 버킷 이름
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=admin # 매우 중요한 토큰! 꼭 복사해두세요.
restart: unless-stopped
telegraf:
image: telegraf:1.29 # Telegraf 이미지
container_name: telegraf
volumes:
# 로컬의 telegraf.conf 파일을 컨테이너 내부로 마운트
- ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
# 호스트(서버)의 시스템 정보를 읽기 위해 필요
- /proc:/rootfs/proc:ro
- /sys:/rootfs/sys:ro
- /etc/os-release:/rootfs/etc/os-release:ro
depends_on:
- influxdb # InfluxDB가 먼저 실행되도록 설정
restart: unless-stopped
grafana:
image: grafana/grafana:10.4.2 # Grafana 이미지
container_name: grafana
volumes:
- grafana-data:/var/lib/grafana # 대시보드, 설정 등 데이터 영속성을 위한 볼륨
ports:
- "3000:3000" # Grafana 포트
depends_on:
- influxdb
restart: unless-stopped
volumes:
influxdb-data:
grafana-data:
각 컨테이너별 설정 내용 최신화가 필요하신 분들은 아래 깃허브 링크를 각각 참고해보세요.
3. 같은 폴더(my-tig-stack
) 안에 Telegraf 설정 파일인 telegraf.conf
를 생성하고 아래 내용을 붙여넣도록 하겠습니다.
# telegraf.conf
# Global Agent Configuration
[agent]
interval = "10s"
round_interval = true
hostname = ""
omit_hostname = false
# INPUT PLUGINS
# 기본적인 호스트 서버의 CPU, 메모리, 디스크 등의 정보를 수집합니다.
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.diskio]]
[[inputs.mem]]
[[inputs.net]]
[[inputs.system]]
[[inputs.swap]]
# OUTPUT PLUGINS
# 수집한 데이터를 InfluxDB로 보냅니다.
[[outputs.influxdb_v2]]
# 도커 네트워크 안에서는 서비스 이름(influxdb)으로 통신합니다.
urls = ["http://influxdb:8086"]
# docker-compose.yml 파일에 설정한 토큰, 조직, 버킷 이름을 정확하게 입력합니다.
token = "admin" # 여기에 위에서 설정한 influxdb 토큰을 다시 입력!
organization = "my-org"
bucket = "my-bucket"
2단계: 모든 컨테이너 실행하기
이제 모든 설정 파일 작성이 끝이 났습니다!
my-tig-stack
폴더 안에서 아래 명령어 한 줄만 실행시켜주세요.
docker compose up -d --build
3단계: Grafana 설정 및 대시보드 연동
이제 Grafana에 접속해 데이터 소스(Influxdb
)를 연결하고 대시보드를 가져오기만 하면 끝이 납니다!
웹 브라우저에서 http://<내 서버 IP 주소>:3000
으로 접속합니다.
(ID: admin
/ PW: admin
, 이후 변경)
왼쪽 메뉴 톱니바퀴(Configuration) > Data Sources
> Add new data source
> InfluxDB
선택
설정 화면에서 아래와 같이 입력합니다.
- Query Language: Flux
- HTTP > URL: http://influxdb:8086
- 가장 중요한 부분입니다! 브라우저가 아닌 Grafana '컨테이너'가 InfluxDB '컨테이너'에 접속하는 것이므로, Docker 네트워크의 서비스 이름인 influxdb를 사용해야 합니다. localhost라고 쓰면 Grafana 컨테이너 자기 자신을 가리키므로 연결에 실패합니다.
- InfluxDB Details
- Organization: my-org (docker-compose.yml에 설정한 값)
- Token: your_super_secret_token (docker-compose.yml에 설정한 값)
- Default Bucket: my-bucket (docker-compose.yml에 설정한 값)
Save & test
를 클릭하여 "Data source is working" 메시지를 확인합니다.
이제 왼쪽 메뉴 + > Import에 들어가 대시보드 ID 1575
또는 8685
를 입력하여 대시보드를 가져오면 됩니다!