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는 동일)
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에서 작업하였음
- grafana pod의 db를 kubectl cp 명령어를 사용하여 VM으로 이동
2. mysql / sqlite3 설치
- grafana.db 에서 덤프 생성을 위해서는 sqlite3 필요
- RDS mysql에 import 하기 위해서는 mysql 명령어 필요
sudo apt-get install mysql-client
sudo apt-get install sqlite3
3. git clone or shell script
- grafana 덤프 생성을 위한 스크립트로 git에서 다운 / copy 가능
- url : https://github.com/grafana/database-migrator
- git clone을 해도 되고, 해당 git 안에 있는 sqlitedump.sh / escape.awk 만 복사해도 사용 가능
- 생성 후 chmod 755로 실행 권한 부여
GitHub - grafana/database-migrator: Code to export grafana.db (sqlite) to MySQL-compatible SQL file, to assist in migration of G
Code to export grafana.db (sqlite) to MySQL-compatible SQL file, to assist in migration of Grafana data to MySQL-compatible DB. - GitHub - grafana/database-migrator: Code to export grafana.db (sqli...
github.com
4. grafana.db 덤프 생성
./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 하면 됨
참고문서 : https://github.com/grafana/database-migrator
https://iceburn.medium.com/grafana-database-migration-from-sqlite3-to-mysql-301b6a01e249
Grafana — Database migration from Sqlite3 to MySQL
Shouldn’t it be Sqlite3?
iceburn.medium.com
GitHub - grafana/database-migrator: Code to export grafana.db (sqlite) to MySQL-compatible SQL file, to assist in migration of G
Code to export grafana.db (sqlite) to MySQL-compatible SQL file, to assist in migration of Grafana data to MySQL-compatible DB. - GitHub - grafana/database-migrator: Code to export grafana.db (sqli...
github.com
'Grafana, Keycloak' 카테고리의 다른 글
Grafana 보안 취약점 TLS 알고리즘 조치(AWS EKS) (0) | 2023.09.29 |
---|---|
Grafana Cloudwatch DataSource Cloudwatch Add Error (0) | 2023.06.11 |
Keycloak API 를 사용한 유저 정보 조회 (0) | 2023.01.23 |
Grafana SSL 설정 / Keycloak SSL 설정 (0) | 2023.01.07 |
Grafana 사용을 위한 keycloak 설정 (1) | 2022.12.25 |