Slide 1

Slide 1 text

ྑ͍σόοάϩά͸ϓϩδΣΫτͷࢿ࢈Ͱ͋Δ Fluentd Meetup in Matsue (2016-07-30) yhara (Yutaka Hara) Fluentd Meetup in Matsue (2016-07-30) 1

Slide 2

Slide 2 text

ΞδΣϯμ 1. ͳͥϩά͕ॏཁ͔ 2. ͳͥϩά͕ࢿ࢈ͳͷ͔ 3. Loggerͷ࢖͍ํ 4. ϩάͷೖΕํ 5. ϩάΛಡΈ΍͘͢͢Δ޻෉ Fluentd Meetup in Matsue (2016-07-30) 2

Slide 3

Slide 3 text

ࣗݾ঺հ • @yhara (twi,er, github) • ࣎լݝ→দߐ (2008ʙ) • (ג)ωοτϫʔΫԠ༻௨৴ݚڀॴ • Rubyͷ·ͭ΋ͱ͞Μͷ͍Δձࣾ Fluentd Meetup in Matsue (2016-07-30) 3

Slide 4

Slide 4 text

NaClඇެࣜϒϩά Fluentd Meetup in Matsue (2016-07-30) 4

Slide 5

Slide 5 text

Fluentd Meetup in Matsue (2016-07-30) 5

Slide 6

Slide 6 text

ϘϧμϦϯά΍ͬͯ ·͢ ʮদߐนͷ΅ΓʯͰݕࡧ Fluentd Meetup in Matsue (2016-07-30) 6

Slide 7

Slide 7 text

ͻͱͪ͘ʹϩάͱ͍ͬͯ΋͍Ζ͍Ζ ͋Γ·͕͢ࠓ೔͸͜͏͍͏ϩάͷ࿩ require 'logger' LOGGER = Logger.new("log.txt") LOGGER.info("ىಈ͠·ͨ͠") Fluentd Meetup in Matsue (2016-07-30) 7

Slide 8

Slide 8 text

ྑ͍ίʔυ ྑ͍ςετ Fluentd Meetup in Matsue (2016-07-30) 8

Slide 9

Slide 9 text

ྑ͍ϩάʁ Fluentd Meetup in Matsue (2016-07-30) 9

Slide 10

Slide 10 text

ྑ͘ͳ͍ϩά ʹಡΊͳ͍ϩά Fluentd Meetup in Matsue (2016-07-30) 10

Slide 11

Slide 11 text

ϩάΛਓ͕ؒಡΉͱ͍͏લఏ͕ڞ༗͞Εͯͳ͍…ʁ ! Fluentd Meetup in Matsue (2016-07-30) 11

Slide 12

Slide 12 text

ʘ!஌Βͳ͍ͷ͔… LoggerʹൿΊΒΕͨྗΛ…ʗ Fluentd Meetup in Matsue (2016-07-30) 12

Slide 13

Slide 13 text

1. ͳͥϩά͕ॏཁͳͷ͔ Fluentd Meetup in Matsue (2016-07-30) 13

Slide 14

Slide 14 text

σόοάϩάͬͯɺσόοάͷͱ͖ ʹೖΕΔ΍ͭͰ͠ΐʁ Fluentd Meetup in Matsue (2016-07-30) 14

Slide 15

Slide 15 text

σόοάϩάͬͯɺσόοάͷͱ͖ ʹೖΕΔ΍ͭͰ͠ΐʁ Fluentd Meetup in Matsue (2016-07-30) 15

Slide 16

Slide 16 text

όά͕ग़͔ͯΒσόοάϩάΛ ೖΕ͍ͯͨͷͰ͸஗͍ Fluentd Meetup in Matsue (2016-07-30) 16

Slide 17

Slide 17 text

ਖ਼͍͠σόοάखॱ 1. όάΛൃݟ͢Δ 2. ϩάΛݟΔ 3. ݪҼ͕Θ͔Δ Fluentd Meetup in Matsue (2016-07-30) 17

Slide 18

Slide 18 text

ʘΘ͔Δʗ Fluentd Meetup in Matsue (2016-07-30) 18

Slide 19

Slide 19 text

ڀۃͷϩά͕ೖΕΒΕͨϓϩδΣΫτʹ͓͍ͯ͸ɺσόοάʹ͔͔Δ࣌ؒ͸ݶ Γͳ͘୹͘ͳΓ·͢ɻ͜ͷঢ়ଶΛ໨ඪͱ͠·͢ Fluentd Meetup in Matsue (2016-07-30) 19

Slide 20

Slide 20 text

2. ͳͥϩά͸ࢿ࢈ͳͷ͔ Fluentd Meetup in Matsue (2016-07-30) 20

Slide 21

Slide 21 text

ྑ͍ϩάͱ͸ • σόοάΛॿ͚Δ΋ͷ • ͦͷͨΊʹ͸ʁ • ʮԿ͕ى͔ͬͨ͜ʯ͕෼͔Γ΍͍͢ͷ͕େࣄ • σόοάϩά͸ਓ͕ؒಡΉ΋ͷͳͷͰɺಡΈ΍ ͕͢͞ॏཁ Fluentd Meetup in Matsue (2016-07-30) 21

Slide 22

Slide 22 text

࠷ॳ͔Β׬ᘳͳϩά͸ॻ͚ͳ͍ • ͲͷΑ͏ͳϩά͕໾ཱ͔ͭ͸ɺσόοάΛ΍ͬͯ Έͳ͍ͱ෼͔Βͳ͍ • ਪᏏ͕ඞཁ • ϓϩδΣΫτͷϑΣʔζʹΑͬͯɺʮద੾ͳϩ άʯ͸มԽ͢Δ Fluentd Meetup in Matsue (2016-07-30) 22

Slide 23

Slide 23 text

ྫ ϓϩδΣΫτॳظ def some_task LOGGER.info("ॲཧAΛ։࢝͠·͢") do_A LOGGER.info("ॲཧA͕ऴྃ͠·ͨ͠") end Fluentd Meetup in Matsue (2016-07-30) 23

Slide 24

Slide 24 text

ྫ ϓϩδΣΫτޙظ def some_task do_A LOGGER.info("ॲཧAΛߦ͍·ͨ͠") end • ॲཧAͰΤϥʔ͕΄ͱΜͲى͖ͳ͘ͳΕ͹ɺϩά ͸ʮߦ͍·ͨ͠ʯ͚ͩͰे෼ Fluentd Meetup in Matsue (2016-07-30) 24

Slide 25

Slide 25 text

େࣄͳ͜ͱ͸ • ʮྑ͍ϩάΛॻ͜͏ʯͱࢥ͏͜ͱ • ໨ࢦ͍ͯ͠ͳ͍ͱ͜Ζʹ͸ͨͲΓண͚ͳ͍ • ಡΈ΍͍͢ϩάʹͳΔΑ͏ɺదٓϝϯςφϯε͠ Α͏ Fluentd Meetup in Matsue (2016-07-30) 25

Slide 26

Slide 26 text

3. Loggerͷ࢖͍ํ Fluentd Meetup in Matsue (2016-07-30) 26

Slide 27

Slide 27 text

ϩΨʔΛಋೖ͠Α͏ require 'logger' LOGGER = Logger.new(STDOUT) LOGGER.info("ىಈ͠·ͨ͠") ↓࣮ߦ݁Ռ I, [2016-07-27T21:50:08.054189 #50431] INFO -- : ىಈ͠·ͨ͠ Fluentd Meetup in Matsue (2016-07-30) 27

Slide 28

Slide 28 text

puts͡ΌͩΊͳͷʁ puts "ىಈ͠·ͨ͠" Fluentd Meetup in Matsue (2016-07-30) 28

Slide 29

Slide 29 text

LoggerΛ࢖ͬͨํ͕͍͍ཧ༝(1) • ࣌ࠁ͕ग़Δ(ϩάͱϩάͷʮִؒʯ͕෼͔ΔͷͰศ ར) • ·ͱΊͯΦϯɾΦϑͰ͖Δ • Logger.new(nil) #=> ग़ྗ͞Εͳ͍ Fluentd Meetup in Matsue (2016-07-30) 29

Slide 30

Slide 30 text

LoggerΛ࢖ͬͨํ͕͍͍ཧ༝(2) • ग़ྗΛ·ͱΊͯ੔ܗͰ͖Δ(forma(er) σϑΥϧτ I, [2016-07-27T21:50:08.054189 #50431] INFO -- : ىಈ͠·ͨ͠ ྫ̍ 2016-07-27 21:50:08 +0900 [INFO] ىಈ͠·ͨ͠ ྫ̎ {"time":"2016-07-27 21:50:08 +0900","level":"INFO","msg":"ىಈ͠·ͨ͠"} Fluentd Meetup in Matsue (2016-07-30) 30

Slide 31

Slide 31 text

LoggerΛ࢖ͬͨํ͕͍͍ཧ༝(3) • ϑΝΠϧʹग़͢͜ͱ΋Ͱ͖Δ • Logger.new("log.txt") • (Rubyͷ৔߹)ϩάϩʔςʔτ΋Ͱ͖Δͧ (shi+_age, shi+_size) • ϩάϨϕϧΛ੾Γସ͑ΒΕΔ Fluentd Meetup in Matsue (2016-07-30) 31

Slide 32

Slide 32 text

ϩάϨϕϧ • DEBUG/INFO/WARN/ERROR/FATAL • ݴޠɾϥΠϒϥϦʹΑͬͯ͸ҧ͏͜ͱ΋͋Δ • ҎԼͷΑ͏ʹ͢ΔͱɺINFOҎ্ͷϩά͚ͩग़ΔΑ ͏ʹͳΔ • Railsͷ৔߹ɺproduc;on͸INFOҎ্ LOGGER = Logger.new(STDOUT) LOGGER.level = Logger::INFO Fluentd Meetup in Matsue (2016-07-30) 32

Slide 33

Slide 33 text

4. ϩάͷೖΕํ Fluentd Meetup in Matsue (2016-07-30) 33

Slide 34

Slide 34 text

Ͳͷϩά͔ΒೖΕΔ͔ʁ • FATAL • ERROR • WARN • INFO • DEBUG Fluentd Meetup in Matsue (2016-07-30) 34

Slide 35

Slide 35 text

Ͳͷϩά͔ΒೖΕΔ͔ʁ • FATAL • ERROR • WARN • INFO • DEBUG Fluentd Meetup in Matsue (2016-07-30) 35

Slide 36

Slide 36 text

INFOϩάΛೖΕΔ • ࣮گͷΑ͏ʹॻ͘ • ʮαʔόʹ઀ଓ͠·ͨ͠ʯ • ʮϢʔβΛ࡞੒͠·͢ʯ • ʮઓಆΛ։࢝͠·͢ʯ • σόοάͷى఺ʹͳΔ • ʮͲ͜·Ͱਖ਼ৗ͔ͩͬͨʯ͕Θ͔Δ Fluentd Meetup in Matsue (2016-07-30) 36

Slide 37

Slide 37 text

INFOΛೖΕΔ΂͖৔ॴ • ॲཧͷઅ໨ • ྫ) όονॲཧͳΒɺ1߲໨ਐΉ͝ͱͱ͔ • "ϑΝΠϧΛૹ৴͠·ͨ͠ [12/30]" • ঢ়ଶ͕มΘͬͨͱ͖ • ྫ) ήʔϜϓϩάϥϜͳΒɺը໘͕ભҠͨ͠ͱ͖ Fluentd Meetup in Matsue (2016-07-30) 37

Slide 38

Slide 38 text

ӕʹͳΒͳ͍Α͏ʹ͢Δ def create_user(name) logger.info("Ϣʔβ#{name}Λ࡞੒͠·ͨ͠") User.new(name: name).save end Fluentd Meetup in Matsue (2016-07-30) 38

Slide 39

Slide 39 text

ӕʹͳΒͳ͍Α͏ʹ͢Δ def create_user(name) logger.info("Ϣʔβ#{name}Λ࡞੒͠·ͨ͠") User.new(name: name).save end • save͕ࣦഊ͢Δͱɺϩάʹʮ࡞੒͠·ͨ͠ʯͱग़ ͯΔͷʹ࣮ࡍ͸͞Ε͍ͯͳ͍ Fluentd Meetup in Matsue (2016-07-30) 39

Slide 40

Slide 40 text

ӕʹͳΒͳ͍Α͏ʹ͢Δ def create_user(name) User.new(name: name).save logger.info("Ϣʔβ#{name}Λ࡞੒͠·ͨ͠") end • saveͷ͋ͱʹϩάΛग़ͤ͹OK Fluentd Meetup in Matsue (2016-07-30) 40

Slide 41

Slide 41 text

INFOϩάΛೖΕΔϝϦοτ • ʮ͜ͷϝιου͸ԿΛ͢Δͷ͔ʯΛݟ௚͢ػձʹͳΔ class Player # ๆଧͪͰ߈ܸ͢Δ def mineuchi @message = "҆৺͠Ζɺๆଧͪ͡Ό" ... if ... logger.info("ఢ#{name}Λࡴ͠·ͨ͠") ... end Fluentd Meetup in Matsue (2016-07-30) 41

Slide 42

Slide 42 text

DEBUGϩάΛೖΕΔ • ม਺ͷ஋ͳͲΛग़ྗ͢Δɺ͕ • logger.debug("x: #{x}, y: #{y}") • શ෦Λίϛοτͯ͠͸͍͚ͳ͍ • ϩά͕ग़͗͢ΔͱअຐʹͳΔ(ಡΊͳ͘ͳΔ)͔ Β • ࣍΋࢖͍ͦ͏ɺͱ͍͏΋ͷ͚ͩίϛοτ͢Δ Fluentd Meetup in Matsue (2016-07-30) 42

Slide 43

Slide 43 text

DEBUGϩάΛೖΕΔ • ίϛοτ͢Δ΋ͷ͸ɺଞਓ͕ݟͯ΋෼͔ΔΑ͏ʹॻ͘ • logger.debug("࠲ඪ(#{x}, #{y})Λ୳ࡧ͠· ͢") • ݁ՌతʹɺINFOϩάͱಉ͡ॻ͖ํʹͳΔ(ʙ͠· ͢ɺ͠·ͨ͠) • INFOͱDEBUGͷ࢖͍෼͚ • τϥϒϧγϡʔςΟϯά༻ͷ΋ͷ͸DEBUGɺͱ͔ Fluentd Meetup in Matsue (2016-07-30) 43

Slide 44

Slide 44 text

INFOͱDEBUGͷ࢖͍෼͚ͷྫ def connect_server ... @server = ... ... logger.info("αʔόʹ઀ଓ͠·ͨ͠(host: #{@host})") end • "Cannot connect to server" Έ͍ͨͳྫ֎͕ग़ͨͱ͢Δ • @host͕ؒҧ͍ͬͯΔʁ • @host͸߹ͬͯΔ͕αʔό͕མ͍ͪͯΔʁ Fluentd Meetup in Matsue (2016-07-30) 44

Slide 45

Slide 45 text

INFOͱDEBUGͷ࢖͍෼͚ͷྫ def connect_server logger.debug("αʔόʹ઀ଓ͠·͢(host: #{@host})") ... @server = ... ... logger.info("αʔόʹ઀ଓ͠·ͨ͠(host: #{@host})") end Fluentd Meetup in Matsue (2016-07-30) 45

Slide 46

Slide 46 text

5. ϩάΛಡΈ΍͘͢͢Δ Fluentd Meetup in Matsue (2016-07-30) 46

Slide 47

Slide 47 text

ϩά͕ಡΈ΍͍͢ ↓ ঢ়گ͕͙͢೺ѲͰ͖Δ ↓ σόοά͕ḿΔ ↓ ! Fluentd Meetup in Matsue (2016-07-30) 47

Slide 48

Slide 48 text

޻෉Λ͠Α͏ ΋ͬͱಡΈ΍͘͢Ͱ͖ͳ͍͔ʁ!Λৗʹߟ͑Δ Fluentd Meetup in Matsue (2016-07-30) 48

Slide 49

Slide 49 text

ࠨ୺Λἧ͑Δ ! 2016-07-30 01:02:03 [foo/foo.swift] ॲཧAΛߦ͍·͢ 2016-07-30 01:02:04 [bar.swift] ॲཧBΛߦ͍·ͨ͠ ! 2016-07-30 01:02:03 ॲཧAΛߦ͍·͢ [foo/foo.swift] 2016-07-30 01:02:04 ॲཧBΛߦ͍·ͨ͠ [bar.swift] Fluentd Meetup in Matsue (2016-07-30) 49

Slide 50

Slide 50 text

ه߸Λ͏·͘࢖͏ ! 2016-07-30 01:02:03 ຯํ1͕ఢAΛ߈ܸ͠·ͨ͠ 2016-07-30 01:02:04 ఢB͕ຯํ2Λ߈ܸ͠·ͨ͠ Fluentd Meetup in Matsue (2016-07-30) 50

Slide 51

Slide 51 text

ه߸Λ͏·͘࢖͏ ! 2016-07-30 01:02:03 ຯํ1͕ఢAΛ߈ܸ͠·ͨ͠ 2016-07-30 01:02:04 ఢB͕ຯํ2Λ߈ܸ͠·ͨ͠ ! 2016-07-30 01:02:03 [ຯํ1 -> ఢA] 2016-07-30 01:02:04 [ຯํ2 <- ఢB] • จষͰͳ͍ͱ͍͚ͳ͍Θ͚͡Όͳ͍ • ঢ়گ͕͙͢೺ѲͰ͖Δͷ͕ྑ͍ϩά Fluentd Meetup in Matsue (2016-07-30) 51

Slide 52

Slide 52 text

ద౓ʹ؆ܿʹ ! 2016-07-30 01:02:03 ΞϓϦέʔγϣϯAΛىಈ͠·ͨ͠ ! 2016-07-30 01:02:03 ΞϓϦAΛىಈ͠·ͨ͠ Fluentd Meetup in Matsue (2016-07-30) 52

Slide 53

Slide 53 text

ద౓ʹ؆ܿʹ logger.info("Sent files (#{n_records/dt} records/sec)") 2016-07-30 01:02:03 Sent files (202.37704918032787 records/sec) Fluentd Meetup in Matsue (2016-07-30) 53

Slide 54

Slide 54 text

ద౓ʹ؆ܿʹ • ׂΓࢉͨ͋͠ͱ͸ɺformatΛ࢖ͬͯద౰ͳਫ਼౓ʹ ͢Δ msg = format("Sent files (%.2f records/sec)", n_records/dt) logger.info(msg) 2016-07-30 01:02:03 Sent files (202.38 records/sec) Fluentd Meetup in Matsue (2016-07-30) 54

Slide 55

Slide 55 text

ΞʔϚʔυίΞίϐϖ ԼҐνʔϜ ʮΈΜͳԿ̖̘Ͱ͍͘ʔʁʯ ʮൿີ͆ʯ ʮ͓ΕύΠϧͩΘɹ·͋ԶύΠϥʔͩ͠ͳ ɹ·͋ͳɹ͍΍͍΍͘͢͝Ͷ͑ͬͯʂ͆ʯ ʮ࢛٭ʯ ʮ͔ͬͯ͜͜ԿϚοϓʁʯ ʮΘ͔ΒΜ͆ʯ Fluentd Meetup in Matsue (2016-07-30) 55

Slide 56

Slide 56 text

ΞʔϚʔυίΞίϐϖ தҐνʔϜ ʮΑΖ͘͠ʔʯ ʮ߭ࢁ͸଴ͬͯΕ͹·ͣෛ͚ͳ͍͔Β·ͬͯΑ͏Ͷʯ ʮ͸͍ʯ ʮϔϦಛ߈ͱ͔͘Δ͔ͳʁ ʮ͏Μɻ̘̚ϩέοτ΋ͬͯ͜͏Ͷʔʯ Fluentd Meetup in Matsue (2016-07-30) 56

Slide 57

Slide 57 text

ΞʔϚʔυίΞίϐϖ ্ҐνʔϜ ʮॏΧϥαϫΧϥαϫΠβφϛΠβφϛΞϥΩσΞϥΩσ ʯ ʮॏٯότότൣαϒΦοΫεΦοΫελϯΫΞϯνʯ ʮதΧϥαϫΧϥαϫΞϚςϥεΦοΫεΦοΫεʯ ʮωζϛ̠̚Φʔτ଎ετ଎ετλϯΫݞࢦఆϤϩʯ ʮ̛̫̩ʯɹʮ̛̫̩ʯɹʮൣαϒʯ ʮ̛̫̩έʔʯ ʮέʔʯ ʮϨσΟʔʯ ʮέʔʯ Fluentd Meetup in Matsue (2016-07-30) 57

Slide 58

Slide 58 text

ద౓ʹ؆ܿʹ • νʔϜϝϯόʔ͕ཧղͰ͖ΔͳΒɺͦͷൣғͰ؆ ܿʹͯ͠Α͍ • ྫɿʮrpsʯͰ௨͡ΔͳΒͦΕͰ΋Α͍ 2016-07-30 01:02:03 Sent files (202.37 records/sec) ɹ↓ 2016-07-30 01:02:03 Sent files (202.37 rps) Fluentd Meetup in Matsue (2016-07-30) 58

Slide 59

Slide 59 text

·ͱΊ • ϩά͸ਓ͕ؒಡΉ΋ͷ→ಡΈ΍͕͢͞େࣄ • ྑ͍ϩά͕͋Ε͹σόοά͕ḿΔ • ϩάΛҭͯͯշదͳσόοάϥΠϑΛ! Fluentd Meetup in Matsue (2016-07-30) 59

Slide 60

Slide 60 text

6. ͦΕҎ֎ͷϩάʹ͍ͭͯ (༨ஊɺ༧උεϥΠυ) Fluentd Meetup in Matsue (2016-07-30) 60

Slide 61

Slide 61 text

FATAL/ERROR/WARN • FATAL: ϓϩάϥϜ͕ଓ͚ΒΕͳ͍Α͏ͳக໋తΤϥʔ • ͍͍ͩͨERRORͰ୅༻͕ͪ͠ • fluentdͰ΋࢖ͬͯͳ͍ͬΆ͍ • ERROR: Τϥʔ • WARN: ܯࠂ • ΤϥʔͰ͸ͳ͍͕ؾʹͨ͠΄͏͕ྑ͍΋ͷ Fluentd Meetup in Matsue (2016-07-30) 61

Slide 62

Slide 62 text

ERRORͳͷ͔INFOͳͷ͔໰୊ def find_user(name) if (user = @database.find(name)) return user else logger.error("Ϣʔβ#{name}͕ݟ͔ͭΓ·ͤΜͰͨ͠") return nil end end • ʮERRORϩά͕ग़ͯͳ͍͔ຖ೔֬ೝ͢ΔʯΈ͍ͨͳӡ ༻ͳΒɺINFO΍DEBUG͕ద੾͔΋͠Εͳ͍ • ͦͷ΁Μ͸͋͘·ͰϓϩδΣΫτ࣍ୈ Fluentd Meetup in Matsue (2016-07-30) 62

Slide 63

Slide 63 text

ྫ֎Λه࿥͢Δ • ERRORϩάͷ୅දྫ • ҎԼ͸ςϯϓϨ begin MyProgram.new.main rescue Exception => ex LOGGER.error("#{ex.class}: #{ex.message}") ex.backtrace.each do |line| LOGGER.error(line) end raise ex end Fluentd Meetup in Matsue (2016-07-30) 63

Slide 64

Slide 64 text

ྫ֎Λه࿥͢Δ • Ұݟ؆͕ܿͩ…ʁ begin MyProgram.new.main rescue Exception => ex LOGGER.error("#{ex.class}: #{ex.message} "+ ex.backtrace.join('\n')) raise ex end • ϩάʹվߦ(\n)ΛೖΕΔͱɺ͋ͱ͔ΒϓϩάϥϜͰ ղੳ͢Δͷ͕໘౗ͳͷͰ͓͢͢Ί͠ͳ͍ • ϓϩηε͕ෳ਺͋Δͱߦ͕ࠞͬͯ͟෼͔Βͳ͘ͳͬͨΓͱ͔ Fluentd Meetup in Matsue (2016-07-30) 64

Slide 65

Slide 65 text

DEBUGΑΓࡉ͔͍ϩά • TRACE • fluentd(ͱ͍͏͔serverengine)ʹΑΔಠ֦ࣗு • VERBOSE • CocoaLumberjackͱ͍͏iOS༻ͷϥΠϒϥϦ • ͋Δͱศརͳ͜ͱ΋ Fluentd Meetup in Matsue (2016-07-30) 65