개요
감사 로그는 버전 2.0.5부터 ProxySQL에 도입되었습니다.
이 기능을 사용하면 특정 연결 활동을 추적할 수 있습니다. ProxySQL은 종종 전체 데이터베이스 인프라에 대한 단일 액세스 지점으로 사용되기 때문에 ProxySQL에 대한 액세스 및 ProxySQL 자체 뒤의 데이터베이스 설정을 모니터링하는 것이 종종 매우 중요합니다. ProxySQL 감사 로그는 이 요구 사항을 정확하게 해결합니다.
mysql-auditlog_filename이 기능을 활성화하려면 로깅이 수행될 파일을 지정하도록 변수 를 구성해야 합니다. 이 변수의 기본값은 빈 문자열입니다. 기본적으로 로깅이 활성화되지 않습니다.
활성화되면 다음 이벤트가 기록됩니다.
- MySQL 모듈에서:
- 성공적인 인증
- 인증 실패
- 우아한 연결 끊기
- 닫힌 연결
- 스키마 변경(COM_INIT_DB)
- 관리 모듈에서:
- 성공적인 인증
- 인증 실패
- 우아한 연결 끊기
- 닫힌 연결
향후 추가 확장이 예상됩니다. 구체적으로 다음과 같습니다.
- MySQL 모듈에서 사용자(COM_CHANGE_USER) 변경 지원
- SQLite3 서버 모듈의 이벤트 지원
- ClickHouse Module의 이벤트 지원
변수
- mysql-auditlog_filename: 이 변수는 감사 이벤트가 기록되는 감사 로그의 기본 이름을 정의합니다. 로그 파일의 파일 이름은 기본 이름 뒤에 8자리 진행형 숫자가 붙습니다. 기본값은 빈 문자열(")입니다.
- mysql-auditlog_filesize: 이 변수는 현재 파일이 닫히고 새 파일이 생성될 때 감사 로그의 최대 파일 크기를 정의합니다. 기본값은 104857600(100MB)입니다.
로깅 형식
현재 구현은 JSON이라는 하나의 로깅 형식만 지원합니다.
속성:
- client_addr: ProxySQL에 접속하는 클라이언트의 주소(IP:port)
- proxy_addr: ProxySQL이 수신 대기 중인 바인드 인터페이스의 주소(IP:포트)(MySQL 모듈에서만 사용 가능)
- event: 이벤트 유형. 현재 가능한 값:
- MySQL_Client_Connect_OK: MySQL 모듈에 성공적으로 연결
- MySQL_Client_Connect_ERR: MySQL 모듈에 대한 연결 실패
- MySQL_Client_Close: MySQL 세션이 닫히는 중
- MySQL_Client_Quit: 명시 COM_QUIT적을 MySQL 모듈로 보내는 클라이언트
- MySQL_Client_Init_DB: 명시 COM_INIT_DB적을 MySQL 모듈로 보내는 클라이언트
- Admin_Connect_OK: Admin Module에 성공적으로 연결됨
- Admin_Connect_ERR: Admin Module 연결 실패
- Admin_Close: 관리 세션 종료 중
- Admin_QuitCOM_QUIT: Admin Module 에 명시적을 보내는 클라이언트
- time: 사람이 읽을 수 있는 이벤트 발생 시간(밀리초 단위)
- timestamp: epoch 시간(밀리초)
- ssl: SSL 사용 여부를 지정하는 부울 값
- schemaname: 성공적으로 설정된 연결에 대한 현재 스키마
- username: 클라이언트의 사용자 이름
- thread_id: 클라이언트에 할당된 thread_id(세션 ID)
- creation_time: 세션이 생성된 시점, 해당 세션이 종료된 경우에만 정보 제공
- duration: 세션이 생성된 이후의 시간(밀리초), 세션이 종료된 경우에만 정보 제공
- extra_info: 추가 정보를 제공하는 속성입니다. 현재 세션이 닫히는 코드 부분을 설명하는 데만 사용됩니다.
감사 로그 예
다음은 몇 가지 감사 로그 예입니다.
자세한 예 #1:
아래 위의 예에서 지정된 시간( "time":"2019-05-20 18:48:47.631","timestamp":1558342127631)에 클라이언트( )가 SSL( )을 사용하지 않고 사용자 이름 "admin"( )을 사용하여 "client_addr":"127.0.0.1:39954"관리자( )에 연결하지 못했습니다 . 연결 에 ( ) 의 내부가 지정되었습니다 ."event":"Admin_Connect_ERR""ssl":false"username":"admin"thread_id2"thread_id":2
{
"client_addr":"127.0.0.1:39954",
"event":"Admin_Connect_ERR",
"schemaname":"",
"ssl":false,
"thread_id":2,
"time":"2019-05-20 18:48:47.631",
"timestamp":1558342127631,
"username":"admin"
}
다음으로, 위에서 설명한 동일한 연결이 ( "event":"Admin_Close") 직후 에 연결이 끊어집니다( "duration":"0.000ms"). 추가 정보도 제공됩니다: "extra_info":"MySQL_Thread.cpp:2652:~MySQL_Thread()".
{
"client_addr":"127.0.0.1:39954",
"creation_time":"2019-05-20 18:48:47.631",
"duration":"0.000ms",
"event":"Admin_Close",
"extra_info":"MySQL_Thread.cpp:2652:~MySQL_Thread()",
"schemaname":"",
"ssl":false,
"thread_id":2,
"time":"2019-05-20 18:48:47.631",
"timestamp":1558342127631,
"username":"admin"
}
자세한 예 #2:
다음 출력에서 사용자 이름을 사용하여 SSL() 없이 "event":"Admin_Connect_OK"에서 관리 모듈() 에 성공적으로 로그인했음을 식별할 수 있습니다 ."client_addr":"127.0.0.1:43266""ssl":falseadmin
{
"client_addr":"127.0.0.1:43266",
"event":"Admin_Connect_OK",
"schemaname":"main",
"ssl":false,
"thread_id":3,
"time":"2019-05-20 19:16:53.313",
"timestamp":1558343813313,
"username":"admin"
}
다음으로 위에 나열된 클라이언트는 명시적으로 COM_QUIT명령( "event":"Admin_Quit")을 보냅니다.
{
"client_addr":"127.0.0.1:43266",
"event":"Admin_Quit",
"schemaname":"main",
"ssl":false,
"thread_id":3,
"time":"2019-05-20 19:16:56.513",
"timestamp":1558343816513,
"username":"admin"
}
마지막으로, 클라이언트 연결이 생성 "event":"Admin_Close"된 ~3.2초( ) 후에 위 클라이언트의 세션이 닫힙니다( )."duration":"3200.191ms"
{
"client_addr":"127.0.0.1:43266",
"creation_time":"2019-05-20 19:16:53.313",
"duration":"3200.191ms", "event":"Admin_Close",
"extra_info":"MySQL_Thread.cpp:2652:~MySQL_Thread()",
"schemaname":"main",
"ssl":false,
"thread_id":3,
"time":"2019-05-20 19:16:56.513",
"timestamp":1558343816513,
"username":"admin"
}
자세한 예 #3:
이 예에서 클라이언트( )는 SSL( ) 없이 지정된 바인드 인터페이스( )에서 "client_addr":"127.0.0.1:40822"MySQL 모듈( )에 성공적으로 연결합니다 . 사용자 이름( ) 및 스키마 이름( )이 기록됩니다."event":"MySQL_Client_Connect_OK""proxy_addr":"0.0.0.0:6033""ssl":false"username":"sbtest""schemaname":"mysql"
{
"client_addr":"127.0.0.1:40822",
"event":"MySQL_Client_Connect_OK",
"proxy_addr":"0.0.0.0:6033",
"schemaname":"mysql",
"ssl":false,
"thread_id":4,
"time":"2019-05-20 19:20:26.668",
"timestamp":1558344026668,
"username":"sbtest"
}
몇 초 후 동일한 클라이언트가 ( )를 발행하고 스키마 이름 COM_INIT_DB( ) "event":"MySQL_Client_Init_DB"을 전환 "schemaname":"sbtest"합니다. 다음과 같이 기록됩니다.
{
"client_addr":"127.0.0.1:40822",
"event":"MySQL_Client_Init_DB",
"proxy_addr":"0.0.0.0:6033",
"schemaname":"sbtest",
"ssl":false,
"thread_id":4,
"time":"2019-05-20 19:20:29.902",
"timestamp":1558344029902,
"username":"sbtest"
}
같은 예에서 클라이언트는 몇 초 후에 COM_QUIT( "event":"MySQL_Client_Quit")를 발행합니다. 다음과 같이 기록됩니다.
{
"client_addr":"127.0.0.1:40822",
"event":"MySQL_Client_Quit",
"proxy_addr":"0.0.0.0:6033",
"schemaname":"sbtest",
"ssl":false,
"thread_id":4,
"time":"2019-05-20 19:20:35.759",
"timestamp":1558344035759,
"username":"sbtest"
}
마지막으로 proxysql "event":"MySQL_Client_Close"은 ~9초 동안 지속된 세션( )을 종료합니다( "duration":"9091.966ms").
{
"client_addr":"127.0.0.1:40822",
"creation_time":"2019-05-20 19:20:26.668",
"duration":"9091.966ms",
"event":"MySQL_Client_Close",
"extra_info":"MySQL_Thread.cpp:3733:process_all_sessions()",
"proxy_addr":"0.0.0.0:6033",
"schemaname":"sbtest",
"ssl":false,
"thread_id":4,
"time":"2019-05-20 19:20:35.760",
"timestamp":1558344035760,
"username":"sbtest"
}
'2023' 카테고리의 다른 글
ProxySQL - Global Variables (글로벌 변수) (0) | 2023.01.18 |
---|---|
ProxySQL Configuration file (구성 파일) (0) | 2023.01.17 |
ProxySQL - 다중 계층 구성 시스템 (0) | 2023.01.17 |
ProxySQL 시작하기 (설치) (1) | 2023.01.13 |
KOSA 2023년 적용 SW기술자 평균임금 공표 (0) | 2023.01.06 |