Azure

AKS ( Kubernetes ) のPod からログをfluentd を使って収集してelasticsearch + kibanaで解析する方法

はじめに

くどうです。

今回はKubernetesでのログの収集方法です。
その中でも、各Nodeに配置されたPodからログを収集す方法になります。
本検証自体はAKSで行っていますが、ACS、ACS-Engineなどで構築されたKubernetes環境でも同様のことが可能です。本稿でもAKS自体には触れておらず、Azureに関係なく利用可能です。

Podから出力されるログとは、kubectl log {Pod名} で出力されるログになります。
例えば、nginxをpodで配置した場合は、アクセスログが出力されたりします。

前提条件として、ElasticsearchおよびKubernetes環境はすでに整っていることが前提となります。
また、本内容はAzureで構築されたKubernetesを利用しています。

こちらも参考を
AKS ( Kubernetes ) のPod からログをfluentd を使って収集してelasticsearch + kibanaで解析する方法(k8s 1.8以上RBAC対応版)
http://level69.net/archives/25458

elasticsearchの構築方法については下記に記載しています。
elasticsearch + kibana を5分ぐらいで構築する。

構成

簡単に構成を説明します。
構成は単純です。Kubernetes環境と、同ネットワーク内にelasticsearch + kibana が構成されています。
事前に環境が正しく動作していることが前提となります。

Podからログを収集するため各Nodeへfluentdを配置します。DaemonSetで各Nodeへ配置します。
次に、fluentdにより収集されたログはelasticsearchへと送られます。
そして最後に、ユーザーはkibanaを通じて解析を行います。

準備

配置するfluentdは公式に用意されているものを利用し配置します。
定義ファイルは下記です。
fluentd-daemonset-elasticsearch.yaml

利用するためcloneして自分の環境へ持ってきましょう。

次に展開する前に設定を変更します。
設定を変更しているenv箇所のみを記載します。

fluentd-daemonset-elasticsearch.yaml

FLUENT_ELASTICSEARCH_HOST: elasticsearchのホスト名もしくはIPアドレスを指定
FLUENT_ELASTICSEARCH_PORT: elasticsearchのポート番号で通常は変更しません
FLUENT_ELASTICSEARCH_SCHEME: elasticsearchの利用するプロトコルで通常は変更しません
X-Pack Authentication: X-Packによる認証を行っていないため今回はコメントアウトしています

注意:indexの名前が変更できない?

展開

定義を保存しkubectlコマンドで DaemonSetを展開します。

fluentdが展開されていることが確認できます。
本環境ではNodeは3台です。

以上で、fluentdの配置は完了です。

確認

次にログが正しく転送されるか確認を行います。
nginxを例に進ます。

nginx.yaml

上記の定義を展開することで下記のような構成が出来上がります。

LoadBalancerを通してnginxにアクセスしログがfluentdからelasticsearchへ送られているか確認します。

最初に、Podでログが出力されているが確認します。
下記はCURLによる簡単なアクセスログになります。

kibana自体の操作方法は割愛します。

logとkubernetes.pod_nameのフィールドを表示さえるログが上記と同じこと、各Podから収集できていることが確認できます。

以上でkubernetesのPodからfluentdを利用してelasticsearch + kibanaの環境ができました。
これで、解析する準備が整いました。

削除

DaeamonSetの削除

まとめ

kubernetesでログの収集し解析する機会は増えると思います。今回はその方法のひとつとしてfluentd+elasticsearch+kibanaという従来よくある方法を紹介しました。
これ以外にも収集方法はあるかと思いますが、使い慣れた方法の一つとしてノウハウがたまっている分、大きく解析方法を変えなくて済むという利点が恩恵を受けれると思います。

参考:
https://kubernetes.io/docs/tasks/debug-application-cluster/logging-elasticsearch-kibana/
https://docs.fluentd.org/v0.12/articles/kubernetes-fluentd

Related post

  1. Azure

    Azure Cloud Shell にインストールされているものを確認。vimも使えます。

    Azure PortalでCloud Shellが登場し、ブラウザのみ…

  2. Azure

    Runbook ギャラリーの Start Azure V2 VMs / Stop Azure V2 …

    メモ:Start Azure V2 VMs / Stop Azure …

  3. Azure

    Active DirectoryをASMからARMに移行する方法を考える。

    はじめにくどうです。何かと仮想マシンでActive Dir…

  4. Azure

    他社さんの、社内勉強会に行ってきた。

    はじめにくどうです。9/8にNTTPCコミュニケーションズさんの…

  5. Azure

    Power BIを使って仮想マシンのパフォーマンスログを確認してみる。

    はじめにくどうです仮想マシンの過去のパフォーマンスログをグ…

  6. AWS

    Azure ADとAWS Directory Serviceで同期してみよう。

    はじめにどうも、くどうです。今回は、Microsoft Azure…

  1. AWS

    AzureとAWSにおけるIaaS可用性の違いを少しだけおさらい。
  2. 未分類

    XREAで構築したEC-CUBEでメールが送れない
  3. Windows

    PowerShellの実行ログを取得する方法について。最低限やっておいた方が良い…
  4. AWS

    Azureの機能を一覧にしてみました。
  5. Azure

    Azure Monitor とBacklogを連携してアラートを課題登録する。
PAGE TOP