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に引き上げられます。システム構成パラメータ
syslog_levelを使用して、システムレベルのログレベルを設定することを推奨します。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を受け取ることができません。