LoginSignup
30
17

More than 5 years have passed since last update.

貧者の GKE / FluentBit でログ収集

Last updated at Posted at 2017-04-30

TLDR

  • 無料枠の f1-micro には fluentd は大きい
  • 軽量なログ収集エージェント fluent-bit
    • Kubernetes 対応
    • Go でのプラグイン作成可能
  • fluent-bit で Stackdriver Logging にログを出力することで大幅なリソース削減

今までのあらすじ

GCP の無料枠だけで GKE クラスタを作ることができたが、一部の Pod が Pending となっっていた。
http://qiita.com/apstndb/items/788f705e71e7660967a6#%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9

調べてみると、最大の Pod は Stackdriver Logging への各コンテナのログ収集のために生成されている fluentd-cloud-logging であり、実測 80 MB を超えるリソースを使用していた。
http://qiita.com/apstndb/items/1c3f8ea026ed6b27e357#%E5%86%85%E8%A8%B3

貧者のログ収集

fluentd-cloud-logging はクラスタ生成時に --no-enable-cloud-logging を指定して無効化することができるが、 12factor のログ が扱えないのは非常に不便である。何か代替を考える必要がある。

fluent-bit

そこで今回目をつけたのが C で書かれた軽量なログ収集エージェントの fluent-bit だ。
Kubernetes 対応 もあり、Ruby で動く fluentd よりも省リソースであることが期待できる。
実際の Kubernetes 連携の例を探してみると、 DaemonSet として動作して Elasticsearch に出力する例も公式で fluent/fluent-bit-kubernetes-daemonset として見つかった。

Elasticsearch は JVM で動作して富豪的なリソースを要求するため貧者には手が届かないが、これができるのであればやりたいことは大体できそうだ。

プラグインの書き方を探したところ、 Go でプラグインが書けることがわかった。
https://github.com/fluent/fluent-bit/blob/master/GOLANG_OUTPUT_PLUGIN.md
https://github.com/fluent/fluent-bit-go

Go には Google 公式の Stackdriver Logging のクライアントライブラリがあるため、 Stackdriver Logging に出力する fluent-bit を Kubernetes のログ収集に使うことができるのではないか。

fluent-bit-stackdriver

というわけで検証してみたのが下記リポジトリだ。
apstndb/fluent-bit-stackdriver

まだ他の人が使えるようには整備しておらず、品質も低いが、実際に Kubernetes の各 Pod が出力するログが Stackdriver Logging へと渡ることが確認できている。

スクリーンショット 2017-04-30 23.05.04.png

まだリソース使用量を見てみると、下記のように 10 MB のオーダーのメモリ使用量となった。

$ kubectl top pod --all-namespaces
NAMESPACE     NAME                                                        CPU(cores)   MEMORY(bytes)
default       hostnames-3799501552-99h7f                                  0m           0Mi
kube-system   heapster-v1.2.0.1-1382115970-gjg66                          0m           24Mi
kube-system   fluent-bit-kgjzl                                            0m           10Mi
kube-system   kubernetes-dashboard-3543765157-s86rn                       0m           16Mi
kube-system   kube-proxy-gke-sandbox-cluster-default-pool-8b3dece3-ngf9   0m           12Mi
kube-system   kube-dns-2185667875-75kdg                                   0m           16Mi

以前計測した fluentd よりも 70 MB 程度は削減できている。これなら 600 MB しか RAM のない f1-micro インスタンスでのログ収集が現実的なものになってきたのではないか。

30
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
17