MySQL 데이터 소스 구성

MySQL 데이터 소스 구성 (Configure)

이 문서는 MySQL 데이터 소스를 구성하는 방법과 사용 가능한 구성 옵션을 설명해요. 데이터 소스 관리 일반 정보는 Data source management을 참고하세요.

출처: Configure the MySQL data source

본문

시작하기 전에

MySQL 데이터 소스를 구성하기 전에 다음을 확인해요.

  • Grafana 권한: 데이터 소스를 구성하려면 Organization administrator 역할이 있어야 해요. 조직 관리자는 Grafana 프로비저닝 시스템으로 YAML을 통해 데이터 소스를 구성할 수도 있어요.
  • 실행 중인 MySQL 인스턴스: MySQL 5.7 이상, MariaDB 10.5 이상, 또는 Percona Server 같은 호환 MySQL 기반 데이터베이스.
  • 네트워크 접근: Grafana가 MySQL 서버에 도달할 수 있어야 해요. 기본 포트는 3306.
  • 인증 자격 증명: 질의할 데이터베이스와 테이블에 대한 최소한 SELECT 권한이 있는 MySQL 사용자.
  • 보안 인증서: 암호화된 연결을 사용한다면 필요한 TLS/SSL 인증서를 준비해요.

참고: MySQL 데이터 소스 플러그인은 Grafana에 기본 설치되어 있어 별도 설치는 필요 없어요. Grafana 13.2부터 Grafana 릴리스와 무관하게 업데이트되는 독립 플러그인으로 패키징돼요. Plugin updates 참고. 팁: Grafana Cloud 사용자: Grafana Cloud는 데이터 소스 연결에 고정 아웃바운드 IP 주소를 제공하지 않으므로 IP 허용 목록은 지원되는 연결 방식이 아니에요. MySQL 서버가 프라이빗 네트워크에 있다면 Private data source connect (PDC)를 구성해 데이터베이스를 공개 인터넷에 노출하지 않고 보안 연결을 구축하세요.

데이터베이스 사용자 권한

데이터 소스를 추가할 때 지정하는 데이터베이스 사용자가 관련 데이터베이스와 테이블에 대해 SELECT 권한만 갖도록 확인해요. Grafana는 쿼리의 안전성을 검증하지 않으므로 쿼리에 USE otherdb;DROP TABLE user; 같은 잠재적으로 유해한 SQL 문이 포함될 수 있고 실행될 수 있어요.

이 위험을 최소화하기 위해 Grafana는 권한이 제한된 전용 MySQL 사용자를 만들 것을 강력히 권장해요.

CREATE USER 'grafanaReader' IDENTIFIED BY 'password';
GRANT SELECT ON mydatabase.mytable TO 'grafanaReader';

더 많은 데이터베이스와 테이블에 접근 권한을 부여하고 싶다면 데이터베이스나 테이블 자리에 와일드카드(*)를 사용해요.

MySQL 데이터 소스 추가

  1. 왼쪽 메뉴에서 Connections를 클릭해요.
  2. Add new connection을 클릭하고 검색창에 MySQL을 입력해요.
  3. MySQL data source 옵션을 선택해요.
  4. 오른쪽 위에서 Add new data source를 클릭해요.

데이터 소스를 구성하는 Settings 탭으로 이동해요.

MySQL 구성 옵션

다음은 MySQL 구성 옵션 목록이에요.

  • Name - 패널과 쿼리에서 데이터 소스를 참조할 때 쓰는 이름. 예: mysql-assets-1, mysqldb1
  • Default - 이 특정 MySQL 데이터 소스를 패널과 시각화에서 기본 사전 선택 데이터 소스로 만들지 토글.

연결(Connection):

  • Host URL - MySQL 인스턴스의 IP 주소/호스트 이름과 선택적 포트를 입력해요. 포트를 생략하면 Grafana는 기본 3306 포트를 사용해요.
  • Database - MySQL 데이터베이스 이름을 입력해요.

인증(Authentication):

MySQL 데이터 소스는 사용자 이름과 비밀번호 인증을 지원하며 선택적으로 TLS로 암호화된 연결을 지원해요. Kerberos, gMSA 및 기타 외부 인증 메커니즘은 지원되지 않아요. Grafana용 전용 MySQL 사용자를 만들어 사용하세요.

  • Username - MySQL 데이터베이스에 연결하는 데 사용되는 사용자 이름을 입력해요.
  • Password - MySQL 데이터베이스에 연결하는 데 사용되는 비밀번호를 입력해요.
  • Use TLS Client Auth - 보안 JSON 구성에 지정된 클라이언트 인증서로 TLS 인증을 활성화하려면 토글. TLS와 MySQL의 암호화된 연결 구성에 대한 자세한 내용은 Using TLS ConnectionsConfiguring MySQL to Use Encrypted Connections를 참고하세요. TLS/SSL Client Certificate에서 클라이언트 인증서를, TLS/SSL Client Key에서 키를 제공하세요.
  • With CA Cert - CA 인증서로 인증하려면 토글. 자체 서명 TLS 인증서 검증에 필요. CA(Certificate Authority) 지침에 따라 인증서 파일을 다운로드해요. TLS/SSL 모드가 요구하면 TLS/SSL Root Certificate에서 루트 인증서를 제공해요.
  • Skip TLS Verification - MySQL 서버의 TLS 인증서 체인과 호스트 이름 검증을 건너뛰려면 토글.
  • Allow Cleartext Passwords - PAM 인증 플러그인으로 정의된 계정 같은 특정 유형의 계정에서 요구하는 경우 cleartext 클라이언트 측 플러그인 사용을 허용하려면 토글. 비밀번호를 일반 텍스트로 전송하면 특정 구성에서 보안 위험이 될 수 있습니다. 비밀번호 관련 문제를 방지하려면 TLS/SSL, IPsec, 프라이빗 네트워크 같은 안전한 방법으로 MySQL 서버에 연결할 것을 권장해요.

추가 설정

다음은 추가 MySQL 설정이에요.

MySQL 옵션:

  • Session Timezone - Europe/Berlin이나 +02:00 같은 데이터베이스 세션에 사용되는 시간대를 지정해요. 데이터베이스(또는 데이터베이스 호스트)의 시간대가 UTC가 아닌 다른 값으로 설정된 경우 필요해요. Grafana가 시간을 제대로 처리할 수 있도록 +00:00으로 설정해요. SET time_zone='...'로 세션에서 사용되는 값을 설정해요. 이 필드를 비워두면 시간대가 업데이트되지 않아요. 자세한 내용은 MySQL Server Time Zone Support를 참고하세요.
  • Min time interval - $__interval$__interval_ms 변수의 하한을 정의해요. Grafana는 이 설정을 데이터 쓰기 빈도와 맞추는 것을 권장해요. 예를 들어 데이터가 매분 쓰이면 1m으로 설정해요. 형식 예시는 Min time interval 참고.

연결 한도(Connection limits):

  • Max open - 데이터베이스에 대한 최대 열린 연결 수, 기본값 100.
  • Max idle - 유휴 연결 풀의 최대 연결 수, 기본값 100.
  • Auto (max idle) - 최대 유휴 연결 수를 최대 열린 연결 수로 설정하려면 토글. 기본값은 true.
  • Max lifetime - 연결이 재사용될 수 있는 최대 시간(초). 이 값은 항상 MySQL의 구성된 wait_timeout보다 낮아야 해요. 기본값은 14400(4시간).

Private data source connect:

  • Private data source connect - Grafana Cloud 사용자 전용. Private data source connect(PDC)는 Grafana Cloud 인스턴스(스택)와 프라이빗 네트워크 내에 보안된 데이터 소스 사이에 프라이빗·보안 연결을 구축할 수 있게 해줘요. 드롭다운을 클릭해 PDC URL을 찾아요. Grafana PDC에 대한 자세한 내용은 Private data source connect (PDC) 참고.

Manage private data source connect를 클릭해 PDC 구성 세부 정보가 있는 PDC 연결 페이지로 이동해요.

Secure SOCKS proxy:

참고: 이 섹션은 Grafana 서버에 secure SOCKS proxy 기능이 활성화된 경우에만 표시돼요.

  • Enabled - MySQL 인스턴스로의 요청을 secure SOCKS 프록시를 통해 라우팅하려면 토글.

MySQL 연결 설정을 추가한 후 Save & test를 클릭해 데이터 소스 연결을 테스트하고 저장해요.

Min time interval

Min time interval 설정은 $__interval$__interval_ms 변수의 하한을 정의해요.

이 값은 숫자 다음에 유효한 시간 식별자가 오는 형식이어야 해요.

식별자 설명
y year
M month
w week
d day
h hour
m minute
s second
ms millisecond

이 설정은 대시보드 패널의 데이터 소스 옵션에서 재정의할 수 있어요.

데이터 소스 프로비저닝

Grafana 프로비저닝 시스템의 일부로 YAML 파일에서 데이터 소스를 정의·구성할 수 있어요. 프로비저닝과 사용 가능한 구성 옵션에 대한 자세한 내용은 Provision Grafana 참고.

MySQL 프로비저닝 예시

기본 프로비저닝:

apiVersion: 1

datasources:
  - name: MySQL
    type: mysql
    url: localhost:3306
    user: grafana
    jsonData:
      database: grafana
      maxOpenConns: 100
      maxIdleConns: 100
      maxIdleConnsAuto: true
      connMaxLifetime: 14400
    secureJsonData:
      password: ${GRAFANA_MYSQL_PASSWORD}

TLS 검증 사용:

apiVersion: 1

datasources:
  - name: MySQL
    type: mysql
    url: localhost:3306
    user: grafana
    jsonData:
      tlsAuth: true
      database: grafana
      maxOpenConns: 100
      maxIdleConns: 100
      maxIdleConnsAuto: true
      connMaxLifetime: 14400
    secureJsonData:
      password: ${GRAFANA_MYSQL_PASSWORD}
      tlsClientCert: ${GRAFANA_TLS_CLIENT_CERT}
      tlsCACert: ${GRAFANA_TLS_CA_CERT}

TLS 사용 및 인증서 검증 건너뛰기:

apiVersion: 1

datasources:
  - name: MySQL
    type: mysql
    url: localhost:3306
    user: grafana
    jsonData:
      tlsAuth: true
      tlsSkipVerify: true
      database: grafana
      maxOpenConns: 100
      maxIdleConns: 100
      maxIdleConnsAuto: true
      connMaxLifetime: 14400
    secureJsonData:
      password: ${GRAFANA_MYSQL_PASSWORD}
      tlsClientCert: ${GRAFANA_TLS_CLIENT_CERT}
      tlsCACert: ${GRAFANA_TLS_CA_CERT}

Terraform으로 구성

TerraformGrafana Terraform provider로 MySQL 데이터 소스를 구성할 수 있어요. Terraform으로 리소스를 프로비저닝하는 방법은 Grafana as code using Terraform 문서 참고.

Terraform 예시

다음 예시는 기본 MySQL 데이터 소스를 만들어요.

resource "grafana_data_source" "mysql" {
  name = "MySQL"
  type = "mysql"
  url  = "localhost:3306"
  user = "grafana"

  json_data_encoded = jsonencode({
    database         = "grafana"
    maxOpenConns     = 100
    maxIdleConns     = 100
    maxIdleConnsAuto = true
    connMaxLifetime  = 14400
  })

  secure_json_data_encoded = jsonencode({
    password = "password"
  })
}

사용 가능한 모든 구성 옵션은 Grafana provider data source resource documentation을 참고하세요.

다음 단계

MySQL 데이터 소스를 구성한 뒤에는:

더 알아보기 (Learn more)