システムログ(SysLog)とは、OceanBaseデータベースのプログラムログを指します。OceanBaseデータベースが実行中に自動的に出力するログであり、監視・アラート・診断に使用されます。システムログはモニタリング指標を補完する有力な手段であり、両者が合わさってOceanBaseデータベースの観測可能性を支えています。
システムログとトランザクションログは、場合によってはどちらも「ログ」と略称されることがありますが、両者は全く異なるものです。
システムログ(SysLog):OceanBaseデータベースプロセスの実行中に出力されるログであり、監視・アラート・診断に使用されます。これは観測可能性の領域に属します。
トランザクションログ(commit log、略称:clog):データ永続化に先立って生成されるOceanBaseデータベースのWALであり、トランザクションの保証に用いられます。これはデータ一貫性の領域に属します。
ログモジュール
プログラムログは異なるモジュールに分かれており、親モジュールと子モジュールの2つの階層があります。
OceanBaseデータベースの親モジュールには、
CLIENT、CLOG、COMMON、ELECT、LIB、PROXY、RPC、RS、SERVER、SHARE、SQL、STORAGE、TLOGなどが含まれます。親モジュールに子モジュールが含まれる場合は
親モジュール.子モジュールの形式で表されます。例えば、SQL.PARSERはSQLモジュールのPARSERサブモジュールを表し、SQL.*はSQLモジュールのすべてのサブモジュールを表します。
ログファイル
OceanBaseデータベースのログモジュールに属するログファイルは、observer.log、election.log、rootservice.log、trace.log、alert.log の5種類に分類されます。デフォルトではINFOレベル以上のログが出力されます。
trace.log、alert.log ファイルを除き、各ログファイルタイプには .wf 拡張子を持つWARNINGログファイル(observer.log.wf、election.log.wf、rootservice.log.wf)が自動生成され、WARNレベル以上のログのみが出力されます。WARNINGログファイルの生成は、クラスタ構成パラメータ enable_syslog_wf で制御されます。
ログ名 |
ログパス |
|---|---|
起動・実行ログ(observer.log、observer.log.wf) |
OBServerサーバーの $work_dir/log ディレクトリ内。 |
選挙ログ(election.log、election.log.wf) |
OBServerサーバーの $work_dir/log ディレクトリ内。 |
Root Serviceログ(rootservice.log、rootservice.log.wf) |
OBServerサーバーの $work_dir/log ディレクトリ内。 |
| フルリンクトレースログ(trace.log) | OBServerサーバーの $work_dir/log ディレクトリ内。 |
| 警告ログ(alert.log) | OBServerサーバーの $work_dir/log/alert ディレクトリ内。 |
OceanBaseデータベースの個々のログファイルのサイズは256MBを超えません。ログファイルのサイズが256MBに達すると、システムはログローテーションを実行します。元のログファイルには、そのファイル内の最後のログの生成時間を yyyyMMddHHmmss 形式で日付として追加し、新しいログファイルが生成されます。ログローテーションが発生した場合、.wf ログファイルは256MBに達していなくても一緒にローテーションされます。つまり、xxx.log.wf ファイルと xxx.log ファイルは常に一対一で対応しており、.wf ファイルは通常256MBよりもはるかに小さいです。
典型的なログファイルのディレクトリ構造は以下のとおりです:
log
├── election.log
├── election.log.wf
├── observer.log
├── observer.log.20220427154619
├── observer.log.wf
├── observer.log.wf.20220427154619
├── rootservice.log
├── rootservice.log.20220427165438
├── rootservice.log.wf
├── rootservice.log.wf.20220427165438
└── log
├── alert.log
└── alert.log.20220304102928236
OceanBaseデータベースはログアーカイブをネイティブでサポートしています(クラスタ構成パラメータ enable_syslog_recycle で制御)。ログファイルの総数が max_syslog_file_count に達すると、ログローテーション時に最も古いログファイルが削除されます。ログファイルの最大使用容量は以下の方法で評価できます:max_syslog_file_count * 256M * 3 * (enable_syslog_wf ? 2 : 1)。
OceanBaseデータベースのネイティブログアーカイブ機能は、ファイル数に基づいてログをアーカイブします。OceanBaseデータベースを外部管理システム(例:OCP)と共にデプロイする場合、通常は外部管理システムが提供するディスク使用率に基づくログアーカイブ機能を使用します。
ログフォーマット
典型的な1行のログとそのフォーマットは以下のとおりです。
通常の1行ログ:
[2022-04-29 16:39:55.186527] WARN [COMMON] get_file_id_range (ob_log_file_group.cpp:127) [103594] [0] [Y0-0000000000000000-0-0] [lt=17] [dc=0] max file does not exist(max_file_id=4, b_exist=false)
ログを分解すると、ログフォーマットは以下のようになります:
- time:
[2022-04-29 16:39:55.186527] - log_level:
WARN - module:
[COMMON] - function:
get_file_id_range - file_name:line_number:
(ob_log_file_group.cpp:127) - thread_id:
[103594] - coroutine_id:
[0] - trace_id:
[Y0-0000000000000000-0-0] - log_used_time:
[lt=17] - dropped_msg_count:
[dc=0] - info:
max file does not exist - parameter:
(max_file_id=4, b_exist=false)
ログフォーマットは2つの部分に分かれています:
- header:
[2022-04-29 16:39:55.186527] WARN [COMMON] get_file_id_range (ob_log_file_group.cpp:127) [103594] [0] [Y0-0000000000000000-0-0] [lt=17] [dc=0] - message:
max file does not exist(max_file_id=4, b_exist=false)
上記の形式に示されているように、1つのログはヘッダー(header)とメッセージ(message)で構成されています:
header部分:
- time:このログが出力された時間。
- log_level:このログのレベル。現在サポートされているレベルは以下のとおりです(高い順):ERROR、USER_ERR、WARN、INFO、TRACE、DEBUG。
- module:現在ログを出力しているモジュール名。親モジュールと子モジュールで構成されています。OceanBaseデータベースでは、モジュールごとにログレベルを指定できます。
- function:現在ログを出力している関数名。
- file_name:line_number:現在ログを出力しているコードソースファイル名と行番号。
- thread_id:現在ログを出力しているスレッドID。
- coroutine_id:現在ログを出力しているコルーチンID。
- trace_id:タスクを追跡するために使用されるtrace_idで、タスクレベルで一意です。このtrace_idはRPCを通じて各OBServer間で渡されるため、trace_idに基づいてタスクのすべてのログデータを取得できます。これは
GV$OB_SQL_AUDITビューのTRACE_IDフィールドに対応します。 - log_used_time:前のログの処理時間を指します(非同期ログシナリオではログファイルへの書き込み時間を含む)。
- dropped_msg_count:
dc=xxで、xxは現在のログから前のログまでの間に破棄されたログの数を表します。破棄されていない場合は0です。
message部分:メッセージボディは通常、メッセージの説明情報(info)とパラメータ(parameter)で構成されています。
- info:具体的なログ内容。
- parameter:
name=valueのリスト形式で構成されるKVリストです。value部分が単純型の場合はそのまま表示し、複雑型の場合はJSON形式に似たテキストとして表示します(可読性を高めるため、JSON形式のKEY上の"を削除しています)。