Slide 1

Slide 1 text

ଈɺNew Relic ʙPHPer͕ҙࣝ௿͘΍͍ͬͯ͘ʙ at: NRUG (New Relic User Group) Vol.3 https://nrug.connpass.com/event/247057/ date: 2022/06/15 speaker: uzulla

Slide 2

Slide 2 text

uzulla • ௿͔Βߴ·ͰରԠPHPer • όʔδϣϯ • ن໛ • ೉౓ɾෳࡶ౓ • ۀ຿ൣғ • ͍͖͠

Slide 3

Slide 3 text

ҙࣝ • ߴ͍Ͱ͔͢ʁࢲ͸௿͍Ͱ͢ • ʮNRUG͸͵Δ͙Ͱψϧ͍τʔΫ΋͋ΓͰ͠ΐʯ • ͜ͷεϥΠυ΋ҙ͕ࣝ௿͍ • ໨ʹ༏͍͠…͍΍New RelicͳͷͰ྘

Slide 4

Slide 4 text

·ͣɺNew Relic͸ศར • օ͞Μ͸ͬͯͦ͠͏ • ͋Δ͍͸ʮศརͦ͏ʯͱࢥͬͯͦ͏ • Ͱ΋ɺ࢖ͬͨ͜ͱͳ͍ਓ΋͍ͦ͏ • ͦ͏͍͏ਓʹ޲͚ͯͷτʔΫͰ͢ • ʮͦΕ͸ਖ਼͍͠࢖͍ํ͡Όͳ͍Ͱ͢ʂʯͬͯޙͰౖΒΕͦ͏

Slide 5

Slide 5 text

ʮҙࣝߴ͍໰୊ʯ • (͜͜ͷΑ͏ͳҙࣝߴ͍ձ) • ʮśŲƄšƄŖŰƄűƄžũŎʯ ʮͳʹͦΕා͍ʯ • αΠτ͕ӳޠͰා͍ https://newrelic.com/ ਓ͸Α͘Θ͔Βͳ͍ࣄΛ΍Γͨ͘ͳ͍ ʮΘ͔ͬͯͳ͍ͷʹ࢖͏ʯͷ͸μϝʁ

Slide 6

Slide 6 text

ͦΜͳࣄͳ͍ • Α͘ΈΕ͹ɺ͍͏΄Ͳҙࣝߴ͘ͳ͍ • ʮϑϦʔΞΧ΢ϯτΛήοτͩͥʂʯ ͬͯ͋ΔɺΫϨΧ΋ෆཁ ("Work Email"͕ѹ͕͋Δ͕ɺ ՚ྷʹεϧʔ) (ن໿͸ಡ΋͏ͳʂʂʢ͍ͬͺΜΖΜʣ)

Slide 7

Slide 7 text

ۦ͚଍ͰαΠϯΞοϓ

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

͜͜͸EUډॅऀɾձࣾҎ֎͸ United StatesʢGDPRͷΞϨʣ

Slide 13

Slide 13 text

͜͜Ͱ੒ޭͨ͠ͳ…ͱͳͬͨΒ…

Slide 14

Slide 14 text

ଈɺ΢Οβʔυ͕࢝·ΔͷͰɺ

Slide 15

Slide 15 text

ଈϩάΞ΢τͰνϡʔτϦΞϧΛ୤ग़ɺRTAͰ͋Δ (νϡʔτϦΞϧ͸λΠϜϩε)

Slide 16

Slide 16 text

࠶ϩάΠϯ͢Δͱ͜ͷΑ͏ʹͳΔ

Slide 17

Slide 17 text

ӈ্PullDown͔ΒAPI Keys

Slide 18

Slide 18 text

Ingest LicenseΛίϐʔ

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

͸͍

Slide 21

Slide 21 text

͜͜·ͰʹήοτͰ͖ͨ΋ͷ • New RelicͷΞΧ΢ϯτ • INGESTͷAPIΩʔʢLicense Key)

Slide 22

Slide 22 text

ʮΑͬ͠ΌɺσʔλૹΖ͏͔ʂʯ • ʮ͡Ό͋ɺαʔόʔΛ༻ҙͯ͠…ʯ • ʮ͔͔ۚΔ͡ΌΜʯʮҙࣝߴਿʯʮࠓ౓ʹ͠Α͏ʯ • ͦ͏͡Όͳ͍ɺखݩͷPCͰ͍͍ͬ͠ΐʂʂʂ • DockerͰ͍͍΍ʂdocker-compose ΋͍ΒͶ͑΍ʂ • (ૉdocker Ұपճͬͯҙࣝߴ͍Մೳੑ΋͋Δ)

Slide 23

Slide 23 text

docker-compose ʹॻ͖׵͑ͨαϯϓϧ͸ ͬͪ͜ʹ͓͍͓͖ͯ·͢ • https://github.com/uzulla/unconscious-new-relic-sample.php • ʮLicense keyΛ.envʹ͍Εͯɺίϯςφ಺Ͳ͜ʹ΋ϋʔυίʔ υͯ͠ͳ͍ͷҙ͔ࣝͨ͘Ͷ͑ʁʯʮΘ͔Δ͕GitHubʹ্͍͛ͨ ͠…ʯ

Slide 24

Slide 24 text

$ mkdir unconscious-app; cd unconscious-app; $ docker run -d -v `pwd`:/var/www -p 8080:80 \ --name unconscious-app php:8.1-apache $ echo " html/index.php $ find . ./html/index.php ʢphp-fpm͡Όͳ͍ͷ΋ҙࣝ௿͍ʢॾઆ͋Δʣʣ ʢhtmlҎԼʹ͓޷͖ͳPHPΛ͓͚͹ΑΖ͍͠ʣ ʢhtml͸dockerىಈ࣌ʹࣗಈ࡞੒͞ΕΔҙࣝͷ௿͞ʣ

Slide 25

Slide 25 text

http://localhost:8080Λ։͘ ΈͳΕͨ෩ܠɺͱΓ͋͑ͣApache+mod_phpͰ͖ͨʂ

Slide 26

Slide 26 text

ҰԠɺىಈɾఀࢭɾফ͠ํ # ఀࢭ $ docker stop unconscious-app # ࠶։ $ docker start unconscious-app # ࡟আ $ docker rm unconscious-app # image΋ফ͍ͨ͠ਓ $ docker image ls |grep 8.1-apache php 8.1-apache c9248ee25e78 34 hours ago 458MB $ docker image rm c9248ee25e78 imageͷ c9248ee25e78 ͸มΘΔͷͰɺదٓஔ͖׵͍͑ͯͩ͘͞ɻ ଞίϯςφͰ࢖ͬͯΔͱফͤ·ͤΜ͠ɺ࡟আඞਢͰ͸ͳ͍Ͱ͢ɻ

Slide 27

Slide 27 text

Αͬ͠ΌʂNR͍ΕΔͧʂ $ docker exec -it unconscious-app bash # γΣϧʹೖΔ root@5b8ea9bb3d5a:/var/www/html# <= DockerͷதɺҎԼ͜ͷதͰ࣮ߦ

Slide 28

Slide 28 text

# ҎԼɺNRࢦఆͷϫϯϥΠφʔΛվ଄ͨ͠෺ɺ౰࠲͸ಈ͘ͱࢥ͍·͢ $ apt update -y && apt install -y gnupg $ echo 'deb http://apt.newrelic.com/debian/ newrelic non-free' | \ tee /etc/apt/sources.list.d/newrelic.list # wgetͱ͔ɺPHPerͳΒ͍ΒΜΑͶʂphpͰ୅༻ʂ $ php -r "readfile('https://download.newrelic.com/548C16BF.gpg');" | \ apt-key add - # php5ͬͯ͋Δ͚Ͳɺ8Ͱ΋5Ͱ͢ ☺ $ apt-get update && apt-get -y install newrelic-php5 $ newrelic-install install

Slide 29

Slide 29 text

ର࿩ܗࣜΠϯετʔϥ͕͘ΔͷͰ ૉ௚ʹINGESTͷAPIΩʔΛ͍Ε·͢

Slide 30

Slide 30 text

ͳΜ͔੒ޭ͠·͢(ޙΖ͸ແࢹ)

Slide 31

Slide 31 text

Ωʔ͕ೖ͔ͬͨνΣοΫ $ php -i |grep newrelic |grep license newrelic.license => b7...AL => b7...AL Φοέʔʂʂʂ ʢ͜ΕͰnewrelic.soͷϩʔυνΣοΫ΋ಉ࣌ʹ͍ͯ͠·͢ʣ

Slide 32

Slide 32 text

mod_phpʹ൓ө͢ΔͨΊɺ࠶ىಈ root@5b8ea9bb3d5a:/var/www/html# exit # docker಺͔Βexit͠ɺϗετͰ $ docker stop unconscious-app $ docker start unconscious-app # ҰԠىಈΛ֬ೝʢStatus͕਺ඵͳΒ࠶ىಈͯ͠ΔͰ͠ΐ͏ʣ $ docker ps CONTAINER ID IMAGE ུ STATUS PORTS NAMES 27f0166df71b php:8.1-apache ུ Up 6 seconds 0.0.0.0:8080->80/tcp unconscious-app

Slide 33

Slide 33 text

Agent͕ىಈ͍ͯ͠Δ͔νΣοΫ # Dockerͷίϯςφʹ͸͍Δ $ docker exec -it unconscious-app bash psͰ֬ೝ root@27f0166df71b:/var/www/html# ps -fax PID TTY STAT TIME COMMAND 1 ? Ss 0:00 apache2 -DFOREGROUND 27 ? Sl 0:00 /usr/bin/newrelic-daemon --agent (ུ) newrelic-daemon ͕͍Ε͹OKʢPHP͕ىಈͯ͘͠Ε·͢ʣ

Slide 34

Slide 34 text

ҰԠ agentͷ log΋ΈΔʢτϥϒϧγϡʔτʹศརʣ root@b:/var/www/html# tail /var/log/newrelic/newrelic-daemon.log (ུ) (ུ) (44) Info: app 'PHP Application' connected with run id (ུ) connected ͕͋Ε͹ଟ෼OK

Slide 35

Slide 35 text

ϫΫϫΫ͠ͳ͕Β଴ͭ • phpinfoͷϖʔδͰF5࿈ଧ͓͖ͯ͠·͢ • 10෼͘Β͍଴ͪ·͢ʢׂͱ଴ͭͷͰɺযΒͣʣ • New RelicͷϖʔδΛϦϩʔυͯ͠ΈΔͱ…

Slide 36

Slide 36 text

དྷ·ͨ͠ʂ PHP ApplicationΛΫϦοΫ͠·͠ΐ͏ ʢͳ͓ɺAPMҎ֎͸Ͱ͖ͯ·ͤΜɺ͍Εͯͳ͍ͷͰʣ

Slide 37

Slide 37 text

APM ΈΕ·ͨ͠ʂউརʂʂ (APMͱ͸ɺΞϓϦέʔγϣϯͷϞχλϦϯάͰ͢(ࡶ))

Slide 38

Slide 38 text

׬!!

Slide 39

Slide 39 text

׬Ͱ͸ͳ͍ • ͱΓ͋͑ͣࠨଆͷ • Transactionsͱ͔Έ·͠ΐ͏ • ࣮ࡍࣗ෼ͰݟͯΈͯ΄͍͠ͷͰɺུ

Slide 40

Slide 40 text

Errorൃੜͤ͞·͠ΐ͏ • html/index.php ʹ asdf(); ͱ͔͍Εͯյ͠·͠ΐ͏ • ͪΐͬͱ͢ΔͱɺError inboxʹ͜ͷΤϥʔ͕ݱΕ·͢

Slide 41

Slide 41 text

ग़·ͨ͠ʂ

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

·͋σϓϩΠ࣌ͷ؂ࢹʹศར ʢന໨ʣ

Slide 44

Slide 44 text

༨ஊɿPR TIMESʹ͓͚ΔվળใࠂʢࠨɿҰࡢ೔ɺӈɿࡢ೔ʣ ʮ͖Ε͍ͳը໘ͩΖ…ຊ൪ͳΜͩͥ…ʯʮѹ౗తվળ…ʯ

Slide 45

Slide 45 text

׬!!

Slide 46

Slide 46 text

׬Ͱ͸ͳ͍ • ʮ೚ҙͷϩάసૹ͘Β͍ͯ͠ΈΔ͔…ʯ • ೚ҙͷϩά(ϑΝΠϧ)ΛɺϦΞϧλΠϜʹNRʹసૹͰ͖·͢ • ෳ਺ͷϗετʢ΍VMʣ͔Βແਚʹૹ৴Ͱ͖·͢

Slide 47

Slide 47 text

͜͜Ͱ໰୊ • ϩάసૹ͸ެࣜͷ newrelic-infra agent ͕ఆ൪ • ࣮͸ɺ݁ߏ Installཁ͕݅͋ΔɺDockerͰ͸໘౗ • ࢲʮ໘౗…ҙࣝߴ͍…͋ɺsyslogରԠͯ͠Δ͡ΌΜʂʯ • https://docs.newrelic.com/jp/docs/logs/log-api/use-tcp- endpoint-forward-logs-new-relic

Slide 48

Slide 48 text

ͱΓ͋͑ͣɺϩάϑΝΠϧΛͭ͘Δ index.phpʹҎԼͱ͔ॻ͘ɻ ͜Ε͸ద౰Ͱ͋Γɺผʹmonologͷग़ྗͱ͔Ͱ΋ྑ͍ɻ error_log( "MyApp: this is log! can you hear me??.".PHP_EOL, 3, "/var/www/my.log" );

Slide 49

Slide 49 text

Ϧϩʔυͯ͠ɺϑΝΠϧ͕Ͱ͖͍ͯΔ͜ͱΛݟΔ # cat /var/www/my.log MyApp: can you hear me??. MyApp: can you hear me??. MyApp: can you hear me??. MyApp: can you hear me??.

Slide 50

Slide 50 text

syslog-ngΛ͍ΕΔ $ docker exec -it unconscious-app bash root@27f0166df71b:/var/www/html# apt install -y syslog-ng

Slide 51

Slide 51 text

ConfigΛॻ͘ $ apt install -y vim # Ͱ΋͍͍͠ɺnanoͰ΋ྑ͍͕ $ vi /etc/syslog-ng/syslog-ng.conf (NR΁ͷϩάసૹʹ͔͠࢖Θͳ͍ͷͰɺ த਎Λશ෦ফͯ͠ɺ࣍ͷϖʔδͷ಺༰ΛೖΕΔ)

Slide 52

Slide 52 text

@version: 3.27 source s_files { file("/var/www/my.log"); }; template NRFormat { template( "b77{ུ}NRAL <${PRI}>1 ${ISODATE} ${HOST:--} ${PROGRAM:--} ${PID:--} ${MSGID:--} ${SDATA:--} $MSG\n" ); template_escape(no); }; destination d_newrelic { network( "newrelic.syslog.nr-data.net" port(6514) transport("tls") tls(peer-verify(no)) template(NRFormat) ); }; log { source(s_files); destination(d_newrelic); }; ʢ࠷௿ݶͷҙࣝ௿͍ConfྫɺΩʔ͸ॻ͖׵͍͑ͯͩ͘͞ʣ

Slide 53

Slide 53 text

ىಈͱ֬ೝ # dockerͩ͠ɺҙࣝ௿͘ಛݖෆཁͳ no-capsʹ͓͖ͯ͠·͢ root@27f0166df71b:/etc/syslog-ng# syslog-ng --no-caps # ϓϩηε্͕͕͍ͬͯΕ͹OK root@27f0166df71b:/etc/syslog-ng# ps -fax |grep syslog-ng (ུ) 1452 ? S 0:00 supervising syslog-ng 1453 ? Ssl 0:00 \_ syslog-ng --no-caps

Slide 54

Slide 54 text

• ʮsyslogͱ͔ҙ͔ࣝͨ͘Ͷ͑ʁʯʮ·͋σϞͳΜͰ…ʯ • ʮ͑ͬࣗಈىಈ͸ʁʯʮ·͋ɺσϞͳΜͰ…ɺ͠Β΂ͯ͘Εʯ • (ࡶͳྫͳͷͰɺຖճdocker execͰىಈ͢Δඞཁ͕͋Γ·͢) • (͜ͷ͋ͨΓ͸৭ʑద౰ʹͯ͠΄͍͠)

Slide 55

Slide 55 text

5෼10෼଴ͬͯΔͱ… ͔͜͜Β͍͚ΔLogsʹͰͯ͘Δ

Slide 56

Slide 56 text

Find Log where͔Βݕࡧͱ͔΋Ͱ͖Δͧʂʂ

Slide 57

Slide 57 text

10෼଴ͬͯ΋ग़ͳ͍ͳΒࣦഊͯ͠Δ͔΋ # ࣏͢ɺΩʔؒҧ͑ͯͳ͍͔ʁͱ͔ root@27f0166df71b:/etc/syslog-ng# vi /etc/syslog-ng/syslog-ng.conf # PID͠Β΂ͯkillʢ͋Δ͍͸࠶ىಈʣ root@27f0166df71b:/etc/syslog-ng# ps -A|grep syslog-ng 1452 ? 00:00:00 syslog-ng 1453 ? 00:00:00 syslog-ng root@27f0166df71b:/etc/syslog-ng# kill 1452 1453 # ىಈ root@27f0166df71b:/etc/syslog-ng# syslog-ng --no-caps # ͜ͷޙͰɺԿ౓͔Ϧϩʔυͯ͠ϩάΛ࠶౓௥ه͢Δ

Slide 58

Slide 58 text

͕͢͞ʹ΋͏10෼ͨͬͨ΍Ζ • ऴΘΓऴΘΓʂʂ • ҙࣝ௿͘΍ͬͯΈͨͧʂʂ

Slide 59

Slide 59 text

ʁʮNR͸ʓʓͰͳ͍ͱ࢖͑ͳ͍ʯ • ͕ۚͳ͍ͱ • ஌͕ࣝͳ͍ͱ • Ϋϥ΢υΠϯϑϥ͕ͳ͍ͱ

Slide 60

Slide 60 text

NO!!

Slide 61

Slide 61 text

ศརʂʂʂ • Կ୆΋ೖΕΒΕ·͢ • ͔͠΋ɺجຊແྉͰ͢ • ʮجຊͱ͍͏͜ͱ͸ŗŕʯʮŲŰŰʯ (·͋Ͱ΋͍͏ͯϩά100GBͩͧɺ޻෉ͤΑ) • SUGOI!!!! • ࢼ͞ͳ͍ཧ༝ɺͳ͍ͷͰ͸ʁ

Slide 62

Slide 62 text

φ΢ʂ࢖͑ΔʂNew Relicʂ

Slide 63

Slide 63 text

ʮ͜ͷτʔΫେৎ෉ͳͷ͔…ʁʯ • NRͷਓʮҙࣝͷ௿͍τʔΫ͓ئ͍͠·͢ʯ • ࢲʮ͓̺ʯ • ͳͷͰେৎ෉ͩͱࢥ͏ɺଟ෼ɻ • NRೖΕ͚ͨͩͰ͔͍͍͔ͬ͜Β·ͣຬ଍͠Α͏

Slide 64

Slide 64 text

Incident Driven New Relic • ൃੜͨ͠Τϥʔ΍ྫ֎͕ͲΜͲΜೖͬͯศར • ϩάΛసૹ͢Δͱݕࡧ͠์୊ͩ͠ɺΞϥʔτ΋Մೳ • ʮΞϥʔτઃఆͱ͔ͪΐͬͱҙ͕ࣝߴ͍ͳʁʯ • ͱΓ͍͋͑ͣΕͱ͘ɺ໰୊͕Ͱͯ͘Δ·Ͱ͸์ஔ • ࢲ͕NRΛΈΔͷ͸େମ໰୊͕ى͖ͨ࣌ • ·͋ɺౖΒΕ͔ͯΒݟ͍͍ͨͬͯ͡Όͳ͍

Slide 65

Slide 65 text

৮͓ͬͯ΅͑ΖNew Relic • NR͕ͳͯ͘΋ੈք͸ճΔ͕ศར • खݩͷDockerͱ͔Ͱ׳ΕΔ => ʮͱΓ͍͋͑ͣΕͱ͔͘ʯ • ʮࣗ෼ͷNRʯ͕ͳ͍ͱɺؾܰʹࢼͤͳ͍ΑͶɺΘ͔Δ • ͱΓ·ɺαΠϯΞοϓͯ͠ςϨϝτϦͱ͔ϩάͱ͔ૹΓ͚ͭͯ ͓͚͹͍ʔΜ͡ΌͶʔͷʁ • ා͘ͳ͘ͳͬͨʁͦͨ͠ΒstgʹͰ΋Ϳͬ͜ΜͰΈ·͠ΐ͏ʙʙ

Slide 66

Slide 66 text

Ͳ͏ͩɺҙࣝ௿͍ͩΒ͏ʁ • ͓ࢼ͍ͩ͘͠͞ʙʙ • ࣮͸ଞͷػೳ΋ΊͬͪΌศརʂNRQLͱ͔ʂ • Ͱ΋·ɺϝϯυΠ͠ɺͦΕ͸ࠓ౓ͳʂ • (ਖ਼௚ࣗ෼΋͋Μ·ۦ࢖Ͱ͖ͯͳ͍ͱ͍͏࿩͸͋Δ)

Slide 67

Slide 67 text

༨ஊɿ࠷ۙͷʮͻ͍͘ਓʯͷࠔΓ͝ͱ • E_NOTICE΋र͍͍ͨʢE_WARN͸र͑Δ) • ࠷ۙɺ5.4͕੾ΒΕͨ… • Aarch64ʢM1 MacͷDockerʣͩͱPHP>=8͔Β… • ͍͖͔͍ͨ͠…