【IBM Cloud k8s検証メモ】Kibanaによるアプリのログ分析


k8sクラスタに展開されるコンテナのアプリを運用するには、個々のアプリのログを一箇所に集めて、横断的にログを監視したり、分析できる機能が必要です。 Bluemix k8sでは、コンテナ上のアプリが、stdout や stderr へ出力したメッセージを Elasticsearch へ転送して蓄積する機能、および Kibana　で検索する機能が提供されています。(1)　今回は、ログの横断的な蓄積、ログ分析、ログに含まれるキーワード監視について検証します。

![スクリーンショット 2017-09-17 8.04.41.png](https://qiita-image-store.s3.amazonaws.com/0/42829/35fdb4d8-51c6-0955-4eb5-60f25198ca89.png "スクリーンショット 2017-09-17 8.04.41.png")

このアプリケーション・ログ収集のための機能は、k8sクラスタを起動すると、自動的に Elasticsearch へログの転送と蓄積を開始し、デフォルトの無料プランでは、1日あたり500MB、3日間を検索することができます。 ログの容量や期間を超えた場合は、古いものから参照できなくなります。（ロールオーバー）


## Log Analysis サービス

Elasticsearch に蓄積されたログを Kibana で参照したり、視覚化するためには、Bluemix カタログから Log Analysis サービスを作成する必要があります。 

Bluemix カタログから、次のアイコンを探してクリックします。

![スクリーンショット 2017-09-17 8.23.34.png](https://qiita-image-store.s3.amazonaws.com/0/42829/6b0a51ad-67a9-64a7-1eaa-0322ed7f8618.png "スクリーンショット 2017-09-17 8.23.34.png")

ウェブ画面の案内に従って、プランを選択して、作成を確定することで、Kibanaの画面へアクセスできる様になります。

![スクリーンショット 2017-09-17 8.39.54.png](https://qiita-image-store.s3.amazonaws.com/0/42829/f1320e7f-8df0-8908-d6b5-32f0df1a1b40.png "スクリーンショット 2017-09-17 8.39.54.png")




考慮点として、Bluemix k8sクラスタ は、地域でアカウント横断的に、ダッシュボードに表示されますが、この Log Analysis サービスは、Bluemix の Cloud Foundry のサービスとして提供されるため 組織とスペースの下に置かれます。 このため、IBM Cloud Log Analysis 概説チュートリアル (2) には、https://logging.ng.bluemix.net/ などの Kibana のウェブページに直接アクセスする様に記載されていますが、このケースでは、組織とスペースでフィルターされているため、変更しなければ参照できないケースがあります。 既に、Bluemix Cloud Foundry アプリとして、ログ分析サービスを利用していれば、注意が必要です。



![スクリーンショット 2017-09-17 8.51.01.png](https://qiita-image-store.s3.amazonaws.com/0/42829/a92699bb-c814-fe7a-bf1b-13ffaead3cf6.png "スクリーンショット 2017-09-17 8.51.01.png")

## k8sクラスタとアプリのデプロイ

何かk8sクラスタ環境にデプロイされたアプリケーションが必要なので、[Bluemix-k8s検証メモ】アプリをHTTPSとドメイン名でアクセスする](http://qiita.com/MahoTakara/items/34565e3c4095b6701a6a)を利用しました。 このアプリでは、curl などでアクセスすると、コンテナの標準出力へ、次の様なメッセージを出しています。 そこで、それぞれのPOD（コンテナ）で標準出力されているメッセージの数をカウントすることで、それぞれのPODへの振り分け状況をKibanaで視覚化して見たいと思います。

~~~
$ kubectl logs -f express-app-943621608-202zb
GET / 200 1.218 ms - 262
GET / 200 16.771 ms - 262
GET / 200 3.331 ms - 262
GET / 200 1.588 ms - 262
GET / 200 1.568 ms - 262
GET / 200 3.360 ms - 262
GET / 200 1.438 ms - 262
GET / 200 1.943 ms - 262
GET / 200 1.470 ms - 262
~~~



## アプリのログ分析

Kibanaの設定は、[ダッシュボードを使用した Kibana でのログの分析](https://console.bluemix.net/docs/services/CloudLogAnalysis/kibana/analize_logs_dashboard.html#analize_logs_dashboard)が参考になります。 文字ばかりで、少し分かり難いと感じれば、[Qiita Kibanaで簡単! サクサク ビジュアライズしよう！](http://qiita.com/kitfactory/items/9c2f990d87e33fab828a) がオススメです。

Kibana 初心者の僕でも、次の様なダッシュボード画面を作ることができました。

![スクリーンショット 2017-09-19 10.13.07.png](https://qiita-image-store.s3.amazonaws.com/0/42829/0faf5733-2b84-e201-4179-6c0bb7a87b64.png "スクリーンショット 2017-09-19 10.13.07.png")


オレンジの折れ線グラフ、緑の棒グラフが、k8sクラスタ上のトータルの HTTPS GET を受けた数、それ以外のグラフが、PODそれぞれのアクセス数です。 




# 参考資料
(1) IBM Bluemix Container Service のロギング https://console.bluemix.net/docs/services/CloudLogAnalysis/containers/logging_containers_ov.html#logging_containers_ov
(2) IBM Cloud Log Analysis 概説チュートリアル https://console.bluemix.net/docs/services/CloudLogAnalysis/index.html#getting-started-with-cla
(3) Kibana でのログのフィルタリング https://console.bluemix.net/docs/services/CloudLogAnalysis/kibana/filter_logs.html#filter_logs