[デモ] ロギング設定
デモの概要
このモジュールでは、インストラクターがROSAクラスターのロギング設定方法をご紹介します。
本演習を自習している時以外、ROSAクラスターのロギング設定を実行しないで下さい。 |
ROSAのロギングについては、OpenShift LoggingのLokiを利用したロギングか、 Amazon CloudWatchをベースとするログ転送ソリューションの利用を推奨しています。 ROSAでのOpenShift Loggingによるロギング設定の概要は次のとおりです。
-
Lokiのログ保存に利用するAmazon S3を、AWS STSで利用するためのIAMロールを作成します。
-
Amazon S3の汎用バケットを作成します。
-
ROSAのOpenShiftコンソールから、OpenShift Logging OperatorやLoki Operatorなどを インストールして、ロギングとログ転送用のインスタンスを作成します。 このとき、上記手順で作成したIAMロールとAmazon S3のバケットを利用するように設定します。
これらを順番に見ていきましょう。
Amazon S3をAWS STSで利用するためのIAMロール作成
AWSのコンソールまたはAWS CLIで、Amazon S3をAWS STSで利用するためのIAMロールを作成します。 IAMロール作成手順は 「カスタム信頼ポリシーを使用してロールを作成する」をご参照下さい。
例として、下記画像のような「AmazonS3FullAccess」ポリシーを割り当てたIAMロールを作成します。


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<AWS_ACCOUNT_ID>:oidc-provider/<AWS_IAM_ID_PROVIDER_ID>"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"<AWS_IAM_ID_PROVIDER_ID>:sub": "system:serviceaccount:openshift-logging:logging-loki"
}
}
}
]
}
上記のカスタム信頼ポリシーは、特定の
AWS IAM IDプロバイダーに
紐づけられたOpenShiftやROSAクラスター上の openshift-logging
プロジェクトにある logging-loki
サービスアカウントに対して、IAMポリシーで指定されたAWSリソースへの特定の操作を許可するためのものとなります。
後述するLoki OperatorでLokiStackインスタンスを作成する際に、LokiStackインスタンスの名前と同じ名前のサービスアカウントがOpenShiftクラスターで自動作成されるようになっており、Amazon S3の利用権限をこのサービスアカウントに付与する必要があります。 |
ROSAの場合は rosa list oidc-provider
コマンドで、ROSAクラスターに紐づいているAWS IAM IDプロバイダーが確認できるようになっています。下記のコマンドの出力結果で表示されている oidc.op1.openshiftapps.com/289dfjXXXXXX
がAWS IAM IDプロバイダーのIDとなります。
$ rosa list oidc-provider
I: Fetching OIDC providers
OIDC PROVIDER ARN Cluster ID In Use
arn:aws:iam::<AWS_ACCOUNT_ID>:oidc-provider/oidc.op1.openshiftapps.com/289dfjXXXXXX 2el3cammYYYYYYY Yes
ここで作成したIAMロールのARNをメモしておきます。
Amazon S3のバケット作成
AWSのコンソールまたはAWS CLIで、 Amazon S3の汎用バケットを作成します。
AWSのコンソールから汎用バケットを作成する場合、バケット名を任意の名前で指定する以外は、全てデフォルトのパラメーターのままでバケットを作成します。なお、バケットのリージョンはどこでも構いません。ROSA HCPクラスターがあるリージョンとは別のリージョンにバケットを作成することもできます。
ここで作成した汎用バケットの名前とリージョンをメモしておきます。
OpenShift Loggingに必要となるOperatorのインストール
OpenShift Loggingを利用するためのOperatorを、管理者アカウント( cluster-admin
ユーザーなど)で順次インストールしていきます。
OperatorHubから「Red Hat OpenShift Logging Operator」をインストールします。 インストールには、全てデフォルトのパラメータを利用します。 このOperatorは、vectorでのLokiやCloudWatchへのログ転送設定に利用します。


OperatorHubから「Cluster Observability Operator」をインストールします。 インストールには、全てデフォルトのパラメータを利用します。 このOperatorは、OpenShiftコンソールでのログ集約の表示設定に利用します。


OperatorHubから「Loki Operator」をインストールします。 「Community Loki Operator」ではなく、Red Hat提供の「Loki Operator」を選択してください。 インストール時に「ロール ARN」で、前述の手順で作成したカスタム信頼ポリシー付きのIAMロールのARNを指定します。「更新の承認」はデフォルトは「手動」となっていますが、Operatorの自動更新を有効化したい場合は「自動」を選択してください。 その他のパラメータは、全てデフォルト値を利用します。 このOperatorは、Lokiのインスタンス作成に利用します。


ロギングの設定
Lokiを利用したクラスターロギングを設定します。
最初にLokiが利用するためのS3バケットの情報(バケット名とリージョンID)を保存したシークレットリソースを作成します。OpenShiftコンソール右上にある「+」アイコンをクリックして「YAMLのインポート」を選択し、以下を入力して「作成」をクリックします。以下の例だと、バケット名が rosa-hcp-test-bucket-000001
で、リージョンIDが us-east-1
を指定しています。
apiVersion: v1
kind: Secret
metadata:
name: logging-loki-s3
namespace: openshift-logging
stringData:
bucketnames: rosa-hcp-test-bucket-000001
region: us-east-1

openshift-logging
プロジェクトに LokiStack
カスタムリソースを作成して、Loki実行に必要となるアプリケーション群を作成します。先ほどと同様に、OpenShiftコンソール右上にある「+」アイコンをクリックしてYAMLをインポートします。ここで指定するシークレット名は、先ほど作成した logging-loki-s3
となります。また、1x.demo
サイズを指定することで、
LokiStackインスタンスのサイズを指定しています。
1x.demo はデモ用途なので、本番環境には利用しないでください。
|
apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
name: logging-loki
namespace: openshift-logging
spec:
managementState: Managed
size: 1x.demo
storage:
schemas:
- effectiveDate: '2024-10-01'
version: v13
secret:
name: logging-loki-s3
type: s3
storageClassName: gp3-csi
tenants:
mode: openshift-logging

UIPlugin
カスタムリソースを作成して、OpenShiftコンソールでのログ集約の表示を有効化します。
ここで指定している logging-loki
は、前述の手順で作成したLokiStackインスタンスの名前です。
apiVersion: observability.openshift.io/v1alpha1
kind: UIPlugin
metadata:
name: logging
spec:
type: Logging
logging:
lokiStack:
name: logging-loki

数分待ってOpenShiftコンソールを更新すると、左サイドメニューに「Logs」が表示されます。 今の状態だと、vectorでのログ転送が有効化されていないため、まだ何も表示されません。

ログ転送の設定
次のコマンドでログ収集用のサービスアカウント collector
を作成し、LokiStackカスタムリソースへのデータ書き込み許可と、アプリケーション/インフラストラクチャー/監査ログ収集を許可する権限を付与します。
oc create sa collector -n openshift-logging
oc adm policy add-cluster-role-to-user logging-collector-logs-writer -z collector -n openshift-logging
oc adm policy add-cluster-role-to-user collect-application-logs -z collector -n openshift-logging
oc adm policy add-cluster-role-to-user collect-audit-logs -z collector -n openshift-logging
oc adm policy add-cluster-role-to-user collect-infrastructure-logs -z collector -n openshift-logging
この5つのコマンドは、管理者アカウント( cluster-admin
ユーザーなど)で実行します。前の演習で紹介したOpenShiftのWeb Terminalを利用することができます。

最後にvectorによるLokiStackインスタンスへのログ転送を設定します。以下のYAMLをOpenShiftコンソールからインポートします。inputRefs
の箇所で、アプリケーション/インフラストラクチャー/監査の3種類のログを転送するように指定しています。また、前述の手順で作成した下記を指定しています。
-
サービスアカウント:
collector
-
LokiStackインスタンス:
logging-loki
apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
name: collector
namespace: openshift-logging
spec:
serviceAccount:
name: collector
outputs:
- name: default-lokistack
type: lokiStack
lokiStack:
authentication:
token:
from: serviceAccount
target:
name: logging-loki
namespace: openshift-logging
tls:
ca:
key: service-ca.crt
configMapName: openshift-service-ca.crt
pipelines:
- name: default-logstore
inputRefs:
- application
- infrastructure
- audit
outputRefs:
- default-lokistack

どの種類のログを転送するかについては、前述したYAMLの inputRefs:
の項目で指定できます。
-
application
: アプリケーションログの収集。利用者が作成したプロジェクトにデプロイされるアプリケーションのログ(stdoutとstderrに出力されるログ)を収集します。後述のインフラストラクチャー関連のログは除きます。 -
infrastructure
: インフラストラクチャーログの収集。ROSAクラスター作成時にデフォルトで作成されるopenshift-*
,kube-*
などのプロジェクトにある、インフラストラクチャー関連のログを収集します。 -
audit
: セキュリティ監査に関連するログの収集。ワーカーノードのノード監査システム(auditd)で 生成される監査ログ(/var/log/audit/audit.log)を収集します。コントロールプレーンの監査ログは、OpenShift Logging Operatorとは別の仕組みで外部転送されており、 Red HatのSREチームによって1年間保存されます。 そのため、ROSAの利用者は監査ログを保存しなくても、 Red Hatのサポートケース経由で監査ログを取得することもできます。
このログ転送設定によって、自動的に collector-*
という名前のPod(内部ではvectorが実行)が、「openshift-logging」プロジェクトに作成されます。
この collector-*
Podは、全てのワーカーノードで自動的に実行されて、
ワーカーノード上のログをLokiStackインスタンスに転送します。

しばらく時間が経つと、LokiStackインスタンスが指定しているAmazon S3のバケットにログが保存されていることを、AWSマネジメントコンソールから確認できます。Lokiでのログは自動圧縮されて、S3のバケットに保存されます。
