MySQL8.0のエラーログの設定オプションが変わっているので、Fredのブログを確認しながら検証環境で確認しました。
新しいコンポーネントベースのエラーログには次の機能があり、自分の環境にあった設定を選択する事が可能になっています。
1) ログイベントは、フィルタコンポーネントによってフィルタリングして、書き込みに使用できる情報に影響を与えることができます。
2) ログイベントは、sink (writer)コンポーネントによって出力されます。 複数のシンクコンポーネントを有効にして、エラーログの出力を複数の宛先に書き込むことができます。
3) フィルタとライターの組み込みコンポーネントが組み合わされて、デフォルトのエラーログフォーマットが実装されています。
4) ロード可能なライターを使用すると、システムログにロギングできます。
5) ロード可能なライターを使用すると、JSON形式でのログ記録が可能になります。
6) システム変数は、有効にするログコンポーネントとログイベントをフィルタリングするルールを制御します。
log_error_servicesシステム変数は、エラーログに有効にするログコンポーネントを制御します。 その値は、セミコロンで区切られたコンポーネントのリストです。 スペースは重要ではありませんが、リストされた順序でコンポーネントを実行するため、コンポーネントの順序は重要です。
設定変更と動作確認
root@localhost [performance_schema]> select @@version; +--------------+ | @@version | +--------------+ | 8.0.4-rc-log | +--------------+ 1 row in set (0.00 sec) root@localhost [performance_schema]> select * from global_variables where VARIABLE_NAME like 'log_error_%'; +---------------------+----------------------------------------+ | VARIABLE_NAME | VARIABLE_VALUE | +---------------------+----------------------------------------+ | log_error_services | log_filter_internal; log_sink_internal | | log_error_verbosity | 2 | +---------------------+----------------------------------------+ 2 rows in set (0.00 sec) root@localhost [performance_schema]> show variables like '%plugin%'; +-------------------------------+------------------------------+ | Variable_name | Value | +-------------------------------+------------------------------+ | default_authentication_plugin | mysql_native_password | | plugin_dir | /usr/local/mysql/lib/plugin/ | +-------------------------------+------------------------------+ 2 rows in set (0.00 sec) root@localhost [performance_schema]> system ls /usr/local/mysql/lib/plugin/component_log* /usr/local/mysql/lib/plugin/component_log_filter_dragnet.so /usr/local/mysql/lib/plugin/component_log_sink_json.so /usr/local/mysql/lib/plugin/component_log_sink_syseventlog.so /usr/local/mysql/lib/plugin/component_log_sink_test.so root@localhost [performance_schema]>
JSONフォーマットのログを利用したいので、JSON用のコンポーネントを追加しています。
メモ:log_errorがstderrの場合、JSONライターはコンソールにログを書き込みます。
root@localhost [performance_schema]> INSTALL COMPONENT 'file://component_log_sink_json'; Query OK, 0 rows affected (0.32 sec) root@localhost [performance_schema]> SET PERSIST log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json'; Query OK, 0 rows affected (0.00 sec) root@localhost [performance_schema]> select * from global_variables where VARIABLE_NAME like 'log_error_%'; +---------------------+-------------------------------------------------------+ | VARIABLE_NAME | VARIABLE_VALUE | +---------------------+-------------------------------------------------------+ | log_error_services | log_filter_internal; log_sink_internal; log_sink_json | | log_error_verbosity | 2 | +---------------------+-------------------------------------------------------+ 2 rows in set (0.00 sec) root@localhost [performance_schema]> select * from global_variables where VARIABLE_NAME like 'log_error'; +---------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +---------------+----------------+ | log_error | ./GA02.err | +---------------+----------------+ 1 row in set (0.00 sec) root@localhost [performance_schema]> restart; Query OK, 0 rows affected (0.01 sec)
MySQLを再起動して、JSONフォーマットのエラーログが追加されているか確認。
log_sink_internalとlog_sink_jsonの2つが順に列挙されている為、エラーログは通常のエラーとJSONフォーマットのエラーログの2つが出力されています。
エラーログファイルの確認
root@localhost [performance_schema]> system ls /usr/local/mysql/data/GA02* /usr/local/mysql/data/GA02.err /usr/local/mysql/data/GA02.err.00.json /usr/local/mysql/data/GA02.pid root@localhost [performance_schema]>
通常のエラーログ
[root@GA02 admin]# head /usr/local/mysql/data/GA02.err 2018-02-23T03:21:22.117236Z 0 [System] [MY-010116] /usr/local/mysql/bin/mysqld (mysqld 8.0.4-rc-log) starting as process 3664 ... 2018-02-23T03:21:23.232801Z 0 [Warning] [MY-010068] CA certificate ca.pem is self signed. 2018-02-23T03:21:23.357209Z 0 [System] [MY-010931] /usr/local/mysql/bin/mysqld: ready for connections. Version: '8.0.4-rc-log' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server (GPL). 2018-02-23T03:25:49.322260Z 0 [System] [MY-010910] /usr/local/mysql/bin/mysqld: Shutdown complete. 2018-02-23T03:25:55.462916Z 0 [System] [MY-010116] /usr/local/mysql/bin/mysqld (mysqld 8.0.4-rc-log) starting as process 3841 ... 2018-02-23T03:25:56.179429Z 0 [Warning] [MY-010068] CA certificate ca.pem is self signed. 2018-02-23T03:25:56.195172Z 0 [System] [MY-010931] /usr/local/mysql/bin/mysqld: ready for connections. Version: '8.0.4-rc-log' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server (GPL). 2018-02-23T04:11:46.558480Z 0 [System] [MY-010910] /usr/local/mysql/bin/mysqld: Shutdown complete. 2018-02-23T04:11:47.891177Z 0 [System] [MY-010116] /usr/local/mysql/bin/mysqld (mysqld 8.0.4-rc-log) starting as process 4606 ... 2018-02-23T04:11:48.552514Z 0 [Warning] [MY-010068] CA certificate ca.pem is self signed.
JSONフォーマットのエラーログ
[root@GA02 admin]# head /usr/local/mysql/data/GA02.err.00.json { "prio" : 0, "err_code" : 11086, "subsystem" : "", "SQL_state" : "HY000", "source_file" : "sql_restart_server.cc", "function" : "execute", "msg" : "Received RESTART from user root. Restarting mysqld (Version: 8.0.4-rc-log).", "time" : "2018-03-14T01:08:33.576059Z", "thread" : 7, "err_symbol" : "ER_RESTART_RECEIVED_INFO", "label" : "System" } { "prio" : 2, "err_code" : 10909, "subsystem" : "", "SQL_state" : "HY000", "source_file" : "mysqld.cc", "function" : "operator()", "msg" : "/usr/local/mysql/bin/mysqld: Forcing close of thread 7 user: 'root'.", "time" : "2018-03-14T01:08:35.882770Z", "err_symbol" : "ER_FORCE_CLOSE_THREAD", "label" : "Warning" } { "prio" : 0, "err_code" : 10910, "subsystem" : "", "SQL_state" : "HY000", "source_file" : "mysqld.cc", "function" : "clean_up", "msg" : "/usr/local/mysql/bin/mysqld: Shutdown complete.", "time" : "2018-03-14T01:08:36.834869Z", "err_symbol" : "ER_SERVER_SHUTDOWN_COMPLETE", "label" : "System" } { "log_type" : 1, "prio" : 0, "err_code" : 10931, "msg" : "/usr/local/mysql/bin/mysqld: ready for connections. Version: '8.0.4-rc-log' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server (GPL).", "time" : "2018-03-14T01:08:39.000803Z", "err_symbol" : "ER_SERVER_STARTUP_MSG", "SQL_state" : "HY000", "label" : "System" } [root@GA02 admin]#
以下、マニュアル抜粋
log_filter_internal:優先度に基づくエラーログのフィルタリング
エラーログの冗長性制御は、エラーイベントの優先度に基づいたログフィルタリングの簡単な形式です。 これは、log_filter_internalログフィルタコンポーネントによって実装されます。
log_filter_internalがエラー・ログを対象とするエラー、警告、およびメモイベントを許可または抑制する方法に影響を与えるには、log_error_verbosityシステム変数を設定します。
log_filter_internalはデフォルトで組み込まれ、有効になっていますが、無効にするとlog_error_verbosityの変更は無効です。
許可されるlog_error_verbosityの値は、1(エラーのみ)、2(エラーと警告)、3(エラー、警告、およびメモ)
log_filter_dragnet:ルールベースのエラーログのフィルタリング
log_filter_dragnetログフィルタコンポーネントは、ユーザ定義のルールに基づいてログフィルタリングを有効にします。 適用可能なルールを定義するにはdragnet.log_error_filter_rulesシステム変数を設定します。
詳細:
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_dragnet.log_error_filter_rules
log_filter_dragnetフィルタを有効にするには、まずフィルタコンポーネントをロードしてから、log_error_services値を変更します。
log_filter_internal:優先度に基づくエラーログのフィルタリング
エラーログの冗長性制御は、エラーイベントの優先度に基づいたログフィルタリングの簡単な形式です。 これは、log_filter_internalログフィルタコンポーネントによって実装されます。 log_filter_internalがエラー・ログを対象とするエラー、警告、およびメモイベントを許可または抑制する方法に影響を与えるには、log_error_verbosityシステム変数を設定します。 log_filter_internalはデフォルトで組み込まれ、有効になっていますが、無効にするとlog_error_verbosityの変更は無効です。
log_sink_internal、log_sink_test:これらのライターは、file_nameに書き込みます
log_sink_json:log_error_services値で指定されたこのライターの連続インスタンスは、file_nameという名前のファイルと、番号付きの.NN.json接尾辞:file_name.00.json、file_name.01.jsonなどに書き込みます。
詳細:
https://dev.mysql.com/doc/refman/8.0/en/error-log-json.html
log_sink_syseventlog:このライターは、log_error値に関係なく、システムログに書き込みます。
log_sink_internal、log_sink_json、log_sink_test:これらのライターはコンソールに書き込みます。
参照:5.4.2 The Error Log
https://dev.mysql.com/doc/refman/8.0/en/error-log.html