Slide 1

Slide 1 text

NewRelicͱઓ͏ ϨΨγʔPHP at: NRUG (New Relic User Group) Vol.2 when: 2022/03/16 by: @uzulla

Slide 2

Slide 2 text

ࣗݾ঺հ • uzulla • ϑϦʔͷPHPΤϯδχΞ • N+1ࣾͷMՕॴͷݱ৔ͰՔಇத • ྫ PR TIMES ͞Μ

Slide 3

Slide 3 text

஫:͜ͷτʔΫ͸ಛఆͷاۀʹ͍ͭͯޠ͍ͬͯ·ͤΜ • ࢲ͸ݱࡏਐߦͰɺNࣾ x Mݱ৔ͰՔಇத • աڈͷݱ৔਺͸֮͑ͯ͢Βډͳ͍ • ͨͩ͠ɺ৭ʑͳݱ৔Ͱࣅ͍ͯΔ͜ͱ͸͋Δ

Slide 4

Slide 4 text

ࣗࣾ঺հͱ͔ͳ͍ΜͰએ఻ • PHPerKaigi 2022 • PHPͳํ͸ͥͻ • PR TIMESͷਓؒ΋ొஃ͠·͢

Slide 5

Slide 5 text

NewRelic ❤ PHP • ϙϯͱ(ϛυϧ΢ΣΞతʹ)͍ΕΔ͚ͩͰಈ͘ • ύοʂͱ֎ͤΔ • ຊ൪ʹೖΕ͓͚ͯΔ΄ͲੑೳྼԽ௿͍ • Τϥʔɾྫ֎͕͍͍ײ͡ʹϦΞϧλΠϜूܭ • = ࠷ߴʂ

Slide 6

Slide 6 text

ࢲͱNewRelic • ׂͱੲ͔Βɺ͔ͭͣ཭ΕͣϢʔβʔ • ʮ͓٬༷͕͍Εͯ͘ΕΔ͔ʯ࣍ୈ • ʢ·͋ɺ͝༧ࢉ͸͋ΔΑͶ…Θ͔Δ…ʣ • ͨͱ͑͹PR TIMES͞Μ͸ೖΕͯ͘ΕͯΔ • ʮ࢖͑ͯϥοΩʔʂʂʯ

Slide 7

Slide 7 text

ࣗෲ()ͱͷ૬ੑͷΑ͞ • ༧ࢉ͸ग़ͳ͍͕ɺ΍ͬͯ΋͍͍ͱ͍͏ݱ৔΋͋Δ • ͢Δͱɺ֎͠΍͍͢͜ͱ΋ॏཁͰ͢ΑͶ… • PHP + NewRelic͸֎͠΍͍͢ʂ • (ίʔυʹೖΕͳͯ͘ྑ͍ͷͰ) • ISUCONͱ͔Ͱ΋ɺඵͰ֎ͤΔͷͰ࢖͑Δ

Slide 8

Slide 8 text

ͯ͞ɺϨΨγʔPHP • ݹ͍ίʔυϕʔεͷPHP • PHP<=7…PHP<=5… • ࠷ۙ͸PHP8ະຬΛ੾Δ࣌୅͕ͩʢྫ: Laravel9ʣ NewRelic͸ͪΌΜͱಈ͘ʢخʣ

Slide 9

Slide 9 text

ϨΨγʔPHPͱઓ͏೰Έ • ੵΈॏͳͬͨෛ࠴ίʔυ • error_reporting, display_errors=offͰݱ࣮ಀආ • ΤϥʔϩάΛݟͯͳ͍ʢ݁ߏଟ͘ͷݱ৔ʣ • ͱ͍͏͔ɺϩά͕ࣺͯΒΕ͍ͯΔ • ͋;ΕΔNotice, WarningΤϥʔ

Slide 10

Slide 10 text

NewRelicͳΒʂ • ΤϥʔϩάΛಠࣗʹरͬͯूܭͯ͘͠ΕΔʂ • ͳʹ΋͠ͳͯ͘΋ࣗಈతʹϝτϦοΫʹ • ελοΫτϨʔε෇͖ʂ • ಉ͡ΤϥʔΛ෼ྨʂ • Error Inbox͔Βरͬͯ௚͚ͩ͢Ͱվળ͞ΕΔ • ෳ਺୆Ͱtail -f͠ͳ͍͍ͯ͘ͷ͸ָʂ()

Slide 11

Slide 11 text

NewRelicΛ࢖Θͳ͍৔߹… • ϩάج൫…fluentd…kibana… • ूܭɾϝτϦΫε… • ϩʔςʔγϣϯ…DiskFull… • ෛՙ… • ༨෼ͳαʔόʔӡ༻… • etc,etc... େมͩͶ…

Slide 12

Slide 12 text

ͯ͞ຊ୊ • ʮϦϑΝΫλϦϯά͍ͨ͠ʂʯ • ͦͼཱ͑ͭϨΨγʔ • ʮσουίʔυΛ҆શʹফ͍ͨ͠ʯ • ʮͰ΋ɺຊ౰ʹࢮΜͰΔͷ͔ͳ…ʯ

Slide 13

Slide 13 text

ʮͦΕɺNRͰ؆୯ʹऩूͰ͖ΔΑʂʯ

Slide 14

Slide 14 text

E_USER_WARNING(౳)Λ࢖͏ trigger_error( "This code is NOT DEAD", E_USER_WARNING ); • https://www.php.net/manual/ja/function.trigger-error.php • ϢʔβʔϨϕϧͷΤϥʔ/ܯࠂ/௨஌ϝοηʔδΛੜ੒͢Δ

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Error InboxʹΨϯΨϯ͸͍ͬͯ͘Δ • (΋ͪΖΜϑΟϧλ΋Ͱ͖Δ)

Slide 18

Slide 18 text

ิ଍ɿE_USER_*ͱ͸ʁ • PHPʹ͸ྫ֎ʹࣅͨ(?) ผͷΤϥʔػߏ͕͋Δ • DB઀ଓࣦഊE_WARNINGͱ͔ɺΑ͘Έ·͢ΑͶʢന໨ʣ • E_USER_* ͸ɺϢʔβʔ͕ൃߦͰ͖ΔΤϥʔܕ • DEPRECATED, NOTICE, WARNING, ERROR,ͷ4छ • WARN·Ͱ͸࣮ߦ͕ࢭ·Βͳ͍ (͜ͱ͕׆༻ͷϛι̍) • display_errors=offͰӅͤΔ (͜ͱ͕׆༻ͷϛι̎)

Slide 19

Slide 19 text

ո͍͠ॴʹೖΕ·͘Δ͚ͩ • ௿ෛՙͰ • ར༻৔ॴ͕Θ͔Δ • ूܭ΋ࣗಈతʹ͞ΕΔ • ຊ౰ʹফ͔ͤͨ΋λΠϜϥΠϯͰΘ͔Δ • શ෦͕Θ͔Δɻͦ͏ɺNewRelicͳΒͶ

Slide 20

Slide 20 text

͞Βʹݴ͑͹ • ༷ʑͳཧ༝ͰσϓϩΠͰ͖ͳ͍৔߹Ͱ΋… • ී௨ͷPHPͳΒɺຊ൪ʹsshͯ͠ɺ ௚઀viͯ͠ίʔυΛͿͬࢗ͢·ͰͰ͖Δ ʢίϨͰ΍ͬͯΔΘ͚Ͱ͸ͳ͍Ͱ͢ʂʂʣ

Slide 21

Slide 21 text

΋ͬͱ΋ͬͱ׆༻!!!!! • ༷ʑͳ৚݅Ͱಈతʹൃߦ΋Ͱ͖Δɻ ͨͱ͑͹ifͰʮ͋Γ͑ͳ͍஋ݕ஌ʯൃՐ΋Ͱ͖Δ if(!in_array($type, $allow_type_list)){ trigger_error("OOB!!", E_USER_WARNING); }

Slide 22

Slide 22 text

• REQUEST_URIΛਖ਼نදݱͰҾֻ͚ͬΔͱ͔΋Α͍ if(preg_match( "|\A/v0.1/old_api/|u", $_SERVER['REQUEST_URI'] ){ trigger_error("deprecated...",E_USER_WARNING); }

Slide 23

Slide 23 text

• ʮഇࢭ͞Εͨύϥϝλ͕͋Δʯͱ͔΋ʁ • php.iniͷauto_prepend_fileΛ׆༻͢Δͱָ͔΋ if(isset($_GET['session_id'])){ trigger_error("OMG!!",E_USER_WARNING); }

Slide 24

Slide 24 text

ເ͕޿͕Δʂʂ • (ී௨ͷߦҝͰ͸ͳ͍Ͱ͢Ͷɺ͸͍)

Slide 25

Slide 25 text

ޙย෇͚ • શจݕࡧͰফͤ͹OK • (E_USER_WARNINGͱ͔ී௨͔ͭΘͳ͍ͷͰ…) • Ծʹ࢒͍ͬͯͯ΋Τϥʔϩάʹग़Δ͔Β୳ͤΔ͠ɺ ௒ѱӨڹ͸ͳ͍

Slide 26

Slide 26 text

ͱ͍͏͜ͱͰ(?)PHPʹNewRelic͸࠷ߴʂ • ݹ͍PHPݱ৔ͦ͜ɺඞܞ • ͱʹ͔͘ೖΕͯɺͲΜͲΜίʔυվળ • ύϑΥʔϚϯενϡʔχϯά͚ͩͰͳ͍ʂ • (໪࿦ɺࣗಈతʹ࣮ߦαϯϓϧͯ͠վળ΋) • Error Inbox ͚ͩͰ΋ศརʂ

Slide 27

Slide 27 text

Ҏ্ʂ

Slide 28

Slide 28 text

ҟৗͳཁ๬ • ϨϯαόΈ͍ͨͳͷͰ΋͏͍ͯ͝΄͍͠ͳ • ʢREST APIΛ͖ͨͨ·͘Ε͹Ͱ͖Δ…ʁʣ • ʮdl("newrelic.so")Ͱ͏͍ͨ͝Γ͠ͳ͍͔ͳ…ʯ • ʢҟৗͳཁ๬ͩͱཧղ͸͍ͯ͠·͢ʣ • ʮPHPʹৄ͍͠ʯNRͷਓ ͱ࿩ͯ͠Έ͍ͨ͆

Slide 29

Slide 29 text

ΏΔ͍ئ๬ • (ʮ͘͝Ұൠతͳ͓٬༷ʯʹ͓͍ͯ…ʣ • ʮͰɺ͜Ε͍͘Β͔͔Δͷʁʯ • Ͱɺ༧ࢉ͕૊ΊͣɺೖΕΒΕͳ͍͜ͱ͕ଟ͍… • ʢࢼࢉ͕೉͍͠ʣ • !

Slide 30

Slide 30 text

I ❤ NewRelic • NRͱPHPΛτϦοΩʔʹ࢖ͬͯΔਓͱ஌Γ߹͍͍ͨ • ࠷ޙʹɺPHPͳਓ͸PHPerKaigiʹ͝ࢀՃݕ౼͍ͩ͘͞