Grafana를 사용 중 Grafana에 설정이 점점 많아져서 DB를 RDS로 옮겨야 할 필요성을 느꼈다.
Grafana는 grafana.ini 에 [database] 설정을 하지 않았을 경우 기본 DB 인 sqlite3을 사용하게 된다
데이터가 적을 때는 상관 없지만 많은 데이터소스, 대시보드, 알람등이 설정되다 보니 쿼리 속도가 늦어지고 pod restart 가 자주 발생 하게 되었다. pod의 cpu/ memory를 확인해 봤지만 설정해 놓은 limit까지 사용되지 않았고, DB 문제인 것으로 보여 AWS RDS mysql로 이관하기로 결졍 하였다.
준비사항 : sqlite3, mysql, RDS mysql - grafana database
개념 설명 : Grafana 에 Database를 설정하지 않으면 위에서 설명한 것과 같이 sqlite3을 사용하게 되고, /var/lib/grafana/grafana.db 안에 내용이 저장 되게 된다
Grafana 생성시 k8s pvc를 생성했으면 pvc 볼륨 안에 데이터가 저장된다(path는 동일)
grafana db
Migration Flow
k8s grafana pod 안의 grafana.db 를 작업하기 편한 곳으로 이동
mysql / sqlite3 명령어 설치
git clone or shell script 복사
grafana.db 덤프 생성
RDS mysql 에 grafana DB 사용을 위한 초기 설정
grafana pod 의 database를 RDS mysql과 연결
생성한 grafana 덤프를 RDS mysql 에 inport
결과 확인
상세 작업 설명
1. grafana.db 를 작업하기 편한 곳으로 이동
필자의 경우 k8s 로 grafana를 사용 중이므로 k8s contrill vm에서 작업하였음
./sqlitedump.sh ./grafana.db > ./grafana.sql
★이 과정에서 에러가 발생하는 경우가 있는데 grafana.sql 이름을 변경해서 db_dumb.sql 등 다른 이름으로 시도 추천
무슨 차이인지는 모르겠으나 grafana.sql 로했을때 error 가 종종 발생함
5. RDS mysql에 grafana DB 사용을 위한 초기 설정
grafana 이름으로 database 생성
grafana database를 사용할 grafana 계정 생성
grafana 계정에 권한 부여
DB 접속 방법
mysql -u {username} -P {port} -h {endpoint/host 주소} -p
ex)
mysql -u abdc -P 3306 -h database001.ap-northeast-2.rds.amazonaws.com -p
접속 후 DB 설정
CREATE DATABASE grafana ;
CREATE USER 'grafana'@'%' IDENTIFIED BY 'grafana';
GRANT ALL PRIVILEGES ON grafana.* TO 'grafana'@'%';
FLUSH PRIVILEGES;
6. grafana pod의 database를 RDS mysql과 연결
grafana에서 RDS mysql - grafana database를 사용하기 위한 기본 틀을 잡는 과정
k8s comfigmap에서 grafana를 수정하면 됨
config 수정은 grafana pod를 삭제해야 적용되므로, grafana pod 삭제 후 log 확인
pod 가 정상적으로 running 되는지 확인 후 k logs {podname}으로 HTTP Listen까지 정상적으로 나왔는지 확인
7. 생성한 grafana 덤프를 RDS mysql에 import
mysql 명령어를 이용하여 생성해 놓았던 grafana.sql을 import 하면 됨
★ import 시 에러가 발생한다면 해당 에러메시지를 보고 구문을 수정하면 됨
★ grafana.sql 에서 몇 번째 줄에 syntax error인데 다른 줄과 비교해서 이상한 부분을 제거하고 다시 import 하면 됨