第3回Web System Architecture研究会@東京
؆ུԽͨ͠ωοτϫʔΫґଘؔάϥϑͷՄࢹԽج൫id:y_uuki, id:masayoshi, ͯͳ2018/11/17 ୈ3ճ Web System Architectureݚڀձ@౦ژ
View Slide
࣍1. എܠͱత2. ఏҊख๏3. ·ͱΊ
1. എܠͱత
എܠ• ωοτϫʔΫґଘؔͷෳࡶԽ• 10୯ҐͷαʔϏεͷظӡ༻ͷؒʹॏͳΔ૿ங• ϚΠΫϩαʔϏεͳͲͷۙͷτϨϯυมԽ• γεςϜཧऀ͕هԱͰ͖ͳ͍ݸʑͷ௨৴ͷґଘؔ• Өڹൣғ͕Θ͔Βͳ͍ͨΊɺมߋͷͨͼʹґଘؔΛௐࠪ͢Δඞཁ͕ൃੜ
ઌߦख๏• ϑΝΠΞΥʔϧͷϩΪϯάػߏύέοτΩϟϓνϟ• TCP/UDP௨৴ϩάΛूܭαʔόʹసૹ͠ґଘՄࢹԽ• ωοτϫʔΫεΠον͔Βͷ౷ܭใऔಘ (sFlow/NetFlowͳͲ)• αΠυΧʔϓϩΩγΞϓϦέʔγϣϯϩά (ࢄτϨʔγϯά)
֤ઌߦख๏ͷ՝• ϑΝΠΞΥʔϧϩΪϯά(iptables)• a) ύέοτϨΠςϯγ͕૿Ճ• ύέοτΩϟϓνϟ(tcpdump)• b) ύέοτશମΛऩू͢ΔͨΊɺऩू·ͨղੳͷͨΊͷෛՙͷ૿Ճ• sFlow/NetFlow• c) αϯϓϦϯά͞ΕΔͨΊґଘཏ͕Լ• ΞϓϦέʔγϣϯ(L7)ͰͷϦΫΤετ୯ҐͷϩΪϯά• d) ΞϓϦέʔγϣϯͷมߋ͕ඞཁ
ઌߦख๏શମͷ՝• e) ऩूσʔλ͕ґଘؔΛΔ͚ͩʹ͕ͯ͠ଟ͘• ύέοτɺTCPଓɺϦΫΤετ୯Ґͷใ• ྫ͑ΤϑΣϝϥϧϙʔτͷଓใͳͲ• f) ґଘؔάϥϑߏͷෳࡶԽ• ෛՙࢄͳͲʹΑΓϗετ͕૿Ճͨ͠߹ʹϊʔυͱΤοδͷݸ͕૿͑Δ
2. ఏҊख๏
ཁ݅• 1)ΞϓϦέʔγϣϯੑೳʹӨڹΛ༩͑ͳ͍ଓใͷऩूՄೳ (՝a),b),c))• ݱ࣮తͳਫ਼Ͱଓใͷऩूཱ྆• 2)ΞϓϦέʔγϣϯͷมߋෆཁͰऩूՄೳ (՝d)• 3)ूԽ͞Εͨϊʔυ୯ҐͰՄࢹԽՄೳ (՝e)• 4)ϗετ୯ҐͰͳ͘ϗετͷෳάϧʔϓ୯ҐͰՄࢹԽՄೳ ՝ f)• 5)ҙͷ࣌ؒൣғͰͷґଘؔΛग़ྗՄೳ
ఏҊख๏• ΞϓϦέʔγϣϯͷมߋෆཁͳωοτϫʔΫ௨৴ใͷऩू (ཁ݅2)• OSʹ͍߹ΘͤऔಘՄೳͳTCPଓใΛར༻• ΞϓϦέʔγϣϯੑೳʹӨڹΛ༩͑ͳ͍TCPଓใͷऩू (ཁ݅1)• OS͕ͭෛՙͰऔಘՄೳͳTCPଓͷ౷ܭใΛར༻• ूԽ͞ΕͨΤοδͱϊʔυ୯ҐͰՄࢹԽՄೳ• Τοδ: ಉҰϗετ͔ͭಉҰϦοεϯϙʔτͷTCPଓू (ཁ݅3)• ϊʔυ: αʔόཧπʔϧͷAPIͱ࿈ܞՄೳ (ཁ݅4)• ίωΫγϣϯཧDBʹूԽ͞ΕͨTCPଓΛ͖࣌ؒͰཧՄೳ (ཁ݅5)
ϗετϑϩʔू• Τοδ: ಉҰϗετ͔ͭಉҰϦοεϯϙʔτͷTCPଓू• Τοδͷҹͷ͖: TCPͷΞΫςΟϒΦʔϓϯͱύογϒΦʔϓϯͰఆport 80port 3306port 10000port 10001port 10002port 15000port 15001port 15002ϗετϑϩʔϗετϑϩʔHost Host
ϗετϑϩʔूͷ࣮• 1. Netlink APIʹΑΓTCPଓใΛऔಘ͢Δ• 2. LISTENεςʔτͷଓͷϩʔΧϧϙʔτͷΈநग़• 3. 1.ͱ2.Λಥ͖߹Θͤɼଓઌϙʔτ͕ϦοεϯϙʔτͰ͋ΕΞΫςΟϒΦʔϓϯɼͦΕҎ֎ͷଓύογϒΦʔϓϯͱఆ͢Δɽ
sendagentagentCMDBHostHostagentHostanalyzersysadmingetgetఏҊख๏ͷશମϑϩʔ֓ཁ
sendagentagentPostgresHostHostagentHostCLIsysadmingetgetఏҊख๏ͷશମϑϩʔ֓ཁMackerelget
CMDBͷεΩʔϚ• nodesςʔϒϧ: ϊʔυใ• IDͱIPΞυϨεͱϙʔτ൪߸• flowsςʔϒϧ: ϗετϑϩʔใ• IDͱ͖ͱૹ৴ݩͱૹ৴ઌͷͦΕͧΕͷϊʔυID
Mackerel APIʹΑΔෳϊʔυͷάϧʔϓԽ• ͋Β͔͡Ί֤ϗετΛMackerelʹొ͠ɺෳ͞Εͨϗετ܈Λ1ͭͷϩʔϧʹ·ͱΊ͓ͯ͘• MackerelΛར༻ͨ͠ෳϊʔυͷάϧʔϓԽखॱ• analyzer͕CMDB͔ΒϊʔυΛऔಘ• Mackerel APIʹΑΓϗετใҰཡΛऔಘ֘͠ϊʔυͷIPΞυϨεͰϑΟϧλ• ಉҰϩʔϧͷϊʔυΛάϧʔϓԽ
github.com/yuuki/mftracer$ mftctl --level 2 --dest-service blog --dest-roles redis --dest-roles memcachedblog:redisᵋ<-- 10.0.0.22:many (connections:30)ᵋ<-- 10.0.0.23:many (connections:30)ᵋ<-- 10.0.0.24:many (connections:30)ᵋ<-- 10.0.0.30:many (connections:1)ᵋ<-- 10.0.0.31:many (connections:1)ᵋ<-- 10.0.0.25:many (connections:30)blog:memcachedᵋ<-- 10.0.0.23:many (connections:30)ᵋ<-- 10.0.0.25:many (connections:30)
্࣮ͷ՝• ωοτϫʔΫτϙϩδͷ॥ʹର͢Δߟྀ• Ϋϥυࣄۀऀ͕ఏڙ͢ΔϚωʔδυαʔϏεΛར༻͍ͯ͠Δ߹ɼIPΞυϨε͔Β࣮ମΛͨͲΔ͜ͱͷࠔ• ͋ΔಛఆͷϊʔυΛࢦఆ͠ɼࢦఆͨ͠ϊʔυ”͔Β”ଓ͢ΔϊʔυҰཡΛऔಘ͢Δ࣮ (ٯՄೳ)• ࣌ؒൣғΛࢦఆͨ͠ґଘؔͷऔಘ• ݱࡏ͔Βաڈͯ͢ͷґଘؔΛऔಘ͢ΔΑ͏ʹͳ͍ͬͯΔ
3. ·ͱΊ
·ͱΊ• γεςϜཧऀ͕ݸʑͷωοτϫʔΫґଘؔΛهԱͰ͖ͳ͍• ΞϓϦέʔγϣϯΛมߋͤͣʹɼΞϓϦέʔγϣϯʹӨڹΛ༩͑Δ͜ͱͳ͘ɼదͳநͰใΛऔಘՄೳͳґଘؔղੳγεςϜ
ࠓޙͷ՝• αʔϕΠ• ֤ωοτϫʔΫͰઌߦݚڀ͕͋ΔͨΊɺຊݚڀͷཱͪҐஔΛ໌֬Խ• ධՁ• ϑΝΠΞΥʔϧϩΪϯάͱύέοτΩϟϓνϟͷϨΠςϯγ૿େͷධՁ• ͯ͢ͷଓใΛऔಘͰ͖ΔΘ͚Ͱͳ͍ͨΊɼଓใͷऔಘΛ֬ೝ͠ɼ࣮ӡ༻ʹ͓͍ͯɼेͳਫ਼Ͱ͋Δ͜ͱΛ֬ೝ• ల• ಉ͡Α͏ͳ௨৴Λ͍ͯ͠ΔϗετΛΫϥελϦϯάਪఆ• ίϯςφܕԾԽڥͰͷґଘؔͷղੳͷൃల