7.8. 外部 Elasticsearch インスタンスへのログの送信
オプションで、内部 OpenShift Container Platform Elasticsearch インスタンスに加えて、またはその代わりに外部 Elasticsearch インスタンスにログを転送できます。外部ログアグリゲーターを OpenShift Container Platform からログデータを受信するように設定する必要があります。
外部 Elasticsearch インスタンスへのログ転送を設定するには、そのインスタンスへの出力および出力を使用するパイプラインで ClusterLogForwarder
カスタムリソース (CR) を作成する必要があります。外部 Elasticsearch 出力では、HTTP(セキュアでない) または HTTPS(セキュアな HTTP) 接続を使用できます。
外部 Elasticsearch インスタンスと内部 Elasticsearch インスタンスの両方にログを転送するには、出力および外部インスタンスへのパイプライン、および default
出力を使用してログを内部インスタンスに転送するパイプラインを作成します。default
出力を作成する必要はありません。default
出力を設定する場合、default
出力は Red Hat OpenShift Logging Operator 用に予約されるため、エラーメッセージが送信されます。
ログを内部 OpenShift Container Platform Elasticsearch インスタンス のみ に転送する必要がある場合は、ClusterLogForwarder
CR を作成する必要はありません。
前提条件
- 指定されたプロトコルまたは形式を使用してロギングデータを受信するように設定されたロギングサーバーが必要です。
手順
ClusterLogForwarder
CR オブジェクトを定義する YAML ファイルを作成または編集します。apiVersion: "logging.openshift.io/v1" kind: ClusterLogForwarder metadata: name: instance 1 namespace: openshift-logging 2 spec: outputs: - name: elasticsearch-insecure 3 type: "elasticsearch" 4 url: http://elasticsearch.insecure.com:9200 5 - name: elasticsearch-secure type: "elasticsearch" url: https://elasticsearch.secure.com:9200 6 secret: name: es-secret 7 pipelines: - name: application-logs 8 inputRefs: 9 - application - audit outputRefs: - elasticsearch-secure 10 - default 11 parse: json 12 labels: myLabel: "myValue" 13 - name: infrastructure-audit-logs 14 inputRefs: - infrastructure outputRefs: - elasticsearch-insecure labels: logs: "audit-infra"
- 1
ClusterLogForwarder
CR の名前はinstance
である必要があります。- 2
ClusterLogForwarder
CR の namespace はopenshift-logging
である必要があります。- 3
- 出力の名前を指定します。
- 4
elasticsearch
タイプを指定します。- 5
- 外部 Elasticsearch インスタンスの URL およびポートを有効な絶対 URL として指定します。
http
(セキュアでない) プロトコルまたはhttps
(セキュアな HTTP) プロトコルを使用できます。CIDR アノテーションを使用するクラスター全体のプロキシーが有効になっている場合、出力は IP アドレスではなくサーバー名または FQDN である必要があります。 - 6
- セキュアな接続では、
シークレット
を指定して、認証するhttps
またはhttp
URL を指定できます。 - 7
https
接頭辞の場合には、TLS 通信のエンドポイントに必要なシークレットの名前を指定します。シークレットはopenshift-logging
プロジェクトに存在し、tls.crt、tls.key および ca-bundle.crt のキーが含まれる必要があります。これらは、それぞれが表す証明書を参照します。それ以外の場合は、http
およびhttps
接頭辞の場合は、ユーザー名とパスワードを含むシークレットを指定できます。詳細は、Example: Setting secret that contains a username and password.を参照してください。- 8
- オプション: パイプラインの名前を指定します。
- 9
- パイプラインを使用して転送するログタイプ (
application
、infrastructure
またはaudit
) を指定します。 - 10
- このパイプラインでログを転送する時に使用する出力の名前を指定します。
- 11
- オプション: ログを内部 Elasticsearch インスタンスに送信するために
default
出力を指定します。 - 12
- オプション: 構造化された JSON ログエントリーを
structured
フィールドの JSON オブジェクトとして転送するかどうかを指定します。ログエントリーに有効な構造化された JSON が含まれる必要があります。そうでない場合は、OpenShift Logging は構造化
フィールドを削除し、代わりにログエントリーをデフォルトのインデックスapp-00000x
に送信します。 - 13
- オプション: 文字列。ログに追加する 1 つまたは複数のラベル。
- 14
- オプション: サポートされるタイプの他の外部ログアグリゲーターにログを転送するように複数の出力を設定します。
- パイプラインを説明する名前。
-
inputRefs
は、そのパイプラインを使用して転送するログタイプです (application
、infrastructure
、またはaudit
)。 -
outputRefs
は使用する出力の名前です。 - オプション: 文字列。ログに追加する 1 つまたは複数のラベル。
CR オブジェクトを作成します。
$ oc create -f <file-name>.yaml
例: ユーザー名とパスワードを含むシークレットの設定
ユーザー名とパスワードを含むシークレットを使用して、外部 Elasticsearch インスタンスへのセキュアな接続を認証できます。
たとえば、サードパーティーが Elasticsearch インスタンスを操作するため、相互 TLS (mTLS) キーを使用できない場合に、HTTP または HTTPS を使用してユーザー名とパスワードを含むシークレットを設定できます。
以下の例のような
Secret
YAML ファイルを作成します。username
およびpassword
フィールドに base64 でエンコードされた値を使用します。シークレットタイプはデフォルトで不透明です。apiVersion: v1 kind: Secret metadata: name: openshift-test-secret data: username: dGVzdHVzZXJuYW1lCg== password: dGVzdHBhc3N3b3JkCg==
シークレットを作成します。
$ oc create secret -n openshift-logging openshift-test-secret.yaml
ClusterLogForwarder
CR にシークレットの名前を指定します。kind: ClusterLogForwarder metadata: name: instance namespace: openshift-logging spec: outputs: - name: elasticsearch type: "elasticsearch" url: https://elasticsearch.secure.com:9200 secret: name: openshift-test-secret
注記url
フィールドの値では、接頭辞はhttp
またはhttps
になります。CR オブジェクトを作成します。
$ oc create -f <file-name>.yaml