ロギング

Verrazzanoのログの収集および表示の詳細

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イメージには、次のプラグインが付属しています:

Verrazzano Fluentd Dockerイメージには、2つのローカル・デフォルト・プラグインkubernetes_parserkubernetes_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という索引パターンを作成します。

Kibana