ロギング
Verrazzanoロギング・スタックは、Fluentdコンポーネント、Elasticsearchコンポーネント、およびKibanaコンポーネントで構成されます。
- Fluentd: Kubernetesクラスタからログを収集、処理およびフォーマットするログ・アグリゲータ。
- Elasticsearch: Kubernetesログを格納するためのスケーラブルな検索および分析エンジン。
- Kibana: 収集されたログを問い合せ、視覚化するためのユーザー・インタフェースを提供するビジュアライゼーション・レイヤー。
次の図に示すように、Kubernetesで実行されているコンテナによってstdoutに書き込まれたログは、そのノードで実行されているkubeletサービスによって取得され、/var/log/containers
に書き込まれます。
Fluentdサイドカー
複数のログ・ストリームがあるコンポーネント、またはstdoutにログを出力できないコンポーネントについては、Verrazzanoはログ・ストリームを解析および変換するFluentdサイドカーをデプロイします。結果のログは、サイドカー・コンテナのstdoutに送信され、kubeletサービスによって/var/log/containers
に書き込まれます。
たとえば、WebLogicデプロイメントでは、AdminServer.log
が使用されて変換され、Fluentdサイドカーによってstdoutに書き込まれます。これらのログは、fluentd-stdout-sidecar
という名前のコンテナでkubectl
を使用して表示できます。
$ kubectl logs tododomain-adminserver \
-n todo-list \
-c fluentd-stdout-sidecar
Verrazzano Fluentd Dockerイメージには、次のプラグインが付属しています:
- fluent-plugin-concat
- fluent-plugin-dedot_filter
- fluent-plugin-detect-exceptions
- fluent-plugin-elasticsearch
- fluent-plugin-grok-parser
- fluent-plugin-json-in-json-2
- fluent-plugin-kubernetes_metadata_filter
- fluent-plugin-multi-format-parser
- fluent-plugin-parser-cri
- fluent-plugin-prometheus
- fluent-plugin-record-modifier
- fluent-plugin-rewrite-tag-filter
- fluent-plugin-systemd
Verrazzano Fluentd Dockerイメージには、2つのローカル・デフォルト・プラグインkubernetes_parser
とkubernetes_multiline_parser
もあります。これらのプラグインは、Kubernetes管理ログ・ファイルの解析に役立ちます。
次の例では、これらのプラグインのユースケースを示します:
# ---- fluentd.conf ----
# kubernetes parser
<source>
@type tail
path ./kubelet.log
read_from_head yes
tag kubelet
<parse>
@type multiline_kubernetes
</parse>
</source>
# kubernetes multi-line parser
<source>
@type tail
path ./kubelet.log
read_from_head yes
tag kubelet
<parse>
@type multiline_kubernetes
</parse>
</source>
# ---- EOF ----
詳細は、Fluentd pluginsフォルダを参照してください。
Fluentd DaemonSet
Verrazzanoは、verrazzano-system
ネームスペース内のノードごとに1つのFluentdレプリカを実行するFluentd DaemonSetをデプロイします。各インスタンスは、ノードの/var/log/containers
ディレクトリからログを取得し、それをターゲットのElasticsearch索引に書き込みます。索引名は、レコードに関連付けられているネームスペースに基づき、verrazzano-namespace-<record namespace>
という形式が使用されます。
たとえば、/var/log/containers
に書き込まれたvmi-system-kibana
ログは、Fluentdによって取得され、Elasticsearchに書き込まれます。VMIはverrazzano-system
ネームスペースで実行されるため、使用される索引はverrazzano-namespace-verrazzano-system
という名前になります。
システム・ログとアプリケーション・ログの両方に同じアプローチが使用されます。
Elasticsearch
Verrazzanoは、Fluentdによって処理されるログの格納および検索エンジンとしてElasticsearchデプロイメントを作成します。Fluentdによって書き込まれたレコードは、Elasticsearch REST APIを使用して問い合せることができます。
たとえば、curl
を使用して、すべてのElasticsearch索引を取得できます。まず、verrazzano
ユーザーのパスワードおよびVMI Elasticsearchのホストを取得する必要があります。
$ PASS=$(kubectl get secret \
--namespace verrazzano-system verrazzano \
-o jsonpath={.data.password} | base64 \
--decode; echo)
$ HOST=$(kubectl get ingress \
-n verrazzano-system vmi-system-es-ingest \
-o jsonpath={.spec.rules[0].host})
$ curl -ik \
--user verrazzano:$PASS https://$HOST//_cat/indices
特定の索引のすべてのレコードを表示するには、次のようにします:
$ INDEX=verrazzano-namespace-todo-list
$ curl -ik \
--user verrazzano:$PASS https://$HOST/$INDEX/_doc/_search?q=message:*
Verrazzanoは、インストール・プロファイルをサポートしています。本番プロファイル(prod
)はデフォルト・プロファイルで、3ノードのElasticsearchおよびVerrazzano Monitoring Instance (VMI)用の永続ストレージを提供します。開発プロファイル(dev
)は、単一ノードのElasticsearchを提供し、VMI用の永続ストレージを提供しません。managed-cluster
プロファイルは、ローカル・クラスタにElasticsearchまたはKibanaをインストールしません。すべてのログは、管理クラスタのElasticsearchインスタンスに転送されます。
ログをデフォルトのVMI Elasticsearchではなく外部Elasticsearchに送信する場合は、Verrazzanoカスタム・リソースのFluentdコンポーネント構成にelasticsearchURL
およびelasticsearchSecret
を指定します。
次に、Elasticsearchエンドポイントhttps://external-es.default.172.18.0.231.nip.io
にログを送信するVerrazzanoカスタム・リソースの例を示します。
apiVersion: install.verrazzano.io/v1alpha1
kind: Verrazzano
metadata:
name: default
spec:
components:
fluentd:
elasticsearchURL: https://external-es.default.172.18.0.231.nip.io
elasticsearchSecret: external-es-secret
Kibana
Kibanaは、Elasticsearchクラスタで索引付けされたコンテンツのビジュアライゼーション・ダッシュボードです。Verrazzanoは、Elasticsearchで収集されたログ・データの問合せと視覚化のためのユーザー・インタフェースを提供するKibanaデプロイメントを作成します。
Kibanaコンソールにアクセスするには、Verrazzanoへのアクセスを参照してください。
Kibanaを使用してElasticsearch索引のレコードを表示するには、索引パターンを作成して、目的の索引でレコードをフィルタします。
たとえば、todo-list
ネームスペースにデプロイされたWebLogicアプリケーションのログ・レコードを表示するには、verrazzano-namespace-todo-list
という索引パターンを作成します。