Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
104 lines (65 sloc) 3.84 KB
Log pipeline for Cloud Foundry with Apache Kafka
Apache Kafka Meetup Japan #1 at Yahoo! JAPAN
31 May 2016
Taichi Nakashima
@deeeet
* About me
.image img/deeeet.png 200 _
- *@deeeet* (Twitter) / *@tcnksm* (GitHub)
- [[http://deeeet.com][http://deeeet.com]]
- PaaS (based on Cloud Foundry) Dev&Ops
- Gopher
* About me
.image img/blog.png 550 _
* TL;DR
- なぜLog pipelineの構築にApache Kafkaを採用したか?
- (どのようにCloudFoundryと連携しているのか?)
* Cloud Foundry
[[https://www.cloudfoundry.org/][https://www.cloudfoundry.org/]]
- OSS Platform as a Service 構築基盤
- APIやルータ,CLIツール,ヘルスチェック,認証機構etc
- Heroku buildpackを利用し様々なruntimeに対応
- Docker imageのデプロイにも対応(root FSの利用)
- v1 (Ruby) -> v2 (Golang)
Cloud Foundryのワークフロー
$ cf push APP # アプリケーションのデプロイ
$ cf scale APP -i 4 # アプケーションのスケール
$ cf logs APP # ログ(stdout/stderr)の確認
$ cf cf bind-service APP DB # DBサービスの利用
* Why log pipeline?
PaaSの利用者に対して
- `cf logs` コマンドでは直近のログしか確認できない.長期的にログを保存しユーザが使いたいログにいつでもアクセスできるようにしたい
- ELKなどユーザが使いたいログ解析ツールを使えるようにしたい
PaaSの運用者に対して
- Cloud Foundry自体のデバッグを楽にしたい(可視化など)
他のチームに対して
- 例えばサービス改善のためにデータ解析チームへログを提供したい
* What kind of log?
- アプリケーションログ - ユーザがpushしたアプケーションが生成するログ
- コンポーネントログ - Cloud Foundryのコンポーネント(e.g., API)が生成するログ
* v1 -> v2
* v1
.image http://techblog.rakuten.co.jp/images/cfv1.jpeg 400 _
* Problem
- ログの保存先が2つに分散してしまった(syslogサーバー + GlusterFS).問題があった時に複数のサーバーにログインする必要があった
- ログの詰まりとその伝搬が発生した(upstreamが管轄外の場合は何もできない)
- ユーザが使いたいログ解析ツールの対応が大変だった(Logstash or Flume etc...)
- GlusterFS... 🔥
* v2
.image img/cfv2.jpeg 400 _
* Benefits
- Simple - すべてのログは必ずKafkaに一時的に保存される.新しいコンポーネントを追加してもとりあえずKafkaに送れば良い(ログだけではなくメトリクスも送っている)
- Flexible - KafkaのConsumerはPull型なので新しいBackendのシステムを追加したいときにKafka自体に手を入れる必要がない(新しいログ解析ツールを試すもの容易)
- Reliable - 一つのConsumerに問題が発生してもその問題がKafkaや他のConsumerに影響を与えることがない.
* Details
x2Kafka
- [[http://www.rsyslog.com/doc/master/configuration/modules/omkafka.html][rsyslog/omkafka]] (C/C++のライブラリ[[https://github.com/edenhill/librdkafka][edenhill/librdkafka]]を利用)
- [[https://github.com/rakutentech/kafka-firehose-nozzle][rakutentech/kafka-firehose-nozzle]] (Golangのパッケージ[[https://github.com/Shopify/sarama][Shopify/sarama]]を利用)
- Kafka ? (e.g., ネットワークチーム)
Kafka2x
- [[https://github.com/pinterest/secor][pinterest/secor]] (Azure blob storeに対応 [[https://github.com/pinterest/secor/pull/194][#194]])
- ELK
- [[http://riemann.io/][riemann]] + [[https://influxdata.com/][InfluxDB]] + [[http://grafana.org/][Grafana]] (メトリクス)
- Kafka ? (e.g., データ解析チーム or アプリケーションチーム)
* Future work
.image http://techblog.rakuten.co.jp/images/multi-dc.jpeg 400 _