This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.11.12. ログの Amazon CloudWatch への転送
Amazon Web Services (AWS) がホストするモニタリングおよびログストレージサービスである Amazon CloudWatch にログを転送できます。デフォルトのログストアに加えて、またはログストアの代わりに、CloudWatch にログを転送できます。
CloudWatch へのログ転送を設定するには、CloudWatch の出力および出力を使用するパイプラインで ClusterLogForwarder カスタムリソース (CR) を作成する必要があります。
手順
aws_access_key_idおよびaws_secret_access_keyフィールドを使用するSecretYAML ファイルを作成し、base64 でエンコードされた AWS 認証情報を指定します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow シークレットを作成します。以下に例を示します。
oc apply -f cw-secret.yaml
$ oc apply -f cw-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ClusterLogForwarderCR オブジェクトを定義する YAML ファイルを作成または編集します。このファイルに、シークレットの名前を指定します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
ClusterLogForwarderCR の名前はinstanceである必要があります。- 2
ClusterLogForwarderCR の namespace はopenshift-loggingである必要があります。- 3
- 出力の名前を指定します。
- 4
cloudwatchタイプを指定します。- 5
- オプション: ログをグループ化する方法を指定します。
-
logTypeは、ログタイプごとにロググループを作成します。 -
namespaceNameは、アプリケーションの namespace ごとにロググループを作成します。また、インフラストラクチャーおよび監査ログ用の個別のロググループも作成します。 -
namespaceUUIDは、アプリケーション namespace UUID ごとに新しいロググループを作成します。また、インフラストラクチャーおよび監査ログ用の個別のロググループも作成します。
-
- 6
- オプション: ロググループの名前に含まれるデフォルトの
infrastructureName接頭辞を置き換える文字列を指定します。 - 7
- AWS リージョンを指定します。
- 8
- AWS 認証情報が含まれるシークレットの名前を指定します。
- 9
- オプション: パイプラインの名前を指定します。
- 10
- パイプラインを使用して転送するログタイプ (
application、infrastructureまたはaudit) を指定します。 - 11
- このパイプラインでログを転送する時に使用する出力の名前を指定します。
CR オブジェクトを作成します。
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
例: Amazon CloudWatch での ClusterLogForwarder の使用
ここでは、ClusterLogForwarder カスタムリソース (CR) のサンプルと、Amazon CloudWatch に出力するログデータが表示されます。
mycluster という名前の OpenShift Container Platform クラスターを実行しているとします。以下のコマンドは、クラスターの infrastructureName を返します。これは、後で aws コマンドの作成に使用します。
oc get Infrastructure/cluster -ojson | jq .status.infrastructureName
$ oc get Infrastructure/cluster -ojson | jq .status.infrastructureName
"mycluster-7977k"
この例のログデータを生成するには、app という名前の namespace で busybox pod を実行します。busybox pod は、3 秒ごとに stdout にメッセージを書き込みます。
busybox pod が実行される app namespace の UUID を検索できます。
oc get ns/app -ojson | jq .metadata.uid
$ oc get ns/app -ojson | jq .metadata.uid
"794e1e1a-b9f5-4958-a190-e76a9b53d7bf"
ClusterLogForwarder カスタムリソース (CR) で、インフラストラクチャー、監査、および アプリケーションログ タイプを all-logs パイプラインへの入力として設定します。また、このパイプラインを cw 出力に接続し、us-east-2 リージョンの CloudWatch インスタンスに転送します。
CloudWatch の各リージョンには、3 つのレベルのオブジェクトが含まれます。
ロググループ
ログストリーム
- ログイベント
ClusterLogForwarding CR の groupBy: logType の場合に、inputRefs にある 3 つのログタイプで Amazon Cloudwatch に 3 つのロググループを生成します。
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.application"
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
各ロググループにはログストリームが含まれます。
aws --output json logs describe-log-streams --log-group-name mycluster-7977k.application | jq .logStreams[].logStreamName
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.application | jq .logStreams[].logStreamName
"kubernetes.var.log.containers.busybox_app_busybox-da085893053e20beddd6747acdbaf98e77c37718f85a7f6a4facf09ca195ad76.log"
aws --output json logs describe-log-streams --log-group-name mycluster-7977k.audit | jq .logStreams[].logStreamName
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.audit | jq .logStreams[].logStreamName
"ip-10-0-131-228.us-east-2.compute.internal.k8s-audit.log"
"ip-10-0-131-228.us-east-2.compute.internal.linux-audit.log"
"ip-10-0-131-228.us-east-2.compute.internal.openshift-audit.log"
...
aws --output json logs describe-log-streams --log-group-name mycluster-7977k.infrastructure | jq .logStreams[].logStreamName
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.infrastructure | jq .logStreams[].logStreamName
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-69f9fd9b58-zqzw5_openshift-oauth-apiserver_oauth-apiserver-453c5c4ee026fe20a6139ba6b1cdd1bed25989c905bf5ac5ca211b7cbb5c3d7b.log"
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-797774f7c5-lftrx_openshift-apiserver_openshift-apiserver-ce51532df7d4e4d5f21c4f4be05f6575b93196336be0027067fd7d93d70f66a4.log"
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-797774f7c5-lftrx_openshift-apiserver_openshift-apiserver-check-endpoints-82a9096b5931b5c3b1d6dc4b66113252da4a6472c9fff48623baee761911a9ef.log"
...
各ログストリームにはログイベントが含まれます。busybox Pod からログイベントを表示するには、application ロググループからログストリームを指定します。
例: ロググループ名の接頭辞のカスタマイズ
ロググループ名では、デフォルトの infrastructureName 接頭辞 mycluster-7977k は demo-group-prefix のように任意の文字列に置き換えることができます。この変更を加えるには、ClusterLogForwarding CR の groupPrefix フィールドを更新します。
cloudwatch:
groupBy: logType
groupPrefix: demo-group-prefix
region: us-east-2
cloudwatch:
groupBy: logType
groupPrefix: demo-group-prefix
region: us-east-2
groupPrefix の値は、デフォルトの infrastructureName 接頭辞を置き換えます。
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"demo-group-prefix.application"
"demo-group-prefix.audit"
"demo-group-prefix.infrastructure"
例: アプリケーションの namespace 名をもとにロググループの命名
クラスター内のアプリケーション namespace ごとに、名前がアプリケーション namespace 名をもとにする CloudWatch にロググループを作成できます。
アプリケーションの namespace オブジェクトを削除して、同じ名前の新しいオブジェクトを作成する場合は、CloudWatch は以前と同じロググループを使用し続けます。
相互に名前が同じアプリケーション namespace オブジェクトを引き継ぐ予定の場合は、この例で説明されている方法を使用します。それ以外で、生成されるログメッセージを相互に区別する必要がある場合は、代わりに Naming log groups for application namespace UUIDs のセクションを参照してください。
アプリケーション namespace 名を基にした名前を指定してアプリケーションロググループを作成するには、ClusterLogForwarder CR で groupBy フィールドの値を namespaceName に設定します。
cloudwatch:
groupBy: namespaceName
region: us-east-2
cloudwatch:
groupBy: namespaceName
region: us-east-2
groupBy を namespaceName に設定すると、アプリケーションロググループのみが影響を受けます。これは、audit および infrastructure のロググループには影響しません。
Amazon Cloudwatch では、namespace 名が各ロググループ名の最後に表示されます。アプリケーション namespace (app) が 1 つであるため、以下の出力は mycluster-7977k.application ではなく、新しい mycluster-7977k.app ロググループを示しています。
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.app"
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
この例のクラスターに複数のアプリケーション namespace が含まれる場合は、出力には namespace ごとに複数のロググループが表示されます。
groupBy フィールドは、アプリケーションロググループだけに影響します。これは、audit および infrastructure のロググループには影響しません。
例: アプリケーション namespace UUID をもとにロググループの命名
クラスター内のアプリケーション namespace ごとに、名前がアプリケーション namespace の UUID をもとにする CloudWatch にロググループを作成できます。
アプリケーションの namespace オブジェクトを削除して新規のロググループを作成する場合は、CloudWatch で新しいロググループを作成します。
相互に名前が異なるアプリケーション namespace オブジェクトを引き継ぐ予定の場合は、この例で説明されている方法を使用します。それ以外の場合は、前述の例: Naming log groups for application namespace name のセクションを参照してください。
アプリケーション namespace UUID をもとにログエントリーに名前を付けるには、ClusterLogForwarder CR で groupBy フィールドの値を namespaceUUID に設定します。
cloudwatch:
groupBy: namespaceUUID
region: us-east-2
cloudwatch:
groupBy: namespaceUUID
region: us-east-2
Amazon Cloudwatch では、namespace UUID が各ロググループ名の最後に表示されます。アプリケーション namespace (app) が 1 つであるため、以下の出力は mycluster-7977k.application ではなく、新しい mycluster-7977k.794e1e1a-b9f5-4958-a190-e76a9b53d7bf ロググループを示しています。
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.794e1e1a-b9f5-4958-a190-e76a9b53d7bf" // uid of the "app" namespace
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
groupBy フィールドは、アプリケーションロググループだけに影響します。これは、audit および infrastructure のロググループには影響しません。
11.12.1. STS 対応クラスターから Amazon CloudWatch へのログ転送 リンクのコピーリンクがクリップボードにコピーされました!
AWS Security Token Service (STS) が有効になっているクラスターの場合に、AWS サービスアカウントを手動で作成するか、Cloud Credential Operator (CCO) ユーティリティー ccoctl を使用してクレデンシャルのリクエストを作成できます。
この機能は、vector コレクターではサポートされていません。
AWS 認証情報リクエストの作成
以下のテンプレートを使用して、
CredentialsRequestカスタムリソース YAML を作成します。CloudWatch クレデンシャルリクエストのテンプレート
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ccoctlコマンドを使用して、CredentialsRequestCR を使用して AWS のロールを作成します。CredentialsRequestオブジェクトでは、このccoctlコマンドを使用すると、特定の OIDC アイデンティティープロバイダーに紐付けされたトラストポリシーと、CloudWatch リソースでの操作実行パーミッションを付与するパーミッションポリシーを指定して IAM ロールを作成します。このコマンドは、/<path_to_ccoctl_output_dir>/manifests/openshift-logging-<your_role_name>-credentials.yamlに YAML 設定ファイルも作成します。このシークレットファイルには、AWS IAM ID プロバイダーでの認証中に使用されるrole_arnキー/値が含まれています。ccoctl aws create-iam-roles \ --name=<name> \ --region=<aws_region> \ --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests \ --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
ccoctl aws create-iam-roles \ --name=<name> \ --region=<aws_region> \ --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests \ --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <name> は、クラウドリソースのタグ付けに使用される名前であり、STS クラスターのインストール中に使用される名前と一致する必要があります。
作成したシークレットを適用します。
oc apply -f output/manifests/openshift-logging-<your_role_name>-credentials.yaml
oc apply -f output/manifests/openshift-logging-<your_role_name>-credentials.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ClusterLogForwarderカスタムリソースを作成または編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
ClusterLogForwarderCR の名前はinstanceである必要があります。- 2
ClusterLogForwarderCR の namespace はopenshift-loggingである必要があります。- 3
- 出力の名前を指定します。
- 4
cloudwatchタイプを指定します。- 5
- オプション: ログをグループ化する方法を指定します。
-
logTypeは、ログタイプごとにロググループを作成します。 -
namespaceNameは、アプリケーションの namespace ごとにロググループを作成します。インフラストラクチャーおよび監査ログは影響を受けず、logTypeによってグループ化されたままになります。 -
namespaceUUIDは、アプリケーション namespace UUID ごとに新しいロググループを作成します。また、インフラストラクチャーおよび監査ログ用の個別のロググループも作成します。
-
- 6
- オプション: ロググループの名前に含まれるデフォルトの
infrastructureName接頭辞を置き換える文字列を指定します。 - 7
- AWS リージョンを指定します。
- 8
- AWS 認証情報が含まれるシークレットの名前を指定します。
- 9
- オプション: パイプラインの名前を指定します。
- 10
- パイプラインを使用して転送するログタイプ (
application、infrastructureまたはaudit) を指定します。 - 11
- このパイプラインでログを転送する時に使用する出力の名前を指定します。
11.12.1.1. 既存の AWS ロールを使用した AWS CloudWatch のシークレット作成 リンクのコピーリンクがクリップボードにコピーされました!
AWS の既存のロールがある場合は、oc create secret --from-literal コマンドを使用して、STS で AWS のシークレットを作成できます。
oc create secret generic cw-sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/my-role_with-permissions
oc create secret generic cw-sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/my-role_with-permissions
シークレットの例