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.7.11. ログの Amazon CloudWatch への転送
Amazon Web Services (AWS) がホストするモニターリングおよびログストレージサービスである Amazon CloudWatch にログを転送できます。デフォルトの OpenShift Logging が管理する Elasticsearch ログストアに加えて、またはこのログストアの代わりに 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 のロググループには影響しません。