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