Google、FluentdをKubernetesとCompute Engineの標準ログコレクタに採用

まずはFluentdコミュニティの皆さん、おめでとうございます！！！

Googleを中心に開発されているオープンソースのDockerジョブスケジューラ[Kubernetes (k8s)](http://qiita.com/kazunori279/items/ebe8ea24601e606f8048)、それにGoogle Cloud Platformのログ収集サービス[Google Cloud Logging](https://cloud.google.com/tools/logging/index)のGoogle Compute Engine用ログコレクタとして、Fluentdが標準採用されました。もうひとつおまけに、[fluent-plugin-bigquery](https://github.com/kaizenplatform/fluent-plugin-bigquery)をフィーチャしたソリューションページも、あと1か月くらいで[cloud.google.com](http://cloud.google.com/)にて公開される見込みです（これは私がいま仕上げ中）。

順番から行くと、まずはCloud Loggingチームで以前からFluentdの採用が検討されていて、正式採用を決定、それに影響される形でk8sチームもFluentdを採用した流れです。私も微力ながらお手伝いしてまして、TDの太田さんと田村さんをUSオフィスに招き、Cloud Loggingチームとミーティングを設けてコラボレーションの方向性を議論したり、GCPチーム内でも何かとFluentdを宣伝しまくったり。しかし何より強調したいのは、最終的にはCloud Loggingチームによる性能やフットプリント等の技術評価の結果、他のさまざまな選択肢の中でもFluentdがベストであると判断された点です。これは日本人としてとても誇らしいことでした。Awesome Job!!!

つい先日、GitHubのGCPリポジトリに[Google版Fluentd](https://github.com/GoogleCloudPlatform/google-fluentd)がpushされ、Cloud Loggingの[Alpha版のページ](https://cloud.google.com/tools/logging/logging_gce_install)もひっそり公開されました。この辺りの状況は[Rebuild.fm 68](http://rebuild.fm/68/)でももりすさんが触れられてましたが、ここでGCPでのFluentdの導入状況を簡単にまとめたいと思います。

## KubernetesでのFluentd採用

k8sでFluentdがどのように組み込まれたのかは、k8sチームのSatnam Singhのブログ記事[Collecting the Output of Containers in Kubernetes Pods](http://blog.raintown.org/2014/11/logging-kubernetes-pods-using-fluentd.html)に詳しいです。

![Fluentd pod](http://3.bp.blogspot.com/-8sYxFgrVZ3A/VGvL9PeTA4I/AAAAAAAAN00/Uua-54Nu6pQ/s1600/overview.png)

Kubernetesは複数のDockerコンテナのスケジューリングのためのフレームワークであり、当然ながら各コンテナから出てくるログをどうまとめようかという問題が生じます。Fluentdはこの問題を解決するために導入されており、

```
By default when a Kubernetes cluster is created for the Google Compute Platform a pod is scheduled to execute on each node to gather all the Docker container log files using the Fluentd log collector. 
```

とあるように、GCP上でKubernetesを動かすと、すべてのDockerコンテナのログがFluentd経由で集められるようデフォルト設定されています。集めたログはElasticsearchに流せるほか、Google Cloud Loggingに送る設定も可能です。

Googleではk8sのマネージドサービスとして[Google Container Engine (GKE)](https://cloud.google.com/container-engine/)のAlpha版も提供開始しています。現時点ではGKEにはFluentdは組み込まれていない様子ですが、いずれはGKE上で動作するDockerコンテナのログもFluentdで集められ、Cloud Loggingに流せるようになるはずです。

## Google Cloud LoggingでのFluentd採用

[Google Cloud Logging](https://cloud.google.com/tools/logging/index)はつい先日ひっそりとAlpha公開された新サービスで、Google App EngineとGoogle Compute Engineのログを収集し、[Cloud Developers Console](https://console.developers.google.com/)のログビューア上で表示したり、正規表現でフィルタリングしたりできるものです。現状ではコストはかからず、最大30日間のログを保存できます。ゆくゆくはログをGoogle Cloud StorageやBigQueryに転送する機能も出てくると期待されます。

![Screen Shot 2014-11-25 at 14.04.30.png](https://qiita-image-store.s3.amazonaws.com/0/38290/60d12332-7938-8607-de98-42fe9279d816.png)

具体的にFluentdがどのように使われているかは、[Configuring a Google Compute Engine VM for Google Cloud Logging](https://cloud.google.com/tools/logging/logging_gce_install)を見るのがわかりやすいです。Google Compute EngineのDebianまたはUbuntuのインスタンスを作成したら、Googleが用意した専用のFluentdをインストールすることで、[Google製プラグイン](https://github.com/GoogleCloudPlatform/fluent-plugin-google-cloud)を介してCloud Loggingにログが流れ始めます。専用といっても中身は普通にFluentdですから、google-fluentd.confをいじれば自分の好きなプラグイン入れたりごにょれるんじゃないかなと思います。

おそらく今後は、Compute Engineのインスタンスを作成する際にもっと簡単にFluentdをオプトインできる機能が提供されると期待されます。

## Fluentd＋BigQueryソリューション

これは私が今期携わっているお仕事で、[GCPのソリューションページ](https://cloud.google.com/solutions/)のひとつとして[fluent-plugin-bigquery](https://github.com/kaizenplatform/fluent-plugin-bigquery)をフィーチャしたソリューションを公開すべく作業中です。最近ちょこちょこpushしてる[bigquery-fluentd-docker-sample](https://github.com/kazunori279/bigquery-fluentd-docker-sample)等はその素材ですね。

というわけで、私にとってはGCPにおけるFluentd標準採用が今年もっとも嬉しい出来事のひとつでした。最後にもう一度、皆さんおめでとうございます！

----
Disclaimer この記事は個人的なものです｡ここで述べられていることは私の個人的な意見に基づくものであり､私の雇用者には関係はありません｡