[Metabase] 데이터 모니터링 툴

2025. 3. 28. 17:53TIL/Database

걍력한 데이터 모니터링 툴

사내 데이터 분석 및 집계를 할 일이 필요해서 찾아보던 중 Metabase라는 툴을 알게 되었다.
긴 말 필요없이 어떻게 사용하는 건지 알아보자.

docker 이미지 받아오기

dockerhub에서 metabase 이미지를 pull 받을 수 있다.

M1에서의 문제 발생

docker pull metabase/metabase:latest를 했을 때 docker desktop의 image 목록에 다음과 같은 경고 메세지가 나타났다.

이 얘기는 현재 이 이미지는 AMD64 아키텍처에서 실행되도록 빌드하는데, 너는 AMD64가 아니라는 뜻이다. 그렇기 때문에 내 M1 환경에 맞추기 위해 ARM64 아키텍처로 된 이미지가 있는지 찾아보았다.

찾았다 arm!

멀티플랫폼 버전의 이미지를 찾을 수 있었다(근데 베타 버전은 맘에 안들어서 바로 아래에 있는 metabase/metabase:v0.53.8.4 버전을 pull 받았다.)

이제 본론으로 돌아가자

각자 본인의 환경에 잘 맞추고(대충 intel칩은 amd64, apple칩은 arm64로 pull 받으면 된다.) 해당 환경에 맞게 platform 설정을 하자.

나의 경우는 docker pull --platform linux/arm64 metabase/metabase:v0.53.7.6 이렇게 설치했다. amd64 아키텍처라면 --platform 옵션에 linux/amd64라고 적으면 될 것이다.

이미지 실행

docker run -d -p 6666:3000 --name metabase metabase/metabase:v0.53.8.4 로 컨테이너를 띄워보자.
참고로 metabase는 기본적으로 3000번 포트를 쓴다.

metabase 접속하기

localhost:6666(자신이 설정한 포트로 들어가면 된다.)로 접속해보자.
참고로 컨테이너가 완전히 띄워질 때 까지 시간이 조금 걸릴 수도 있다.

접속을 하게되면 처음에 이런 화면이 뜬다. `"자, 이제 시작합니다"` 버튼을 눌러서 들어가자.

언어는 한국어로 해도 좋지만 번역이 좀 별로다...영어로 하는 편이 좋을 수도 있지만 설명을 위해 일단 한국어로 설정해본다.

여기는 단순히 metabase 계정을 만들기 위한 섹션이다. 각자 알아서 작성하고 넘어가자.

여기도 각자 사용 목적에 맞게 선택하고 넘어가면 된다. 나는 회사에서 데이터 분석을 위해 사용하므로 첫 번째 선택지를 선택했다.

이제 데이터베이스를 연결해야 한다. 기존에 가지고 있던 데이터베이스를 선택하면 된다. 참고로 아직 DB가 없는 경우 나중에 추가해도 되고, 들어가면 sample DB를 제공해준다. 체험이 목적이라면 `"나중에 데이터를 추가하겠습니다"` 글씨를 클릭해서 넘어가도 된다.

나는 MySQL을 선택했다. 그랬더니 연동할 DB 정보를 입력하라고 나온다. 위에서 부터

1. 표시 이름: 단순히 연결할 DB를 뭐라고 부를 거냐는 뜻. 원하는 이름 설정해주면 된다.

2. 호스트: DB 서버의 주소 또는 도메인 이름 혹은 컨테이너 이름을 적으면 된다.

3. 포트: 데이터베이스의 외부 포트 번호를 적으면 된다.

4. 데이터베이스 이름: 연결할 데이터베이스 이름을 적으면 된다. 1번의 표시 이름과는 다르게 실제 물리적으로 존재하는 DB의 이름을 적어야 한다.

5. 사용자 이름: 방금 만든 계정의 이름을 적는 것이 아니고 DB에 접속할 때 사용하는 user name을 적는 곳이다. `mysql -u root -p` 이런 식으로 root로 접속하면 `root`, 그게 아니고 사용자를 추가해서 따로 사용자로 접속하면 해당 사용자를 적으면 된다. 예를 들어서 `mysql -u orange -p` 이렇게 접속하면 `orange`라는 계정으로 mysql에 접속한다는 뜻이므로, 여기에도 `orange`라고 적으면 된다.

6. 암호: 5번의 계정에 대한 암호를 적으면 된다. `mysql -u orange -p`로 접속할 때 `-p`가 패스워드를 입력하겠다는 옵션인데, 여기서의 패스워드를 6번 칸에 적으면 된다.

여기는 DB 연동 부분에서 상세 설정을 위한 섹션이다.

1. 보안 연결(SSL) 사용(Use a secure connection (SSL)): SSL을 사용할 분은 이 부분을 체크하면 된다.

2. Use an SSH tunnel: 혹시나 호스트 주소로 접속하는 것이 잘 안되거나 문제가 있으면 ssh 터널링을 사용하여 접속하면 된다.

3. JSON 열 펼치기 허용(Unfold JSON Columns): 이 부분은 뭔지 잘 모르겠지만 공식문서를 보면 MySQL의 JSON Field의 경우 Json 데이터를 default로 펼쳐놓을 거냐 접어놓을 거냐를 묻는 거 같은데, 펼쳐놓으면 성능이 느려진다고 한다. 근데 모르겠고 디폴트가 펼쳐놓는 거니까 그냥 냅둘 것이다.

4. 추가 JDBC 연결 문자열 옵션(Additional JDBC connection string options): 이 부분에 대해 설명할 내용이 있어서 아래서 설명을 할 것이다.

5. 주기적으로 지문 테이블(Periodically refingerprint tables): 이 옵션은 잘 모르겠다...공식문서에서는 다음과 같이 설명하는데 뭔 소리인지 잘 모르겠다. 대충 MySQL 동기화를 주기적으로 할 건지 물어보는 옵션인 것 같다.

Periodically refingerprint tables
Periodic refingerprinting will increase the load on your database.
Turn this option ON to scan a sample of values every time Metabase runs a sync.
A fingerprinting query examines the first 10,000 rows from each column and uses that data to guesstimate how many unique values each column has, what the minimum and maximum values are for numeric and timestamp columns, and so on. If you leave this option OFF, Metabase will only fingerprint your columns once during setup.

아까 얘기했던 4번에서, MySQL 8.0 이상에서는 JDBC 연결 시에 보안 이슈로 `allowPublicKeyRetrieval=true` 옵션을 추가해 주어야 한다. 안그러면 접속이 안된다.

jdbc:mysql://localhost:6666/db?allowPublicKeyRetrieval=true 이런 식으로 해야 접속이 된다. 참고로 테스트/개발 목적에서는 useSSL=false 를 추가해주어도 된다.

따라서 4번의 추가 JDBC 연결 문자열 옵션 부분에 allowPublicKeyRetrieval=true를 적어주면 된다.

하고싶으면 하고 말 거면 말자.

다음을 선택하면 이제 완료가 된 것이다!

데이터 살펴보기

DB 연결을 잘 완료했다면 왼쪽 `데이터베이스` 탭을 누르면 화면과 같이 뜰 것이고, DB 연결을 스킵하고 들어왔으면 `Sample Database`와 `데이터베이스 추가하기` 두 개가 보일 것이다. DB 연결을 안했으면 여기서 하면 되고, 추가로 연결하고 싶어도 여기서 추가할 수 있다. 우리가 연동한 DB를 눌러 들어가보자.

DB에 존재하는 테이블 목록이 뜰 것이다. 여기서 데이터 분석이나 집계를 원하는 테이블을 클릭해서 들어가보자

이렇게 데이터 목록이 쭉 뜰 것이다. 그냥 DB 조회하는 거랑 다름없다.

하지만 Metabase의 강력한 기능은 내 생각엔 시각화라고 생각한다.

화면 위 쪽에 필터, 요약, 편집기 등의 버튼이 있는데 그 곳에서 데이터 필터링도 할 수 있고

요약을 누르면 이렇게 합계, 평균, 카운트, 최소값 최대값 누적 합계를 볼 수도 있고 그룹화도 할 수 있다.

나는 Sample DatabaseOrder 테이블에서 각 유저별로 구매한 상품의 Quantity의 합계를 보려고 한다.

 

이렇게하면 각 User 별로 Quantity의 합계를 볼 수 있고 왼쪽 아래 시각화 버튼이나 가운데 그래프 모양의 아이콘을 클릭하면 시각화도 할 수 있다.

 

참고로 시각화 버튼을 클릭하면 어떤 형태로 시각화를 할지 고를 수 있고 다양한 그래프들이 있다.