際際滷

際際滷Share a Scribd company logo
゛ M O N G O D B 聞 っ ち ゃ う ぞ  ゛
(Nginx+)Fluentd+MongoDB
&Groovy+MongoDB
朕肝
1. Fluentdって
2. wajaでの駻胆輦
3. Nginx+Fluentd+MongoDBO協
4. 聞えそうなシチュエ`ション
5. Groovyって
6. Groovy+MongoDB
1. Fluentdって
? Open Source Log Management
? 晩云繁_k宀 & Ruby(コアはC, thin Ruby wrapper)
? インプット、アウトプットをつなぐ仝パイプ々
? ログの秘竃薦が匯桑蛍かりやすい聞い圭だったのでしょう
? JSON
? プラグインメカニズム
? 秘薦
? ファイル、ストリ`ム、etc´
? 竃薦
? ファイル、メ`ル、ストリ`ム、DB、etc´
2. wajaでの駻胆輦
? ログ盾裂の勣李
? Analyticsだけでは岑ることがyしいO協が}jになるタイプ
? 斌瞳匯Eペ`ジから斌瞳ペ`ジへのw卞方APサ`バ娃
? {砲紳併
? 飴飴悒蹈哀侫.ぅ襪grep/awk。。。
? 盾裂鵑離蹈哀侫.ぅ襪DBに秘れられたら、、
? 喘アプリ恬るための垢方。。
? F佩のPostgreSQL┐箸いΔDBサ`バは聞いたくない
? 畠何まるっとすべて匯櫃暴Q
3. Nginx+Fluentd+MongoDB
Nginx
Fluentd
Tomcat
Nginx
Fluentd
Tomcat
Fluentd
MongoDB
wajaweb01
wajaweb02
wajalog01
Fluentd(wajaweb01, wajaweb02)
- NginxのログファイルをtailO秘薦
- wajalog01のFluentdにストリ`ム僕┳薦
Fluentd(wajalog01)
- ストリ`ムから秘薦
- MongoDBに竃薦
MongoDB
- 勣箔に惄辰z
3. Nginx+Fluentd+MongoDB
? Nginx
? 函りたいログを弖紗するのみ
? $remote_addr, $remote_user, $time_local, $request, $status,
$body_bytes_sent, $http_referer, $http_user_agent,
$request_time
? $http_x_forwarded_for ☆リバ`スプロキシ┘踪`ドバランサh廠
? $upstream_addr ☆どのAPサ`バにI尖を尅ったか
? $upstream_response_time ☆APサ`バからの鬴rg
? $cookie_JSESSIONID ☆COOKIEのセッションID
3. Nginx+Fluentd+MongoDB
? Fluentd(wajaweb01, wajaweb02)
<source>
type tail
path /var/log/nginx/waja.access.log
format /^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) [(?<time>[^]]*)]
^(?<method>S+)(?: +(?<path>[^ ]*) +S*)? ̄ (?<status>[^ ]*) ´ (嶄待)/
time_format %d/%b/%Y:%H:%M:%S %z
tag nginx.waja.access
pos_file /var/log/td-agent/nginx.waja.access.pos
</source>
(ログファイル蛍O協)
<match nginx.**>
type forward
buffer_chunk_limit 10m
<server>
host wajalog01
</server>
</match>
秘薦
竃薦
3. Nginx+Fluentd+MongoDB
? Fluentd(wajalog01)
<source>
type forward
port 24224
</source>
<match nginx.**>
type mongo
host localhost
database nginx
tag_mapped
remove_tag_prefix nginx.
flush_interval 10s
buffer_chunk_limit 10m
</match>
秘薦
竃薦
3. Nginx+Fluentd+MongoDB
? MongoDB
$ mongo
MongoDB shell version: 2.4.4
connecting to: test
> show dbs
admin (empty)
local 0.078125GB
nginx 19.9443359375GB
> use nginx
switched to db nginx
> show tables
reason.access
ssl.waja.access
system.indexes
waja.access
3. Nginx+Fluentd+MongoDB
? まとめ
? FluentdがJSONベ`スなので、MongoDBとのH才來が互い
? というかプラグイン販せなのですが。。
? MongoDBがスキ`マレス
? MongoDBのO協┘好`マ協xなどは採もしていない。
? 函りたいログ奉來をやしたい栽、Nginx、FluentdのO協筝のみ
? MongoDBがシャ`ディング
? 盾裂I尖をハ`ドに佩うようになった栽
? ログがどんどんえた栽
? Capped Collectionを聞う、というxk岔もあり
? tじて仝カンタン々
4. 聞えそうなシチュエ`ション
? とにかくログを融っzみまくる
? Tomcat, PostgreSQLのログだって秘れちゃえる
? きっとlかプラグインをいてるのでは。。屎ア蹶FBりたくない。。
? ログデ`タを匯凄砿尖することで、{砲鮑叟晒
? MongoDBをキャッシュサ`バに
? オンメモリや、ファイル、memcachedなどの旗紋
5. Groovyって
? Javaをする冱Z
? Javaの剽いところに返が曙く湖じ
? スクリプトとしても聞える
? Closure, AST, 侏容などの碧Mみ
? より仝に々Javaがける
5. Groovyって
? ある晩原をO協したい by Java
? キィィィィ````````````````
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.MONTH, 1); // 2埖
cal.set(Calendar.DATE, 15);
cal.set(Calendar.HOUR_OF_DAY, 13);
cal.set(Calendar.MINUTE, 27);
cal.set(Calendar.SECOND, 30);
cal.set(Calendar.MILLISECOND, 999);
cal.add(Calendar.DATE, 2); // 2晩瘁
Date plus2 = cal.getTime();
5. Groovyって
? ある晩原をO協したい by Groovy
? ス、スッキリ``
Calendar cal = Calendar.getInstance()
cal.with {
set(YEAR, 2013)
set(MONTH, FEBRUALY) // 2埖
set(DATE, 15)
set(HOUR_OF_DAY, 13)
set(MINUTE, 27)
set(SECOND, 30)
set(MILLISECOND, 999)
}
def now = new Date()
def plus2 = now + 2
6. Groovy+MongoDB
? DBと俊A
def mongo = new Mongo("localhost", 27017)
def db = mongo.getDB("crawler")
def collection = db.getCollection("sites")
6. Groovy+MongoDB
? ドキュメントを携
def doc = [
url: "org.mongodb",
tags:
["database", "open-source"],
attrs: [
["lastAccess", new Date()],
["pingtime", 20]
]
] as BasicDBObject
collection.insert(doc)
6. Groovy+MongoDB
? ドキュメントを燕幣
collection.find().each { obj ->
println "objs : " + obj
}

More Related Content

Fluentd+MongoDB+Groovy

  • 1. ゛ M O N G O D B 聞 っ ち ゃ う ぞ ゛ (Nginx+)Fluentd+MongoDB &Groovy+MongoDB
  • 2. 朕肝 1. Fluentdって 2. wajaでの駻胆輦 3. Nginx+Fluentd+MongoDBO協 4. 聞えそうなシチュエ`ション 5. Groovyって 6. Groovy+MongoDB
  • 3. 1. Fluentdって ? Open Source Log Management ? 晩云繁_k宀 & Ruby(コアはC, thin Ruby wrapper) ? インプット、アウトプットをつなぐ仝パイプ々 ? ログの秘竃薦が匯桑蛍かりやすい聞い圭だったのでしょう ? JSON ? プラグインメカニズム ? 秘薦 ? ファイル、ストリ`ム、etc´ ? 竃薦 ? ファイル、メ`ル、ストリ`ム、DB、etc´
  • 4. 2. wajaでの駻胆輦 ? ログ盾裂の勣李 ? Analyticsだけでは岑ることがyしいO協が}jになるタイプ ? 斌瞳匯Eペ`ジから斌瞳ペ`ジへのw卞方APサ`バ娃 ? {砲紳併 ? 飴飴悒蹈哀侫.ぅ襪grep/awk。。。 ? 盾裂鵑離蹈哀侫.ぅ襪DBに秘れられたら、、 ? 喘アプリ恬るための垢方。。 ? F佩のPostgreSQL┐箸いΔDBサ`バは聞いたくない ? 畠何まるっとすべて匯櫃暴Q
  • 5. 3. Nginx+Fluentd+MongoDB Nginx Fluentd Tomcat Nginx Fluentd Tomcat Fluentd MongoDB wajaweb01 wajaweb02 wajalog01 Fluentd(wajaweb01, wajaweb02) - NginxのログファイルをtailO秘薦 - wajalog01のFluentdにストリ`ム僕┳薦 Fluentd(wajalog01) - ストリ`ムから秘薦 - MongoDBに竃薦 MongoDB - 勣箔に惄辰z
  • 6. 3. Nginx+Fluentd+MongoDB ? Nginx ? 函りたいログを弖紗するのみ ? $remote_addr, $remote_user, $time_local, $request, $status, $body_bytes_sent, $http_referer, $http_user_agent, $request_time ? $http_x_forwarded_for ☆リバ`スプロキシ┘踪`ドバランサh廠 ? $upstream_addr ☆どのAPサ`バにI尖を尅ったか ? $upstream_response_time ☆APサ`バからの鬴rg ? $cookie_JSESSIONID ☆COOKIEのセッションID
  • 7. 3. Nginx+Fluentd+MongoDB ? Fluentd(wajaweb01, wajaweb02) <source> type tail path /var/log/nginx/waja.access.log format /^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) [(?<time>[^]]*)] ^(?<method>S+)(?: +(?<path>[^ ]*) +S*)? ̄ (?<status>[^ ]*) ´ (嶄待)/ time_format %d/%b/%Y:%H:%M:%S %z tag nginx.waja.access pos_file /var/log/td-agent/nginx.waja.access.pos </source> (ログファイル蛍O協) <match nginx.**> type forward buffer_chunk_limit 10m <server> host wajalog01 </server> </match> 秘薦 竃薦
  • 8. 3. Nginx+Fluentd+MongoDB ? Fluentd(wajalog01) <source> type forward port 24224 </source> <match nginx.**> type mongo host localhost database nginx tag_mapped remove_tag_prefix nginx. flush_interval 10s buffer_chunk_limit 10m </match> 秘薦 竃薦
  • 9. 3. Nginx+Fluentd+MongoDB ? MongoDB $ mongo MongoDB shell version: 2.4.4 connecting to: test > show dbs admin (empty) local 0.078125GB nginx 19.9443359375GB > use nginx switched to db nginx > show tables reason.access ssl.waja.access system.indexes waja.access
  • 10. 3. Nginx+Fluentd+MongoDB ? まとめ ? FluentdがJSONベ`スなので、MongoDBとのH才來が互い ? というかプラグイン販せなのですが。。 ? MongoDBがスキ`マレス ? MongoDBのO協┘好`マ協xなどは採もしていない。 ? 函りたいログ奉來をやしたい栽、Nginx、FluentdのO協筝のみ ? MongoDBがシャ`ディング ? 盾裂I尖をハ`ドに佩うようになった栽 ? ログがどんどんえた栽 ? Capped Collectionを聞う、というxk岔もあり ? tじて仝カンタン々
  • 11. 4. 聞えそうなシチュエ`ション ? とにかくログを融っzみまくる ? Tomcat, PostgreSQLのログだって秘れちゃえる ? きっとlかプラグインをいてるのでは。。屎ア蹶FBりたくない。。 ? ログデ`タを匯凄砿尖することで、{砲鮑叟晒 ? MongoDBをキャッシュサ`バに ? オンメモリや、ファイル、memcachedなどの旗紋
  • 12. 5. Groovyって ? Javaをする冱Z ? Javaの剽いところに返が曙く湖じ ? スクリプトとしても聞える ? Closure, AST, 侏容などの碧Mみ ? より仝に々Javaがける
  • 13. 5. Groovyって ? ある晩原をO協したい by Java ? キィィィィ```````````````` Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2013); cal.set(Calendar.MONTH, 1); // 2埖 cal.set(Calendar.DATE, 15); cal.set(Calendar.HOUR_OF_DAY, 13); cal.set(Calendar.MINUTE, 27); cal.set(Calendar.SECOND, 30); cal.set(Calendar.MILLISECOND, 999); cal.add(Calendar.DATE, 2); // 2晩瘁 Date plus2 = cal.getTime();
  • 14. 5. Groovyって ? ある晩原をO協したい by Groovy ? ス、スッキリ`` Calendar cal = Calendar.getInstance() cal.with { set(YEAR, 2013) set(MONTH, FEBRUALY) // 2埖 set(DATE, 15) set(HOUR_OF_DAY, 13) set(MINUTE, 27) set(SECOND, 30) set(MILLISECOND, 999) } def now = new Date() def plus2 = now + 2
  • 15. 6. Groovy+MongoDB ? DBと俊A def mongo = new Mongo("localhost", 27017) def db = mongo.getDB("crawler") def collection = db.getCollection("sites")
  • 16. 6. Groovy+MongoDB ? ドキュメントを携 def doc = [ url: "org.mongodb", tags: ["database", "open-source"], attrs: [ ["lastAccess", new Date()], ["pingtime", 20] ] ] as BasicDBObject collection.insert(doc)