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

関連記事

  1. Azure

    リソースのLockは大事です。ポータルからも設定できます。

    はじめにくどうです。以前、リソースのロックの話を書きました…

  2. Azure

    Azureの公式ドキュメントを更新しよう!だれでも更新できるんですよ。

    はじめにくどうです。Azureのドキュメントはみなさん活用している…

  3. AWS

    お気軽にSlackで死活監視してみる

    はじめにくどうですお気軽にSlackで死活監視。疎通確認が行え…

  4. Azure

    同サブスクリプションでVNET間接続を行う。ポータルでも設定できます。

    はじめにくどうです。VNET間接続、ポータルでもちゃんと設…

  5. Azure

    ACS Engineを利用してAzure上にkubernetesをdeploy!

    はじめにくどうです。今回はAzureでのACS Engin…

  6. Linux

    超メモ:Zabbixの外部チェックでrubyスクリプトを動かす時のポイント

    くどうですrubyをrbenvでインストールした場合、アクセス権の…

  1. 未分類

    iGoogleだーーー!
  2. Azure

    AKS ( Kubernetes ) のPod からログをfluentd を使っ…
  3. Azure

    Azure Backup V2 !これで仮想マシンのバックアップは大丈夫。
  4. Azure

    Azure RemoteAppにWeb Clientがサポートになりました。地味…
  5. AWS

    パソコン同士をVPNで接続する方法(お気に入りツールの紹介)
PAGE TOP