ロギングの設定
ログ転送と LokiStack を設定します。
概要
第1章 ログ転送の設定 リンクのコピーリンクがクリップボードにコピーされました!
ClusterLogForwarder (CLF) を使用すると、ユーザーはさまざまな宛先へのログの転送を設定できます。さまざまなソースからログメッセージを選択し、それらを変換またはフィルタリングできるパイプラインを介して送信して、1 つ以上の出力に転送する柔軟な方法を提供します。
ClusterLogForwarder の主な機能
- 入力を使用してログメッセージを選択する
- 出力を使用してログを外部の宛先に転送する
- フィルターを使用してログメッセージをフィルタリング、変換、および破棄する
- 入力、フィルター、出力を接続するログ転送パイプラインを定義する
1.1. ログ収集のセットアップ リンクのコピーリンクがクリップボードにコピーされました!
このリリースの Cluster Logging では、管理者が ClusterLogForwarder に関連付けられたサービスアカウントにログ収集権限を明示的に付与する必要があります。これは、ClusterLogging およびオプションで ClusterLogForwarder.logging.openshift.io リソースで構成されるレガシーロギングシナリオでは、以前のリリースでは必要ありませんでした。
Red Hat OpenShift Logging Operator は、collect-audit-logs、collect-application-logs、collect-infrastructure-logs クラスターロールを提供します。これにより、コレクターは監査ログ、アプリケーションログ、およびインフラストラクチャーログをそれぞれ収集できます。
必要なクラスターロールをサービスアカウントにバインドして、ログ収集をセットアップします。
1.1.1. レガシーサービスアカウント リンクのコピーリンクがクリップボードにコピーされました!
既存のレガシーサービスアカウント logcollector を使用するには、次の ClusterRoleBinding を作成します。
oc adm policy add-cluster-role-to-user collect-application-logs system:serviceaccount:openshift-logging:logcollector
$ oc adm policy add-cluster-role-to-user collect-application-logs system:serviceaccount:openshift-logging:logcollector
oc adm policy add-cluster-role-to-user collect-infrastructure-logs system:serviceaccount:openshift-logging:logcollector
$ oc adm policy add-cluster-role-to-user collect-infrastructure-logs system:serviceaccount:openshift-logging:logcollector
さらに、監査ログを収集する場合は、次の ClusterRoleBinding を作成します。
oc adm policy add-cluster-role-to-user collect-audit-logs system:serviceaccount:openshift-logging:logcollector
$ oc adm policy add-cluster-role-to-user collect-audit-logs system:serviceaccount:openshift-logging:logcollector
1.1.2. サービスアカウントの作成 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
-
Red Hat OpenShift Logging Operator が
openshift-loggingnamespace にインストールされている。 - 管理者権限がある。
手順
- コレクターのサービスアカウントを作成します。認証にトークンを必要とするストレージにログを書き込む場合は、サービスアカウントにトークンを含める必要があります。
適切なクラスターロールをサービスアカウントにバインドします。
バインドコマンドの例
oc adm policy add-cluster-role-to-user <cluster_role_name> system:serviceaccount:<namespace_name>:<service_account_name>
$ oc adm policy add-cluster-role-to-user <cluster_role_name> system:serviceaccount:<namespace_name>:<service_account_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.1.2.1. サービスアカウントのクラスターロールバインディング リンクのコピーリンクがクリップボードにコピーされました!
role_binding.yaml ファイルは、ClusterLogging Operator の ClusterRole を特定の ServiceAccount にバインドし、クラスター全体で Kubernetes リソースを管理できるようにします。
- 1
- roleRef: バインディングが適用される ClusterRole を参照します。
- 2
- apiGroup: RBAC API グループを示し、ClusterRole が Kubernetes の RBAC システムの一部であることを指定します。
- 3
- kind: 参照されるロールがクラスター全体に適用される ClusterRole であることを指定します。
- 4
- name: ServiceAccount にバインドされる ClusterRole の名前 (ここでは cluster-logging-operator)。
- 5
- subjects: ClusterRole から権限が付与されるエンティティー (ユーザーまたはサービスアカウント) を定義します。
- 6
- kind: サブジェクトが ServiceAccount であることを指定します。
- 7
- Name: 権限が付与される ServiceAccount の名前。
- 8
- namespace: ServiceAccount が配置されている namespace を示します。
1.1.2.2. アプリケーションログの書き込み リンクのコピーリンクがクリップボードにコピーされました!
write-application-logs-clusterrole.yaml ファイルは、Loki ロギングアプリケーションにアプリケーションログを書き込む権限を付与する ClusterRole を定義します。
- 1
- rules: この ClusterRole によって付与される権限を指定します。
- 2
- apiGroups: Loki ロギングシステムに関連する API グループ loki.grafana.com を参照します。
- 3
- loki.grafana.com: Loki 関連のリソースを管理するための API グループ。
- 4
- resources: この ClusterRole がやり取りする権限を付与するリソースタイプ。
- 5
- application: Loki ロギングシステム内のアプリケーションリソースを参照します。
- 6
- resourceNames: このロールが管理できるリソースの名前を指定します。
- 7
- logs: 作成できるログリソースを参照します。
- 8
- verbs: リソースで許可されるアクション。
- 9
- create: Loki システムに新しいログを作成する権限を付与します。
1.1.2.3. 監査ログの書き込み リンクのコピーリンクがクリップボードにコピーされました!
write-audit-logs-clusterrole.yaml ファイルは、Loki ロギングシステムに監査ログを作成する権限を付与する ClusterRole を定義します。
- 1
- rules: この ClusterRole によって付与される権限を定義します。
- 2
- apiGroups: API グループ loki.grafana.com を指定します。
- 3
- loki.grafana.com: Loki ロギングリソースを管理する API グループ。
- 4
- resources: このロールが管理するリソースタイプ (この場合は audit) を指します。
- 5
- audit: ロールが Loki 内の監査ログを管理することを指定します。
- 6
- resourceNames: ロールがアクセスできる特定のリソースを定義します。
- 7
- logs: このロールで管理できるログを指します。
- 8
- verbs: リソースで許可されるアクション。
- 9
- create: 新しい監査ログを作成する権限を付与します。
1.1.2.4. インフラストラクチャーログの書き込み リンクのコピーリンクがクリップボードにコピーされました!
write-infrastructure-logs-clusterrole.yaml ファイルは、Loki ロギングシステムにインフラストラクチャーログを作成する権限を付与する ClusterRole を定義します。
YAML 例
- 1
- ルール: この ClusterRole が付与する権限を指定します。
- 2
- apiGroups: Loki 関連リソースの API グループを指定します。
- 3
- loki.grafana.com: Loki ロギングシステムを管理する API グループ。
- 4
- resources: このロールが対話できるリソースタイプを定義します。
- 5
- infrastructure: このロールが管理するインフラストラクチャー関連のリソースを指します。
- 6
- resourceNames: このロールが管理できるリソースの名前を指定します。
- 7
- logs: インフラストラクチャーに関連するログリソースを指します。
- 8
- verbs: このロールによって許可されるアクションです。
- 9
- create: Loki システムにインフラストラクチャーログを作成する権限を付与します。
1.1.2.5. ClusterLogForwarder 編集者ロール リンクのコピーリンクがクリップボードにコピーされました!
clusterlogforwarder-editor-role.yaml ファイルは、ユーザーが OpenShift で ClusterLogForwarders を管理できるようにする ClusterRole を定義します。
- 1
- ルール: この ClusterRole が付与する権限を指定します。
- 2
- apiGroups: OpenShift 固有の API グループを指します。
- 3
- obervability.openshift.io: ロギングなどの可観測性リソースを管理するための API グループ。
- 4
- resources: このロールが管理できるリソースを指定します。
- 5
- clusterlogforwarders: OpenShift のログ転送リソースを指します。
- 6
- verbs: ClusterLogForwarders で許可されるアクションを指定します。
- 7
- create: 新しい ClusterLogForwarders を作成する権限を付与します。
- 8
- delete: 既存の ClusterLogForwarders を削除する権限を付与します。
- 9
- get: 特定の ClusterLogForwarders に関する情報を取得する権限を付与します。
- 10
- list: すべての ClusterLogForwarders のリスト表示を許可します。
- 11
- patch: ClusterLogForwarders を部分的に変更する権限を付与します。
- 12
- update: 既存の ClusterLogForwarders を更新する権限を付与します。
- 13
- watch: ClusterLogForwarders への変更を監視する権限を付与します。
1.2. コレクターのログレベルの変更 リンクのコピーリンクがクリップボードにコピーされました!
コレクターでログレベルを変更するには、observability.openshift.io/log-level アノテーションを trace、debug、info、warn、error、および off に設定します。
ログレベルアノテーションの例
1.3. Operator の管理 リンクのコピーリンクがクリップボードにコピーされました!
ClusterLogForwarder リソースには、Operator がリソースをアクティブに管理するか、管理対象外のままにするかを制御する managementState フィールドがあります。
- Managed
- (デフォルト) Operator は、CLF 仕様の目的の状態に一致するようにロギングリソースを駆動します。
- 管理対象外
- Operator は、ロギングコンポーネントに関連するアクションを一切実行しません。
これにより、管理者は managementState を Unmanaged に設定して、ログ転送を一時的に停止できます。
1.4. ClusterLogForwarder の構造 リンクのコピーリンクがクリップボードにコピーされました!
CLF には、次の主要コンポーネントを含む spec セクションがあります。
- Inputs
-
転送するログメッセージを選択します。組み込みの入力タイプである
application、infrastructure、およびauditは、クラスターのさまざまな部分からログを転送します。カスタム入力を定義することもできます。 - 出力
- ログを転送する宛先を定義します。各出力には、一意の名前とタイプ固有の設定があります。
- Pipelines
- ログが入力からフィルターを経由して出力されるまでのパスを定義します。パイプラインには一意の名前があり、入力名、出力名、フィルター名のリストで構成されます。
- Filters
- パイプライン内のログメッセージを変換または破棄します。ユーザーは、特定のログフィールドに一致するフィルターを定義し、メッセージを破棄または変更できます。フィルターはパイプラインで指定された順序で適用されます。
1.4.1. Inputs リンクのコピーリンクがクリップボードにコピーされました!
入力は spec.inputs の下の配列で設定されます。組み込みの入力タイプは 3 つあります。
- application
- インフラストラクチャー namespace 内のログを除く、すべてのアプリケーションコンテナーからログを選択します。
- infrastructure
次の namespace で実行されているノードおよびインフラストラクチャーコンポーネントからログを選択します。
-
default -
kube -
openshift -
kube-またはopenshift-接頭辞を含む
-
- audit
- OpenShift API サーバー監査ログ、Kubernetes API サーバー監査ログ、ovn 監査ログ、および auditd からのノード監査ログからログを選択します。
ユーザーは、特定の namespace からログを選択するか、または Pod ラベルを使用してログを選択する application のカスタム入力を定義できます。
1.4.2. 出力 リンクのコピーリンクがクリップボードにコピーされました!
出力は spec.outputs の下の配列で設定されます。各出力には一意の名前とタイプが必要です。サポートされているタイプは次のとおりです。
- azureMonitor
- ログを Azure Monitor に転送します。
- cloudwatch
- ログを AWS CloudWatch に転送します。
- elasticsearch
- ログを外部の Elasticsearch インスタンスに転送します。
- googleCloudLogging
- ログを Google Cloud Logging に転送します。
- http
- ログを汎用 HTTP エンドポイントに転送します。
- kafka
- ログを Kafka ブローカーに転送します。
- loki
- ログを Loki ロギングバックエンドに転送します。
- lokistack
- ログを、OpenShift Container Platform 認証インテグレーションによる Loki と Web プロキシーのロギングがサポートされている組み合わせに転送します。LokiStack のプロキシーは、OpenShift Container Platform 認証を使用してマルチテナンシーを適用します。
- otlp
- OpenTelemetry プロトコルを使用してログを転送します。
- splunk
- ログを Splunk に転送します。
- syslog
- ログを外部の syslog サーバーに転送します。
各出力タイプには独自の設定フィールドがあります。
1.4.3. OTLP 出力の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、OpenTelemetry Protocol (OTLP) 出力を使用してログを収集し、OTLP レシーバーに転送できます。OTLP 出力は、OpenTelemetry Observability フレームワーク で定義された仕様を使用して、HTTP を介して JSON エンコーディングでデータを送信します。
OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
手順
OTLP を使用した転送を有効にするには、次のアノテーションを追加して
ClusterLogForwarderカスタムリソース (CR) を作成または編集します。ClusterLogForwarderCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OTLP 出力では OpenTelemetry データモデルが使用されますが、これは他の出力タイプで使用される ViaQ データモデルとは異なります。これは、OpenTelemetry Observability フレームワークで定義された OpenTelemetry Semantic Conventions を使用することで OTLP に準拠しています。
1.4.4. Pipelines リンクのコピーリンクがクリップボードにコピーされました!
パイプラインは spec.pipelines の下の配列で設定されます。各パイプラインには一意の名前があり、次の要素で構成される必要があります。
- inputRefs
- このパイプラインにログを転送する入力の名前。
- outputRefs
- ログを送信する出力の名前。
- filterRefs
- (オプション) 適用するフィルターの名前。
filterRefs は順番に適用されるため、順序が重要です。以前のフィルターは、後のフィルターで処理されないメッセージを破棄する可能性があります。
1.4.5. Filters リンクのコピーリンクがクリップボードにコピーされました!
フィルターは spec.filters の下の配列で設定されます。構造化フィールドの値に基づいて受信ログメッセージを照合し、変更または削除できます。
管理者は次のタイプのフィルターを設定できます。
1.4.6. 複数行の例外検出の有効化 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーログの複数行のエラー検出を有効にします。
この機能を有効にすると、パフォーマンスに影響が出る可能性があり、追加のコンピューティングリソースや代替のロギングソリューションが必要になる場合があります。
ログパーサーは頻繁に、同じ例外の個別の行を別々の例外として誤って識別します。その結果、余分なログエントリーが発生し、トレースされた情報が不完全または不正確な状態で表示されます。
Java 例外の例
java.lang.NullPointerException: Cannot invoke "String.toString()" because "<param1>" is null
at testjava.Main.handle(Main.java:47)
at testjava.Main.printMe(Main.java:19)
at testjava.Main.main(Main.java:10)
java.lang.NullPointerException: Cannot invoke "String.toString()" because "<param1>" is null
at testjava.Main.handle(Main.java:47)
at testjava.Main.printMe(Main.java:19)
at testjava.Main.main(Main.java:10)
-
ロギングを有効にして複数行の例外を検出し、それらを 1 つのログエントリーに再アセンブルできるようにする場合は、
ClusterLogForwarderカスタムリソース (CR) に.spec.filtersの下のdetectMultilineErrorsフィールドが含まれていることを確認します。
ClusterLogForwarder CR の例
1.4.6.1. 詳細 リンクのコピーリンクがクリップボードにコピーされました!
ログメッセージが例外スタックトレースを形成する連続したシーケンスとして表示される場合、それらは単一の統合ログレコードに結合されます。最初のログメッセージの内容は、シーケンス内のすべてのメッセージフィールドの連結コンテンツに置き換えられます。
コレクターは次の言語をサポートしています。
- Java
- JS
- Ruby
- Python
- Golang
- PHP
- Dart
1.4.7. HTTP 経由でのログ転送 リンクのコピーリンクがクリップボードにコピーされました!
HTTP 経由でログを転送できるようにするには、ClusterLogForwarder カスタムリソース (CR) で出力タイプとして http を指定します。
手順
以下のテンプレートを使用して、
ClusterLogForwarderCR を作成または編集します。ClusterLogForwarder CR の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.8. syslog プロトコルを使用したログの転送 リンクのコピーリンクがクリップボードにコピーされました!
syslog RFC3164 または RFC5424 プロトコルを使用して、デフォルトの Elasticsearch ログストアの代わり、またはそれに加えてプロトコルを受け入れるように設定された外部ログアグリゲーターに、ログのコピーを送信できます。syslog サーバーなど、外部ログアグリゲーターを OpenShift Container Platform からログを受信するように設定する必要があります。
syslog プロトコルを使用してログ転送を設定するには、syslog サーバーへの 1 つ以上の出力と、それらの出力を使用するパイプラインを含む ClusterLogForwarder カスタムリソース (CR) を作成する必要があります。syslog 出力では、UDP、TCP、または TLS 接続を使用できます。
前提条件
- 指定されたプロトコルまたは形式を使用してロギングデータを受信するように設定されたロギングサーバーが必要です。
手順
ClusterLogForwarderCR オブジェクトを定義する YAML ファイルを作成または編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 出力の名前を指定します。
- 2
- オプション: syslog メッセージヘッダーの
APP-NAME部分の値を指定します。値は Syslog プロトコル に準拠している必要があります。値は、静的値と動的値を組み合わせたものにすることができます。フィールドパスとそれに続く||で構成され、その後に別のフィールドパスまたは静的値が続きます。最終的な値の最大長は 48 文字に切り捨てられます。動的値は中括弧で囲む必要があり、値の後に||で区切られた静的なフォールバック値を付ける必要があります。静的値には、英数字とダッシュ、アンダースコア、ドット、スラッシュのみを含めることができます。値の例は <value1>-{.<value2>||"none"} です。 - 3
- オプション: syslog-msg ヘッダーの
Facility部分の値を指定します。 - 4
- オプション: syslog-msg ヘッダーの
MSGID部分の値を指定します。値は、静的値と動的値を組み合わせたものにすることができます。フィールドパスとそれに続く||で構成され、その後に別のフィールドパスまたは静的値が続きます。最終的な値の最大長は 32 文字に切り捨てられます。動的値は中括弧で囲む必要があり、値の後に||で区切られた静的なフォールバック値を付ける必要があります。静的値には、英数字とダッシュ、アンダースコア、ドット、スラッシュのみを含めることができます。値の例は <value1>-{.<value2>||"none"} です。 - 5
- オプション: ペイロードとして使用するレコードフィールドを指定します。
payloadKey値は、1 つの中括弧{}で囲まれた 1 つのフィールドパスである必要があります。たとえば、{.<value>} です。 - 6
- オプション: syslog メッセージヘッダーの
PROCID部分の値を指定します。値は Syslog プロトコル に準拠している必要があります。値は、静的値と動的値を組み合わせたものにすることができます。フィールドパスとそれに続く||で構成され、その後に別のフィールドパスまたは静的値が続きます。最終的な値の最大長は 48 文字に切り捨てられます。動的値は中括弧で囲む必要があり、値の後に||で区切られた静的なフォールバック値を付ける必要があります。静的値には、英数字とダッシュ、アンダースコア、ドット、スラッシュのみを含めることができます。値の例は <value1>-{.<value2>||"none"} です。 - 7
- オプション: 生成されたメッセージが準拠する RFC を設定します。値は
RFC3164またはRFC5424にすることができます。 - 8
- オプション: メッセージの重大度レベルを設定します。詳細は、Syslog プロトコル を参照してください。
- 9
- オプション: ログ転送の配信モードを設定します。値は
AtLeastOnceまたはAtMostOnceのどちらかです。 - 10
- スキームを使用して絶対 URL を指定します。有効なスキームは、
tcp、tls、およびudpです。たとえば、tls://syslog-receiver.example.com:6514です。 - 11
- Transport Layer Security (TLS) クライアント接続のオプションを制御するための設定を指定します。
- 12
- パイプラインを使用して転送するログタイプ (
application、infrastructureまたはaudit) を指定します。 - 13
- パイプラインの名前を指定します。
- 14
- サービスアカウントの名前。
CR オブジェクトを作成します。
oc create -f <filename>.yaml
$ oc create -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.8.1. メッセージ出力へのログソース情報の追加 リンクのコピーリンクがクリップボードにコピーされました!
ClusterLogForwarder カスタムリソース (CR) に enrichment フィールドを追加することで、レコードの message フィールドに namespace_name、pod_name、および container_name 要素を追加できます。
この設定は、RFC3164 と RFC5424 の両方と互換性があります。
enrichment: None を使用した syslog メッセージ出力の例
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: {...}
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: {...}
enrichment: KubernetesMinimal を使用した syslog メッセージ出力の例
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: namespace_name=cakephp-project container_name=mysql pod_name=mysql-1-wr96h,message: {...}
2025-03-03T11:48:01+00:00 example-worker-x syslogsyslogserverd846bb9b: namespace_name=cakephp-project container_name=mysql pod_name=mysql-1-wr96h,message: {...}
1.5. STS 対応クラスターから Amazon CloudWatch へログを転送する リンクのコピーリンクがクリップボードにコピーされました!
Amazon CloudWatch は、管理者が Amazon Web Services (AWS) 上のリソースとアプリケーションを観測および監視するのに役立つサービスです。AWS Security Token Service (STS) を使用する AWS の Identity and Access Management (IAM) Roles for Service Accounts (IRSA) を活用することで、OpenShift Logging から CloudWatch にログを安全に転送できます。
CloudWatch による認証は次のように機能します。
- ログコレクターは、AWS の OpenID Connect (OIDC) プロバイダーにサービスアカウントトークンを提示して、Security Token Service (STS) から一時的な AWS 認証情報を要求します。
- AWS がトークンを検証します。その後、信頼ポリシーに応じて、AWS はログコレクターが使用するためのアクセスキー ID、シークレットアクセスキー、セッショントークンなどの短期間の一時的な認証情報を発行します。
Red Hat OpenShift Service on AWS などの STS 対応クラスターでは、AWS ロールは必要な信頼ポリシーで事前設定されています。これにより、サービスアカウントはロールを引き受けることができます。したがって、IAM ロールを使用する STS で AWS のシークレットを作成できます。その後、シークレットを使用してログを CloudWatch 出力に転送する ClusterLogForwarder カスタムリソース (CR) を作成または更新できます。ロールが事前に設定されている場合は、次の手順に従って、シークレットと ClusterLogForwarder CR を作成します。
- 既存の AWS ロールを使用して CloudWatch のシークレットを作成する
- STS 対応クラスターから Amazon CloudWatch へログを転送する
信頼ポリシーが事前設定された AWS IAM ロールがない場合は、まず必要な信頼ポリシーを持つロールを作成する必要があります。シークレット、ClusterLogForwarder CR、およびロールを作成するには、次の手順を実行します。
1.5.1. AWS IAM ロールの作成 リンクのコピーリンクがクリップボードにコピーされました!
AWS リソースへセキュアにアクセスできるよう、サービスアカウントが引き受けることができる Amazon Web Services (AWS) IAM ロールを作成します。
次の手順では、AWS CLI を使用して AWS IAM ロールを作成する方法を示します。代わりに、Cloud Credential Operator (CCO) ユーティリティー ccoctl を使用することもできます。ccoctl ユーティリティーを使用すると、ClusterLogForwarder カスタムリソース (CR) に必要ない多くのフィールドが IAM ロールポリシーに作成されます。これらの追加フィールドは CR によって無視されます。ただし、ccoctl ユーティリティーは、IAM ロールを設定するための便利な方法を提供します。詳細は、コンポーネントの短期認証情報を使用した手動モード を参照してください。
前提条件
- Security Token Service (STS) が有効化され、AWS 用に設定されている Red Hat OpenShift Logging クラスターにアクセスできる。
- AWS アカウントへの管理者アクセス権がある。
- AWS CLI がインストールされている。
手順
CloudWatch にログを書き込む権限を付与する IAM ポリシーを作成します。
次の内容を含むファイル (例:
cw-iam-role-policy.json) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、以前のポリシー定義に基づいて IAM ポリシーを作成します。
aws iam create-policy \ --policy-name cluster-logging-allow \ --policy-document file://cw-iam-role-policy.jsonaws iam create-policy \ --policy-name cluster-logging-allow \ --policy-document file://cw-iam-role-policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作成されたポリシーの
Arn値をメモします。
ロギングサービスアカウントが IAM ロールを引き受けることを許可する信頼ポリシーを作成します。
次のコマンドを実行し、以前に定義した信頼ポリシーに基づいて IAM ロールを作成します。
aws iam create-role --role-name openshift-logger --assume-role-policy-document file://cw-trust-policy.json
$ aws iam create-role --role-name openshift-logger --assume-role-policy-document file://cw-trust-policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作成されたロールの
Arn値をメモします。次のコマンドを実行して、ポリシーをロールにアタッチします。
aws iam put-role-policy \ --role-name openshift-logger --policy-name cluster-logging-allow \ --policy-document file://cw-role-policy.json$ aws iam put-role-policy \ --role-name openshift-logger --policy-name cluster-logging-allow \ --policy-document file://cw-role-policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを実行して、ロールと権限ポリシーを確認します。
aws iam get-role --role-name openshift-logger
$ aws iam get-role --role-name openshift-loggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
ROLE arn:aws:iam::123456789012:role/openshift-logger ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:openshift-logging:openshift-logger PRINCIPAL arn:aws:iam::123456789012:oidc-provider/<OPENSHIFT_OIDC_PROVIDER_URL>
ROLE arn:aws:iam::123456789012:role/openshift-logger ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:openshift-logging:openshift-logger PRINCIPAL arn:aws:iam::123456789012:oidc-provider/<OPENSHIFT_OIDC_PROVIDER_URL>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.2. 既存の AWS ロールを使用した AWS CloudWatch のシークレット作成 リンクのコピーリンクがクリップボードにコピーされました!
oc create secret --from-literal コマンドを使用して、設定された AWS IAM ロールから Amazon Web Services (AWS) Security Token Service (STS) のシークレットを作成します。
前提条件
- AWS IAM ロールを作成している。
- Red Hat OpenShift Logging への管理者アクセス権がある。
手順
CLI で次のように入力して、AWS のシークレットを生成します。
oc create secret generic sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/openshift-logger
$ oc create secret generic sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/openshift-loggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow シークレットの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.3. STS 対応クラスターから Amazon CloudWatch へログを転送する リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) Security Token Service (STS) が有効になっているクラスターにデプロイされた Logging for Red Hat OpenShift から、Amazon CloudWatch にログを転送できます。Amazon CloudWatch は、管理者が AWS 上のリソースとアプリケーションを観測および監視するのに役立つサービスです。
前提条件
- Red Hat OpenShift Logging Operator がインストールされている。
- 認証情報シークレットを設定している。
- Red Hat OpenShift Logging への管理者アクセス権がある。
手順
ClusterLogForwarderカスタムリソース (CR) を作成または更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- サービスアカウントを指定します。
- 2
- 出力の名前を指定します。
- 3
cloudwatchタイプを指定します。- 4
- ログストリームのグループ名を指定します。
- 5
- AWS リージョンを指定します。
- 6
- STS の認証タイプとして
iamRoleを指定します。 - 7
role_arnリソースが保存されているシークレットの名前とキーを指定します。- 8
- 認証に使用するサービスアカウントトークンを指定します。投影されたサービスアカウントトークンを使用するには、
from: serviceAccountを使用します。 - 9
- パイプラインを使用して転送するログタイプ (
application、infrastructureまたはaudit) を指定します。 - 10
- このパイプラインでログを転送する時に使用する出力の名前を指定します。
1.5.4. 不要なログレコードを削除するコンテンツフィルターの設定 リンクのコピーリンクがクリップボードにコピーされました!
すべてのクラスターログを収集すると大量のデータが生成され、その移動と保存にコストがかかる可能性があります。ボリュームを削減するには、転送前に不要なログレコードを除外するように drop フィルターを設定できます。ログコレクターは、フィルターに対してログストリームを評価し、指定された条件に一致するレコードを破棄します。
drop フィルターは、test フィールドを使用して、ログレコードを評価するための 1 つ以上の条件を定義します。フィルターは、レコードを破棄するかどうかを確認するために次のルールを適用します。
- 指定された条件がすべて true と評価された場合、テストは合格となります。
- テストに合格すると、フィルターはログレコードを破棄します。
-
dropフィルター設定で複数のテストを定義すると、いずれかのテストに合格するとフィルターによってログレコードが破棄されます。 - 条件の評価中にエラーが発生した場合 (参照先のフィールドが欠落している場合など)、その条件は false と評価されます。
前提条件
- Red Hat OpenShift Logging Operator がインストールされている。
- 管理者権限がある。
-
ClusterLogForwarderカスタムリソース (CR) を作成した。 -
OpenShift CLI (
oc) がインストールされている。
手順
既存の
ClusterLogForwarder設定を抽出し、ローカルファイルとして保存します。oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
$ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細は、以下のようになります。
-
<name>は、設定するClusterLogForwarderインスタンスの名前です。 -
<namespace>は、ClusterLogForwarderインスタンスを作成した namespace です (例:openshift-logging)。 -
<filename>は、設定を保存するローカルファイルの名前です。
-
ClusterLogForwarderCR のfiltersspec に、不要なログレコードを破棄する設定を追加します。ClusterLogForwarderCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- フィルターのタイプを指定します。
dropフィルターは、フィルター設定に一致するログレコードを破棄します。 - 2
dropフィルターの設定オプションを指定します。- 3
- フィルターがログレコードを破棄するかどうかを評価するテストの条件を指定します。
- 4
- ログレコード内のフィールドへのドット区切りのパスを指定します。
-
各パスセグメントには、英数字とアンダースコア (
a-z、A-Z、0-9、_) を含めることができます (例:.kubernetes.namespace_name)。 -
セグメントに異なる文字が含まれている場合は、セグメントを引用符で囲む必要があります (例:
.kubernetes.labels."app.version-1.2/beta")。 -
1 つの
test設定にいくつかのフィールドパスを含めることができますが、テストに合格してdropフィルターを適用するには、すべてのフィールドパスが true と評価される必要があります。
-
各パスセグメントには、英数字とアンダースコア (
- 5
- 正規表現を指定します。ログレコードがこの正規表現と一致する場合は、破棄されます。
- 6
- 正規表現を指定します。ログレコードがこの正規表現に一致しない場合、破棄されます。
- 7
dropフィルターを使用するパイプラインを指定します。
注記単一の
fieldパスに対してmatchesまたはnotMatches条件のいずれかを設定できますが、両方を設定することはできません。優先度の高いログレコードのみを保持する設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow いくつかのテストを含む設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
ClusterLogForwarderCR を適用します。oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.5. API 監査フィルターの概要 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift API サーバーは、すべての API 呼び出しに対して監査イベントを生成します。これらのイベントには、リクエスト、応答、リクエスト元のアイデンティティーに関する詳細が含まれます。これにより、大量のデータが発生する可能性があります。
API 監査フィルターは、ルールを使用して重要でないイベントを除外し、イベントサイズを縮小することで、監査証跡の管理に役立ちます。ルールは順番にチェックされ、最初の一致でチェックが停止します。イベント内のデータの量は、level フィールドの値によって異なります。
-
None: イベントは破棄されます。 -
Metadata: イベントには監査メタデータが含まれ、要求本文と応答本文は除外されます。 -
Request: イベントには監査メタデータと要求本文が含まれ、応答本文は含まれません。 -
RequestResponse: イベントには、メタデータ、要求本文、応答本文など、すべてのデータが含まれます。レスポンス本文が非常に大きくなる可能性があります。たとえば、oc get pods -Aはクラスター内のすべての Pod の YAML 記述を含むレスポンス本文を生成します。
API 監査フィルター機能は、ロギングデプロイメントで Vector コレクターがセットアップされている場合にのみ使用できます。
ClusterLogForwarder カスタムリソース (CR) は、標準の Kubernetes 監査ポリシー と同じ形式を使用します。ClusterLogForwarder CR は、次の追加機能を提供します。
- ワイルドカード
-
ユーザー、グループ、namespace、およびリソースの名前には、先頭または末尾に
*アスタリスク文字を付けることができます。たとえば、openshift-\*namespace は、openshift-apiserverまたはopenshift-authenticationnamespace と一致します。\*/statusリソースは、Pod/statusまたはDeployment/statusリソースと一致します。 - デフォルトのルール
ポリシーのルールに一致しないイベントは、以下のようにフィルターされます。
-
get、list、watchなどの読み取り専用システムイベントは削除されます。 - サービスアカウントと同じ namespace 内で発生するサービスアカウント書き込みイベントは破棄されます。
- 他のすべてのイベントは、設定されたレート制限に従って転送されます。
これらのデフォルトを無効にするには、
levelフィールドのみが含まれるルールでルールリストを終了するか、空のルールを追加します。-
- 応答コードが省略される
-
省略する整数ステータスコードのリスト。イベントが作成されない HTTP ステータスコードをリストする
OmitResponseCodesフィールドを使用して、応答で HTTP ステータスコードに基づいてイベントを破棄できます。デフォルト値は[404, 409, 422, 429]です。値が空のリスト[]の場合、ステータスコードは省略されません。
ClusterLogForwarder CR の監査ポリシーは、OpenShift Container Platform の監査ポリシーに加えて動作します。ClusterLogForwarder CR 監査フィルターは、ログコレクターが転送する内容を変更し、動詞、ユーザー、グループ、namespace、またはリソースでフィルタリングする機能を提供します。複数のフィルターを作成して、同じ監査ストリームの異なるサマリーを異なる場所に送信できます。たとえば、詳細なストリームをローカルクラスターログストアに送信し、詳細度の低いストリームをリモートサイトに送信できます。
-
監査ログを収集するには、
collect-audit-logsクラスターロールが必要です。 - 提供されている例は、監査ポリシーで可能なルールの範囲を示すことを目的としており、推奨される設定ではありません。
監査ポリシーの例
1.5.6. ラベル式または一致するラベルキーと値を含む入力時でのアプリケーションログのフィルタリング リンクのコピーリンクがクリップボードにコピーされました!
input セレクターを使用して、ラベル式または照合するラベルキーとその値に基づいてアプリケーションログを含めることができます。
手順
ClusterLogForwarderCR のinput仕様にフィルターの設定を追加します。以下の例は、ラベル式または一致したラベルキー/値に基づいてログを組み込むように
ClusterLogForwarderCR を設定する方法を示しています。ClusterLogForwarderCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
ClusterLogForwarderCR を適用します。oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.7. ログレコードをプルーニングするコンテンツフィルターの設定 リンクのコピーリンクがクリップボードにコピーされました!
prune フィルターを設定すると、ログコレクターは転送前にフィルターに対してログストリームを評価します。コレクターは、Pod アノテーションなどの値の低いフィールドを削除してログレコードをプルーニングします。
前提条件
- Red Hat OpenShift Logging Operator がインストールされている。
- 管理者権限がある。
-
ClusterLogForwarderカスタムリソース (CR) を作成した。 -
OpenShift CLI (
oc) がインストールされている。
手順
既存の
ClusterLogForwarder設定を抽出し、ローカルファイルとして保存します。oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
$ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細は、以下のようになります。
-
<name>は、設定するClusterLogForwarderインスタンスの名前です。 -
<namespace>は、ClusterLogForwarderインスタンスを作成した namespace です (例:openshift-logging)。 -
<filename>は、設定を保存するローカルファイルの名前です。
-
ClusterLogForwarderCR のfiltersspec にログレコードをプルーニングするための設定を追加します。重要inとnotInの両方のパラメーターを指定した場合、プルーニング中にnotIn配列がinよりも優先されます。notIn配列を使用してレコードがプルーニングされた後、続いてin配列を使用してレコードがプルーニングされます。ClusterLogForwarderCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- フィルターのタイプを指定します。
pruneフィルターでは、設定されたフィールドでログレコードをプルーニングします。 - 2
pruneフィルターの設定オプションを指定します。-
inフィールドとnotInフィールドは、ログレコード内のフィールドへのドットで区切られたパスの配列です。 -
各パスセグメントには、英数字とアンダースコア (
a-z、A-Z、0-9、_) を含めることができます (例:.kubernetes.namespace_name)。 -
セグメントに異なる文字が含まれている場合は、セグメントを引用符で囲む必要があります (例:
.kubernetes.labels."app.version-1.2/beta")。
-
- 3
- オプション: ログレコードから削除するフィールドを指定します。ログコレクターが他のすべてのフィールドを保持します。
- 4
- オプション: ログレコードに保持するフィールドを指定します。ログコレクターが他のすべてのフィールドを削除します。
- 5
pruneフィルターを適用するパイプラインを指定します。重要-
フィルターは、ログレコードから
.log_type、.log_source、.messageフィールドを削除できません。それらをnotInフィールドに含める必要があります。 -
googleCloudLogging出力を使用する場合は、notInフィールドに.hostnameを含める必要があります。
-
フィルターは、ログレコードから
次のコマンドを実行して、
ClusterLogForwarderCR を適用します。oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6. ソースによる監査およびインフラストラクチャーログ入力のフィルタリング リンクのコピーリンクがクリップボードにコピーされました!
input セレクターを使用して、ログを収集する audit および infrastructure ソースのリストを定義できます。
手順
ClusterLogForwarderCR にauditおよびinfrastructureソースを定義する設定を追加します。次の例は、
ClusterLogForwarderCR を設定してauditおよびinfrastructureソースを定義する方法を示しています。ClusterLogForwarderCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
ClusterLogForwarderCR を適用します。oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7. namespace またはコンテナー名を含めるか除外して入力時にアプリケーションログをフィルタリングする手順 リンクのコピーリンクがクリップボードにコピーされました!
input セレクターを使用して、namespace とコンテナー名に基づいてアプリケーションログを含めたり除外したりできます。
手順
ClusterLogForwarderCR に namespace とコンテナー名を含めるか除外するかの設定を追加します。以下の例は、namespace およびコンテナー名を含めるか、除外するように
ClusterLogForwarderCR を設定する方法を示しています。ClusterLogForwarderCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記excludesフィールドはincludesフィールドよりも優先されます。次のコマンドを実行して、
ClusterLogForwarderCR を適用します。oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第2章 ログストアの設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーション、監査、インフラストラクチャー関連のログを保存するように LokiStack カスタムリソース (CR) を設定できます。
Loki は、水平スケーリング可能で可用性の高いマルチテナントログ集約システムで、OpenShift Observability UI で視覚化できる Logging for Red Hat OpenShift 用の GA ログストアとして提供されます。OpenShift Logging が提供する Loki 設定は、収集されたログを使用してユーザーが迅速にトラブルシューティングを実行できるように設計された短期ログストアです。この目的のために、Logging for Red Hat OpenShift の Loki 設定は短期ストレージを備えており、最新のクエリーに最適化されています。
長期間にわたる保存やクエリーの場合、ユーザーはクラスター外部のログストアを探す必要があります。Loki のサイズ設定は、最大 30 日間の短期ストレージに対してのみテストおよびサポートされます。
2.1. Loki デプロイメントのサイズ リンクのコピーリンクがクリップボードにコピーされました!
Loki のサイズは 1x.<size> の形式に従います。この場合の 1x はインスタンスの数を、<size> は性能を指定します。
1x.pico 設定は、最小限のリソースと制限要件を持つ単一の Loki デプロイメントを定義し、すべての Loki コンポーネントに高可用性 (HA) サポートを提供します。この設定は、単一のレプリケーションファクターまたは自動圧縮を必要としないデプロイメントに適しています。
ディスク要求はサイズ設定にかかわらず類似しているため、お客様はさまざまなサイズをテストして、それぞれのデプロイメントニーズに最適なサイズを決定できます。
デプロイメントサイズの 1x の数は変更できません。
| 1x.demo | 1x.pico [6.1+ のみ] | 1x.extra-small | 1x.small | 1x.medium | |
|---|---|---|---|---|---|
| Data transfer | デモ使用のみ | 50 GB/日 | 100 GB/日 | 500 GB/日 | 2 TB/日 |
| 1 秒あたりのクエリー数 (QPS) | デモ使用のみ | 200 ミリ秒で 1 - 25 QPS | 200 ミリ秒で 1 - 25 QPS | 200 ミリ秒で 25 - 50 QPS | 200 ミリ秒で 25 - 75 QPS |
| レプリケーション係数 | なし | 2 | 2 | 2 | 2 |
| 合計 CPU 要求 | なし | 仮想 CPU 7 個 | 仮想 CPU 14 個 | 仮想 CPU 34 個 | 仮想 CPU 54 個 |
| ルーラーを使用する場合の合計 CPU リクエスト | なし | 仮想 CPU 8 個 | 仮想 CPU 16 個 | 仮想 CPU 42 個 | 仮想 CPU 70 個 |
| 合計メモリー要求 | なし | 17 Gi | 31 Gi | 67 Gi | 139 Gi |
| ルーラーを使用する場合の合計メモリーリクエスト | なし | 18 Gi | 35 Gi | 83 Gi | 171 Gi |
| 合計ディスク要求 | 40 Gi | 590 Gi | 430 Gi | 430 Gi | 590 Gi |
| ルーラーを使用する場合の合計ディスクリクエスト | 60 Gi | 910 Gi | 750 Gi | 750 Gi | 910 Gi |
2.2. Loki オブジェクトストレージ リンクのコピーリンクがクリップボードにコピーされました!
Loki Operator は、AWS S3 だけでなく、Minio や OpenShift Data Foundation などの他の S3 互換オブジェクトストアもサポートしています。Azure、GCS、および Swift もサポートされています。
Loki ストレージの推奨命名法は、logging-loki-<your_storage_provider> です。
次の表は、各ストレージプロバイダーの LokiStack カスタムリソース (CR) 内の type 値を示しています。詳細は、ストレージプロバイダーに関するセクションを参照してください。
| ストレージプロバイダー | シークレットの type 値 |
|---|---|
| AWS | s3 |
| Azure | azure |
| Google Cloud | gcs |
| Minio | s3 |
| OpenShift Data Foundation | s3 |
| Swift | swift |
2.2.1. AWS ストレージ リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- Loki Operator がインストールされている。
-
OpenShift CLI (
oc) がインストールされている。 - AWS 上に バケット を作成している。
- AWS IAM ポリシーと IAM ユーザー を作成している。
手順
次のコマンドを実行して、
logging-loki-awsという名前のオブジェクトストレージシークレットを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.1.1. STS 対応クラスターの AWS ストレージ リンクのコピーリンクがクリップボードにコピーされました!
クラスターで STS が有効になっている場合、Cloud Credential Operator (CCO) によって AWS トークンを使用した短期認証がサポートされます。
次のコマンドを実行すると、Loki オブジェクトストレージシークレットを手動で作成できます。
oc -n openshift-logging create secret generic "logging-loki-aws" \ --from-literal=bucketnames="<s3_bucket_name>" \ --from-literal=region="<bucket_region>" \ --from-literal=audience="<oidc_audience>"
$ oc -n openshift-logging create secret generic "logging-loki-aws" \
--from-literal=bucketnames="<s3_bucket_name>" \
--from-literal=region="<bucket_region>" \
--from-literal=audience="<oidc_audience>"
- 1
- 任意のアノテーション。デフォルト値は
openshiftです。
2.2.2. Azure ストレージ リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- Loki Operator がインストールされている。
-
OpenShift CLI (
oc) がインストールされている。 - Azure 上に バケット を作成している。
手順
次のコマンドを実行して、
logging-loki-azureという名前のオブジェクトストレージシークレットを作成します。oc create secret generic logging-loki-azure \ --from-literal=container="<azure_container_name>" \ --from-literal=environment="<azure_environment>" \ --from-literal=account_name="<azure_account_name>" \ --from-literal=account_key="<azure_account_key>"
$ oc create secret generic logging-loki-azure \ --from-literal=container="<azure_container_name>" \ --from-literal=environment="<azure_environment>" \1 --from-literal=account_name="<azure_account_name>" \ --from-literal=account_key="<azure_account_key>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- サポートされている環境値は、
AzureGlobal、AzureChinaCloud、AzureGermanCloud、AzureUSGovernmentです。
2.2.2.1. Microsoft Entra Workload ID 対応クラスター用の Azure ストレージ リンクのコピーリンクがクリップボードにコピーされました!
クラスターで Microsoft Entra Workload ID が有効になっている場合、Cloud Credential Operator (CCO) は Workload ID を使用した短期認証をサポートします。
次のコマンドを実行すると、Loki オブジェクトストレージシークレットを手動で作成できます。
oc -n openshift-logging create secret generic logging-loki-azure \ --from-literal=environment="<azure_environment>" \ --from-literal=account_name="<storage_account_name>" \ --from-literal=container="<container_name>"
$ oc -n openshift-logging create secret generic logging-loki-azure \
--from-literal=environment="<azure_environment>" \
--from-literal=account_name="<storage_account_name>" \
--from-literal=container="<container_name>"
2.2.3. Google Cloud Platform ストレージ リンクのコピーリンクがクリップボードにコピーされました!
前提条件
手順
-
GCP から受け取ったサービスアカウントの認証情報を
key.jsonという名前のファイルにコピーします。 次のコマンドを実行して、
logging-loki-gcsという名前のオブジェクトストレージシークレットを作成します。oc create secret generic logging-loki-gcs \ --from-literal=bucketname="<bucket_name>" \ --from-file=key.json="<path/to/key.json>"
$ oc create secret generic logging-loki-gcs \ --from-literal=bucketname="<bucket_name>" \ --from-file=key.json="<path/to/key.json>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.4. Minio ストレージ リンクのコピーリンクがクリップボードにコピーされました!
前提条件
手順
次のコマンドを実行して、
logging-loki-minioという名前のオブジェクトストレージシークレットを作成します。oc create secret generic logging-loki-minio \ --from-literal=bucketnames="<bucket_name>" \ --from-literal=endpoint="<minio_bucket_endpoint>" \ --from-literal=access_key_id="<minio_access_key_id>" \ --from-literal=access_key_secret="<minio_access_key_secret>"
$ oc create secret generic logging-loki-minio \ --from-literal=bucketnames="<bucket_name>" \ --from-literal=endpoint="<minio_bucket_endpoint>" \ --from-literal=access_key_id="<minio_access_key_id>" \ --from-literal=access_key_secret="<minio_access_key_secret>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.5. OpenShift Data Foundation ストレージ リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- Loki Operator がインストールされている。
-
OpenShift CLI (
oc) がインストールされている。 - OpenShift Data Foundation がデプロイされている。
- OpenShift Data Foundation クラスターが オブジェクトストレージ用 に設定されている。
手順
openshift-loggingnamespace にObjectBucketClaimカスタムリソースを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、関連付けられた
ConfigMapオブジェクトからバケットのプロパティーを取得します。BUCKET_HOST=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_HOST}') BUCKET_NAME=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_NAME}') BUCKET_PORT=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_PORT}')BUCKET_HOST=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_HOST}') BUCKET_NAME=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_NAME}') BUCKET_PORT=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_PORT}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、関連付けられたシークレットからバケットアクセスキーを取得します。
ACCESS_KEY_ID=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 -d) SECRET_ACCESS_KEY=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 -d)ACCESS_KEY_ID=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 -d) SECRET_ACCESS_KEY=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 -d)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
logging-loki-odfという名前のオブジェクトストレージシークレットを作成します。oc create -n openshift-logging secret generic logging-loki-odf \ --from-literal=access_key_id="<access_key_id>" \ --from-literal=access_key_secret="<secret_access_key>" \ --from-literal=bucketnames="<bucket_name>" \ --from-literal=endpoint="https://<bucket_host>:<bucket_port>"
$ oc create -n openshift-logging secret generic logging-loki-odf \ --from-literal=access_key_id="<access_key_id>" \ --from-literal=access_key_secret="<secret_access_key>" \ --from-literal=bucketnames="<bucket_name>" \ --from-literal=endpoint="https://<bucket_host>:<bucket_port>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.6. Swift ストレージ: リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- Loki Operator がインストールされている。
-
OpenShift CLI (
oc) がインストールされている。 - Swift 上で バケット を作成している。
手順
次のコマンドを実行して、
logging-loki-swiftという名前のオブジェクトストレージシークレットを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、次のコマンドを実行して、プロジェクト固有のデータ、リージョン、またはその両方を指定できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.7. 短期認証情報を使用するクラスターに Loki ログストアのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
一部のストレージプロバイダーでは、インストール時に Cloud Credential Operator ユーティリティー (ccoctl) を使用して、短期認証情報を実装できます。これらの認証情報は、OpenShift Container Platform クラスターの外部で作成および管理されます。詳細は、コンポーネントの短期認証情報を使用した手動モード を参照してください。
この認証情報ストラテジーを使用するクラスターでは、Loki Operator の新規インストール中に短期認証情報の認証を設定する必要があります。この機能を使用するために、既存のクラスターが別のクレデンシャルストラテジーを使用するように設定することはできません。
2.2.7.1. クラウドベースのログストアにアクセスするために Workload Identity Federation で認証する リンクのコピーリンクがクリップボードにコピーされました!
有効期間の短いトークンを使用した Workload Identity Federation を使用して、クラウドベースのログストアに対して認証を行うことができます。Workload Identity Federation を使用すると、長期間有効な認証情報をクラスターに保存する必要がなくなり、認証情報の漏洩のリスクが軽減され、シークレットの管理が簡素化されます。
前提条件
- 管理者権限がある。
手順
認証を有効にするには、次のいずれかのオプションを使用します。
-
OpenShift Container Platform Web コンソールを使用して Loki Operator をインストールした場合、システムは有効期間の短いトークンを使用するクラスターを自動的に検出します。プロンプトが表示され、ロールを作成するように求められます。また、Loki Operator が
CredentialsRequestオブジェクトを作成するのに必要なデータを提供するように求められます。このオブジェクトにより、シークレットが設定されます。 OpenShift CLI (
oc) を使用して Loki Operator をインストールした場合は、Subscriptionオブジェクトを手動で作成する必要があります。次のサンプルに示すように、ストレージプロバイダーに適したテンプレートを使用します。この認証ストラテジーは、サンプル内に示されているストレージプロバイダーのみをサポートします。Microsoft Azure サンプルサブスクリプション
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Amazon Web Services (AWS) サンプルサブスクリプション
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Google Cloud Platform (GCP) サンプルサブスクリプション
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
OpenShift Container Platform Web コンソールを使用して Loki Operator をインストールした場合、システムは有効期間の短いトークンを使用するクラスターを自動的に検出します。プロンプトが表示され、ロールを作成するように求められます。また、Loki Operator が
2.2.7.2. Web コンソールを使用して LokiStack カスタムリソースを作成する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用して、LokiStack カスタムリソース (CR) を作成できます。
前提条件
- 管理者権限がある。
- OpenShift Container Platform Web コンソールにアクセスできる。
- Loki Operator がインストールされている。
手順
- Operators → Installed Operators ページに移動します。All instances タブをクリックします。
- Create new ドロップダウンリストから、LokiStack を選択します。
YAML view を選択し、次のテンプレートを使用して
LokiStackCR を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
logging-lokiという名前を使用します。- 2
- デプロイメントサイズを指定します。ロギング 5.8 以降のバージョンでは、Loki の実稼働インスタンスでサポートされているサイズオプションは
1x.extra-small、1x.small、または1x.mediumです。 - 3
- ログストレージに使用するシークレットを指定します。
- 4
- 対応するストレージタイプを指定します。
- 5
- 任意のフィールド、Logging 5.9 以降。サポートされているユーザー設定値は、次のとおりです。
staticは、シークレットに保存された認証情報を使用する、サポートされているすべてのオブジェクトストレージタイプで使用できるデフォルトの認証モードです。tokenは、認証情報ソースから取得される有効期間が短いトークンです。このモードでは、オブジェクトストレージに必要な認証情報が静的設定に格納されません。代わりに、実行時にサービスを使用して認証情報が生成されるため、有効期間が短い認証情報の使用と、よりきめ細かい制御が可能になります。この認証モードは、すべてのオブジェクトストレージタイプでサポートされているわけではありません。Loki がマネージド STS モードで実行されていて、STS/WIF クラスターで CCO を使用している場合、token-ccoがデフォルト値です。 - 6
- 一時ストレージのストレージクラスの名前を入力します。最適なパフォーマンスを得るには、ブロックストレージを割り当てるストレージクラスを指定します。クラスターで使用可能なストレージクラスは、
oc get storageclassesコマンドを使用してリスト表示できます。
2.2.7.3. CLI を使用して Loki オブジェクトストレージのシークレットを作成する リンクのコピーリンクがクリップボードにコピーされました!
Loki オブジェクトストレージを設定するには、シークレットを作成する必要があります。これは、OpenShift CLI (oc) を使用して実行できます。
前提条件
- 管理者権限がある。
- Loki Operator がインストールされている。
-
OpenShift CLI (
oc) がインストールされている。
手順
次のコマンドを使用して、証明書とキーファイルが含まれるディレクトリーにシークレットを作成できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
最良の結果を得るには、generic または opaque シークレットを使用してください。
検証
次のコマンドを実行して、シークレットが作成されたことを確認します。
oc get secrets
$ oc get secretsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.8. Loki ログへのアクセスの詳細設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Logging Operator は、デフォルトではすべてのユーザーにログへのアクセスを付与しません。Operator のアップグレード後に以前の設定を適用していない限り、管理者はユーザーのアクセスを設定する必要があります。設定とニーズに応じて、以下を使用してログへのアクセスを細かく設定できます。
- クラスター全体のポリシー
- スコープ指定が namespace のポリシー
- カスタム管理者グループの作成
管理者は、デプロイメントに適したロールバインディングとクラスターのロールバインディングを作成する必要があります。Red Hat OpenShift Logging Operator には、次のクラスターロールがあります。
-
cluster-logging-application-viewは、アプリケーションログの読み取り権限を付与します。 -
cluster-logging-infrastructure-viewは、インフラストラクチャーログの読み取り権限を付与します。 -
cluster-logging-audit-viewは、監査ログの読み取り権限を付与します。
以前のバージョンからアップグレードした場合、追加のクラスターロール logging-application-logs-reader と関連するクラスターロールバインディング logging-all-authenticated-application-logs-reader により下位互換性が提供され、認証されたユーザーに namespace の読み取り権限が許可されます。
namespace ごとのアクセス権を持つユーザーは、アプリケーションログをクエリーする際に namespace を提供する必要があります。
2.2.8.1. クラスター全体のアクセス リンクのコピーリンクがクリップボードにコピーされました!
クラスターロールバインディングリソースはクラスターロールを参照し、クラスター全体に権限を設定します。
ClusterRoleBinding の例
2.2.8.2. namespace アクセス リンクのコピーリンクがクリップボードにコピーされました!
RoleBinding リソースを ClusterRole オブジェクトと使用して、ユーザーまたはグループがログにアクセスできる namespace を定義できます。
RoleBinding の例
- 1
- この
RoleBindingが適用される namespace を指定します。
2.2.8.3. カスタム管理者グループのアクセス権 リンクのコピーリンクがクリップボードにコピーされました!
多数のユーザーが広範な権限を必要とする大規模デプロイメントの場合は、adminGroup フィールドを使用してカスタムグループを作成できます。LokiStack CR の adminGroups フィールドで指定されたグループのメンバーであるユーザーは、管理者とみなされます。
cluster-logging-application-view ロールも割り当てられている管理者ユーザーは、すべての namespace のすべてのアプリケーションログにアクセスできます。
LokiStack CR の例
2.2.9. cluster-admin ユーザーロールの新規グループの作成 リンクのコピーリンクがクリップボードにコピーされました!
cluster-admin ユーザーとして複数の namespace のアプリケーションログをクエリーすると、クラスター内のすべての namespace の文字数の合計が 5120 を超え、Parse error: input size too long (XXXX > 5120) エラーが発生します。LokiStack のログへのアクセスをより適切に制御するには、cluster-admin ユーザーを cluster-admin グループのメンバーにします。cluster-admin グループが存在しない場合は、作成して必要なユーザーを追加します。
次の手順を使用して、cluster-admin 権限のあるユーザー用に、新しいグループを作成します。
手順
以下のコマンドを入力して新規グループを作成します。
oc adm groups new cluster-admin
$ oc adm groups new cluster-adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、必要なユーザーを
cluster-adminグループに追加します。oc adm groups add-users cluster-admin <username>
$ oc adm groups add-users cluster-admin <username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して
cluster-adminユーザーロールをグループに追加します。oc adm policy add-cluster-role-to-group cluster-admin cluster-admin
$ oc adm policy add-cluster-role-to-group cluster-admin cluster-adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. 信頼性とパフォーマンスの向上 リンクのコピーリンクがクリップボードにコピーされました!
実稼働環境で Loki の信頼性と効率性を確保するには、次の設定を使用します。
2.3.1. Loki Pod の配置 リンクのコピーリンクがクリップボードにコピーされました!
Pod の toleration またはノードセレクターを使用して、Loki Pod が実行するノードを制御し、他のワークロードがそれらのノードを使用しないようにできます。
LokiStack カスタムリソース (CR) を使用して toleration をログストア Pod に適用し、ノード仕様を使用して taint をノードに適用できます。ノードの taint は、taint を容認しないすべての Pod を拒否するようノードに指示する key:value ペアです。他の Pod にはない特定の key:value ペアを使用すると、ログストア Pod のみがそのノードで実行できるようになります。
ノードセレクターを使用する LokiStack の例
ノードセレクターと toleration を使用する LokiStack CR の例
LokiStack (CR) の nodeSelector フィールドと tolerations フィールドを設定するには、oc explain コマンドを使用して、特定のリソースの説明とフィールドを表示します。
oc explain lokistack.spec.template
$ oc explain lokistack.spec.template
出力例
詳細情報用に、特定のフィールドを追加できます。
oc explain lokistack.spec.template.compactor
$ oc explain lokistack.spec.template.compactor
出力例
2.3.2. ノードの障害を許容するための Loki の設定 リンクのコピーリンクがクリップボードにコピーされました!
ロギング 5.8 以降のバージョンでは、Loki Operator は、同じコンポーネントの Pod がクラスター内の異なる使用可能なノードにスケジュールされるように要求する Pod 非アフィニティールールの設定をサポートします。
アフィニティーとは、スケジュールするノードを制御する Pod の特性です。非アフィニティーとは、Pod がスケジュールされることを拒否する Pod の特性です。
OpenShift Container Platform では、Pod のアフィニティー と Pod の非アフィニティー によって、他の Pod のキー/値ラベルに基づいて、Pod のスケジュールに適したノードを制限できます。
Operator は、すべての Loki コンポーネント (compactor、distributor、gateway、indexGateway、ingester、querier、queryFrontend、および ruler コンポーネントを含む) に対してデフォルトの優先 podAntiAffinity ルールを設定します。
requiredDuringSchedulingIgnoredDuringExecution フィールドに必要な設定を指定して、Loki コンポーネントの希望の podAntiAffinity 設定を上書きできます。
インジェスターコンポーネントのユーザー設定の例
2.3.3. Loki でストリームベースの保持の有効化 リンクのコピーリンクがクリップボードにコピーされました!
ログストリームに基づいて保持ポリシーを設定できます。保持ルールは、グローバル、テナントごと、またはその両方で設定できます。両方で設定すると、グローバルルールの前にテナントルールが適用されます。
s3 バケットまたは LokiStack カスタムリソース (CR) に保存期間が定義されていない場合、ログはプルーニングされず、s3 バケットに永久に残り、s3 ストレージがいっぱいになる可能性があります。
-
Logging バージョン 5.9 以降ではスキーマ
v12がサポートされていますが、将来の互換性のためにスキーマv13が推奨されます。 コスト効率の高いログプルーニングを行うには、オブジェクトストレージプロバイダーで直接保持ポリシーを設定します。ストレージプロバイダーのライフサイクル管理機能を使用して、古いログが自動的に削除されるようにします。これにより、Loki からの追加処理と S3 への削除リクエストも回避されます。
オブジェクトストレージがライフサイクルポリシーをサポートしていない場合は、内部で保持を強制するように LokiStack を設定する必要があります。サポートされる保持期間は最大 30 日間です。
前提条件
- 管理者権限がある。
- Loki Operator がインストールされている。
-
OpenShift CLI (
oc) がインストールされている。
手順
ストリームベースの保持を有効にするには、
LokiStackCR を作成し、YAML ファイルとして保存します。次の例では、lokistack.yamlという名前になっています。S3 のグローバルストリームベースの保持の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- すべてのログストリームの保持ポリシーを設定します。このポリシーは、オブジェクトストレージに保存されるログの保持期間には影響しません。
- 2
retentionブロックを CR に追加して、クラスター内の保持を有効にします。- 3
- ログストリームを保持ルールに一致させるための LogQL クエリー を指定します。
S3 のテナントごとのストリームベースの保持の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- テナントごとに保持ポリシーを設定します。有効なテナントタイプは、
application、audit、およびinfrastructureです。 - 2
- ログストリームを保持ルールに一致させるための LogQL クエリー を指定します。
LokiStackCR を適用します。oc apply -f lokistack.yaml
$ oc apply -f lokistack.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.4. メンバーリストの作成の失敗を許容する Loki の設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターでは、管理者は通常、非プライベート IP ネットワーク範囲を使用します。その結果、LokiStack メンバーリストはデフォルトでプライベート IP ネットワークのみを使用するため、LokiStack メンバーリストの設定は失敗します。
管理者は、メンバーリスト設定の Pod ネットワークを選択できます。LokiStack カスタムリソース (CR) を変更して、hashRing 仕様で podIP アドレスを使用できます。LokiStack CR を設定するには、以下のコマンドを使用します。
oc patch LokiStack logging-loki -n openshift-logging --type=merge -p '{"spec": {"hashRing":{"memberlist":{"instanceAddrType":"podIP"},"type":"memberlist"}}}'
$ oc patch LokiStack logging-loki -n openshift-logging --type=merge -p '{"spec": {"hashRing":{"memberlist":{"instanceAddrType":"podIP"},"type":"memberlist"}}}'
podIP を含める LokiStack の例
2.3.5. クラスターの再起動中の LokiStack 動作 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターが再起動されると、LokiStack の取り込みとクエリーパスは、ノードで使用可能な CPU およびメモリーリソース内で引き続き動作します。つまり、OpenShift Container Platform クラスターの更新中に LokiStack でダウンタイムは発生しません。この動作は、PodDisruptionBudget リソースを使用して実現されます。Loki Operator は、Loki に PodDisruptionBudget リソースをプロビジョニングします。このリソースは、特定の条件下で通常の操作ができるようにコンポーネントごとに使用可能でなければならない Pod の最小数を決定します。
2.4. 高度なデプロイメントとスケーラビリティー リンクのコピーリンクがクリップボードにコピーされました!
高可用性、スケーラビリティー、およびエラー処理を設定するには、次の情報を使用します。
2.4.1. ゾーン対応のデータレプリケーション リンクのコピーリンクがクリップボードにコピーされました!
Loki Operator は、Pod トポロジーの分散制約を通じて、ゾーン対応のデータレプリケーションのサポートを提供します。この機能を有効にすると、信頼性が向上し、1 つのゾーンで障害が発生した場合のログ損失に対する保護が強化されます。デプロイメントサイズを 1x.extra-small、1x.small、または 1x.medium に設定すると、replication.factor フィールドは自動的に 2 に設定されます。
適切なレプリケーションを実現するには、少なくともレプリケーション係数で指定されているのと同じ数のアベイラビリティーゾーンが必要です。レプリケーション係数より多くのアベイラビリティーゾーンを設定することは可能ですが、ゾーンが少ないと書き込みエラーが発生する可能性があります。最適な運用を実現するには、各ゾーンで同じ数のインスタンスをホストする必要があります。
ゾーンレプリケーションが有効になっている LokiStack CR の例
2.4.2. 障害が発生したゾーンからの Loki Pod の回復 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform では、特定のアベイラビリティーゾーンのリソースにアクセスできなくなると、ゾーン障害が発生します。アベイラビリティーゾーンは、冗長性とフォールトトレランスを強化することを目的とした、クラウドプロバイダーのデータセンター内の分離されたエリアです。OpenShift Container Platform クラスターがこの問題を処理するように設定されていない場合、ゾーン障害によりサービスまたはデータの損失が発生する可能性があります。
Loki Pod は StatefulSet の一部であり、StorageClass オブジェクトによってプロビジョニングされた永続ボリューム要求 (PVC) が付属しています。各 Loki Pod とその PVC は同じゾーンに存在します。クラスターでゾーン障害が発生すると、StatefulSet コントローラーが、障害が発生したゾーン内の影響を受けた Pod の回復を自動的に試みます。
次の手順では、障害が発生したゾーン内の PVC とそこに含まれるすべてのデータを削除します。完全なデータ損失を回避するには、LokiStack CR のレプリケーション係数フィールドを常に 1 より大きい値に設定して、Loki が確実にレプリケートされるようにする必要があります。
前提条件
-
LokiStackCR のレプリケーション係数が 1 より大きいことを確認している。 - コントロールプレーンによってゾーン障害が検出され、障害が発生したゾーン内のノードがクラウドプロバイダー統合によってマークされている。
StatefulSet コントローラーは、障害が発生したゾーン内の Pod を自動的に再スケジュールしようとします。関連する PVC も障害が発生したゾーンにあるため、別のゾーンへの自動再スケジュールは機能しません。新しいゾーンでステートフル Loki Pod とそのプロビジョニングされた PVC を正常に再作成できるようにするには、障害が発生したゾーンの PVC を手動で削除する必要があります。
手順
次のコマンドを実行して、
Pending中ステータスの Pod をリスト表示します。oc get pods --field-selector status.phase==Pending -n openshift-logging
$ oc get pods --field-selector status.phase==Pending -n openshift-loggingCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get podsの出力例NAME READY STATUS RESTARTS AGE logging-loki-index-gateway-1 0/1 Pending 0 17m logging-loki-ingester-1 0/1 Pending 0 16m logging-loki-ruler-1 0/1 Pending 0 16m
NAME READY STATUS RESTARTS AGE1 logging-loki-index-gateway-1 0/1 Pending 0 17m logging-loki-ingester-1 0/1 Pending 0 16m logging-loki-ruler-1 0/1 Pending 0 16mCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- これらの Pod は、障害が発生したゾーンに対応する PVC があるため、
Pendingステータスになっています。
次のコマンドを実行して、
Pendingステータスの PVC をリストします。oc get pvc -o=json -n openshift-logging | jq '.items[] | select(.status.phase == "Pending") | .metadata.name' -r
$ oc get pvc -o=json -n openshift-logging | jq '.items[] | select(.status.phase == "Pending") | .metadata.name' -rCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pvcの出力例storage-logging-loki-index-gateway-1 storage-logging-loki-ingester-1 wal-logging-loki-ingester-1 storage-logging-loki-ruler-1 wal-logging-loki-ruler-1
storage-logging-loki-index-gateway-1 storage-logging-loki-ingester-1 wal-logging-loki-ingester-1 storage-logging-loki-ruler-1 wal-logging-loki-ruler-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して Pod の PVC を削除します。
oc delete pvc <pvc_name> -n openshift-logging
$ oc delete pvc <pvc_name> -n openshift-loggingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して Pod を削除します。
oc delete pod <pod_name> -n openshift-logging
$ oc delete pod <pod_name> -n openshift-loggingCopy to Clipboard Copied! Toggle word wrap Toggle overflow これらのオブジェクトが正常に削除されると、使用可能なゾーンでオブジェクトが自動的に再スケジュールされます。
2.4.2.1. terminating 状態の PVC のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
PVC メタデータファイナライザーが kubernetes.io/pv-protection に設定されている場合、PVC が削除されずに terminating 状態でハングする可能性があります。ファイナライザーを削除すると、PVC が正常に削除されるようになります。
以下のコマンドを実行して各 PVC のファイナライザーを削除し、削除を再試行します。
oc patch pvc <pvc_name> -p '{"metadata":{"finalizers":null}}' -n openshift-logging$ oc patch pvc <pvc_name> -p '{"metadata":{"finalizers":null}}' -n openshift-loggingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.3. Loki レート制限エラーのトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
Log Forwarder API がレート制限を超える大きなメッセージブロックを Loki に転送すると、Loki により、レート制限 (429) エラーが生成されます。
これらのエラーは、通常の動作中に発生する可能性があります。たとえば、すでにいくつかのログがあるクラスターにロギングを追加する場合、ロギングが既存のログエントリーをすべて取り込もうとするとレート制限エラーが発生する可能性があります。この場合、新しいログの追加速度が合計レート制限よりも低い場合、履歴データは最終的に取り込まれ、ユーザーの介入を必要とせずにレート制限エラーが解決されます。
レート制限エラーが引き続き発生する場合は、LokiStack カスタムリソース (CR) を変更することで問題を解決できます。
LokiStack CR は、Grafana がホストする Loki では利用できません。このトピックは、Grafana がホストする Loki サーバーには適用されません。
条件
- Log Forwarder API は、ログを Loki に転送するように設定されている。
システムは、次のような 2MB を超えるメッセージのブロックを Loki に送信する。例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs -n openshift-logging -l component=collectorと入力すると、クラスター内のコレクターログに、次のいずれかのエラーメッセージを含む行が表示されます。429 Too Many Requests Ingestion rate limit exceeded
429 Too Many Requests Ingestion rate limit exceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow Vector エラーメッセージの例
2023-08-25T16:08:49.301780Z WARN sink{component_kind="sink" component_id=default_loki_infra component_type=loki component_name=default_loki_infra}: vector::sinks::util::retries: Retrying after error. error=Server responded with an error: 429 Too Many Requests internal_log_rate_limit=true2023-08-25T16:08:49.301780Z WARN sink{component_kind="sink" component_id=default_loki_infra component_type=loki component_name=default_loki_infra}: vector::sinks::util::retries: Retrying after error. error=Server responded with an error: 429 Too Many Requests internal_log_rate_limit=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow このエラーは受信側にも表示されます。たとえば、LokiStack 取り込み Pod で以下を行います。
Loki 取り込みエラーメッセージの例
level=warn ts=2023-08-30T14:57:34.155592243Z caller=grpc_logging.go:43 duration=1.434942ms method=/logproto.Pusher/Push err="rpc error: code = Code(429) desc = entry with timestamp 2023-08-30 14:57:32.012778399 +0000 UTC ignored, reason: 'Per stream rate limit exceeded (limit: 3MB/sec) while attempting to ingest for stream
level=warn ts=2023-08-30T14:57:34.155592243Z caller=grpc_logging.go:43 duration=1.434942ms method=/logproto.Pusher/Push err="rpc error: code = Code(429) desc = entry with timestamp 2023-08-30 14:57:32.012778399 +0000 UTC ignored, reason: 'Per stream rate limit exceeded (limit: 3MB/sec) while attempting to ingest for streamCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
LokiStackCR のingestionBurstSizeおよびingestionRateフィールドを更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
ingestionBurstSizeフィールドは、ディストリビューターレプリカごとに最大ローカルレート制限サンプルサイズを MB 単位で定義します。この値はハードリミットです。この値を、少なくとも 1 つのプッシュリクエストで想定される最大ログサイズに設定します。ingestionBurstSize値より大きい単一リクエストは使用できません。- 2
ingestionRateフィールドは、1 秒あたりに取り込まれるサンプルの最大量 (MB 単位) に対するソフト制限です。ログのレートが制限を超えているにもかかわらず、コレクターがログの送信を再試行すると、レート制限エラーが発生します。合計平均が制限よりも少ない場合に限り、システムは回復し、ユーザーの介入なしでエラーが解決されます。
2.5. ログベースのアラート リンクのコピーリンクがクリップボードにコピーされました!
2.5.1. LokiStack ルールの RBAC 権限の認可 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、クラスターロールをユーザー名にバインドすることで、ユーザーが独自のアラートおよび記録ルールを作成および管理できるようにすることができます。クラスターロールは、ユーザーに必要なロールベースのアクセス制御 (RBAC) 権限を含む ClusterRole オブジェクトとして定義されます。
LokiStack では、アラートおよび記録ルール用の次のクラスターロールが利用できます。
| ルール名 | 説明 |
|---|---|
|
|
このロールを持つユーザーは、アラートルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、 |
|
|
このロールを持つユーザーは、 |
|
|
このロールを持つユーザーは、 |
|
|
このロールを持つユーザーは、 |
|
|
このロールを持つユーザーは、記録ルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、 |
|
|
このロールを持つユーザーは、 |
|
|
このロールを持つユーザーは、 |
|
|
このロールを持つユーザーは、 |
2.5.1.1. 例 リンクのコピーリンクがクリップボードにコピーされました!
ユーザーにクラスターロールを適用するには、既存のクラスターロールを特定のユーザー名にバインドする必要があります。
クラスターロールは、使用するロールバインディングの種類に応じて、クラスタースコープまたは namespace スコープにすることができます。RoleBinding オブジェクトを使用する場合は、oc adm policy add-role-to-user コマンドを使用する場合と同様に、クラスターロールが指定した namespace にのみ適用されます。ClusterRoleBinding オブジェクトを使用する場合は、oc adm policy add-cluster-role-to-user コマンドを使用する場合と同様に、クラスターロールがクラスター内のすべての namespace に適用されます。
次のコマンド例では、指定したユーザーに、クラスター内の特定の namespace のアラートルールに対する作成、読み取り、更新、および削除 (CRUD) 権限を付与します。
特定の namespace のアラートルールに対する CRUD 権限を付与するクラスターロールバインディングコマンドの例
oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>
$ oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>
次のコマンドは、指定したユーザーに、すべての namespace のアラートルールに対する管理者権限を付与します。
管理者権限を付与するクラスターロールバインディングコマンドの例
oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
2.5.2. Loki を使用したログベースのアラートルールの作成 リンクのコピーリンクがクリップボードにコピーされました!
AlertingRule CR には、単一の LokiStack インスタンスのアラートルールグループを宣言するために使用する、仕様および Webhook 検証定義のセットが含まれます。Webhook 検証定義は、ルール検証条件もサポートします。
-
AlertingRuleCR に無効なinterval期間が含まれる場合、無効なアラートルールです。 -
AlertingRuleCR に無効なfor期間が含まれる場合、無効なアラートルールです。 -
AlertingRuleCR に無効な LogQLexprが含まれる場合、無効なアラートルールです。 -
AlertingRuleCR に同じ名前のグループが 2 つ含まれる場合、無効なアラートルールです。 - 上記のいずれも該当しない場合、アラートルールは有効とみなされます。
| テナントタイプ | AlertingRule CR の有効な namespace |
|---|---|
| application |
|
| audit |
|
| infrastructure |
|
手順
AlertingRuleカスタムリソース (CR) を作成します。インフラストラクチャー
AlertingRuleCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この
AlertingRuleCR が作成される namespace には、LokiStackspec.rules.namespaceSelector定義に一致するラベルが必要です。 - 2
labelsブロックは、LokiStack のspec.rules.selector定義と一致する必要があります。- 3
infrastructureテナントのAlertingRuleCR は、openshift-*、kube-\*、またはdefaultnamespaces でのみサポートされます。- 4
kubernetes_namespace_name:の値は、metadata.namespaceの値と一致する必要があります。- 5
- この必須フィールドの値は、
critical、warning、またはinfoである必要があります。 - 6
- このフィールドは必須です。
- 7
- このフィールドは必須です。
アプリケーション
AlertingRuleCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この
AlertingRuleCR が作成される namespace には、LokiStackspec.rules.namespaceSelector定義に一致するラベルが必要です。 - 2
labelsブロックは、LokiStack のspec.rules.selector定義と一致する必要があります。- 3
kubernetes_namespace_name:の値は、metadata.namespaceの値と一致する必要があります。- 4
- この必須フィールドの値は、
critical、warning、またはinfoである必要があります。 - 5
- この必須フィールドの値は、ルールの概要です。
- 6
- この必須フィールドの値は、ルールの詳細な説明です。
AlertingRuleCR を適用します。oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第3章 Loki での OTLP データ取り込み リンクのコピーリンクがクリップボードにコピーされました!
Logging では、OpenTelemetry Protocol (OTLP) を使用して、API エンドポイントを使用できます。OTLP は Loki 専用に設計されたものではない標準化された形式です。そのため、OpenTelemetry のデータ形式を Loki のデータモデルにマッピングするには、追加の Loki 設定が必要です。OTLP には、ストリームラベル や 構造化メタデータ などの概念がありません。代わりに、OTLP はログエントリーに関するメタデータを、次の 3 つのカテゴリーにグループ化された 属性 として提供します。
- リソース
- スコープ
- ログ
必要に応じて、複数のエントリーのメタデータを同時に、または個別に設定できます。
3.1. OTLP データ取り込み用の LokiStack 設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
OTLP 取り込み用に LokiStack カスタムリソース (CR) を設定するには、次の手順に従います。
前提条件
- Loki セットアップが、OTLP ログの取り込みを有効にするためにスキーマバージョン 13 で導入された構造化メタデータをサポートしていることを確認します。
手順
スキーマバージョンを設定します。
新しい
LokiStackCR を作成する場合は、ストレージスキーマ設定でversion: v13を設定します。注記既存の設定の場合は、
version: v13と現在より後のeffectiveDateを持つ新しいスキーマエントリーを追加します。スキーマバージョンの更新の詳細は、Upgrading Schemas (Grafana ドキュメント) を参照してください。
ストレージスキーマを次のように設定します。
ストレージスキーマの設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow effectiveDateを過ぎると v13 スキーマが有効になり、LokiStackは構造化メタデータを保存できるようになります。
3.2. 属性マッピング リンクのコピーリンクがクリップボードにコピーされました!
Loki Operator を openshift-logging モードに設定すると、Loki Operator がデフォルトの属性マッピングのセットを自動的に適用します。このマッピングは、特定の OTLP 属性を、Loki のストリームラベルおよび構造化メタデータに対応付けるものです。
一般的なセットアップでは、このようなデフォルトのマッピングで十分です。ただし、次の場合には属性マッピングをカスタマイズする必要があることもあります。
- カスタムコレクターの使用: 保存する必要がない追加の属性を生成するカスタムコレクターがセットアップに含まれている場合は、マッピングをカスタマイズして、その属性が Loki によって削除されるようにすることを検討してください。
- 属性の詳細レベルを調整する場合: デフォルトの属性セットが必要以上に詳細な場合は、必須の属性のみに減らすことができます。そうすることで、過剰なデータ保存を回避し、ロギングプロセスを合理化できます。
3.2.1. OpenShift のカスタム属性マッピング リンクのコピーリンクがクリップボードにコピーされました!
Loki Operator を openshift-logging モードで使用する場合、属性マッピングは OpenShift のデフォルト値に従います。ただし、カスタムマッピングを設定すると、デフォルト値を調整できます。openshift-logging モードでは、必要に応じて、カスタム属性マッピングをすべてのテナントに対してグローバルに設定することも、個々のテナントに対して設定することもできます。カスタムマッピングを定義すると、そのカスタムマッピングが OpenShift のデフォルト値に追加されます。デフォルトのラベルが必要ない場合は、テナント設定で無効にできます。
Loki Operator と Loki の主な違いは、継承の処理にあります。Loki はデフォルトで default_resource_attributes_as_index_labels のみをテナントにコピーします。Loki Operator は openshift-logging モードで各テナントにグローバル設定全体を適用します。
LokiStack 内では、属性マッピング設定は limits 設定を通じて管理されます。次の LokiStack 設定の例を参照してください。
属性をストリームラベルにマッピングするには、グローバルの OTLP 設定とテナントごとの OTLP 設定の両方を使用できます。
ストリームラベルはリソースレベルの属性からのみ導出されます。これは LokiStack のリソース構造に反映されています。次の LokiStack 設定の例を参照してください。
ログエントリーから、リソース、スコープ、またはログタイプの属性を削除できます。
regex: true を設定することで正規表現を使用し、類似した名前を持つ属性に設定を適用できます。
データ量が増加する可能性があるため、ストリームラベルに正規表現を使用することは避けてください。
ストリームラベルとして明示的に設定されていない属性、またはエントリーから削除されていない属性は、デフォルトで構造化メタデータとして保存されます。
3.2.2. OpenShift のデフォルトのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
openshift-logging モードでは特定の属性が必須です。この属性は、OpenShift の機能における役割があるため、設定から削除できません。推奨 ラベルが付いたその他の属性は、パフォーマンスに影響がある場合、削除できます。属性の詳細は、OpenTelemetry データモデル属性 を参照してください。
カスタム属性なしで openshift-logging モードを使用すると、即座に OpenShift ツールとの互換性が確保されます。ストリームラベルとして追加の属性が必要な場合、または一部の属性を破棄する必要がある場合は、カスタム設定を使用します。カスタム設定はデフォルト設定とマージできます。
3.2.3. 推奨属性の削除 リンクのコピーリンクがクリップボードにコピーされました!
openshift-logging モードでデフォルト属性を減らすには、推奨属性を無効にします。
- 1
- 推奨属性を削除するには、
disableRecommendedAttributes: trueを設定します。これにより、デフォルトの属性が必須属性またはストリームラベルに制限されます。注記この設定により、デフォルトのストリームラベルが削除されるため、クエリーのパフォーマンスに悪影響が及ぶ可能性があります。クエリーに不可欠な属性を保持するためには、このオプションをカスタム属性設定と組み合わせる必要があります。
第4章 OpenTelemetry データモデル リンクのコピーリンクがクリップボードにコピーされました!
このドキュメントでは、Red Hat OpenShift Logging における OpenTelemetry サポートのプロトコルとセマンティック規約について概説します。
OpenTelemetry Protocol (OTLP) 出力ログフォワーダーは、テクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
4.1. 転送および取り込みプロトコル リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Logging は、OTLP 仕様 を使用してログを収集し、OpenTelemetry エンドポイントに転送します。OTLP はテレメトリーデータをエンコード、転送、配信します。ログストリームを取り込むための OTLP エンドポイントを提供する Loki ストレージをデプロイすることもできます。このドキュメントでは、さまざまな OpenShift クラスターソースから収集されたログのセマンティック規約を定義します。
4.2. セマンティック規約 リンクのコピーリンクがクリップボードにコピーされました!
このソリューションのログコレクターは、次のログストリームを収集します。
- コンテナーログ
- クラスターノードジャーナルログ
- クラスターノード監査ログ
- Kubernetes および OpenShift API サーバーログ
- OpenShift Virtual Network (OVN) ログ
これらのストリームは、OpenTelemetry セマンティック属性によって定義されたセマンティック規約に従って転送できます。OpenTelemetry のセマンティック規約では、リソースを属性によって識別される、テレメトリーを生成するエンティティーのイミュータブルな表現と定義しています。たとえばコンテナー内で実行されているプロセスには、container_name、cluster_id、pod_name、namespace などの属性が含まれ、場合によっては deployment または app_name も含まれます。これらの属性はリソースオブジェクトの下にグループ化されており、繰り返しを減らし、テレメトリーデータとしてのログ送信を最適化するのに役立ちます。
ログには、リソース属性に加え、計装ライブラリーに固有のスコープ属性と、各ログエントリーに固有のログ属性も含まれる場合があります。これらの属性は、各ログエントリーに関するより詳細な情報を提供し、ストレージ内のログをクエリーする際のフィルタリング機能を強化します。
次のセクションでは、一般的に転送される属性を定義しています。
4.2.1. ログエントリー構造 リンクのコピーリンクがクリップボードにコピーされました!
すべてのログストリームには、次の ログデータ フィールドが含まれます。
適用可能ソース 列は、各フィールドに適用するログソースを示しています。
-
all: このフィールドは、すべてのログに存在します。 -
container: このフィールドは、アプリケーションとインフラストラクチャーの両方の Kubernetes コンテナーログに存在します。 -
audit: このフィールドは、Kubernetes ログ、OpenShift API ログ、OVN ログに存在します。 -
auditd: このフィールドは、ノード監査ログに存在します。 -
journal: このフィールドは、ノードジャーナルログに存在します。
| 名前 | 適用可能ソース | コメント |
|---|---|---|
|
| all | |
|
| all | |
|
| all | |
|
| container、journal | |
|
| all | (オプション) ストリーム固有の属性を転送する場合に存在します |
4.2.2. 属性 リンクのコピーリンクがクリップボードにコピーされました!
次の表に示すとおり、ログエントリーにはソースに基づくリソース属性、スコープ属性、ログ属性のセットが含まれます。
ロケーション 列は属性のタイプを示しています。
-
resource: リソース属性を示します -
scope: スコープ属性を示します -
log: ログ属性を示します
ストレージ 列は、属性がデフォルトの openshift-logging モードを使用して LokiStack に保存されているか、および保存場所を示しています。
stream label:- 特定のラベルに基づく効率的なフィルタリングとクエリーを可能にします。
-
Loki Operator が設定でこの属性を強制する場合は、
requiredとしてラベル付けできます。
structured metadata:- キーと値のペアの詳細なフィルタリングと保存を可能にします。
- JSON 解析を使用することなく、合理化されたクエリーに直接ラベルを使用できるようになります。
OTLP を使用すると、ユーザーは JSON 解析を使用するのではなく、ラベルで直接クエリーをフィルタリングできるため、クエリーの速度と効率が向上します。
| 名前 | Location | 適用可能ソース | ストレージ (LokiStack) | コメント |
|---|---|---|---|---|
|
| resource | all | required stream label |
(非推奨) 互換性属性。 |
|
| resource | all | required stream label |
(非推奨) 互換性属性。 |
|
| resource | container | stream label |
(非推奨) 互換性属性。 |
|
| resource | all | stream label |
(非推奨) 互換性属性。 |
|
| resource | container | required stream label |
(非推奨) 互換性属性。 |
|
| resource | container | stream label |
(非推奨) 互換性属性。 |
|
| resource | all |
(非推奨) 互換性属性。 | |
|
| log | container、journal |
(非推奨) 互換性属性。 | |
|
| resource | all | required stream label | |
|
| resource | all | required stream label | |
|
| resource | all | required stream label | |
|
| resource | all | structured metadata | |
|
| resource | all | stream label | |
|
| resource | container | required stream label | |
|
| resource | container | stream label | |
|
| resource | container | structured metadata | |
|
| resource | container | stream label | |
|
| resource | container | structured metadata | |
|
| resource | container | stream label | Pod 作成者に基づき条件付きで転送されます |
|
| resource | container | stream label | Pod 作成者に基づき条件付きで転送されます |
|
| resource | container | stream label | Pod 作成者に基づき条件付きで転送されます |
|
| resource | container | stream label | Pod 作成者に基づき条件付きで転送されます |
|
| resource | container | structured metadata | Pod 作成者に基づき条件付きで転送されます |
|
| resource | container | stream label | Pod 作成者に基づき条件付きで転送されます |
|
| log | container | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| log | audit | structured metadata | |
|
| resource | journal | structured metadata | |
|
| resource | journal | structured metadata | |
|
| resource | journal | structured metadata | |
|
| resource | journal | structured metadata | |
|
| resource | journal | stream label | |
|
| log | journal | structured metadata | |
|
| log | journal | structured metadata |
互換性属性 としてマークされた属性は、ViaQ データモデルとの最小限の下位互換性をサポートします。これらは非推奨の属性であり、UI 機能の継続を保証するための互換性レイヤーとして機能します。これらの属性は、Logging UI が今後のリリースにおける OpenTelemetry 対応機能を完全にサポートするまで引き続きサポートされます。
Loki は、ストレージへの保存時に属性名を変更します。名前は小文字になり、セット内のすべての文字 (.、/、-) はアンダースコア (_) に置き換えられます。たとえば、k8s.namespace.name は k8s_namespace_name になります。