Docker Compose를 이용하여 Grafana와 MySQL구성해 보기

2022. 2. 28. 17:55DevOps/Docker & kubernetes

기본적으로 그라파나를 구성해 볼 예정이다. 세팅은 아래와 같다.

 

기본 세팅

- 3000번 포트 바인딩

- 설정파일(grafana.ini)은 호스트에서만 관리할 수 있도록 호스트에 주입하며, 컨테이너 상에서는 읽기전용으로 설정

- 로컬 데이터 저장 경로를 확인 후 도커 볼륨을 마운트하여 컨테이너가 종료되더라도 로컬 데이터 보관

- 플러그인 추가 설치를 위한 환경 변수 설정

- 로그 드라이버 옵션을 통해 json 파일 로그 드라이버에 대해서 로그 로테이팅(로그 데이터가 무한정 쌓이지않도록)

 

여기에 더해서 MySQL 구성을 해 보도록 할 예정이다.

- 기본 세팅에 추가하여 정파일(grafana.ini)에서 database를 sqlite에서 MySQL로 변경

- MySQL 컨테이너를 docker-compose에 DB서비스로 추가

- 그라파나 서비스가 DB서비스를 database로 연결하도록 구성

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

 

먼저 하나의 디렉토리를 만들고 그 안에 아래의 하위파일을 만들도록 하자. 위치는 아래와 같다.

순수 그라파나(좌) 그라파나+mysql(우)

그라파나>file>grafana.ini

;는 주석처리이다. db가 주석처리 되어 있는것을 확인할 수 있을 것 이다.

app_mode = production
instance_name = ${HOSTNAME}

#################################### Server ####################################
[server]
protocol = http
http_addr =
http_port = 3000

#################################### Database ####################################
; [database]
; type = mysql
; host = db:3306
; name = grafana
; user = grafana
; password = grafana


#################################### Logging ##########################
[log]
mode = console
level = info

#################################### Alerting ############################
[alerting]
enabled = true

그라파나>docker-compose.yml

그라파나 하나만 서비스로 되어 있으며, network는 default값으로 형성되기에 따로 기입이 되어 있지 않다.

8.2.2버전을 사용하고 있으며 unless-stopped(서버가 재시작되더라도 도커 컨테이너를 다시 띄워준다.) 정책을 사용하고 있다. 환경변수로 grafana-clock-panel을 설치한다. 포트번호는 3000번 포트를 연결하였다. ~grafanai.i:ro(ro=읽기전용)파일은 그라파나 컨테이너가 기본적으로 불러들이는 설정 파일의 위치 경로이다. 또한 로컬데이터 저장소로는 var/lib/grafana로 지정되어 있다.

version: '3.9'

services:
    grafana:
        image: grafana/grafana:8.2.2
        restart: unless-stopped
        environment:
            GF_INSTALL_PLUGINS: grafana-clock-panel
        ports:
        - 3000:3000
        volumes:
        - ./files/grafana.ini:/etc/grafana/grafana.ini:ro
        - grafana-data:/var/lib/grafana
        logging:
            driver: "json-file"
            options:
                max-size: "8m"
                max-file: "10"

volumes:
    grafana-data: {}

그라파나+mysql>file>grafana.ini

이전과 달리 주석이 풀려져 있으며 mysql타입에 3306번 포트, 이름과 암호 전부 grafana로 되어있다

app_mode = production
instance_name = ${HOSTNAME}

#################################### Server ####################################
[server]
protocol = http
http_addr =
http_port = 3000

#################################### Database ####################################
[database]
type = mysql
host = db:3306
name = grafana
user = grafana
password = grafana


#################################### Logging ##########################
[log]
mode = console
level = info

#################################### Alerting ############################
[alerting]
enabled = true

그라파나+mysql>docker-compose.yml

db서비스가 새롭게 추가된 것을 확인할 수 있다. mysql5.7 버전이며, 환경변수는 4가지로써 루트 계정의 암호, db의 이름, 사용자명, 사용자 암호가 각각 grafana로 세팅 되어있다. 볼륨 경로는 /var/lib/mysql에서 확인할 수 있다. depends_on으로 인해 db컨테이너가 먼저 생성된 후 그라파나서비스가 구성이 되도록 되어있다.  

version: '3.9'

services:
    db:
        image: mysql:5.7
        restart: unless-stopped
        environment:
            MYSQL_ROOT_PASSWORD: grafana
            MYSQL_DATABASE: grafana
            MYSQL_USER: grafana
            MYSQL_PASSWORD: grafana
        volumes:
        - mysql-data:/var/lib/mysql
        logging:
            driver: "json-file"
            options:
                max-size: "8m"
                max-file: "10"

    grafana:
        depends_on:
        - db
        image: grafana/grafana:8.2.2
        restart: unless-stopped
        environment:
        GF_INSTALL_PLUGINS: grafana-clock-panel
        ports:
        - 3000:3000
        volumes:
        - ./files/grafana.ini:/etc/grafana/grafana.ini:ro
        - grafana-data:/var/lib/grafana
        logging:
            driver: "json-file"
            options:
                max-size: "8m"
                max-file: "10"
volumes:
    mysql-data: {}
    grafana-data: {}

일반 그라파나를 실행해 보면 그라파나 이미지를 잘 받아 오고, 실행되는것을 확인할 수 있다.

이 후 VMware의 ip를 ifconfig 명령어를 통해 확인하도록 하자(ubuntu의 ip가 아니다!! curl https://lpinfo.io/ip하지말자!)

이 후 이 ip를 기반으로 하여 192.168.8.142:3000(3000번 포트)/login을 vmware의 인터넷창에 입력하여 접속하도록 하자. 접속이 잘 되는것을 확인할 수 있을 것 이다. 기본 계정은 admin/admin이다

설정값에서 DB의 세팅값을 보면 sqlite3로 되어있는것을 확인할 수 있다.

직접 확인했으니 이제 mysql 버전으로 넘어가 보자. 이전 grafana는 down -v 명령어를 사용해 지운 후 mysql 세팅이 된 그라파나를 실행해 보자. 잘 되는것을 확인할 수 있으며 포트번호도 3306번으로 잘 되어있는것을 볼 수 있다.

mysql로 잘 넘어간 것을 확인할 수 있다.

데이터가 잘 저장되는지 확인하기 위해 새로운 계정을 생성해 보았다.users 카테고리의 new user를 클릭하였으며 계정명, 사용자명, 비밀번호 전부 test로 지정하였다.

이후 down을 실행하여 종료한 후 제 시작을 해 보았다.

금방 만든 test 계정으로 로그인을 시도하니 잘 되는것을 확인할 수 있다.