Datadog 데이터베이스 모니터링은 InnoDB 스토리지 엔진에 대한 쿼리 지표, 쿼리 샘플, 실행 계획, 연결 데이터, 시스템 지표 및 원격 측정 등을 제공하여 MySQL 데이터베이스에 대한 가시적인 모니터링을 제공합니다.

에이전트는 읽기 전용 사용자로 로그인하여 데이터베이스에서 직접 원격 분석을 수집합니다. MySQL 데이터베이스에서 데이터베이스 모니터링을 활성화하려면 다음 설정을 수행합니다.

  • 데이터베이스 매개변수 구성
  • 에이전트에 데이터베이스 액세스 권한 부여
  • 에이전트 설치
  • RDS 통합 설치

본 문서에서는 Aurora MySQL 3.04.0(Mysql 8.0.28) 버전을 기준을 설명합니다.

MySQL 설정 구성

DB parameter 그룹에서 다음을 구성한 후 설정이 적용되도록 서버를 다시 시작합니다.(아래 파라미터는 MySQL 5.7 이상에 적용됩니다.

PARAMETER VALUE DESCRIPTION
performance_schema 1 필수
performance_schema_consumer_events_statements_current 1 필수. 현재 실행 중인 쿼리를 모니터링
performance-schema-consumer-events-waits-current ON 필수. 대기 이벤트 수집을 활성화
performance_schema_consumer_events_statements_history 1 선택. 쓰레드별로 최근 쿼리 기록을 추적.
performance_schema_consumer_events_statements_history_long 1 선택. 모든 쓰레드에서 최근 쿼리를 추적
performance_schema_max_digest_length 4096 events_statements_* 테이블의 SQL 다이제스트 텍스트 크기 증가.
기본값으로 두면 1024자를 초과하는 쿼리는 수집되지 않음
performance_schema_max_sql_text_length 4096 Performance_schema_max_digest_length와 일치해야 함

 

에이전트 액세스 권한 부여

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

1) 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@'%';

 

2) 스키마를 생성합니다.

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

 

3) datadog 에이전트가 실행 계획을 수집할 수 있도록 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 ;

 

실행 계획을 수집하려는 모든 스키마에 이 프로시저를 생성합니다.

아래의 <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에서는 에이전트에 런타임 시 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@'%';

Install the Agent

Aurora 호스트를 모니터링하려면 Datadog 에이전트를 설치하고 각 인스턴스 엔드포인트에 원격으로 연결하도록 구성합니다. 에이전트는 데이터베이스에서 실행할 필요가 없으며 데이터베이스에 연결하기만 하면 됩니다.

RDS로 DB를 구축한 경우, 별도의 EC2나 Docker container 또는 kubernetes pod에 설치할 수 있습니다.

본 문서에서는 별도의 EC2에 Agent 설치를 설명합니다.

 

루트 디렉터리의 conf.d/ 폴더에서 mysql.d/conf.yaml 파일을 편집합니다.

MySQL 지표를 수집하려면 mysql.d/conf.yaml에 다음 구성 블록을 추가하세요.

init_config:

instances:
  - dbm: true
    host: '<AWS_INSTANCE_ENDPOINT>'
    port: 3306
    username: datadog
    password: '<YOUR_CHOSEN_PASSWORD>'

중요 : Use the Aurora instance endpoint here, not the cluster endpoint.

 

에이전트 설정 예제

One agent connecting to multiple hosts

여러 원격 데이터베이스 인스턴스에 연결하기 위해 단일 에이전트 호스트를 구성하는 것이 일반적입니다 여러 호스트에 연결하려면 MySQL 통합 구성에서 각 호스트에 대한 항목을 생성합니다.안정적인 성능을 보장하기 위해 에이전트당 인스턴스 수를 최대 10개의 데이터베이스 인스턴스로 설정합니다.

init_config:
instances:
  - dbm: true
    host: products-primary.123456789012.us-east-1.rds.amazonaws.com
    port: 3306
    username: datadog
    password: '<PASSWORD>'
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:product-recommendation'
  - dbm: true
    host: products–replica-1.us-east-1.rds.amazonaws.com
    port: 3306
    username: datadog
    password: '<PASSWORD>'
    options:
      replication: true
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:product-recommendation'
  - dbm: true
    host: products–replica-2.us-east-1.rds.amazonaws.com
    port: 3306
    username: datadog
    password: '<PASSWORD>'
    options:
      replication: true
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:product-recommendation'
    [...]

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

에이전트 구성 파일에서 직접 비밀번호를 선언하는 것이 가능하지만 Vault와 같은 비밀 관리 소프트웨어를 사용하여 데이터베이스 자격 증명을 다른 곳에 암호화하고 저장하는 것이 더 안전한 방법입니다. 에이전트는 ENC[] 구문을 사용하여 이러한 자격 증명을 읽을 수 있습니다.

init_config:
instances:
  - dbm: true
    host: localhost
    port: 3306
    username: datadog
    password: 'ENC[datadog_user_database_password]'

 

사용자 정의 쿼리 실행

사용자 정의 지표를 수집하려면 custom_queries 옵션을 사용합니다

init_config:
instances:
  - dbm: true
    host: localhost
    port: 3306
    username: datadog
    password: '<PASSWORD>'
    custom_queries:
    - query: SELECT age, salary, hours_worked, name FROM hr.employees;
      columns:
        - name: custom.employee_age
          type: gauge
        - name: custom.employee_salary
           type: gauge
        - name: custom.employee_hours
           type: count
        - name: name
           type: tag
      tags:
        - 'table:employees'

 

프록시를 통한 호스트 작업

에이전트가 Cloud SQL 인증 프록시와 같은 프록시를 통해 연결해야 하는 경우 모든 원격 분석에는 데이터베이스 인스턴스가 아닌 프록시의 호스트 이름으로 태그가 지정됩니다. reported_hostname 옵션을 사용하여 지정합니다.

init_config:
instances:
  - dbm: true
    host: localhost
    port: 5000
    username: datadog
    password: '<PASSWORD>'
    reported_hostname: products-primary
  - dbm: true
    host: localhost
    port: 5001
    username: datadog
    password: '<PASSWORD>'
    reported_hostname: products-replica-1

RDS 통합 설치

개요

Amazon Relational Database Service(RDS)는 클라우드에서 관계형 데이터베이스를 설정, 운영 및 확장하는 데 사용되는 웹 서비스입니다. 이 통합을 활성화하면 Datadog에서 모든 RDS 지표를 볼 수 있습니다.

참고: 환경 변수 DD_SITE가 datadoghq.com 외부의 지역으로 설정되어 있는지 확인하거나 다음과 변수를 설정합니다.

DD_SITE = os.getenv("DD_SITE", default="datadoghq.com")

RDS 인스턴스를 모니터링하는 옵션에는 표준, 고급, 기본의 세 가지 옵션이 있습니다.

  • Standard
 

표준 통합을 위해서는 AWS 통합 페이지의 지표 수집 탭에서 RDS를 활성화해야 합니다. 이를 통해 CloudWatch 통합이 허용하는 만큼 인스턴스에 대한 지표를 받을 수 있습니다. 모든 RDS 엔진 유형이 지원됩니다.

이 통합을 위해 사전 설정된 대시보드에는 연결, 복제 지연, 읽기 작업 및 대기 시간, 컴퓨터, RAM, 쓰기 작업 및 대기 시간, 디스크 메트릭과 같은 메트릭 정보가 포함됩니다.

 

설정

설치

  • Standard
  • Enhanced
  • Native

표준 RDS 통합의 경우 먼저 Amazon Web Services 통합을 설정해야 합니다. datadog에 로긴한 후 좌측 메뉴에서 [Integrations] 클릭 후 우측의 화면에서 "Amazon Web Services"를 클릭합니다.

 

구성

1) AWS integration pageMetric Collection tab에서 RDS가 활성화되어 있는지 확인합니다. 아래 화면처럼 "AWS Integrations" 탭 클릭한 후 검색란에 rds 를 입력합니다.

2) Amazon RDS 지표를 수집하려면 Datadog IAM 정책에 다음 권한을 추가합니다.

rds:DescribeDBInstances Describe RDS instances to add tags.
rds:ListTagsForResource Add custom tags on RDS instances.
rds:DescribeEvents Add events related to RDS databases.

3) Datadog - AWS RDS ingegration을 설치합니다.

사용법

Datadog의 지표 탐색기, 대시보드 및 Warning을 통해 MySQL, Aurora, MariaDB, SQL Server, Oracle 또는 PostgreSQL의 RDS 지표 및 지표에 액세스할 수 있습니다. 다음은 두 RDS의 여러 지표를 표시하는 Aurora 대시보드의 예입니다.

로그 수집

로깅 설정

MySQL, MariaDB 및 Postgres 로그를 Amazon CloudWatch로 전달할 수 있습니다. Amazon CloudWatch로 Amazon Aurora MySQL RDS 로그를 보내도록 RDS 를 설정합니다.

 

Datadog에 로그 보내기

  1. If you haven’t already, set up the Datadog log collection AWS Lambda function. 아직 설정하지 않았다면 Datadog 로그 수집 AWS Lambda 함수를 설정합니다.
  2. Lambda 함수가 설치되면 RDS 로그가 포함된 CloudWatch 로그 그룹에 트리거를 수동으로 추가하고 해당 CloudWatch 로그 그룹을 선택하고 필터 이름(선택 사항)을 추가한 후 트리거를 추가합니다.

완료되면 Datadog Log 섹션으로 이동하여 로그를 탐색합니다.

 

 

참고문서 : https://docs.datadoghq.com/database_monitoring/setup_mysql/aurora/?tab=host

 

 

+ Recent posts