Devops/Fastcampus 캐시백 챌린지

패스트캠퍼스 캐시백 챌린지 56일차

DEV_BLOG 2022. 6. 12. 21:29

수강 인증샷

Docker Compose를 활용해서 Grafana와 MYSQL을 구성하는 내용의 클립을 수강하는식으로 챌린지를 진행하였다. grafana만 단독으로 services를 갖는 container를 띄우고 grafana와 mysql을 연동하는 container를 운영해보는식으로 depends on 옵션이 어떤식으로 사용되는지 명확하게 알 수 있어서 좋았다. Docker에 관한 내용은 여기까지이고 다음 포스팅으로는 Kubernetes의 개요에 관한 내용을 포스팅할 예정이다.

 

 

Grafana 구성하기

  • Grafana의 3000번 포트는 호스트의 3000번 포트와 바인딩
  • Grafana의 설정파일인 grafana.ini는 호스트에서 주입 가능하도록 구성하고 읽기전용 설정
  • Grafana의 로컬 데이터 저장 경로를 확인하여 도커 볼륨 마운트
  • Grafana의 플러그인 추가 설치를 위한 환경변수 설정
  • 로그 드라이버 옵션을 통해 로그 로테이팅

 

Grafana + MySQL 구성하기

  • 요구사항

⇒ 1단계 요구사항 포함

⇒ grafana.ini를 통해 database 설정을 sqlite에서 MySQL로 변경

⇒ MYSQL 컨테이너를 docker-compose에 db 서비스로 추가

⇒ grafana 서비스가 db 서비스를 database로 연결하도록 구성

⇒ MySQL의 로컬 데이터 저장 경로 확인하여 도커 볼륨 마운트

 

참고자료

  • Grafana Docker Guide

https://grafana.com/docs/grafana/latest/installation/docker/

  • MYSQL Docker Guide

https://hub.docker.com/_/mysql

 

Grafana 실습

실습환경은 하단의 링크를 통해 확인할 수 있다.

 

https://github.com/tedilabs/fastcampus-devops/tree/main/3-docker-kubernetes/lab-docker-grafana

 

cd grafana-only
cat docker-compose.yml

docker-compose.yml 파일에서 version에서 3.9버전으로 명시되어있으며, services로 grafana 하나만 존재한다. volumes에서는 grafana-data 라는 볼륨이 하나 만들어져있고, networks는 존재하지 않는 상태이다. networks는 명시되지 않으면 해당프로젝트의 default명으로 bridge network가 생성된다고 한다.

 

grafana service의 image는 8.2.2버전을 사용하고 restart로 unless-stopped 정책을 사용한다. 이는 always보다 강력한 옵션으로 서버가 재시작되더라도 컨테이너를 다시 띄우게 된다.(컨테이너가 시작되어있는 것을 보장한다.)

환경변수로는 GF-INSTALL-PLUGINS가 설정되어있고,

PORTS는 host의 3000번 포트가 컨테이너의 3000번 포트와 연결되어있다.

 

etc/grafana/grafana.ini 는grafana 컨테이너가 기본적으로 불러들이는 grafana의 설정파일이 위치한 위치의 파일이다. 이것을 host상의 files/grafana.ini로 읽기전용 마운트 시키는 것을 확인할 수 있다.

grafana-data 볼륨도 /var/lib/grafana 로컬 데이터 저장소로 마운트 하고 있다.

 

logging의 경우 json-file 형태로 stderr,stdout으로 로그를 출력을 하게된다.

 

 

curl 명령어를 통해 응답이 잘 오고있는 것을 확인할 수 있다.

 

 

$ ec2metadata

ec2metadata 명령어를 통해 public ipv4 주소를 확인하고 주소창에 :3000 을 통해 접속해보자.

 

 

 

grafana의 기본 사용자 값은 username: admin password:admin이다.

 

 

왼쪽 탭의 방패모양을 클릭해 Server Admin 페이지에 진입하면 Settings에서 여러 설정들을 확인할 수 있다.

 

 

 

database는 기본적으로 sqlite으로 설정되어있고, 경로가 grafana.db를 바라보게 되어있다.

 

 

# 볼륨포함하여 전부 제거
$ docker-compose down -v

grafana만 존재하던 내용의 컨테이너는 전부 제거해주고 mysql을 포함한 내용쪽으로 넘어가주자.

 

 

cd ..
cd grafana-mysql
cat docker-compose.yml

 

 

이번에는 아까와는 다르게 db라는 service가 추가되었음을 확인할 수 있다. 도커 공식문서의 mysql 이미지에 대한 문서를 살펴보면 “Where to Store Data” subsection에서 /var/lib/mysql로 명시되어있기에 해당 내용을 마운트 해주는 모습이다.

db컨테이너가 만들어진 후에 grafana 컨테이너가 만들어질 수 있도록 depends_on 속성도 추가되었다.

 

grafana.ini 를 확인해보면 database에 대한 내용이 설정되어있는 것을 확인할 수 있다.

 

grafana의 port binding이 완료된 것을 확인할 수 있다.

 

 

 

 

이번에도 로그인을 하여 Server admin을 확인해보면 mysql db로 적용이 된 것을 확인할 수 있다!

 

 

 

만약 컨테이너를 제거할때 v 옵션을 주지않는다면, volume은 남아있게 된다. 따라서 grafana user 사용자를 따로 추가해주었다면 컨테이너를 다시 없앤뒤에 실행하였을때 해당 데이터가 보존되어있어 해당 user로 다시 로그인 할 수 있게된다. 이런식으로 docker volume을 통해 host에 데이터를 영구적으로 보관할 수 있다.

 

 

 

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지를 위해 작성되었습니다.