MySQL 8.
なお、
log_filter_internal
log_
log_error_verbosity
log_
log_ |
出力されるログイベント |
---|---|
1 | ERROR |
2(デフォルト) | ERROR, WARNING |
3 | ERROR, WARNING, INFORMATION |
たとえば、
また、
log_error_suppression_list
log_
対応するエラーコード、
設定
log_SET GLOBAL | PERSIST
で設定することが可能です。現在の設定を確認する場合は、SHOW VARIABLES
で設定を確認することができます。
また、
mysql> SHOW VARIABLES like 'log_error_%'; +----------------------------+---------------------------------------------------+ | Variable_name | Value | +----------------------------+---------------------------------------------------+ | log_error_services | log_filter_internal; log_sink_internal | | log_error_suppression_list | MY-013360,MY-010914,MY-010956,MY-010957,MY-011825 | | log_error_verbosity | 3 | +----------------------------+---------------------------------------------------+ 3 rows in set (0.00 sec) mysql> SET GLOBAL log_error_suppression_list = 'abcdef'; ERROR 1231 (42000): Variable 'log_error_suppression_list' can't be set to the value of 'abcdef'
もし、
perrorコマンドについては、
$ perror MY-013360 MySQL error code MY-013360 (ER_SERVER_WARN_DEPRECATED): '%s' is deprecated and will be removed in a future release. Please use %s instead
log_filter_dragnet
log_
mysql> INSTALL COMPONENT 'file://component_log_filter_dragnet'; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL log_error_services = 'log_filter_dragnet; log_sink_internal'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM mysql.component; +--------------+--------------------+---------------------------------------+ | component_id | component_group_id | component_urn | +--------------+--------------------+---------------------------------------+ | 7 | 7 | file://component_log_sink_syseventlog | | 11 | 11 | file://component_log_filter_dragnet | +--------------+--------------------+---------------------------------------+ 2 rows in set (0.00 sec)
log_filter_dragnetの定義
log_IF condition THEN action.
という形式で記述していきます。conditionには適用するエラーコード
IF err_code == 13360 THEN ...
IF err_code == ER_SERVER_WARN_DEPRECATED THEN ..
IF prio == INFORMATION THEN ...
actionには次のいずれかを指定します。
- drop
- ログに記録しません。
- throttle
- 60秒あたりに表示する回数を指定します。たとえば
throttle 5
とした場合、60秒間に5回だけ表示のように抑制します。 throttle 回数/秒数
と指定した場合は設定時間中に設定回数だけに制限できます。たとえばthrottle 5/
とした場合は1時間3600 (3600秒) に5回に抑制できます。 - set
- フィールドに値を割り当てます。
- unset
- フィールドを破棄します。
log_SET GLOBAL| PERSIST
でdragnet.
例として、
mysql> SET PERSIST dragnet.log_error_filter_rules = 'IF err_code==10926 THEN throttle 3.'; Query OK, 0 rows affected (0.00 sec)
設定したあとに間違ったパスワードなどで連続でログインを試みると、
今度はsetを利用して出力を書き換えてみます。
mysql> SET PERSIST dragnet.log_error_filter_rules = 'IF err_code==10926 THEN set label="HELO". '> IF err_code==10926 THEN set msg="アクセスが拒否されました".'; Query OK, 0 rows affected (0.00 sec)
2021-09-15T19:58:20.401740+09:00 88 [HELO] [MY-010926] [Server] アクセスが拒否されました
2021-09-15T19:58:25.182735+09:00 89 [HELO] [MY-010926] [Server] アクセスが拒否されました
ログのラベルとメッセージが書き換わっているのが確認できます。現在の設定は、
mysql> SHOW STATUS like 'dragnet.Status'; +----------------+-----------------------------------------------------------------------------------------------------------------------------+ | Variable_name | Value | +----------------+-----------------------------------------------------------------------------------------------------------------------------+ | dragnet.Status | IF err_code==MY-010926 THEN set label="HELO". IF err_code==MY-010926 THEN set msg="アクセスが拒否されました". | +----------------+-----------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec)
各種フィールドの情報やより詳しい設定方法については、
まとめ
今回は、