Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go WebアプリケーションでNew Relic APMをフル活用するためのOSS 3選 / ...

Yoichiro Shimizu
September 15, 2021

Go WebアプリケーションでNew Relic APMをフル活用するためのOSS 3選 / introduce oss for newrelic

Yoichiro Shimizu

September 15, 2021
Tweet

More Decks by Yoichiro Shimizu

Other Decks in Technology

Transcript

  1. © 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 2021/09/15 New

    Relic User Group BASE株式会社 清水 陽一郎 @budougumi0617 Go WebアプリケーションでNew Relic APMをフル活用するためのOSS 3選
  2. © 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
  3. © 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 出店ショップ数 (個人・法人・行政を含む)

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

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

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

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

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

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

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

    Relic APMとGo • トレースするためには明示的に計装コードを書く必要がある ◦ 関数Span ▪ 関数ごとに実装
  11. © 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 15 github.com/budougumi0617/nrseg

    • 全ての関数/メソッドにSpanの計装コードを差し込むCLI ◦ MacOSはbrew install可能 ◦ 指定dir配下の全てが対象 ◦ Span名はASTから自動生成 ◦ import文も自動挿入 ◦ ignore可能
  12. © 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 17 サービスは常に変化し続ける

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

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

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

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

    Relic One導入後 • 分散トレース/Logs In Context(Logs, NRQL etc...)
  17. © 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
  18. © 2012-2019 BASE, Inc. © 2012-2021 BASE, Inc. 28 おことわり

    • Spanが自動生成できないのは言語特性によるものです ◦ New Relicの機能が不足しているということではない ◦ DatadogやOpenTelemetryを使っても同じ ◦ (Goだけが不便というわけでなくPythonも自動生成できない)