すずけんメモ

技術メモです

AWS re:Invent 2014 breakout session 2日目

二日目もKeynoteとsessionがありました。メモを残しておきます。

参加したセッション

  • SPOT305 -- Event-Driven Computing on Change Logs in AWS
  • BDT401 -- Big Data Orchestra - Harmony within Data Analysis Tools
  • APP303 -- Lightning Fast Deploys with Docker Containers and AWS
  • GAM404 -- Gaming DevOps: Scopely's Continuous Deployment Pipeline
  • SDD424 - Simplifying Scalable Distributed Applications Using DynamoDB Streams

新サービス類

気になったものだけ。

ECS: EC2 Container Service

コンテナのマネジメントの仕組みを提供するもの。EC2インスタンスにあるものと同じように、containerに対してもIAM Roleやsecurity groupを適用したり、EBS volumeをできたりできる。apiではclusterの立ち上げと、taskとしてのcontainerの割り当てを行うことができ、高速にコンテナを扱うことができる。

Amazon Lambda

AWS Lambda - Run Code in the Cloud AWS Lambda

Lambdaはその名の通り、あのLambdaです。EC2インスタンスを自分で用意する必要もありません。手続きを定義して渡すのみ。そうするとそこに渡されたデータをよしなに扱うことができる。

所感

  • これが今回の発表の中ではもっともdisruptiveなものだと思います。まだまだ取り組みの種の段階では有りますが、いわゆるworker側を簡単に、しかもfull managedなものとして提供できるようになったのは大きい。
  • Kinesisが去年発表されたわけですが、Kinesis Applicationを自分で書いて、かつauto scalingの設定も自分でしないといけない。Kinesis Client Libraryにのっかると簡単にかけるものの、リソース管理をする必要はなくならない。それがこのLambdaだと、いわゆるLambdaを書けば動くわけです。
  • また、今回、S3 notificationやDynamoDB Streamが追加されたことによって、いわゆるEventを受け取れるsoruceが増えました。例えばs3の特定のpathにfileがuploadされた際にその内容をparseして一部をDynamoDBにinsertする・・・というようなことが、EC2でworkerを立てなくてもできるわけです。
  • fluentdからLambdaに渡してfilterとかexecっぽい処理はそっちに分離したいなぁと思ったり。

breakout session

SPOT305 -- Event-Driven Computing on Change Logs in AWS

it's all about timeliness and agility

最近のもろもろのupdateによってEvent-Drivenなcomputingが可能になってきたね!というセッション

  • 写真共有サービスで登録しているユーザが画像をuploadするケースを考える
    • S3に画像uploadする
    • そのタイミングでS3 notificationを受け取る
    • 操作を行う
      • GPS情報を取得する
      • 関連するアルバムに追加する
      • 友達を関連付ける
    • こうした操作をbatchであとからまとめてやるのではなく、uploadされた時点でeventとして渡すことができるようになった
      • 画像がuploadされた時点でSQSやSNS, Lambdaに渡したり
      • 例えば画像のindexをlambdaで生成してmeta-dataをDynamoDBに書き込む
        • すると、写真がuploadされた比較的すぐ検索可能になる
  • event-drivenのanti pattern
    • 全量をscanするような作りにはしないこと
      • 1つ1つのイベントで大きな処理をしない

所感

  • これは良い流れ、S3 notification便利っぽい
  • DynamoDB Stream, S3 notification, Kinesis, SQSといったreal-timeな通知をする側と、そのeventを受け取る側(lambda, SQS, SNSなど)が今後拡充されていくんじゃないかと期待
  • 例えばCloudTrailでs3に流れてきた
  • batchでs3 bucketをscanしてその中にある何かを探して1つの小さなoperationしかやらない、みたいなopsを排除していきたい

BDT401 -- Big Data Orchestra - Harmony within Data Analysis Tools

SQSとかKinesisとかCloudSearchとか連携させて使うにはどういうarchitectureになるか、っていう話

所感

  • 知ってる話ばっかりだったので割愛

APP303 -- Lightning Fast Deploys with Docker Containers and AWS

Dockerの中の人の発表

Dockerの基礎的な説明がメイン。今回のカンファレンスではコンテナに対する期待度が高かったようで、大人気のセッションだった。

デモ: nathanleclaire/awsapp

  • haproxy -> flask -> redisな構成をDockerでdeployするデモ
    • docker hostsが便利
    • どんなことをしているのかは awsapp/deploy.sh at master · nathanleclaire/awsapp みればわかる
    • imageでrollbackできるのは便利

      rollback) docker hosts active ${DOCKER_HOST_NAME} run_app_containers_from_image ${REMOTE_IMAGE}:$2 docker hosts active default

    • remote hostsでもdocker psで確認できる

所感

  • Docker自体の説明とデプロイ方法の説明だった
  • 内容はGitHubに載っているのであれだけど、デモが手際よくてエキサイティングだった
    • FlaskからTornadoに切り替えるデモとかなかなかおもしろかったというか、その発想はなかった

GAM404 -- Gaming DevOps: Scopely's Continuous Deployment Pipeline

Scopelyというモバイルのゲーム会社

  • ざっくりいうと、Blue/Green Deploymentはごりっとしてるから中間っぽい感じの方法でやってるよという話
  • blue/green deployment
    • 2つの完全なクラスタ
    • 完全な受け入れテストができること
  • 問題
    • 高いよね
    • acceptance testはクリティカル
    • cloudだと切り替えっていうのはDNSになる
      • 2つelb用意してがっとDNS切り替え
        • DNSクライアントの振る舞いに依存する
          • ttlを丁寧にチェックするクライアントなら切り替わるけどね
        • 新しいELBはまだwarmされてない
  • CYAN deployment
    • greenとblueを混ぜてみた
    • canary releaseみたいなもの
    • acceptance testsの知識は完全ではない
      • stagingで
    • 1つのelbをつかう
      • warm upいらない
      • dns変更しなくていい
    • 多くのものを動かさなくてもいい
  • ビルドへのアプローチ
    • golden ami approach
      • 全てのソフトウェアをamiにいれておく
    • 起動時にデプロイ
      • base amiを用意するものの、起動後のインスタンスにprovisionする方式

所感

  • ゲーム企業とかだとユーザ体験に直にかかわるので結構センシティブなんだろうなと思った

SDD424 - Simplifying Scalable Distributed Applications Using DynamoDB Streams

DynamoDB Streamの話がメイン

  • 話としては前のセッションにも出てたんで割愛

所感

  • cross region replicationしたい要望ってどれくらいあったんだろう
  • streamのインタフェースをKinesisに整えたのは素敵

AWS re:Invent breakout session 1日目

re:Invent 2014 breakout session 1日目

個人的にメモっておきます。

Keynoteでは、AuroraがでたりConfigだったりCodeDeployだったりがでました。細かい機能の話は参照しておいて、所感中心で。

聴いたセッションは以下のとおり。

  • SDD406 -- Amazon EC2 Instances Deep Dive
  • SDD415 NEW LAUNCH: Amazon Aurora: Amazon’s New Relational Database Engine
  • BDT403 - Netflix's Next Generation Big Data Platform
  • BDT402 -- Performance Profiling in Production: Analyzing Web Requests at Scale Using Amazon Elastic MapReduce and Storm
  • APP402 -- Serving Billions of Web Requests Each Day with Elastic Beanstalk

新サービス類

Aurora

AWSのためにre-designされた、速くてスケールするMySQLです。*1 まだPreviewでusでのみ限定公開になります。

所感

  • 銀の弾丸ではない
  • ストレージとログのレイヤを既存のMySQLの構造から切り出してAWSアーキテクチャにフィットさせているあたりかっこよい
  • キャッシュがDBのプロセスの外に出たのは嬉しい、restartしても残るわけだし
  • マルチマスターにしなくてよいほどにwriteが安定して速いといいなぁ(安直にマルチマスターの機能を追加するよりは、パフォーマンスをどんどん上げる方向に向いていって欲しいなぁと思った
  • MySQLよりパフォーマンスが5倍向上!」がひとり歩きして、まだリリースされていないのに大変だなと思った
  • つまるところ使ってみないとわからん

Code ManagementとDeployのツールいろいろ

所感

In the past 12 months alone, Apollo was used for 50M deployments to development, testing, and production hosts.

  • 実際にどれくらいのユーザが使うかはわからないけどCIサーバの運用しなくなるならいいなと思った
  • でもおそらくOpsWorksじゃないけど、全てのユーザがこれに乗っかるようなものではないだろうなあとも思う
  • そう、やはり使ってみないとわからん

セッション

SDD406 -- Amazon EC2 Instances Deep Dive

EC2 instanceの話。

  • EC2 instanceのProduct ManagerのJohnさんとKernelとかOS周りやってるAnthonyさんのセッション
  • とりあえずKernel 3.8以降使っとけって言ってた
  • t2.microのCPU burstなんかについて、どういう設計思想でつくったか、みたいな話もあった
  • PV-HVMがなぜPVより速いか、あたりについての解説

SDD415 NEW LAUNCH: Amazon Aurora: Amazon’s New Relational Database Engine

機能周りは上に書いたのでQAのメモを貼っておく。立ち見でてた。

  • RDS: MySQL -> auroraのマイグレートは簡単に
    • バイナリフォーマットでコンバートできるように
  • MySQLのコンパティビリティを壊してはいないから、既存ツールも動くはず
  • Encryptionはサポート予定
  • 開発用のローカルバージョンは出さない予定
    • MySQL 5.6と変わらないからね
  • MySQLの新しいバージョンにも追従していく予定
  • Postgreサポートするか?
    • 今日はないよw
    • MySQLはユーザ多いからやった
    • 可能だけどどこに今後サポートとするかによるかな
  • スケーリングはシンプルに出来る
  • dedicatedインスタンスは今後の展開次第
  • network ioのコストは、殆どない。なぜならVPC内だから
  • multi-masterはどう?
    • それぞれのマスターノードしか用意出来てない
    • 顧客の要望があるならやるかも?
      • 現時点での見解としてはmulti-masterにする必要はないと思ってる

BDT403 - Netflix's Next Generation Big Data Platform

Netflixの解析基盤の話 in 2014。去年もごりごりいろんな発表合ったので、どんなupdateあるのかなと思いながらきいた。このセッションもほぼ満員だった

  • 2013年と比較すると、Prestoの採用とHadoop 2への移行, Parquet FFへの移行というのが大きい話
  • Parquet, Pig, Hive, Prestoにそれぞれcontributeした
    • column position based access, Data type coercion, Null paddingなどなど
  • Parquetへの移行の話
    • 全てのイベントテーブルを移行
    • 新しいパーティションをつくって、そっちはParquetに。
    • 元からあったパーティションTTLつけておいて徐々に無効化されていった。
    • PrestoのデプロイはEMRのbootstrapでjarを配置するだけ。
  • 規模
    • NetflixのDW: 10+PBDW on s3, 1.2PB read daily 100TB written daily
    • NetflixのEMRクラスタ:
      • ETLやProduction: 2200+ m1.xlarge
        • 日中はボーナスクラスタとして、さらに3 * 150 m2.4xlarge追加してる
      • adhocな利用やtest用: 2000+ m1.xlarge
        • これに加えて Presto用のクラスタ: 250 m2.4xlarge
  • Hadoop 2への移行の作業について
    • パッチあてた
      • userのqueueを動的に階層化する
      • 動的に公正な共有を行うようにした
    • Genieからジョブをディスパッチする際に、Hadoop1と2を並行稼働させてそれぞれにジョブなげてた
    • 今は全体をHadoop 2系に移行した。EMRだからmigrationはわりと楽だった。
  • Prestoについて, アドホックな分析に利用してる。TBオーダでもインタラクティブに動く
    • NetflixのPrestoへのコントリビュート: S3 filesystem対応、Parquet対応、ODBC driver改善、map / array改善、などなど
  • Netflixがソフトウェアを選ぶ基準: ホワイトボックスであること
  • なぜEMRを使うのか

所感

  • 熱かった

BDT402 -- Performance Profiling in Production: Analyzing Web Requests at Scale Using Amazon Elastic MapReduce and Storm

Yelpのなかの人のパフォーマンスモニタリング

所感

  • EMRとStormの話はそんなに出てこなかった

APP402 -- Serving Billions of Web Requests Each Day with Elastic Beanstalk

ほんとはDataDogのDocker Containerのscaleとmonitoringに関するセッションにいこうと思ってたんだけど会場が満員で入れず・・・ということでこちらにきた。

ThinkNearというMobileのRTB事業者さんのセッション。

メモ

  • Elastic Beanstalkをばりばりつかってる
    • デプロイ簡単だし、revertも簡単だし、楽
    • だけどログ周りとかモニタリングとかは工夫しないとつらい
    • Tomcat, maxで150k req / sec
  • 構成
    • Apache + Tomcat + Beanstalk + ELB + DynamoDB + Elasticache + S3
    • メインのDBはElasticache
  • networkまわり
    • tomcatがだいたい1000-1200ファイルくらい常に開いてる
    • net.core.somaxconnあげておく。4096にしてる。バーストしたらまずこれが枯渇する。
    • net.ipv4.tcp_fin_timeout 大事。timeout大事。ELB側も合わせて調整すること。
    • ELBはConnection Drainingの設定しておく。timeoutしたときにスムーズに外せるように。
  • ログ周り
    • collectedで収集して、libratoに飛ばしてる
    • モニタリングの時、hostnameがBeanstalkだと重複したりするから、適当にUUID生成するようにしてる
    • Logrotateつかってる
    • cronつかってる。cronも失敗するときあるからモニタリングすること。
  • ディスク
    • EBS遅いからraid0してる
    • tomcatのログはephemeralに書いてる

というのを全部構成するための設定がGitHubに載ってる。Yeah!

ThinkNear/aws_templates

所感

  • Elastic Beanstalkでがんばるとかまじか・・・と思ったがまじだった
  • Hotkey問題、あるあるだった
    • Elasticacheは外部キャッシュとしてはやはり速い。そしてアプリケーションのキャッシュはさらに速い
  • ちょっと考えさせられた
    • try and errorいろいろあれど、beanstalkでそれなりにさばけるところまで持っていくの、それはそれで戦略だなと思った
  • それにしても俺得セッションだった

*1:かなり適当にまとめています

今年もAWS re:Inventに行ってきます&興味のあるセッション一覧メモ

追記 2014/11/14: スライドがupされていたのでみつけたものを追加。出れてないセッションを中心に確認したい。

今年もAWS re:Inventに参加して来ます。去年いってみて、興味あるセッションを見きれなかったり、新サービスのセッションが急遽追加されたりしていて、なかなかボーリュウムが有りました。今年も例に漏れず見たいセッションがたくさんあるので、ここにメモしておきます。あとでビデオやらスライドで見返すかも、です。

ちなみに去年参加したセッションは以下の記事にまとめてあります。

AWS re:Invent 2013で参加したセッション&聴きたかったセッションまとめ - すずけんメモ http://suzuken.hatenablog.jp/entry/2013/11/19/014517

とりあえず興味をもったセッション一覧

セッションの説明だけみて興味もったもの。日付順です。

"セッション名","日付","開始時刻"
"DEV301  --  Advanced Usage of the AWS CLI" "11/12/14" "11:00"

(DEV301) Advanced Usage of the AWS CLI | AWS re:Invent 2014

"SDD406  --  Amazon EC2 Instances Deep Dive" "11/12/14" "11:00"
"PFC307  --  Auto Scaling: A Machine Learning Approach" "11/12/14" "11:00"
"APP306  --  Using AWS CloudFormation for Deployment and Management at Scale" "11/12/14" "11:00"

(APP306) Using AWS CloudFormation for Deployment and Management at Sc…

"SDD414  --  Amazon Redshift Deep Dive and What's Next" "11/12/14" "11:00"
"ARC307  --  Infrastructure as Code" "11/12/14" "13:15"

(ARC307) Infrastructure as Code | AWS re:Invent 2014

"BDT307  --  Running NoSQL on Amazon EC2" "11/12/14" "13:15"

(BDT307) Running NoSQL on Amazon EC2 | AWS re:Invent 2014

"PFC305  --  Embracing Failure: Fault-Injection and Service Reliability" "11/12/14" "13:15"
"BDT306  --  Mission-Critical Stream Processing with Amazon EMR and Amazon Kinesis" "11/12/14" "14:15"
"SDD403  --  Amazon RDS for MySQL Deep Dive" "11/12/14" "15:30"
"BDT402  --  Performance Profiling in Production: Analyzing Web Requests at Scale Using Amazon Elastic MapReduce and Storm" "11/12/14" "15:30"

(BDT402) Performance Profiling in Production: Analyzing Web Requests …

"PFC306  --  Performance Tuning Amazon EC2 Instances" "11/12/14" "15:30"
"SDD419  --  Amazon EC2 Networking Deep Dive and Best Practices" "11/12/14" "15:30"
"APP309  --  Running and Monitoring Docker Containers at Scale" "11/12/14" "16:30"
"PFC304  --  Effective Interprocess Communications in the Cloud: The Pros and Cons of Microservices Architectures" "11/12/14" "16:30"
"SDD421  --  Amazon EC2 Purchasing Deep Dive and Best Practices" "11/12/14" "16:30"
"WEB401  --  Optimizing Your Web Server on AWS" "11/13/14" "11:00"
"APP315  --  Coca-Cola: Migrating to AWS" "11/13/14" "11:00"

(APP315) Coca-Cola: Migrating to AWS | AWS re:Invent 2014

"PFC402  --  Bigger  Faster: Performance Tips for High Speed and High Volume Applications" "11/13/14"
"ARC401  --  Black-Belt Networking for the Cloud Ninja" "11/13/14" "11:00"
"SPOT305  --  Event-Driven Computing on Change Logs in AWS" "11/13/14" "11:00"
"BDT401  --  Big Data Orchestra - Harmony within Data Analysis Tools" "11/13/14" "13:15"
"SDD423  --  Elastic Load Balancing Deep Dive and Best Practices" "11/13/14" "13:15"
"PFC303  --  Milliseconds Matter: Design  Deploy  and Operate Your Application for Best Possible Performance"
"APP303  --  Lightning Fast Deploys with Docker Containers and AWS" "11/13/14" "14:15"
"SDD405  --  Amazon Kinesis Deep Dive" "11/13/14" "14:15"
"SDD413  --  Amazon S3 Deep Dive and Best Practices" "11/13/14" "14:15"
"BDT303  --  Construct Your ETL Pipeline with AWS Data Pipeline  Amazon EMR  and Amazon Redshift"
"GAM404  --  Gaming DevOps: Scopely's Continuous Deployment Pipeline" "11/13/14" "15:15"
"BDT305  --  Lessons Learned and Best Practices for Running Hadoop on AWS" "11/13/14" "15:15"
"FIN401  --  Seismic Shift: Nasdaq's Migration to Amazon Redshift" "11/13/14" "15:15"
"SPOT303  --  Building Mission Critical Database Applications: A Conversation with AWS Customers about Best Practices" "11/13/14" "15:15"
"GAM402  --  Deploying a Low-Latency Multiplayer Game Globally: Loadout" "11/13/14" "16:30"
"SDD407  --  Amazon DynamoDB: Data Modeling and Scaling Best Practices" "11/13/14" "16:30"
"ADV403  --  Dynamic Ad Performance Reporting with Amazon Redshift: Data Science and Complex Queries at Massive Scale" "11/13/14" "16:30"
"SDD401  --  Amazon Elastic MapReduce Deep Dive and Best Practices" "11/13/14" "17:30"
"ADV303  --  MediaMath’s Data Revolution with Amazon Kinesis and Amazon EMR" "11/13/14" "17:30"

(ADV303) Beating the Speed of Light with Your Infrastructure in AWS |…

"ARC202  --  Real-World Real-Time Analytics" "11/13/14" "17:30"
"BDT308  --  Using Amazon Elastic MapReduce as Your Scalable Data Warehouse" "11/14/14" "9:00"
"ADV402  --  Beating the Speed of Light with Your Infrastructure in AWS" "11/14/14" "9:00"
"ARC303  --  Panning for Gold: Analyzing Unstructured Data" "11/14/14" "9:00"

Docker関連セッションとDevOpsまわり、それからDynamoDBのデータモデリングと広告インフラの話は外さずに聴きたいところです。あとはパフォーマンス周り全般を聞く予定。

それと余力あればハッカソンに遊びに行こうと思います。

追記: 見たセッション

上に載せてなかったけど見たセッションのスライドもみつけたらはっておく

サービス改善とログデータ解析について発表してきました

『サーバ/インフラエンジニア養成読本 ログ収集〜可視化編』の出版記念イベントで発表してきました。会場を提供していただいたGMOのみなさま、主催のTreasure Data / 技術評論社のみなさま、そして聴きに来てくださった方々、どうもありがとうございました。

http://eventdots.jp/event/137658

各特集の著者によるそれぞれの特集の導入が前半にあり、後半はnaoyaさんとのパネルディスカッションがありました。

養成読本、おかげさまで多くの方に読んでいただいており、嬉しい限りです。僕のところは導入の章ということで、「なぜログの分析をするのか?」という点に絞って発表しました。内容としてはざっくりいうと、

  • ElasticsearchやFluentdを使いつつも、何をやりたいかによって使うツールは変えなければならない
  • 分析するにはデータがなければならない。どんなデータが生じるかはサービスの設計と紐づく。なので分析はチームで行うものである。

というものでした。

パネルディスカッション

後半のパネルディスカッションでは、ざっくばらんにリラックスした雰囲気の中でログの分析について話をすることができました。楽しかったです。(楽しんでいただけたでしょうか・・・?)naoyaさんから事前に話すトピックが共有されており、それをピックアップしつつ話していきました。rebuild.fm スタイルなのだそうです。ちなみにどういう順番で話を進めるかは決まっておらず、その場のノリで決められていったのでした。

トピックが点々としたので自分でもうろ覚えなのですが、ポイントで。

  • ログまわりのエンジニアリングをするのはインフラエンジニアなのか?というとharukasanの話にもあったように「趣味」でいれる、というか権限があるからインフラエンジニアから始めやすい、というのはあると思う
  • でも、ちゃんと整備してETL整理してストアの選定してある程度使いやすく整備して分析するエンジニアのための環境をつくっていく、となると専任の人がいたほうがやりやすい
  • BigQuery最強説
  • DWHを使っていたり知っている、という方が会場に少なくて意外な印象を受けた
  • Elasticsearchのインデックスのバックアップについて。これはうちだとsnapshotでdailyでやってる、んだけど全部やってるわけではない。保持期間が2,3日程度の運用だとそもそも古いログをElasticsearchにrestoreする必要があまりない。かつ、Elasticsearchをsource of truthとして使う、という運用は現状ではない。でもKibanaのdashboard設定はbackupしておいたほうがいいですよ。
  • 「ログの分析やっても面白い革新的なサービスは出てこないんじゃないか」っていうのはまさにその通りで、あくまで既存のものの改善をするエンジニアリング。なのであんまりログエンジニアが増えても仕方ない、といわれるとまぁそうですね、という感じがある。

などなど。色々話しました。

四方山話

あと終わったあとに飲みながら話していたのですが、僕がそもそも分析周りのことに興味をもったのは、 https://trippiece.com を作っていた頃に遡ります。trippieceは「旅をつくる」サービスで、僕はそのサービスの設計とサーバサイドとフロントエンドのエンジニアリングを1年ほどしていました。最初はプロトタイプづくりに苦心し、リリースしたものの全然使われず、また作りなおして・・・というようなことを繰り返し繰り返しやっていく過程で、ユーザがどのようにサービスを使っているのか、ということばかり考えていたのです。そのときは自分がアプリケーションの実装の大部分をやっていたので、ログをしっかりまとめて管理して分析できるような状態にする、ということは全然できませんでした。とりあえずGoogle Analyticsをつかって動向を見守る、ということをしていました。でももっと細かく見たいものや、改善に使えそうなデータはあることはわかっているにもかかわらず、当時はどのようにアプローチしていけばわからなかったのです。なので新卒でVOYAGE GROUPに入社した時から、データ周りのことに携わり始めた、という背景が有ります。もし当時の僕だったら何を知りたかっただろうか、というのを思いながら書いたのでした。そういう意味では、今は改善する仕事をしているけれど、新しいものを生み出しているとは言えないのかもな、、などとパネルディスカッション中に思ったのでした。

Fluentd UIが出たので触ってみた

fluent/fluentd-ui https://github.com/fluent/fluentd-ui

Fluentd用のWeb UIが出たようです。試しに触ってみます。

インストール

READMEのとおりですが、

$ gem install fluentd-ui
$ fluentd-ui start
Open http://localhost:9292/ by your browser
default account is username="admin" and password="changeme"

もしくは、

$ git clone https://github.com/treasure-data/fluentd-ui
$ cd fluentd-ui
$ bundle install
$ bundle exec rails s

です。

僕はbundlerでいれることにしました。

-> % bundle exec rails s
=> Booting Puma
=> Rails 4.1.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
Puma 2.8.2 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:3000

起動するとログイン画面が出てきます。デフォルト設定はusername: admin, password: changeme です。

f:id:suzu_v:20140801200246p:plain

ログインするとこんな感じで立ち上がります。

f:id:suzu_v:20140801200428p:plain

早速触ってみます。まずはfluentdをインストールします。

f:id:suzu_v:20140801200243p:plain

インストールされましたね。続いて設定をしていきます。こんな感じに今Fluentdがどこからデータを読み取り、どこに出力しようとしているのかがわかりやすく表示されてます。

f:id:suzu_v:20140801200238p:plain

では実際にファイルの入力について編集していきます。入力の「ファイル」をクリックすると、どこからファイルを読み取るかを選択する画面が出てきます。

f:id:suzu_v:20140801200234p:plain

ここでは /var/log/system.log を読み取ることにしました。こんな感じでログをpreviewすることができます。

f:id:suzu_v:20140801201050p:plain

次にファイルを読み取る際の設定をします。ここでは、「どんなフォーマットとしてログを読み取るか」という設定をすることができます。この画面はわかりやすくて便利ですね。今回はsyslog形式なので、formatをsyslogにしています。

f:id:suzu_v:20140801202229p:plain

これで無事設定が変更されました。生成された設定は以下のとおりです。

<source>
  # http://docs.fluentd.org/articles/in_forward
  type forward
  port 24224
</source>

<source>
  # http://docs.fluentd.org/articles/in_http
  type http
  port 9880
</source>

<source>
  type monitor_agent
  port 24220
</source>
<source>
  type debug_agent
  port 24230
</source>

<match debug.*>
  # http://docs.fluentd.org/articles/out_stdout
  type stdout
</match>

<source>
  type tail
  path /var/log/system.log
  tag syslog.test
  format syslog
  time_format %b %d %H:%M:%S
  pos_file /tmp/fluentd--1406888587.pos
</source>

更新するとfluentdが再起動されて設定がreloadされます。fluentd自体の起動logをみてみましょう。

f:id:suzu_v:20140801200145p:plain

ちゃんとtailされているようです。試しにMongoDBにいれてみます。デフォルトではプラグインは入っていないので、いれてみます。これもFluentd UI上から行うことができます。MongoDB用のプラグインをいれてみましょう。インストールボタンを押せば設定できます。

f:id:suzu_v:20140801200141p:plain

インストール済みのプラグインはこんな感じで閲覧できます。

f:id:suzu_v:20140801200119p:plain

設定も追加してみます。mongoの設定は画面から行うことができます。「ソースと出力先の設定」の画面から「MongoDB」をクリックするとこんな感じで設定画面が開きます。

f:id:suzu_v:20140801200116p:plain

設定は結果的にこんな感じになりました。

<match syslog.test>
  type mongo
  host 127.0.0.1
  port 27017
  database fluentd
  collection test
  capped
  capped_size 100m
</match>

設定を追加すると勝手にfluentdがreloadされます。mongo側をみてみましょう。*1

-> % all output going to: /usr/local/var/log/mongodb/mongo.log
mongo
MongoDB shell version: 2.4.8
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
Server has startup warnings:
Fri Aug  1 19:49:01.275 [initandlisten]
Fri Aug  1 19:49:01.275 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
> show dbs;
fluentd 0.140625GB

fluentdのdbができてますね。queryしてみます。

# 以下mongo shell
> use fluentd;
switched to db fluentd
> db.test.find()
{ "_id" : ObjectId("53db72001df33a7e96000001"), "host" : "xxx", "ident" : "SystemUIServer", "pid" : "425", "message" : "Impossible to find range of h or H in date format.", "time" : ISODate("2014-08-01T10:54:34Z") }
{ "_id" : ObjectId("53db723d1df33a7e96000002"), "host" : "xxx", "ident" : "SystemUIServer", "pid" : "425", "message" : "Impossible to find range of h or H in date format.", "time" : ISODate("2014-08-01T10:55:34Z") }
{ "_id" : ObjectId("53db727a1df33a7e96000003"), "host" : "xxx", "ident" : "SystemUIServer", "pid" : "425", "message" : "Impossible to find range of h or H in date format.", "time" : ISODate("2014-08-01T10:56:34Z") }

ちゃんとはいってますね。*2

所感

  • さくっとローカルにfluentdの環境作っていろいろプラグイン入れたりログを試しにいれてみたい、というときにさくっとできて良い
    • fluentd本体のインストールやfluentdのプラグインも簡単に入れることができる
    • アプリケーションログをつくるのは手間がかかるけれど、
  • in_tailのUIが便利
    • どんなログを読もうとしているかをプレビューしつつ、tailの設定を書くことができる
      • 実際にどんな風にログが読み取られるかも見つつ、設定を調整することができる。素敵。
    • http://fluentular.herokuapp.com/ で試せるようなこともFluentd UIの中でできます。
  • pluginがうまく入らなかった
    • ものによる。fluentd-plugin-elasticsearchが入らなかった。依存gemをうまくもってこれてないのかもしれない。

Fluentdを触ったことがないという場合でも、さっくりセットアップと設定を行うことができるのではないか思います。ローカルでさくっと試す用途にもよいのではないでしょうか。まだversionも0.10ですので、今後使いやすくなっていくのが楽しみです。

*1:MongoDBのバージョンがちょっと古いですね、手抜きです。

*2:と思ったら日付型が微妙に間違っている旨のメッセージがはいってますね

supervisorのcommandで$()を使いたいとき

今日初めてsupervisorの設定をした。まだあまり使い勝手がわかっていない。

supervisorでは環境変数の展開以外、マクロ的なことができない。bash -lcを使う。例えば以下のようにする。

[program:hoge]
command=bash -lc '$(which hoge)/bin/fuga start'

splitしたwindowをもとのサイズに戻す

外付けディスプレイにTerminalを持っていったとかでサイズが変わった場合、splitしたvimのwindowのサイズも変わってしまうことが多々ある。そういった場合に、また均等に各windowのサイズを戻したい、という場合。

How to refresh vim layout when split - Super User http://superuser.com/questions/254286/how-to-refresh-vim-layout-when-split

C-w,=すればよい。