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

35
Copyright © CA ADvance .inc 2012 既存システムへの新技術活用法 ~fluntd/MongoDB~ 株式会社シーエー・アドバンス 技術推進グループ 仲里 淳矢

Upload: -

Post on 25-May-2015

1.772 views

Category:

Technology


6 download

DESCRIPTION

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

TRANSCRIPT

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

Copyright © CA ADvance .inc 2012

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

株式会社シーエー・アドバンス

技術推進グループ

仲里 淳矢

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

Copyright © CA ADvance .inc 2012

2

自己紹介

•株式会社シーエー・アドバンスの仲里です。(エンジニア歴4年目) •技術推進グループに所属してます。 •沖縄高専卒です。 •開発環境は主にvim使ってます。

•主な業務内容 •PHPによる社内管理画面開発(SEM系、GoogleAdwords等)

•社内のインフラ整備

•CentOS6上で動く、ApacheとかMySQLの保守

•NoSQL推進 •MongoDB導入

•社内の既存システムのNoSQL対応(パフォーマンスUpのため) •KyotoCabinet導入

•Fluentdの導入

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

Copyright © CA ADvance .inc 2012

3

アジェンダ

①はじめに

②fluentd

③fluentd導入事例

④MongoDB

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

Copyright © CA ADvance .inc 2012

4

①はじめに

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

Copyright © CA ADvance .inc 2012

5

背景

•なぜ、我々は社内にfluentdを導入したのか •ファイルに書き込んだログの目視確認をどうに

かしたい(不具合発生時) #tail,grepはもう嫌だ>_<

•ログ解析の簡易化を図りたい

•そもそも、レガシーなログ取込をどうにかしたい

•DBに残すようにすればいいのでは、どうする?

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

Copyright © CA ADvance .inc 2012

6

背景

そうだ、fluentd をいれよう!

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

Copyright © CA ADvance .inc 2012

7

①fluentd

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

Copyright © CA ADvance .inc 2012

8

fluentdとは

•一言で言うと、ログ取込デーモン •JSON形式で、いろんなシステムに保存できる!

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

Copyright © CA ADvance .inc 2012

9

fluentdの特徴

{ } •PHP •Ruby •Apache

{ } •File •MySQL •MongoDB

•JSON形式で構造化された状態で保存される

•プラグインを利用して、いろんなシステムから、 好きなデータ格納先に保存できる(※下図参照)

•安定性が高い

図)ログ取込例 [input] [output]

これもプラグインで プラグイン導入で対応 buffer

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

Copyright © CA ADvance .inc 2012

10

fluentdインストール

※rubyをインストール環境を容易 ・fluentdのインストール # gem install fluentd ・confの生成 # fluentd –-setup /etc/fluetd

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

Copyright © CA ADvance .inc 2012

11

fluentdインストール

・confの設定 # vim /etc/fluentd/log_server.conf ・起動 # fluentd -c /etc/fluentd/log_server.conf

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

Copyright © CA ADvance .inc 2012

12

fluentd設定ファイル例

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

Copyright © CA ADvance .inc 2012

13

③fluentd導入事例

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

Copyright © CA ADvance .inc 2012

14

fluentd導入事例

•複数のWebサーバーから上がってくる、AP側のログデータを、ログファイル吐き出しから、fluentd経由でのMongoDB吐き出しに変えました。

結果、 ログが一箇所にまとまることができた。 ⇨不具合発生時に効果を発揮! ログ表示画面を作成 ⇨データ確認や、ユーザーの追跡が容易に!

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

Copyright © CA ADvance .inc 2012

15

fluentd構成イメージ

•社内インフラの構成

MongoDB

web01

PHP fluentd

web02

PHP fluentd

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

Copyright © CA ADvance .inc 2012

16

fluentdまとめ

•複数のログデータを一元管理 •ログの出先を変えたくなったら、設定ファイルを

変えるだけで対応可能

•言語が違っても向け先を統一できる •IN{PHP, Ruby, Apache, etc} •OUT{MySQL, MongoDB, Cassandra, Growl, tail, etc}

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

Copyright © CA ADvance .inc 2012

17

•fluentdがバッファを貯めこむ仕組みを保持しているため、出力先が落ちてても、ログを貯めこむことが 可能。なので、

安定性が高い!

fluentdまとめ

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

Copyright © CA ADvance .inc 2012

18

というわけでみんな

を入れてみよう!

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

Copyright © CA ADvance .inc 2012

19

④MongoDB

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

Copyright © CA ADvance .inc 2012

20

はじめに(背景)

•社内システムへのfulentd導入にあたり、ログデータの出力先をMongoDBにしました。

•今回、MongoDBを取り入れた理由として、(小規模な)MongoDBの運用を行い、フローを確立した上で、開発陣のナレッジとして、知識共有し、戦力にできるか見極めるためです。

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

Copyright © CA ADvance .inc 2012

21

•その、MongoDBの導入にあたり、自分が調査した内容について、スライドにまとめてみました。

はじめに(背景)

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

Copyright © CA ADvance .inc 2012

22

MonoDB とは

• MongoDB は、高パフォーマンス、スキーマレス、オープンソースのドキュメント指向データベースである。

• MongoDB は、BSONというJSONのバイナリ版のような形式でドキュメントを表現し、そのコレクションを管理する。この形式は、複雑な階層を持たせることができ、なおかつクエリやインデックスが容易である。

MongoDB – Wikipedia http://ja.wikipedia.org/wiki/MongoDB

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

Copyright © CA ADvance .inc 2012

23

MonoDB の特徴

• 高可用性 • スレーブが死んでも自動で切り離しできる

• レプリカ機能 • 新しいノード接続時、自動でデータの同期もしてくれる!

• スキーマレス

• あとでカラムが自由に増やせる。つまり、柔軟に対応可! ※バグ出ても気づきにくい

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

Copyright © CA ADvance .inc 2012

24

MonoDB の特徴

• インデックスのサポート (複数インデックス可)

• オート・シャーディング(スケールアウト)

• Map Reduce(集計処理)

• GridFS(ファイル格納システム)

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

Copyright © CA ADvance .inc 2012

25

データ構造

• データ格納例 DataBase→Collection→Key→Row→Value ※MySQLとほぼ一緒

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

Copyright © CA ADvance .inc 2012

26

データ構造

• MySQLで例えると、 Collection ≒ Table

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

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)

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

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}})})

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

Copyright © CA ADvance .inc 2012

29

クエリ発行

•インデックスの作成や、コレクションのtruncateもできます! db.users.ensureIndex({user_id:1}); db.users.remove();

•Upsertと機能があって、これが地味に便利そう

•データがあれば、アップデート、なければインサートしてくれるみたい

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

Copyright © CA ADvance .inc 2012

30

MapReduce

• バッチでのデータ処理や集計処理で利用します。

• 基本、入力値として、コレクションを投入し、 出力値として、コレクションへデータを流します。

• 使いドコロとしては、細かいデータをデイリー・マンスリーでまとめたい時、効力を発揮するかも!

• Javascriptで組んでMongoDB に流しこむイメージです。

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

Copyright © CA ADvance .inc 2012

31

サンプルプログラム 1/2

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

Copyright © CA ADvance .inc 2012

32

サンプルプログラム 2/2

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

Copyright © CA ADvance .inc 2012

33

サンプルプログラム(出力結果)

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

Copyright © CA ADvance .inc 2012

34

まとめ

• 耐障害性が高く、自動でレプリカへの同期もやってくれるので、スケールアウトが容易

• スキーマレスでメンテも楽! • 集計したい時は、MapReduceを使おう • MongoDBDateハマりやすい

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

Copyright © CA ADvance .inc 2012

35

ご清聴ありがとうございました。