「Hatena Engineer Seminar #2」で発表した資料です
'MVFOUE NPOHP%# ,JCBOBΛར༻ͨͯ͠ͳϒϩά"#ςετͷࣄྫ)BUFOB&OHJOFFS4FNJOBSJETIJCB@ZV
View Slide
ຊͷΞδΣϯμwͯͳϒϩάͰͷ"#ςετࣄྫհw؆୯ʹ"#ςετΛߦ͏Έհ
ࣗݾհwJETIJCB@ZV !TIJCB@ZVwΞϓϦέʔγϣϯΤϯδχΞೖࣾ
ࣗݾհwͯͳϒϩάνʔϜwཪଆΑΓͷ։ൃ͕ଟ͍wσʔλूܭwσϓϩΠपΓwͦͷଞ৭ʑ
ͯͳϒϩάͰͷ"#ςετࣄྫ
ͯͳϒϩάͰwαʔϏεͷվળʹ"#ςετΛಋೖwϥϯσΟϯάϖʔδͷվળwฤूը໘ͷվળ
ϥϯσΟϯάϖʔδվળwొϘλϯͷΫϦοΫΛ৳͍ͨ͠wϘλϯͱϑΥʔϜͲͪΒ͕ΫϦοΫ͞ΕΔ
ςετ݁Ռ ΫϦοΫ্͕ঢ
"#ςετΛ͢ΔͱwਪଌͰͳ͘ɺࣈΛݕূ͠ͳ͕Βվળ͕ग़དྷΔw։ൃऀͷצͰ࡞Βͳ͍wࣦഊͯ͠ৼΓฦΓ͕ग़དྷΔ
ʑ"#ςετΛ͢ΔʹwͯͳϒϩάͰʑ"#ςετΛ͍ͯ͠Δw࣮ࢪ͕ͱʹ͔͘؆୯Ͱͳ͍ͱବw͍͠ͱΒͳ͍
؆୯ʹ"#ςετΛ͢ΔΈ
ϥϯσΟϯάϖʔδͷ"#ςετखॱwදࣔΛग़͚͠ΔwϘλϯΛΫϦοΫͨ࣌͠ʹϩάΛهwू·ͬͨϩάΛूܭɾάϥϑԽ͢Δ
දࣔͷସू·ͬͨϩάͷूܭɾάϥϑԽΫϦοΫใͷهɾͲͪΒͷύλʔϯʁɾͲͷϘλϯʁ
wදࣔΛग़͚͠wDIBOLPͷΑ͏ͳΈwΫϦοΫϩάͷهw+4ͰͷΠϕϯτૹ৴ɾ'MVFOUEwूܭɾάϥϑԽw.POHP%#ɺ,JCBOBͷར༻Ͱ͖Δ͚ͩ؆୯ʹ
wදࣔΛग़͚͠wDIBOLPͷΑ͏ͳΈwΫϦοΫϩάͷهw+4ͰͷΠϕϯτૹ৴ɾ'MVFOUEwूܭɾάϥϑԽwNPOHP%#ɺ,JCBOBͷར༻Ͱ͖Δ͚ͩ؆୯ʹ
දࣔͷग़͠Θ͚
දࣔͷग़͠Θ͚wࠓճ͋·Γ͠·ͤΜw͜ͷ෦ग़དྷ͍ͯΔͱ͍͏લఏͰ͠·͢
දࣔͷग़͠Θ͚w*1ΞυϨεͳͲͰग़͠Θ͚wSVCZͷDIBOLPwDPPLQBEࣾwͯͳϒϩάͰಉ͡Α͏ͳΈΛ࡞͍ͬͯΔ
ΫϦοΫϩάͷه
؆୯ͳྲྀΕwΫϦοΫ͞ΕͨΒΠϕϯτ͕αʔόʹૹ৴wαʔόͰ"#ςετใͱڞʹ+40/Ͱهw+40/ͷϩά'MVFOUEͰதԝαʔόʹूΊΔ
ΫϦοΫ+4ͰΠϕϯτૹ৴αʔόͰใ͚ͯ+40/ʹهϩάΛ'MVFOUEͰதԝʹ
+4ͰΠϕϯτૹ৴wEBUBFWFOUOBNFଐੑΛॻ͍͓͚ͯͩ͘Ͱૹ৴wσβΠφͳͲͰ؆୯ʹग़དྷΔΑ͏ʹͯͳϒϩάΛ࢝ΊΔ(ແྉ)
࣮wΫϦοΫΠϕϯτΛࢹwEBUBFWFOUOBNF͕͋ΔཁૉͳΒ"1*ʹΞΫηε
࣮ྫ$(document).on('mousedown', '[data-event-name]', function(e) {$.ajax({url: "/api/event", type: "POST",data: {event_name: $(this).attr('data-event-name')}});});
αʔόͰ+40/ϩάwΞΫηεʹ߹Θͤͯ+40/ΛϑΝΠϧग़ྗ͢Δ͚ͩwBQJFWFOU FWFOU@OBNFw"#ςετใڞʹهwͲͪΒͷύλʔϯ͔wͲͷϘλϯ FWFOU͔
FLUENT({tag => "event",event_name => "guide-register-button",}){"tag" : "event","event_name" : "guide-register-button","units" : {"ABUnit::GuideForm" : 1,"ABUnit::EditorColor" : 0,},"time" : 1384844834}
ϩάΛதԝʹूΊΔwͲ͜Ͱه͞Εͯ͏·͘ूΊΒΕ͍ͨwूܭՄࢹԽͷͨΊʹσʔλΛม͍ͨ͠
'MVFOUE
'MVFOUEwγεςϜͷ֤ॴ͔Βग़ྗ͞ΕΔϩάΛૹɾू͢ΔͨΊͷϛυϧΣΞwϓϥάΠϯʹΑͬͯूΊͨϩάΛଞͷσʔλʹมग़དྷΔ
ϩάΛूΊΔߏw֤αʔόϩάϑΝΠϧʹɺϩάߦͷ+40/ͱͯ͠ग़ྗw֤αʔόͷϑΝΠϧΛUBJMͯ͠ɺBHFOU͕தԝʹૹΔ͚ͩ
͜͜·Ͱͷ·ͱΊwಠࣗσʔλଐੑΛ͚Δ͚ͩͰΫϦοΫϩά͕ग़དྷΔΑ͏ʹwϩάࣗಈͰ'MVFOUEͷதԝʹू͞ΕΔΑ͏ʹΫϦοΫ+4ͰΠϕϯτૹ৴αʔόͰใ͚ͯ+40/ʹهϩάΛ'MVFOUEͰதԝʹ
ूܭɾάϥϑԽ
ू͞Εͨϩάw+40/͕'MVFOUEͰू·͍ͬͯΔ͚ͩw͜ͷ··ͰԿΘ͔Βͳ͍
ूܭɾՄࢹԽՄೳʹw"˓ΫϦοΫɺ#˚ΫϦοΫͱ͍͏ใΛूܭwදάϥϑʹΑΔՄࢹԽ
ख๏wॊೈʹूܭNPOHP%#Λར༻w؆୯ʹάϥϑԽ,JCBOBΛར༻
ϩάΛूܭՄೳʹwNPOHP%#Λར༻w'MVFOUEͷ+40/NPOHP%#ʹw+BWB4DSJQUΛͬͯूܭ
'MVFOUENPOHP%#w'MVFOUEͰू͞Εͨϩά͕NPOHP%#ʹೖΔΑ͏ʹ
'MVFOUENPOHP%#wqVFOUQMVHJONPOHPߦͷઃఆw'MVFOUEͷUBH͝ͱͷDPMMFDUJPO͕ग़དྷΔ
'MVFOUEઃఆྫtype mongodatabase fluentcollection debughost mongohostport 10000cappedcapped_size 100m
NPOHP%#Ͱूܭw+BWB4DSJQUͰΫΤϦΛ࡞ΓɺूܭՄೳ
{"tag" : "event","event_name" : "guide-register-button","units" : {"ABUnit::GuideForm" : 1,},}ϩάͷܗࣜ"ύλʔϯͷΫϦοΫूܭdb.event.find({"event_name":"guide-register-button","units.ABUnit::GuideForm":1}).count();
NPOHP%#ͰूܭwΫΤϦΛ࡞ΕूܭՄೳʹwΫΤϦΛ͢ΕॊೈʹूܭͰ͖Δ
άϥϑԽՄೳʹwॊೈʹूܭग़དྷΔ͚ͩͰతୡwͨͩ͠ຖճΫΤϦΛ࡞Δͷେมwͬ͟ͱ"#ςετঢ়گΛάϥϑԽ͍ͨ͠
άϥϑԽՄೳʹw&MBTUJD4FBSDI,JCBOBΛར༻
,JCBOBw&MBTUJDTFBSDIͷΠϯσοΫεΛར༻ͯ͠XFC্Ͱ༷ʑͳάϥϑΛ࡞Δπʔϧw&MBTUJDTFBSDI4PMSͷΑ͏ͳશจݕࡧγεςϜ
'MVFOUE,JCBOBw'MVFOUEͰू͞ΕͨϩάΛ&MBTUJDTFBSDIʹwqVFOUQMVHJOFMBTUJDTFBSDIߦͷઃఆw,JCBOB&MBTUJDTFBSDIΛݟΔΑ͏ʹ
'MVFOUE,JCBOB
'MVFOUEઃఆྫtype elasticsearchhost fluenthostport 9200logstash_format truelogstash_prefix servicetype_name service
,JCBOBͰάϥϑԽw'MVFOUEͷσʔλ&MBTUJDTFBSDIʹೖΔΑ͏ʹͳͬͨwXFC্Ͱ,JCBOBΛར༻ͯ͠άϥϑԽͰ͖Δ
άϥϑԽσϞwશσʔλΛදͰදࣔ͠wΫϦοΫσʔλͷΈʹݕࡧͰߜΓࠐΈw"#ςετঢ়گ͕࣠ͷάϥϑΛՃ
άϥϑԽσϞ{"tag" : "event","event_name" : "guide-register-button","units" : {"ABUnit::GuideForm" : 1,},}ΫϦοΫσʔλΛݕࡧ"#ঢ়ଶΛ࣠ʹάϥϑ
͜͜·Ͱͷ·ͱΊw'MVFOUEͷϩάNPOHP%# &MBTUJDTFBSDIʹwNPOHP%#ͰॊೈʹूܭՄೳʹw,JCBOBͰ؆୯ʹάϥϑԽՄೳʹ
࠷ऴతͳΈ
؆୯ͳ"#ςετखॱwϘλϯʹEBUBFWFOUOBNFͱ͍͏ଐੑՃwϦϦʔεޙ,JCBOBͰάϥϑԽw࠷ऴతʹNPOHP%#Ͱूܭ͠ɺ݁ՌΛ֬ೝ
·ͱΊwͯͳϒϩάͰ"#ςετσʔλղੳͳͲͷࣄ͍ͬͯ·͢w'MVFOUE NPOHP%# ,JCBOBΛར༻ͨ͠"#ςετΛ؆୯ʹߦ͏ΈΛհwࣗࣾͰΈΛ࡞ͬͨͷͰɺͬͱෳࡶͳ"#ςετग़དྷ·͢
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠