既存システムへの新技術活用法 ~fluntd/MongoDB~

2,212 views

Published on

社内にfluentd導入時の調査内容メモ
最後のmongodbの説明は完全に蛇足感w

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,212
On SlideShare
0
From Embeds
0
Number of Embeds
49
Actions
Shares
0
Downloads
28
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

既存システムへの新技術活用法 ~fluntd/MongoDB~

  1. 1. 既存システムへの新技術活用法 ~fluntd/MongoDB~ 株式会社シーエー・アドバンス 技術推進グループ 仲里 淳矢 Copyright © CA ADvance .inc 2012
  2. 2. 自己紹介•株式会社シーエー・アドバンスの仲里です。(エンジニア歴4年目)•技術推進グループに所属してます。•沖縄高専卒です。•開発環境は主にvim使ってます。•主な業務内容 • PHPによる社内管理画面開発(SEM系、GoogleAdwords等) • 社内のインフラ整備 •CentOS6上で動く、ApacheとかMySQLの保守 • NoSQL推進 •MongoDB導入 •社内の既存システムのNoSQL対応(パフォーマンスUpのため) •KyotoCabinet導入 • Fluentdの導入 2 Copyright © CA ADvance .inc 2012
  3. 3. アジェンダ ①はじめに ②fluentd ③fluentd導入事例 ④MongoDB 3 Copyright © CA ADvance .inc 2012
  4. 4. ①はじめに 4Copyright © CA ADvance .inc 2012
  5. 5. 背景•なぜ、我々は社内にfluentdを導入したのか •ファイルに書き込んだログの目視確認をどうに かしたい(不具合発生時) #tail,grepはもう嫌だ>_< •ログ解析の簡易化を図りたい •そもそも、レガシーなログ取込をどうにかしたい •DBに残すようにすればいいのでは、どうする? 5 Copyright © CA ADvance .inc 2012
  6. 6. 背景そうだ、fluentd をいれよう! 6 Copyright © CA ADvance .inc 2012
  7. 7. ①fluentd 7Copyright © CA ADvance .inc 2012
  8. 8. fluentdとは•一言で言うと、ログ取込デーモン•JSON形式で、いろんなシステムに保存できる! 8 Copyright © CA ADvance .inc 2012
  9. 9. fluentdの特徴•JSON形式で構造化された状態で保存される•プラグインを利用して、いろんなシステムから、 好きなデータ格納先に保存できる(※下図参照)•安定性が高い プラグイン導入で対応 これもプラグインで buffer{ } { } •PHP •File •Ruby •MySQL •Apache •MongoDB [input] 図)ログ取込例 [output] 9 Copyright © CA ADvance .inc 2012
  10. 10. fluentdインストール※rubyをインストール環境を容易・fluentdのインストール# gem install fluentd・confの生成# fluentd –-setup /etc/fluetd 10 Copyright © CA ADvance .inc 2012
  11. 11. fluentdインストール・confの設定# vim /etc/fluentd/log_server.conf・起動# fluentd -c /etc/fluentd/log_server.conf 11 Copyright © CA ADvance .inc 2012
  12. 12. fluentd設定ファイル例 12 Copyright © CA ADvance .inc 2012
  13. 13. ③fluentd導入事例 13 Copyright © CA ADvance .inc 2012
  14. 14. fluentd導入事例•複数のWebサーバーから上がってくる、AP側のログデータを、ログファイル吐き出しから、fluentd経由でのMongoDB吐き出しに変えました。結果、 ログが一箇所にまとまることができた。 ⇨不具合発生時に効果を発揮! ログ表示画面を作成 ⇨データ確認や、ユーザーの追跡が容易に! 14 Copyright © CA ADvance .inc 2012
  15. 15. fluentd構成イメージ•社内インフラの構成 web01 PHP fluentd MongoDB web02 PHP fluentd 15 Copyright © CA ADvance .inc 2012
  16. 16. fluentdまとめ•複数のログデータを一元管理 •ログの出先を変えたくなったら、設定ファイルを 変えるだけで対応可能•言語が違っても向け先を統一できる •IN{PHP, Ruby, Apache, etc} •OUT{MySQL, MongoDB, Cassandra, Growl, tail, etc} 16 Copyright © CA ADvance .inc 2012
  17. 17. fluentdまとめ•fluentdがバッファを貯めこむ仕組みを保持しているため、出力先が落ちてても、ログを貯めこむことが可能。なので、 安定性が高い! 17 Copyright © CA ADvance .inc 2012
  18. 18. というわけでみんな を入れてみよう! 18 Copyright © CA ADvance .inc 2012
  19. 19. ④MongoDB 19Copyright © CA ADvance .inc 2012
  20. 20. はじめに(背景)•社内システムへのfulentd導入にあたり、ログデータの出力先をMongoDBにしました。•今回、MongoDBを取り入れた理由として、(小規模な)MongoDBの運用を行い、フローを確立した上で、開発陣のナレッジとして、知識共有し、戦力にできるか見極めるためです。 20 Copyright © CA ADvance .inc 2012
  21. 21. はじめに(背景)•その、MongoDBの導入にあたり、自分が調査した内容について、スライドにまとめてみました。 21 Copyright © CA ADvance .inc 2012
  22. 22. MonoDB とは• MongoDB は、高パフォーマンス、スキーマレス、オープン ソースのドキュメント指向データベースである。• MongoDB は、BSONというJSONのバイナリ版のような 形式でドキュメントを表現し、そのコレクションを管理す る。この形式は、複雑な階層を持たせることができ、な おかつクエリやインデックスが容易である。MongoDB – Wikipediahttp://ja.wikipedia.org/wiki/MongoDB 22 Copyright © CA ADvance .inc 2012
  23. 23. MonoDB の特徴• 高可用性 • スレーブが死んでも自動で切り離しできる• レプリカ機能 • 新しいノード接続時、自動でデータの同期もしてくれる!• スキーマレス • あとでカラムが自由に増やせる。つまり、柔軟に対応可! ※バグ出ても気づきにくい 23 Copyright © CA ADvance .inc 2012
  24. 24. MonoDB の特徴• インデックスのサポート (複数インデックス可)• オート・シャーディング(スケールアウト)• Map Reduce(集計処理)• GridFS(ファイル格納システム) 24 Copyright © CA ADvance .inc 2012
  25. 25. データ構造• データ格納例 DataBase→Collection→Key→Row→Value ※MySQLとほぼ一緒 25 Copyright © CA ADvance .inc 2012
  26. 26. データ構造• MySQLで例えると、 Collection ≒ Table 26 Copyright © CA ADvance .inc 2012
  27. 27. 使い方(CLI)#データ検索 > db.users.find({}, {a:1,b:1})#データ登録 > db.users.insert({a:1,b:1})#データ削除 > db.things.remove({_id: myobject._id}); 27 Copyright © CA ADvance .inc 2012
  28. 28. SQL と MongoDB の比較SQL Mongo クエリ言語CREATE TABLE USERS (a Number, b Number) 暗黙的に行われますINSERT INTO USERS VALUES(1,1) db.users.insert({a:1,b:1}) db.users.find({}, {a:1,b:1})SELECT a,b FROM usersSELECT * FROM users db.users.find()SELECT * FROM users WHERE age=18 db.users.find({age:18})SELECT * FROM users WHERE age=18 ORDER BY db.users.find({age:18}).sort({name:1})nameSELECT * FROM users WHERE age>18 db.users.find({age:{$gt:18}})}) 28 Copyright © CA ADvance .inc 2012
  29. 29. クエリ発行•インデックスの作成や、コレクションのtruncateもできます! db.users.ensureIndex({user_id:1}); db.users.remove();•Upsertと機能があって、これが地味に便利そう •データがあれば、アップデート、なければインサートしてく れるみたい 29 Copyright © CA ADvance .inc 2012
  30. 30. MapReduce• バッチでのデータ処理や集計処理で利用します。• 基本、入力値として、コレクションを投入し、 出力値として、コレクションへデータを流します。• 使いドコロとしては、細かいデータをデイリー・マンスリー でまとめたい時、効力を発揮するかも!• Javascriptで組んでMongoDB に流しこむイメージです。 30 Copyright © CA ADvance .inc 2012
  31. 31. サンプルプログラム 1/2 31 Copyright © CA ADvance .inc 2012
  32. 32. サンプルプログラム 2/2 32 Copyright © CA ADvance .inc 2012
  33. 33. サンプルプログラム(出力結果) 33 Copyright © CA ADvance .inc 2012
  34. 34. まとめ• 耐障害性が高く、自動でレプリカへの同期も やってくれるので、スケールアウトが容易• スキーマレスでメンテも楽!• 集計したい時は、MapReduceを使おう• MongoDBDateハマりやすい 34 Copyright © CA ADvance .inc 2012
  35. 35. ご清聴ありがとうございました。 35 Copyright © CA ADvance .inc 2012

×