コンポーネントログ
Istioコンポーネントは柔軟なログフレームワークを使用して構築されており、これらのコンポーネントの運用と診断の容易化に役立つ多くの機能と制御を提供します。これらのログ機能は、コンポーネントの起動時にコマンドラインオプションを渡すことで制御します。
ログスコープ
コンポーネントによって出力されるログメッセージは、スコープによって分類されます。スコープとは、全体として制御できる関連するログメッセージのセットを表します。コンポーネントが提供する機能に応じて、異なるコンポーネントには異なるスコープがあります。すべてのコンポーネントには、カテゴリ化されていないログメッセージに使用されるdefaultスコープがあります。
例として、執筆時点では、istioctlには25個のスコープがあり、コマンド内の異なる機能領域を表しています。
- ads、- adsc、- all、- analysis、- authn、- authorization、- ca、- cache、- cli、- default、- installer、- klog、- mcp、- model、- patch、- processing、- resource、- source、- spiffe、- tpath、- translator、- util、- validation、- validationController、- wle
Pilot-Agent、Pilot-Discovery、Istio Operatorはそれぞれ独自のスコープを持ちます。これらはリファレンスドキュメントで確認できます。
各スコープには、以下のいずれかの出力レベルが設定されています。
- none
- error
- warn
- info
- debug
noneはスコープの出力なし、debugは最大限の出力となります。すべてのスコープのデフォルトレベルはinfoで、Istioの通常運用に必要なログ情報を提供することを目的としています。
出力レベルを制御するには、--log_output_levelコマンドラインオプションを使用します。例:
$ istioctl analyze --log_output_level klog:none,cli:info
コマンドラインからの出力レベルの制御に加えて、稼働中のコンポーネントの出力レベルは、そのControlZインターフェースを使用して制御することもできます。
出力の制御
ログメッセージは通常、コンポーネントの標準出力ストリームに送信されます。--log_targetオプションを使用すると、出力を複数の異なる場所にリダイレクトできます。このオプションには、ファイルシステムパスのカンマ区切りリストに加え、標準出力と標準エラーストリームを表す特殊値stdoutとstderrを指定できます。
ログメッセージは通常、人間にとって分かりやすい形式で出力されます。--log_as_jsonオプションを使用すると、出力をJSON形式で強制的に出力できます。これは、ツールによる処理を容易にすることができます。
ログローテーション
Istioコントロールプレーンコンポーネントは、ログローテーションを自動的に管理できます。これにより、大規模なログをより小さなログファイルに分割することが容易になります。--log_rotateオプションを使用すると、ローテーションに使用する基本ファイル名を指定できます。個々のログファイルには、派生名が使用されます。
--log_rotate_max_ageオプションを使用すると、ファイルローテーションが行われるまでの最大日数を指定できます。また、--log_rotate_max_sizeオプションを使用すると、ファイルローテーションが行われるまでの最大サイズ(メガバイト単位)を指定できます。最後に、--log_rotate_max_backupsオプションを使用すると、保持するローテーションされたファイルの最大数を制御できます。それよりも古いファイルは自動的に削除されます。
コンポーネントデバッグ
--log_callerオプションと--log_stacktrace_levelオプションを使用すると、ログ情報にプログラマレベルの情報を含めるかどうかを制御できます。これは、コンポーネントのバグを追跡しようとする際に役立ちますが、日常的な運用では通常使用されません。