Slide 1

Slide 1 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 2021/09/15 New Relic User Group BASE株式会社 清水 陽一郎 @budougumi0617 Go WebアプリケーションでNew Relic APMをフル活用するためのOSS 3選

Slide 2

Slide 2 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 自己紹介 2 ● 清水 陽一郎 @budougumi0617 ● BASE BANK, Inc. Dev Division ○ Go/PHP/Python/AWS etc… ● New Relic歴: 2020年11月〜 ● コミュニティ: golang.tokyo / Go Conference etc... ● 趣味: ブログを書くこと ○ https://budougumi0617.github.io/ Go Conferenece

Slide 3

Slide 3 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 出店ショップ数 (個人・法人・行政を含む) 150万ショップ以上 BASEかんたん決済利用料 3.6%+40円 サービス利用料 3% コンセプト:「誰でも簡単に使えるネットショップ作成サービス」 初期費用・月額費用 0円 ショップオーナーのサポート機能が充実! 個人でも決済機能をかんたん導入。審査もスピーディー! ネットショップ作成サービス「BASE」 クレジットカード 銀行振込 コンビニ決済・Pay-easy 後払い (BASE Apps) キャリア決済 PayPal Amazon Pay

Slide 4

Slide 4 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 銀行をかんたんにし、 全ての人が挑戦できる世の中に MISSION BASE BANK

Slide 5

Slide 5 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 5 売れたタイミングで自動支払い 即時で資金調達できるという体験 150万店舗のデータから BASE独自の売上予測を開発 リスクなく、即時で資金調達できる金融サービス https://thebase.in/yellbank YELL BANK

Slide 6

Slide 6 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 6 BASE本体 分析データ データ分析基盤 API データ処理系 API Observability エラーレポート NewRelic One Sentry YELL BANKのアーキテクチャ構成

Slide 7

Slide 7 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 7 New Relic One導入以前 ● 独自リクエストIDを埋め込んでKibanaでログを漁っていた ○ https://speakerdeck.com/budougumi0617/start-casual-distributed-trace

Slide 8

Slide 8 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 8 New Relic One導入後 ● 分散トレース/Logs In Context(Logs, NRQL etc...)

Slide 9

Slide 9 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. New Relic と Go 9

Slide 10

Slide 10 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 10 New Relic APMとGo ● トレースするためには明示的に計装コードを書く必要がある ○ Transaction ■ エンドポイントごと ○ 関数Span ■ 関数ごとに実装

Slide 11

Slide 11 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 11 New Relic APMとGo ● トレースするためには明示的に計装コードを書く必要がある ○ 関数Span ■ 関数ごとに実装

Slide 12

Slide 12 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 12 New Relic APMとGo ● トレースするためには明示的に計装コードを書く必要がある ○ 関数Span ■ 関数ごとに実装

Slide 13

Slide 13 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 既存コードの関数/メソッド すべてにNew Relicの コードを差し込む…? 13

Slide 14

Slide 14 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. やりたくない 󰢃 14

Slide 15

Slide 15 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 15 github.com/budougumi0617/nrseg ● 全ての関数/メソッドにSpanの計装コードを差し込むCLI ○ MacOSはbrew install可能 ○ 指定dir配下の全てが対象 ○ Span名はASTから自動生成 ○ import文も自動挿入 ○ ignore可能

Slide 16

Slide 16 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. これでNew Relic三昧🥰 …ではない 16

Slide 17

Slide 17 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 17 サービスは常に変化し続ける ● 既存コードの関数は全て分散トレースで計測できるようになった ● しかし我々のサービスはコードフリーズされていない ● 毎日新しい関数やメソッドが生まれる ○ PRで毎回確認する?

Slide 18

Slide 18 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 18

Slide 19

Slide 19 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 絶対にやりたくない 󰢃 19

Slide 20

Slide 20 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 20 action-newrelic-segment-lint ● Spanの入れ忘れを警告するGitHub Actionsを作った ○ 10行程度YAMLを書くだけ ○ 実装漏れがあればPRにコメント ○ Marketplace登録済み

Slide 21

Slide 21 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. これでNew Relic三昧🥰 …ではない 21

Slide 22

Slide 22 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 22 Logs in contextが見たい ● あるトランザクションに関連するログをシームレスにみたい ● New Relic公式ライブラリではlogrus pkgしか対応していない ○ 我々はuber-go/zap採用 ■ 未対応…

Slide 23

Slide 23 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. やるしかない 💪 23

Slide 24

Slide 24 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 24 github.com/budougumi0617/nrzap ● uber-go/zapのログをLogs in contextに対応させるスニペット ● ログのJSONにtrace.idなどNew Relicの情報を埋め込む

Slide 25

Slide 25 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. これでNew Relic三昧🥰 25

Slide 26

Slide 26 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 26 New Relic One導入後 ● 分散トレース/Logs In Context(Logs, NRQL etc...)

Slide 27

Slide 27 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 27 まとめ ● GoでNew Relic APMに対応しようと思うと少し大変 ● 導入をラクにするOSSを紹介 ○ github.com/budougumi0617/nrseg ■ 既存コードにSpan(Segment)を自動挿入するCLI ○ action-newrelic-segment-lint ■ PRでSpanの対応漏れがあったら指摘するGitHub Actions ○ github.com/budougumi0617/nrzap ■ uber-go/zapのLogs in context対応 ● Have a nice o11y!! action-newrelic-segment-lint

Slide 28

Slide 28 text

© 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 28 おことわり ● Spanが自動生成できないのは言語特性によるものです ○ New Relicの機能が不足しているということではない ○ DatadogやOpenTelemetryを使っても同じ ○ (Goだけが不便というわけでなくPythonも自動生成できない)