본문 바로가기
DATABASE/MariaDB

[MariaDB][Linux] Log Setting (1) - General Log, Slow Query Log 설정하기

by DANEW 2024. 1. 19.

MariaDB Query Log 설정

MariaDB에는 서비스의 질을 향상시키고자 지원되는 여러가지 Log 기능들이 있다.

 

그 중에 대표적으로 사용되는 모든 쿼리에 대해 저장하는 General Log와 특정 시간 이상 걸리 쿼리에 대해 저장하는 Slow Query Log가 있다.

이외에도 사용되는 많은 Log가 있지만, 오늘은 이 두개에 대해 알아보도록 한다.

 

General Log

MariaDB의 Audit과도 같은 Log 라고 볼 수 있는데, MariaDB의 모든 쿼리에 대한 로그를 저장한다.

여기에는 Slow Log, Error Log 등의 값도 포함이 된다.

 

Genral Log 설정 확인

show variables like '%general%';

General Log는 위와 같은 명령어로 상태값을 확인 할 수 있다.

 

general_log 는 현재 General Log 가 활성화/비활성화 상태를 확인 할 수 있는데, 기본적으로는 OFF- 비활성화 상태이다.

general_log_file 은 활성화 상태일때 Log가 쌓일 파일 위치를 확인 할 수 있다.

기본적으로는 data 가 위치한 디렉토리의 HostName.log 파일이다.

 

Genral Log 동적 옵션 설정

General Log는 동적 옵션으로 mysql 명령어를 통해 바로 옵션을 수정 할 수 있다.

 

아래의 명령어를 통해 General Log 활성 상태를 변경합니다.

-- 1: 활성화 / 0: 비활성화
mysql
> set global general_log = 1;

genaral_log = 1로 변경 할 경우 ON상태로 바뀌고, 이후 general_log_file에 설정한 log파일에 General Log가 쌓이기 시작한다.

 

General Log가 쌓이는 파일은 아래의 명령어를 통해 변경 할 수 있다.

mysql 
> set global general_log_file = '/data/mariadb/log/general_log.log';

위 명령어를 통해 /data/mariadb/log 의 디렉토리에 general_log.log 파일에 로그를 쓰기 시작한다.

 

Mariadb 설정 파일 수정 General Log

위의 명령어를 통해 동적 옵션 변경으로 반영할 경우, MariaDB 서비스를 재시작하면 기본값으로 돌아오게 된다.

MariaDB 설정파일에 옵션을 저장하여 서비스를 재시작하여도 옵션이 유지될 수 있게 수정 하도록 한다.

vi /etc/my.cnf.d/server.cnf

> 문서 내용 수정
-----------------------------
[mysqld]
general_log = 1
general_log_file = /data/mariadb/log/general_log.log

위와같이 설정 파일 수정으로 General Log 사용 여부, General Log File 위치를 영구적으로 설정 할 수 있다.

반응형

Slow Query Log

Slow Query Log는 이름 그대로 느린 쿼리에 대한 로그를 저장하는 기능이다.

특정 시간을 정해두고 해당 시간 이상 진행 된 트랜잭션에 대해 쿼리를 저장하여, 쿼리 튜닝에 기초자료가 될 수 있게 한다.

 

Slow Query Log 설정 확인

mysql
> show variables like '%log_slow_query%';

Slow Query Log는 위와 같은 명령어로 상태값을 확인 할 수 있다.

 

log_slow_query는 현재 Slow Query Log 가 활성화/비활성화 상태를 확인 할 수 있는데, 기본적으로는 OFF 비활성화 상태이다.

log_slow_query_file 은 활성화 상태일때 Log가 쌓일 파일 위치를 확인 할 수 있다.

General Log와 같이 기본적으로는 data 가 위치한 디렉토리의 HostName-slow.log 파일이다.

General Log와 다른 옵션값이 하나 더 있는데, log_slow_query_time 이다.

기본값으로 10초의 값을 가지고 있는데, 10초 이상의 쿼리에  slow query로 판단하여 해당 쿼리를 저장한다는 옵션 값이다.

 

Slow Query Log 동적 옵션 설정

Slow Query Log는 동적 옵션으로 mysql 명령어를 통해 바로 옵션을 수정 할 수 있다.

 

아래의 명령어를 통해 Slow Query Log의 활성상태를 변경 할 수 있다.

-- 1: 활성화 / 0: 비활성화
mysql
> set global slow_query_log = 1;

log_slow_query = 1로 변경 할 경우 ON상태로 바뀌고, 이후 log_slow_query_file에 설정한 log파일에 Slow Query Log가 쌓이기 시작한다.

 

Slow Query Log가 쌓이는 파일은 아래의 명령어를 통해 변경 할 수 있다.

mysql 
> set global slow_query_log_file = '/data/mariadb/log/slow_log.log';

위 명령어를 통해 /data/mariadb/log 의 디렉토리에 slow_log.log 파일에 로그를 쓰기 시작한다.

 

추가로 하나의 옵션이 더있는데, slow query에 대한 시간 설정을 할 수 있다.

mysql
> set global long_query_time = 5;

기본 10초이상 걸리는쿼리를 저장하였으나, 위 명령어를 통해 쿼리 시간을 5초 이상으로 변경하여 로그 파일에 저장한다.

 

Mariadb 설정 파일 수정 Slow Query Log

위의 명령어를 통해 동적 옵션 변경으로 반영할 경우, MariaDB 서비스를 재시작하면 기본값으로 돌아오게 된다.

MariaDB 설정파일에 옵션을 저장하여 서비스를 재시작하여도 옵션이 유지될 수 있게 수정 하도록 한다.

vi /etc/my.cnf.d/server.cnf

> 문서 내용 수정
-----------------------------
[mysqld]
slow_query_log = 1
slow_query_log_file = /data/mariadb/log/slow_log.log
long_query_time = 5

위와같이 설정파일을 수정하여 sloq query 사용여부, log파일 위치, long query 제한시간을 설정 할 수 있다.

 

기타 설정

General Log, Slow Query Log에 대해서 추가적인 옵션들이 있다.

대표적으로 Log를 저장하는 방식에 대해서 알아보도록 한다.

 

Log 기록 방식

 

General Log, Slow Query Log 의 저장방식은 기본적으로 위에서 설정한 Log File에 쓰는 것이다.

 

아래의 명령어로 로그파일이 어떤 방식으로 저장되는지 확인 할 수 있다.

mysql
> show variables like '%log_output%';

저장방식에는 총 2가지 방법이 있는데 외부 파일에 저장하는 File방식, MariaDB Table에 저장하는 Table방식 두가지를 지원한다.

기본값으로는 File에 Log를 쓰고 있으나 아래와 같이 변경이 가능하다.

mysql
> set global log_output = 'table';

MariaDB Table에 Log를 저장하도록 변경하였다. Log Table의 위치는 mysql 데이터베이스에 위치하고있다.

General Log의 경우 mysql.general_log 테이블, Slow Query Log의 경우 mysql.slow_log 테이블에 로그 데이터를 저장한다.

 

File로 저장 할 경우 처음 세션이 연결 될 때만 HOST 정보가 기록이 되고, 그 후 쿼리에 대해서만 저장이되어 어떤 IP에서 어떠한 쿼리를 던졌는지 확인하기가 어렵다.

하지만 Table로 저장 할 경우 컬럼값에 user_host라는 값이 추가되어 각 쿼리마다 IP가 기록된다.

 

General Log와 Slow Query Log는 Table, File 둘다 저장 할 수도 있다.

mysql
> set global log_output = 'table,file';

 

 

Comment

설정을 해두면 많은 도움이 되는 Log이다.

 

물론 General Log에 경우 모든 쿼리를 전부 저장하기에 많은 용량을 사용하기 때문에 Log File이나 Log Table관리를 필수적으로 해줘야하는 문제가 있다.

파일을 일자 별로 나누어 저장하는 Logrotate에 대해서와 Error Log, Binary Log 등 다른 로그에 대해서는 다음 포스팅에서 다루도록 하겠다.

 

반응형