본문 바로가기
WIKI 기술 지식 베이스

Amazon RDS 관리형 MariaDB용 Database Monitoring 설정하기

원문 보기 위키 갱신

이 페이지에서는 Amazon RDS에서 호스팅하는 MariaDB 데이터베이스에 Database Monitoring을 설정하는 방법을 설명드릴게요. Database Monitoring은 쿼리 메트릭, 쿼리 샘플, explain plan, 연결 데이터, 시스템 메트릭, InnoDB 스토리지 엔진 원격 측정 등을 노출해 MariaDB 데이터베이스에 대한 깊은 가시성을 제공합니다.

에이전트는 읽기 전용 사용자로 로그인해 데이터베이스에서 직접 원격 측정을 수집해요. MariaDB 데이터베이스에 Database Monitoring을 활성화하려면 다음 단계를 따르세요.

  1. AWS 통합 구성하기
  2. 데이터베이스 파라미터 구성하기
  3. 에이전트에 데이터베이스 액세스 권한 부여하기
  4. 에이전트 설치 및 구성하기
  5. RDS 통합 설치하기

출처: 문서

본문

시작하기 전에 (Before you begin)

  • 지원되는 MariaDB 버전: 10.5, 10.6, 10.11 또는 11.4. MariaDB용 Database Monitoring은 알려진 제한 사항과 함께 지원됩니다.
  • 지원되는 Agent 버전: 7.61.0+
  • 성능 영향: Database Monitoring의 기본 Agent 구성은 보수적이지만, 수집 간격이나 쿼리 샘플링 비율 같은 설정을 필요에 맞게 조정할 수 있어요. 대부분의 워크로드에서 에이전트는 데이터베이스 쿼리 실행 시간의 1% 미만, CPU의 1% 미만을 차지합니다. Database Monitoring은 기본 Agent 위에서 통합으로 실행돼요 (벤치마크 참고).
  • 프록시, 로드 밸런서, 커넥션 풀러: Datadog Agent는 모니터링 대상 호스트에 직접 연결해야 하며, 가능하면 인스턴스 엔드포인트를 통해 연결하는 것이 좋아요. 에이전트는 프록시, 로드 밸런서, 커넥션 풀러를 통해 데이터베이스에 연결하면 안 됩니다. 에이전트가 실행 중에 다른 호스트에 연결하면(장애 조치, 로드 밸런싱 등의 경우) 에이전트는 두 호스트 사이의 통계 차이를 계산해 부정확한 메트릭을 만들어내요.
  • 데이터 보안 고려 사항: 에이전트가 데이터베이스에서 수집하는 데이터와 이를 안전하게 유지하는 방법은 민감 정보 (Sensitive information) 문서를 참고하세요.

AWS 통합 구성하기

Amazon Web Services 통합 타일의 Resource Collection 섹션에서 Standard Collection을 활성화하세요.

MariaDB 설정 구성하기

DB 파라미터 그룹 (DB Parameter Group)에서 다음을 구성한 뒤 서버를 재시작해야 설정이 적용돼요.

파라미터 값 설명
performance_schema 1 필수. performance schema를 활성화합니다. MariaDB는 기본적으로 이를 활성화하지 않아요.
max_digest_length 4096 더 큰 쿼리 수집에 필요합니다. events_statements_* 테이블의 SQL digest 텍스트 크기를 늘립니다. 기본값으로 두면 1024자보다 긴 쿼리는 수집되지 않아요.
performance_schema_max_digest_length 4096 max_digest_length와 일치해야 해요.
performance_schema_max_sql_text_length 4096 max_digest_length와 일치해야 해요.

에이전트에 액세스 권한 부여하기

Datadog Agent는 통계와 쿼리를 수집하기 위해 데이터베이스에 대한 읽기 전용 액세스가 필요해요.

다음 지침은 datadog@'%'를 사용해 어떤 호스트에서든 로그인할 수 있는 권한을 에이전트에 부여합니다. datadog@'localhost'를 사용하면 datadog 사용자가 localhost에서만 로그인하도록 제한할 수 있어요. 자세한 내용은 MariaDB 문서를 참고하세요.

datadog 사용자를 만들고 기본 권한을 부여하세요.

CREATE USER datadog@'%' IDENTIFIED by '<UNIQUEPASSWORD>';
ALTER USER datadog@'%' WITH MAX_USER_CONNECTIONS 5;
GRANT REPLICATION CLIENT ON *.* TO datadog@'%';
GRANT PROCESS ON *.* TO datadog@'%';
GRANT SELECT ON performance_schema.* TO datadog@'%';

블로킹 쿼리 수집은 performance_schema와 함께 information_schema.INNODB_LOCK_WAITS와 INNODB_TRX를 사용하므로, 위의 PROCESS와 SELECT ON performance_schema.* 부여로 충분해요. 추가 부여는 필요하지 않아요. 블로킹 쿼리 수집은 기본적으로 꺼져 있어요. 인스턴스 구성에서 query_activity.collect_blocking_queries: true로 활성화하세요.

다음 스키마를 만드세요.

CREATE SCHEMA IF NOT EXISTS datadog;
GRANT EXECUTE ON datadog.* to datadog@'%';

에이전트가 explain plan을 수집할 수 있도록 explain_statement 프로시저를 만드세요.

DELIMITER $$
CREATE PROCEDURE datadog.explain_statement(IN query TEXT)
    SQL SECURITY DEFINER
BEGIN
    SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
    PREPARE stmt FROM @explain;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;

추가로, explain plan을 수집하려는 모든 스키마에 이 프로시저를 만드세요. <YOUR_SCHEMA>를 데이터베이스 스키마로 바꾸세요.

DELIMITER $$
CREATE PROCEDURE <YOUR_SCHEMA>.explain_statement(IN query TEXT)
    SQL SECURITY DEFINER
BEGIN
    SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
    PREPARE stmt FROM @explain;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE <YOUR_SCHEMA>.explain_statement TO datadog@'%';

인덱스 메트릭을 수집하려면 datadog 사용자에게 추가 권한을 부여하세요.

GRANT SELECT ON mysql.innodb_index_stats TO datadog@'%';

런타임 설정 컨슈머 (Runtime setup consumers)

RDS에서는 performance schema 컨슈머를 구성에 영구적으로 활성화할 수 없어요. 에이전트가 런타임에 performance_schema.events_* 컨슈머를 활성화할 수 있도록 다음 프로시저를 만드세요.

DELIMITER $$
CREATE PROCEDURE datadog.enable_events_statements_consumers()
    SQL SECURITY DEFINER
BEGIN
    UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name LIKE 'events_statements_%';
    UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name = 'events_waits_current';
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE datadog.enable_events_statements_consumers TO datadog@'%';

비밀번호를 안전하게 저장하기

Vault 같은 비밀 관리 소프트웨어로 비밀번호를 저장하세요. 그러면 에이전트 설정 파일에서 이 비밀번호를 ENC[<SECRET_NAME>]로 참조할 수 있어요. 예: ENC[datadog_user_database_password]. 자세한 내용은 비밀 관리 (Secrets Management)를 참고하세요.

이 페이지의 예시는 비밀번호가 저장된 비밀의 이름으로 datadog_user_database_password를 사용합니다. 비밀번호를 평문으로 참조하는 것도 가능하지만 권장되지는 않아요.

스키마 수집 (Collecting schemas)

Agent 7.65부터 Datadog Agent는 MariaDB 데이터베이스에서 스키마 정보를 수집할 수 있어요. 인스턴스 구성에서 collect_schemas.enabled: true로 활성화하세요 (Agent 7.68 이하에서는 schemas_collection을 사용하세요). 스키마 수집은 기본적으로 꺼져 있어요.

instances:
  - dbm: true
    ...
    collect_schemas:
      enabled: true

MariaDB 10.5 이상에서는 (MySQL과 마찬가지로) INFORMATION_SCHEMA가 권한을 가진 사용자에게만 테이블을 노출하므로, 부여 없이는 datadog 사용자가 아무 테이블도 보지 못해요. REFERENCES 권한을 부여하면 에이전트에게 테이블 데이터를 읽을 능력을 주지 않으면서 테이블 메타데이터를 표시할 수 있어요.

GRANT REFERENCES ON *.* TO datadog@'%';

REFERENCES는 INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS에서 외래 키 delete_rule과 update_rule 값을 수집하는 데에도 필요해요. 테이블 수준의 SELECT 권한으로는 그 뷰가 노출되지 않아요.

사용 가능한 collect_schemas 튜닝 옵션은 데이터베이스 스키마 탐색하기를 참고하세요.

에이전트 설치 및 구성하기

RDS 호스트를 모니터링하려면 인프라에 Datadog Agent를 설치하고 각 인스턴스 엔드포인트에 원격으로 연결하도록 구성하세요. 에이전트가 데이터베이스 위에서 실행될 필요는 없고, 연결만 하면 돼요. 여기에 언급되지 않은 추가 설치 방법은 Agent 설치 지침을 참고하세요.

{% tab title="Host" %}

호스트에서 실행되는 에이전트에 대해 이 점검을 구성하려면 (예: 에이전트가 RDS 데이터베이스에서 수집하기 위해 작은 EC2 인스턴스를 프로비저닝하는 경우):

MariaDB 메트릭 수집을 시작하려면 에이전트의 구성 디렉토리 루트에 있는 conf.d/ 폴더의 mysql.d/conf.yaml 파일을 편집하세요. 사용자 지정 메트릭을 포함한 모든 구성 옵션은 샘플 mysql.d/conf.yaml을 참고하세요.

MariaDB 메트릭을 수집하려면 mysql.d/conf.yaml에 이 구성 블록을 추가하세요.

init_config:
instances:
  - dbm: true
    host: '<AWS_INSTANCE_ENDPOINT>'
    port: <PORT>
    username: datadog
    password: 'ENC[datadog_user_database_password]' # 앞선 CREATE USER 단계에서 비밀로 저장한 값

    # 프로젝트와 인스턴스를 추가한 뒤, Datadog AWS 통합을 구성해 CPU와 메모리 같은 추가 클라우드 데이터를 가져오세요.
    aws:
      instance_endpoint: '<AWS_INSTANCE_ENDPOINT>'
      region: <AWS_REGION>

IAM으로 인증하려면 region과 instance_endpoint 파라미터를 지정하고 managed_authentication.enabled를 true로 설정하세요.

참고: IAM 인증을 사용하려는 경우에만 managed_authentication을 활성화하세요. IAM 인증은 password 필드보다 우선합니다. IAM 데이터베이스 인증은 Agent 7.67.0 이상이 필요하며, AWS는 모든 RDS MariaDB 버전에서 IAM 데이터베이스 인증을 지원하지 않아요. RDS MariaDB 버전과 리전에서의 지원 여부는 IAM 데이터베이스 인증 기능 매트릭스를 확인하세요.

init_config:
instances:
  - dbm: true
    host: '<AWS_INSTANCE_ENDPOINT>'
    port: <PORT>
    username: datadog
    aws:
      instance_endpoint: '<AWS_INSTANCE_ENDPOINT>'
      region: <AWS_REGION>
      managed_authentication:
        enabled: true

RDS 인스턴스에서 IAM 인증을 구성하는 방법은 관리형 인증으로 연결하기를 참고하세요.

MariaDB 메트릭을 Datadog로 보내기 시작하려면 에이전트를 재시작하세요. {% /tab %}

{% tab title="Docker" %}

ECS나 Fargate 같은 Docker 컨테이너에서 실행되는 Database Monitoring Agent를 구성하려면 Autodiscovery 통합 템플릿을 에이전트 컨테이너의 Docker 라벨로 설정할 수 있어요.

참고: 라벨 자동 탐지(Autodiscovery)가 동작하려면 에이전트가 Docker 소켓에 대한 읽기 권한이 있어야 해요.

커맨드 라인 (Command line)

커맨드 라인에서 에이전트를 실행하려면 다음 명령을 실행하세요. 계정과 환경에 맞게 값을 바꾸세요.

export DD_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export DD_AGENT_VERSION=<AGENT_VERSION>

docker run -e "DD_API_KEY=${DD_API_KEY}" \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -l com.datadoghq.ad.check_names='["mysql"]' \
  -l com.datadoghq.ad.init_configs='[{}]' \
  -l com.datadoghq.ad.instances='[{
    "dbm": true,
    "host": "<AWS_INSTANCE_ENDPOINT>",
    "port": <PORT>,
    "username": "datadog",
    "password": "<UNIQUEPASSWORD>",
    "aws": {
      "instance_endpoint": "<AWS_INSTANCE_ENDPOINT>",
      "region": "<AWS_REGION>"
    }
  }]' \
  registry.datadoghq.com/agent:${DD_AGENT_VERSION}

Dockerfile

라벨은 Dockerfile에서도 지정할 수 있어요. 그러면 인프라 구성을 바꾸지 않고도 사용자 지정 에이전트를 빌드하고 배포할 수 있습니다.

FROM registry.datadoghq.com/agent:<AGENT_VERSION>

LABEL "com.datadoghq.ad.check_names"='["mysql"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"dbm": true, "host": "<AWS_INSTANCE_ENDPOINT>", "port": <PORT>,"username": "datadog","password": "ENC[datadog_user_database_password]", "aws": {"instance_endpoint": "<AWS_INSTANCE_ENDPOINT>", "region": "<AWS_REGION>"}}]'

{% /tab %}

{% tab title="Kubernetes" %}

Kubernetes 클러스터가 있다면 Database Monitoring에 Datadog Cluster Agent를 사용하세요.

Kubernetes 클러스터에서 아직 활성화하지 않았다면 클러스터 점검 활성화 지침을 따르세요. MySQL 구성을 Cluster Agent 컨테이너에 마운트된 정적 파일로 선언하거나 서비스 어노테이션으로 선언할 수 있어요.

Operator

Kubernetes 및 Integrations의 Operator 지침을 참고로, 아래 단계에 따라 MySQL 통합을 설정하세요.

  1. 다음 구성으로 datadog-agent.yaml 파일을 만들거나 업데이트하세요.

    apiVersion: datadoghq.com/v2alpha1
    kind: DatadogAgent
    metadata:
      name: datadog
    spec:
      global:
        clusterName: <CLUSTER_NAME>
        site: <DD_SITE>
        credentials:
          apiSecret:
            secretName: datadog-agent-secret
            keyName: api-key
    
      features:
        clusterChecks:
          enabled: true
    
      override:
        nodeAgent:
          image:
            name: agent
            tag: <AGENT_VERSION>
    
        clusterAgent:
          extraConfd:
            configDataMap:
              mysql.yaml: |-
                cluster_check: true
                init_config:
                instances:
                - host: <AWS_INSTANCE_ENDPOINT>
                  port: <PORT>
                  username: datadog
                  password: 'ENC[datadog_user_database_password]'
                  dbm: true
                  aws:
                    instance_endpoint: <AWS_INSTANCE_ENDPOINT>
                    region: <AWS_REGION>
    
  2. 다음 명령으로 변경 사항을 Datadog Operator에 적용하세요.

    kubectl apply -f datadog-agent.yaml
    

Helm

  1. Helm에 대한 Datadog Agent 설치 지침을 완료하세요.

  2. YAML 설정 파일(Cluster Agent 설치 지침의 datadog-values.yaml)을 업데이트해 다음을 포함하세요.

    clusterAgent:
      confd:
        mysql.yaml: |-
          cluster_check: true
          init_config:
          instances:
            - dbm: true
              host: <AWS_INSTANCE_ENDPOINT>
              port: <PORT>
              username: datadog
              password: 'ENC[datadog_user_database_password]'
              aws:
                instance_endpoint: <AWS_INSTANCE_ENDPOINT>
                region: <AWS_REGION>
    
    clusterChecksRunner:
      enabled: true
    
  3. 커맨드 라인에서 위 설정 파일로 에이전트를 배포하세요.

    helm install datadog-agent -f datadog-values.yaml datadog/datadog
    

{% alert level="info" %} Windows에서는 helm install 명령에 --set targetSystem=windows를 추가하세요. {% /alert %}

마운트된 파일로 구성하기

마운트된 설정 파일로 클러스터 점검을 구성하려면 /conf.d/mysql.yaml 경로에 설정 파일을 Cluster Agent 컨테이너에 마운트하세요.

cluster_check: true  # 이 플래그를 포함해야 해요
init_config:
instances:
  - dbm: true
    host: '<AWS_INSTANCE_ENDPOINT>'
    port: <PORT>
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    aws:
      instance_endpoint: <AWS_INSTANCE_ENDPOINT>
      region: <AWS_REGION>

Kubernetes 서비스 어노테이션으로 구성하기

파일을 마운트하는 대신 인스턴스 구성을 Kubernetes Service로 선언할 수 있어요. Kubernetes에서 실행되는 에이전트에 대해 이 점검을 구성하려면 다음 구문으로 서비스를 만드세요.

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    tags.datadoghq.com/env: '<ENV>'
    tags.datadoghq.com/service: '<SERVICE>'
  annotations:
    ad.datadoghq.com/service.check_names: '["mysql"]'
    ad.datadoghq.com/service.init_configs: '[{}]'
    ad.datadoghq.com/service.instances: |
      [
        {
          "dbm": true,
          "host": "<AWS_INSTANCE_ENDPOINT>",
          "port": <PORT>,
          "username": "datadog",
          "password": "ENC[datadog_user_database_password]",
          "aws": {
            "instance_endpoint": "<AWS_INSTANCE_ENDPOINT>",
            "region": "<AWS_REGION>"
          }
        }
      ]
spec:
  ports:
  - port: <PORT>
    protocol: TCP
    targetPort: <PORT>
    name: mysql

Cluster Agent는 이 구성 을 자동으로 등록하고 MySQL 점검을 실행하기 시작해요.

datadog 사용자의 비밀번호가 평문으로 노출되지 않게 하려면 에이전트의 비밀 관리 패키지를 사용하고 비밀번호를 ENC[] 구문으로 선언하세요. {% /tab %}

검증 (Validate)

에이전트의 status 하위 명령을 실행해 Checks 섹션에서 mysql을 찾아보세요. 또는 Databases 페이지를 방문해 시작할 수 있어요.

RDS 통합 설치하기

AWS CPU 같은 인프라 메트릭을 DBM의 데이터베이스 원격 측정과 함께 보려면 RDS 통합을 설치하세요 (선택 사항).

트러블슈팅

설명한 대로 통합과 에이전트를 설치하고 구성했는데 예상대로 동작하지 않으면 트러블슈팅 문서를 참고하세요.

더 알아보기 (Learn more)

추가로 도움이 되는 문서, 링크, 글: