Kimuksung
Kimuksung 안녕하세요. 분산처리에 관심이 많은 생각하는 주니어 Data Enginner입니다.

AWS RDS Mysql Log 데이터 만들기

AWS RDS Mysql Log 데이터 만들기
Enable Mysql Query Log

https://stackoverflow.com/questions/6479107/how-to-enable-mysql-query-log

  • mysql 버전이 5.1.29 미만인 경우
    • /etc/my.cnf → [mysqld] section

      1
      2
      
        # add etc/my.cnf
        log = /path/to/query.log
      
      1
      
        SET general_log = 1;
      
  • mysql 5.1.29이상
    • log option is deprecated
    • my.cnf → [mysqld] section에 추가

      1
      2
      
        general_log_file = /path/to/query.log
        general_log      = 1
      
      1
      
        SET global general_log = 1;
      
AWS RDS Parameter Group 설정

  • 실제 RDS MYSQL Log 설정

1.Parameter 설정값 설정

  • AWS RDS → Parameter Groups → Create Parameter group or Edit
  • Genral log
    • genral log는 실시간, 대규모 환경에서는 사용하지 않는다. ( 일반적으로 데이터가 많다면 Mysql을 안쓰지 않나..? )
    • general_log = 1

  • slow query log
    • 쿼리가 특정 이상 시간(long_query_time)이라면 로그를 별도로 저장
    • slow_query_log = 1
    • long_query_time = 0 (쿼리 테스트를 위하여 설정한 값)
    • log_output = Table (file로 하면 log가 보인다던데 적용이 되지 않아 Table로 처리)

기타 - 참조

Aurora MySQL 설명
general_log 일반 로그를 생성합니다. 활성화하려면 1로 설정합니다. 기본값은 비활성화(0)입니다.
log_queries_not_using_indexes 인덱스를 사용하지 않는 느린 쿼리 로그에 모든 쿼리를 로깅합니다. 기본값은 비활성화(0)입니다. 이 로그를 활성화하려면 1로 설정합니다.
long_query_time 빠른 실행 쿼리가 느린 쿼리 로그에 로깅되지 않도록 합니다. 0에서 31536000 사이의 부동 소수점 값으로 설정할 수 있습니다. 기본값은 0(비활성화)입니다. 10초
server_audit_events 로그에 캡처할 이벤트 목록입니다. 지원되는 값은 CONNECT, QUERY, QUERY_DCL, QUERY_DDL, QUERY_DML 및 TABLE입니다.
server_audit_logging 서버 감사 로깅을 활성화하려면 1로 설정합니다. 이 옵션을 설정하면 server_audit_events 매개 변수에 감사 이벤트를 CloudWatch 나열하여 보낼 감사 이벤트를 지정할 수 있습니다.
slow_query_log 느린 쿼리 로그를 생성합니다. 느린 쿼리 로그를 활성화하려면 1로 설정합니다. 기본값은 비활성화(0)입니다.


2.RDS Instance Reboot

  • Pending reboot 상태가 되면 RDS Instance Reboot


Enable AWS RDS Mysql Query Log to CloudWatch

  • 주의점 : 이 부분은 로그가 생성 된 이후 CloudWatch로 보내는 옵션이지 로그를 설정하는 옵션이 아니다.
  • AWS RDS → Database → Modify → configuration
  • Reader Instance는 안보이는거 같다.
    1. Open the Amazon RDS console at https://console.aws.amazon.com/rds/.
    2. In the navigation pane, choose Databases.
    3. Choose the Aurora MySQL DB cluster that you want to publish the log data for.
    4. Choose Modify.
    5. In the Log exports section, choose the logs that you want to start publishing to CloudWatch Logs.
    6. Choose Continue, and then choose Modify DB Cluster on the summary page.
  • https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html
  • https://repost.aws/ko/knowledge-center/rds-aurora-mysql-logs-cloudwatch
  • https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.CloudWatch.html

AWS RDS LOG 조회하기

  • AWS RDS → Database → Log&Event → Logs → View
  • https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Procedural.Viewing.html
  • https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Procedural.Downloading.html
SQL Connection Log, Slow Query 조회

  • 실제 연결 로그
  • General Log 값이 세팅되어있는 경우만 추적 가능

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
      # 연결 정보
      SELECT
          CONVERT_TZ(event_time,'UTC','Asia/Seoul') as connect_time,
          user_host,
          argument
      FROM mysql.general_log
      WHERE command_type = 'Connect' limit 10;
        
      # general log
      select 
          CONVERT_TZ(event_time,'UTC','Asia/Seoul') as ktc_time,
          user_host,
          command_type,
          argument
      from mysql.general_log
      order by event_time;
        
      # slow query log
      SELECT
          CONVERT_TZ(start_time,'UTC','Asia/Seoul') as event_time,
          user_host,
          query_time,
          lock_time,
          rows_sent,
          rows_examined,
          db,
          sql_text
      FROM mysql.slow_log
      order by event_time;
    
참조