OceanBaseデータベースのログは7つのレベルに分かれており、その意味は以下の表のとおりです。表内のログレベルは高い順に並んでいます。
ログレベル |
意味 |
|---|---|
| ERROR | 臨界エラー。システムの障害情報を記録するために使用され、トラブルシューティングが必要です。そうでない場合、システムは利用できません。 |
| WARN | 警告。システムはサービスを継続できますが、動作が予期しない場合や重大なエラーが発生する可能性があるため、トラブルシューティングが必要です。 |
| INFO | ヒント。システムの現在の稼働状態を記録するために使用され、この情報は正常な情報です。 |
| EDIAG | Error Diagnosis、トラブルシューティングを支援する診断情報で、通常はOceanBaseデータベースプログラムのバグです。 |
| WDIAG | Warning Diagnosis、トラブルシューティングを支援する診断情報で、想定内のエラーであり、OceanBaseデータベースはフォールトトレランスが可能です。 |
| TRACE | SQL文レベルのデバッグ情報で、ログ数はSQLの複雑さに関連し、データアクセス量とは無関係です。 |
| DEBUG | デバッグ情報。システムの稼働状態をより詳細に理解するために使用され、現在呼び出している関数名、パラメータ、変数、関数呼び出しの戻り値などが含まれます。 |
注意
本記事で説明するログレベルの確認と設定は、通常のログファイル(election.log、observer.log、rootservice.log)にのみ適用されます。WARNINGログファイル(`.wf`サフィックスを持つログファイル)は、常にWARN以上のログレベルのログを出力します。
SHOW PARAMETERSコマンドを使用して、現在のログ出力レベルを確認できます。ログのデフォルト出力レベルはWDIAGレベルです。
obclient> SHOW PARAMETERS LIKE '%syslog_level%';
実行結果は次のとおりです:
+-------+----------+----------------+----------+--------------+-----------+-------+------------------------------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+---------------+-----------+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | default_value | isdefault |
+-------+----------+----------------+----------+--------------+-----------+-------+------------------------------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+---------------+-----------+
| zone1 | observer | 172.xx.xxx.xxx | 2882 | syslog_level | NULL | WDIAG | specifies the current level of logging. There are DEBUG, TRACE, WDIAG, EDIAG, INFO, WARN, ERROR, seven different log levels. | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | WDIAG | 1 |
+-------+----------+----------------+----------+--------------+-----------+-------+------------------------------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+---------------+-----------+
1 row in set
OceanBaseデータベースではログレベルを設定することで、より正確な対象ログを取得できます。設定はシステムレベル、セッションレベル、ステートメントレベルの3つのレベルから行えます。ログ出力時の優先順位は高い順にステートメント、セッション、システムです。OceanBaseデータベースはモジュールごとの設定もサポートしています。
- システムレベル:クラスタ全体のすべてのOBServerに適用されます。システムテナントでのみ設定が可能です。
- セッションレベル:クラスタ内の現在のテナントが存在するOBServerに適用されます。
- セッションレベルの変数を設定しても、その効果は現在のセッションにのみ有効であり、他のセッションには反映されません。
- グローバルレベルの変数を設定しても、現在のセッションには無効です。設定を有効にするには、再ログインして新しいセッションを確立する必要があります。
- ステートメントレベル:現在実行中のステートメントが存在するOBServerに適用されます。SQLステートメントの実行中にのみ有効です。
以下は、システムレベル、セッションレベル、ステートメントレベルの3つのレベルでログ出力レベルを設定する具体的な方法です。
システムレベルでログモジュールのレベルを設定します。
次の2つの方法で設定できます:
システム構成パラメータ
syslog_levelを使用してシステムレベルのログレベルを設定します。例:SQLモジュールのログレベルをdebugに、COMMONモジュールのログレベルをerrorに設定します。obclient > ALTER SYSTEM SET syslog_level='sql.*:debug, common.*:error';OSの
bash kill -41/42 $pidコマンドを使用してシステムレベルのログレベルを設定します。kill -41はプログラムログのレベルを下げるために使用されます。例:現在のプログラムログレベルがINFOの場合、kill -41を実行するとレベルがTRACEに下がります。kill -42はプログラムログのレベルを上げるために使用されます。例:現在のプログラムログレベルがINFOの場合、kill -42を実行するとレベルがWARNに上がります。OceanBaseデータベースは設定をリフレッシュする際に、
configファイル(OceanBaseインストールディレクトリ配下のetc/observer.config.bin)に設定されたsyslog_levelを読み込むため、killコマンドによる設定は無効になることがあります。注意
kill -41/kill -42でログレベルを調整するのは、SQLクライアントからOceanBaseクラスタにログインできない場合にのみ推奨します。
セッションレベルでログモジュールのレベルを設定します。
システム変数
ob_log_levelを使用してセッションレベルのログレベルを設定します。例:SQLモジュールのログレベルをdebugに、COMMONモジュールのログレベルをinfoに設定します。obclient > SET @@ob_log_level='sql.*:debug, common.*:info';ステートメントレベルでログモジュールのレベルを設定します。
Hintを使用してステートメントレベルのログレベルを設定できます。例:SQLモジュールのログレベルを
debugに、COMMONモジュールのログレベルをinfoに設定します。Hintステートメントの詳細については、Optimizer Hintを参照してください。obclient > SELECT /*+log_level('sql.*:debug, common.*:info')*/ * FROM t;説明
MySQLのCクライアントを使用してHint付きのSQLステートメントを実行する場合は、
-cオプションを使用してログインする必要があります。そうでない場合、MySQLクライアントはHintをユーザーのSQLステートメントからコメントとして削除し、システムがユーザーのHintを受信できなくなります。