このページでは、Google Distributed Cloud(GDC)エアギャップ環境のワークフローからログを収集して、ロギングとデータのオブザーバビリティを容易にするプロセスについて説明します。
ログには、GDC でオペレーションを管理する際の条件とアクションが記録されます。コンポーネントが生成するログをスクレイピングして、イベントとアクティビティを記録できます。ロギング プラットフォームには、ロギング ターゲットを介してワークフローで生成されたプロジェクト レベルのログを収集するためのカスタム API が用意されています。
ログデータの収集を開始するには、Management API サーバーのプロジェクト Namespace に LoggingTarget
カスタム リソースをデプロイします。ログコレクタがワークフローからデータを取得すると、ロギング プラットフォームはすべてのログソースからログを集約し、インデックスを追加して、LoggingTarget
カスタム リソースの構成に従ってログをラベルに関連付けます。
収集したログには、ログのクエリと表示で説明されているように、Grafana ユーザー インターフェースまたはログクエリ API を使用してアクセスします。
データ オブザーバビリティのロギングを実装する際のベスト プラクティスについては、Kubernetes コミュニティのガイドラインをご覧ください。
始める前に
LoggingTarget
カスタム リソースを管理するために必要な権限を取得するには、関連する LoggingTarget
ロールのいずれかを付与するよう組織 IAM 管理者またはプロジェクト IAM 管理者に依頼してください。
必要なアクセスレベルと権限に応じて、組織またはプロジェクトでこのリソースの作成者、編集者、閲覧者のロールを取得できます。詳細については、IAM 権限を準備するをご覧ください。
LoggingTarget
カスタム リソースを構成する
LoggingTarget
カスタム リソースは、GDC プロジェクト内のログを収集するようにロギング パイプラインに指示します。ログの収集対象、ログパーサー、アクセスレベル、その他の設定を指定できます。
このリソースは、次の構成を定義します。
- ターゲット: ログを収集する Pod とコンテナを選択するための条件。クラスタ名、Pod 名の接頭辞、コンテナ名の接頭辞を指定できます。
- ログアナライザー: ログエントリを解釈し、ログ出力をラベルにマッピングして、関連するフィールドを抽出する事前定義済みのパーサー。
- サービス ID: ログエントリにラベルとして適用されるサービス名。識別とフィルタリングを容易にするために使用されます。
認可: ログエントリのアクセスレベル。収集されたログを表示できるユーザーを制御します。
LoggingTarget
カスタム リソース内でこれらのパラメータを構成することで、ログの収集と整理を正確に制御できます。
運用ログを収集する手順は次のとおりです。
- ログを収集する GDC プロジェクトを特定します。
LoggingTarget
構成で、運用ログを収集する Pod、プロジェクトの Namespace、追加設定を指定します。次の YAML ファイルは、
my-project-namespace
のLoggingTarget
構成の例を示しています。ここで、ログを収集する Pod 名の接頭辞はmy-pod-prefix
、ログエントリのアクセスレベルはアプリケーション オペレーター(ao
)に付与され、サービス名はmy-service-name
、ログ形式は JSON です。# Configures a log scraping job apiVersion: logging.gdc.goog/v1 kind: LoggingTarget metadata: # Choose a namespace that matches the namespace of the workload pods. namespace: my-project-namespace name: my-logging-target spec: selector: matchPodNames: - my-pod-prefix parser: json logAccessLevel: ao serviceName: my-service-name
その他のフィールドとオプションについては、
LoggingTarget
の完全な仕様と API リファレンス ドキュメントをご覧ください。LoggingTarget
構成を、ターゲット Pod と同じ Namespace 内の Management API サーバーに適用します。kubectl --kubeconfig KUBECONFIG_PATH apply -f LOGGING_TARGET_NAME.yaml
次のように置き換えます。
KUBECONFIG_PATH
: Management API サーバーの kubeconfig ファイルへのパス。LOGGING_TARGET_NAME
:LoggingTarget
定義ファイルの名前(my-logging-target
など)。
ロギング パイプラインは、プロジェクトの追加コンポーネントからログの収集を開始します。
収集したログは、Grafana ユーザー インターフェースまたは Log Query API を使用してクエリできます。詳細については、ログのクエリと表示をご覧ください。
Grafana を使用してログをクエリする場合は、さまざまなログレベルに組み込みのカラー コーディング機能を使用できます。ログレベル値の設定について詳しくは、https://grafana.com/docs/grafana/latest/explore/logs-integration/ をご覧ください。
LoggingTarget
の仕様を完了
次の YAML ファイルは、LoggingTarget
カスタム リソースの完全な仕様の例を示しています。詳細とフィールドの完全な説明については、API リファレンス ドキュメントをご覧ください。
# Configures a log scraping job
apiVersion: logging.gdc.goog/v1
kind: LoggingTarget
metadata:
# Choose a namespace that matches the namespace of the workload pods.
namespace: PROJECT_NAMESPACE
name: LOGGING_TARGET_NAME
spec:
# Choose a matching pattern that identifies the pods for this job.
# Optional.
# Relationship between different selectors: 'AND'
selector:
# The clusters to collect logs from.
# The default configuration is to collect logs from all clusters.
# The relationship between different clusters is an 'OR' relationship.
# Optional
matchClusters:
- my-cluster
- another-cluster
# The pod name prefixes to collect logs from.
# The logging platform scrapes all pods with names
# that start with the specified prefixes.
# The values must contain '[a-z0-9-]' characters only.
# The relationship between different list elements is an 'OR' relationship.
# Optional.
matchPodNames:
- my-pod-prefix
- another-pod-prefix
# The container name prefixes to collect logs from.
# The logging platform scrapes all containers with names
# that start with the specified prefixes.
# The values must contain '[a-z0-9-]' characters only.
# The relationship between different list elements is an 'OR' relationship.
# Optional.
matchContainerNames:
- my-container-prefix
- another-container-prefix
# Choose the predefined parser for log entries.
# Use parsers to map the log output to labels and extract fields.
# Specify the log format.
# Optional.
# Options: klog_text, klog_json, klogr, gdch_json, json
parser: klog_text
# Specify an access level for log entries.
# The default value is 'ao'.
# Optional.
# Options: ao, pa, io
logAccessLevel: ao
# Specify a service name to be applied as a label.
# For user workloads consider this field as a workload name.
# Required.
serviceName: my-service-name
# The additional static fields to apply to log entries.
# The field is a key-value pair, where the field name is the key and
# the field value is the value.
# Optional.
additionalFields:
app: workload2
key: value
次のように置き換えます。
PROJECT_NAMESPACE
: プロジェクトの Namespace。LOGGING_TARGET_NAME
:LoggingTarget
定義ファイルの名前。