예쁜 모니터링 화면과 직관적인 수치를 제공하며, 그래픽한 대쉬보드가 있는 IT자원 모니터링 솔루션입니다.
공식사이트 : https://grafana.com/
Repository : https://github.com/grafana/grafana
관리 서비스의 성격에 맞게 다중 노드로 분산하여 서비스할 수 있도록 구성해보았습니다. 매번 설정하는 것이 귀찮아서 모든 서비스를 한번에 설정하고 File로 저장하여 생성배포하는 Docker Compose File을 활용하도록 하겠습니다. (매번 설정은 귀찮아 ㅠㅠ)
1. Docker Compose File 생성
grafana 구성을 위해 grafana, influxdb 라는 두개의 Service가 이 Stack을 이루고, grafana Service는 1개의 Task(Container)로 이루어져 있습니다. Docker Compose File 생성시 대략 하나의 서비스를 기술할 때 아래의 설정값이 있어야 합니다.
- image : 생성할 컨터에너의 기본(Base) 이미지를 지정한다. nvcr.io 등 외부, 내부 이미지 허브에서 가져올수 있다.
- ports : 서비스를 구동시킬 내/외부 창구(Port)를 지정한다.
- volumes : 디스크 혹은 스토리지의 경로를 지정하여 생성될 컨테이너에서 사용할수 있도록 마운트한다.
- deploy : 여러 노드 중 어디에 몇개를 어느정도 리소스(CPU, Memory)로 배포할 것인지 정한다.
1-1. influxDB 컨테이너 생성을 위한 도커 컴포즈 파일을 생성한다. 우선, 1.3.5 버젼의 Base 이미지를 호출하고 볼륨을 마운트하고 서비스 Port를 지정합니다. 그리고, 배포한 Worker Node를 설정하면 끝 ! (배포관련된 자세한 설명은 뒤에서 하겠습니다.)
influxdb:
image: influxdb:1.3.5_0618
volumes:
- /DGX_MANAGE/influxdb:/var/lib/influxdb
ports:
- "8086:8086"
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
placement:
constraints: [node.role == manager]
1-2. grafana 컨테이너 생성을 위한 도커 컴포즈 파일 생성합니다. 방법은 위의 influxDB와 동일합니다. 다만 environment 부분은 DB 패스워드와 연결내용인데, 뒤부분에서 설명드리겠습니다.
grafana:
image: grafana/grafana
volumes:
- /DGX_MANAGE/grafana:/var/lib/grafana
environment:
GF_SECURITY_ADMIN_PASSWD: secret
INFLUXDB_URL: http://influxdb:8086
# KAPACITOR_URL: http://kapacitor:9092
ports:
- "3000:3000"
links:
- influxdb
# - kapacitor 아직 사용하지 않음
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
placement:
constraints: [node.role == manager]
resources:
limits:
cpus: '0.10'
memory: 50M
reservations:
cpus: '0.05'
memory: 20M
2. 서비스 및 관리 네트워크 설정
docker swarm을 이용해 개발과 배포를 한다면 network driver의 기본 설정값은 네트워크 overlay 입니다. overlay 는 여러대의 docker-machine (물리서버) 에 나누어진 컨테이너들이 마치 하나의 network 상에 존재하는 것처럼 접속가능하게 해준다.
2-1. deploy 옵션
- replicas 옵션은 배포할 컨테이너 수를 결정
- placement 옵션은 컨테이너를 구동할 노드를 정할 수 있음
(예를 들어) Manage 노드만 Task 실행 : --constraint 'node.role == manager' 옵션 필요
Worker 노드만 Task 실행: --constraint 'node.role != worker' 옵션 필요
3. Docker Compose 실행
$ docker stack deploy/up -c <docker-compose.yml path> --with-registry-auth <service_name>
ex) docker stack deploy -c ./docker-compose.yml --with-registry-auth Monitoring
docker stack 명령어를 사용하여 여러개의 서비스를 일일이 생성하지 않고, 하나의 docker-compose 설정파일로 관리할 수 있습니다. 만들어 놓은 docker-compose up -d 명령어를 입력해도 deploy 옵션 적용 안됩니다.
실행 권한인 --with-registry-auth 옵션을 넣어야 실행됩니다. 또한, 복수 노드가 있을경우, worker node에서 이미지 정보를 pull 할 때, image가 private라면 worker node에서도 docker login을 진행해야하는데 그러한 부분을 매니저노드에서 전달해주는 것(대신 해주는것)이라고 생각하면 됩니다.
4. Docker Service 상태 확인
이전 게시글에 상세히 다뤘어서 여기서는 간단히 필요한 것만 다루도록 하겠습니다.
$ docker service ls
$ docker service ps <컨테이너 ID>
지금까지 기본설치 및 설정에 대해 알아봤습니다. 다음에는 아래 순서대로 진행해보겠습니다 !!
2번째, InfluxDB 계정, DataBase 추가
3번째, Telegraf를 이용하여 InfluxDB 에 저장하기
4번째, Grafana, Influx 연동