데이터독 RDS(MySQL 8.0) 모니터링 설정

최근 MySQL 8.4로 마이그레이션했는데 잘 동작한다.

1. RDS 파라미터 그룹 설정

RDS 파라미터 그룹에 다음과 같은 설정을 추가해야한다.

  • performance-schema : 1
    • MySQL 성능 스키마 활성화 작업 : MySQL 서버 내부에서 실행되는 작업에 대한 상세 메트릭
  • max-digest-length : 4096
    • 정규화된 명령문 다이제스트 계산을 위해 세션당 사용 가능한 바이트 수, 기본값으로 설정할 경우 1024자 미만의 쿼리 수집 불가
  • performance-schema-max-digest-length : 4096(max_digest-length에 맞춤)
  • performance-schema-max-sql-text-length : 4096(max-digest-length에 맞춤)

digest 관련 옵션의 키워드는 MySQL ‘Performance Schema Statement Digest’이다. 실행 쿼리들을 그룹화(비슷한 형태의 쿼리를 그룹화)하여 통계를 제공하기 위해 사용하는 것으로 보인다. 위 설정은 ‘비슷한 형태 = digest’의 길이와 연관이 있다.

아래 쿼리를 실행해서 설정이 제대로 됐는지 확인하고, 적용이 안됐다면 DB를 재시작한다.

SELECT * FROM performance_schema.global_variables;

2. MySQL 작업

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

CREATE SCHEMA IF NOT EXISTS datadog;
GRANT EXECUTE ON datadog.* to datadog@'%';
GRANT CREATE TEMPORARY TABLES ON datadog.* TO datadog@'%';
  • datadog 사용자에게 프로세스, 리플리케이션, performance_schema 조회 권한을 부여한다.
  • datadog 스키마를 생성하고, datadog 스키마 내 프로시저 실행 권한 및 임시 테이블 생성 권한을 부여한다.

datadog에서 실행 계획을 수집할 수 있도록 프로시저를 생성한다.

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 ;


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

RDS를 사용하는 경우에는 성능 스키마 컨슈머 설정이 어렵기 때문에, 아래와 같이 프로시저를 만들어서 런타임에 에이전트가 컨슈머를 활성화할 수 있는 권한을 제공한다.

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

3. 에이전트 설정

우분투 기준 /etc/datadog-agent/conf.d/mysql.d/ 경로에 conf.yaml 파일을 생성하고 다음과 같이 작성한다. (에이전트 설치 필요 -> 데이터독 사이트 참고)

init_config:

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

에이전트를 재시작하고, 연동이 잘되는지 확인한다.

sudo service datadog-agent restart 

함께 봤던 자료