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

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

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選

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. © 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

    View Slide

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

    View Slide