Telegraf - InfluxDB - Grafana 로 로그 모니터링 시스템 구축
AWS Spot 인스턴스를 활용한 데이터 수집 업무를 진행하면서
실행시에만 인스턴스가 실행되었다가 사라지는 Spot 인스턴스의 특성상
로그 모니터링을 하기가 힘든 점이 있었다.
편의를 위해 서비스가 실행될 때 로그를 수집할 수 없을까?
에 대한 고민을 하다가
동료와 함께 Telegraf - InfluxDB - Grafana
를 활용하여
모니터링 시스템을 구축해보기로 하였다.
Telegraf는 influxdata 에서 제공하는 오픈소스이며 수집기
로 사용된다.
기본적으로 시스템 지표(cpu, disk, mem 등)을 모니터링 할 수 있게 제공하며,
telegraf.conf 의 inputs 항목을 설정함에 따라 다양한 루트로 수집이 가능하다.
파일 전체 내용은 아래 링크에서 확인할 수 있다.
https://github.com/influxdata/telegraf/blob/master/etc/telegraf.conf
처음에는 inputs.file
방식과 inputs.tail
방식도 고려해보았으나,
정해진 data_format 에 맞게 컨버팅을 해줘야 하는 번거로움이 있어서
로그 그대로를 모니터링 하려는 목적에 맞지 않아 inputs.docker_log
방식을
사용하기로 하였다.
Springboot 서비스는 도커로 실행되고 있다는 전제하에 글을 작성합니다.
우선 해당 서비스 내에 telegraf 라는 폴더를 생성한 후,
docker-compose.yml
, telegraf.conf
, telegraf_env
3가지 파일을 준비한다.
docker-compose.yml
telegraf 실행시 사용할 docker-compose 파일
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
version: '3'
services:
telegraf:
container_name: telegraf
image: telegraf:latest
env_file:
- ./telegraf_env
environment:
HOST_PROC: /rootfs/proc
HOST_SYS: /rootfs/sys
HOST_ETC: /rootfs/etc
hostname: ${HOSTNAME}
volumes:
- ./telegraf.conf:/etc/telegraf/telegraf.conf
- /var/run/docker.sock:/var/run/docker.sock
- /sys:/rootfs/sys:ro
- /proc:/rootfs/proc:ro
- /etc:/rootfs/etc:ro
links:
- application
application:
container_name: ${APP_NAME}
image: ${APP_NAME}
ports:
- 80:8080
telegraf.conf
기본 설정 외에는 모두 주석처리 되어있는데, 필요한 것만 주석제외 후 사용합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
[[inputs.docker_log]]
endpoint = "unix:///var/run/docker.sock"
from_beginning = false
container_name_include = ["${CONTAINER_NAME}"]
container_state_include = ["running"]
source_tag = true
insecure_skip_verify = false
[[outputs.influxdb]]
urls = ["${INFLUX_URL}"]
database = "${INFLUX_DATABASE}"
username = "${INFLUX_USERNAME}"
password = "${INFLUX_PASSWORD}"
telegraf_env
telegraf.conf 에서 참조할 환경변수
1
2
3
4
5
6
INFLUX_DATABASE=데이터베이스명
CONTAINER_NAME=컨테이너명
INFLUX_URL=주소
INFLUX_USERNAME=유저이름
INFLUX_PASSWORD=비밀번호
위와 같이 설정 후에 서비스 docker 실행
및 telegraf docker-compose
를 실행하면 된다.
ex) 실행 스크립트
위를 통해 2개의 도커가 생성된 것을 확인할 수 있을 것이고,
influxdb 에 지정한 database의 measurements를 확인해보면 아래와 같이 자동으로
생성된 것을 확인할 수 있다.
field
tag
이제 influxdb에 쿼리를 해서 데이터가 들어있는 것을 확인하면 Telegraf 연동이 완료된다.
데이터가 잘 들어온 것을 확인한 후에, Grafana 와 연동하여 필요한 데이터를 시각화하면
로그 모니터링 시스템 구축
이 완료된다.
이제 Spot 인스턴스에서 무슨 일이 있었는지 면밀히 볼 수 있게 되었다!!