$30 off During Our Annual Pro Sale. View Details »

New Relicを使った Observabilityの実現方法と活用例 / gocon 2022 spring after talk

New Relicを使った Observabilityの実現方法と活用例 / gocon 2022 spring after talk

4月28日に行われた次のイベントの登壇資料です。

\非公式/ Go Conference 2022 Spring スポンサー企業4社 アフタートーク
https://andpad.connpass.com/event/243953/

Yoichiro Shimizu

April 28, 2022
Tweet

More Decks by Yoichiro Shimizu

Other Decks in Programming

Transcript

  1. © 2012-2022 BASE, Inc. 1 #gocon2022_4sponsor @budougumi0617 New Relicを使った Observabilityの実現方法と活用例

    \非公式/ Go Conference 2022 Spring スポンサー企業4社 アフタートーク BASE株式会社/清水 陽一郎(@budougumi0617)
  2. © 2012-2022 BASE, Inc. 2 #gocon2022_4sponsor @budougumi0617 自己紹介 所属 BASE

    株式会社 BASE BANKチーム Tech Lead Go、New Relicや自動化など。 趣味 ブログ: https://budougumi0617.github.io/ SNS Twitter : @budougumi0617  Github : https://github.com/budougumi0617 2022/07/20 商業誌出版予定 清水 陽一郎 (しみず よういちろう)
  3. © 2012-2022 BASE, Inc. 3 1 2 3 #gocon2022_4sponsor @budougumi0617

    New Relicの機能概要 New Relicの導入方法(実装方法) 開発者体験を考慮した設計 今日の話
  4. © 2012-2022 BASE, Inc. 4 1 2 3 #gocon2022_4sponsor @budougumi0617

    New Relicで何がわかるようになるか Goで疎結合な実装をするテクニック プラットフォームな設計をする時は プロダクトメンバーの開発体験を意識すること 今日伝えたいこと
  5. © 2012-2022 BASE, Inc. 5 #gocon2022_4sponsor @budougumi0617 • Go on

    ECS Fargate お題: BASEカード
  6. © 2012-2022 BASE, Inc. 6 © 2012-2022 BASE, Inc. 6

    New Relicとは
  7. © 2012-2022 BASE, Inc. 7 #gocon2022_4sponsor @budougumi0617 New Relicとは •

    Telemetry Data Platform ◦ テレメトリデータの収集・可視化 • Full-Stack Observability ◦ 計測データの分析・可視化インターフェイス • Alerts and Applied Intelligence
  8. © 2012-2022 BASE, Inc. 8 #gocon2022_4sponsor @budougumi0617 • Go用ライブラリを利用して対応 ◦

    https://pkg.go.dev/github.com/newrelic/go-agent/v3/newrelic • トランザクションのスループット/レスポンスタイム/エラー率 • メモリ・CPUなどのランタイム情報/ゴルーチンの監視 • 分散トレーシング • Logs in context(分散トレーシングとログの紐付け) New Relic + Go
  9. © 2012-2022 BASE, Inc. 9 © 2012-2022 BASE, Inc. 9

    New Relicの機能と導入
  10. © 2012-2022 BASE, Inc. 10 #gocon2022_4sponsor @budougumi0617 • サービス・アプリケーション全体のサービスレベルの把握 APM(Application

    Perfomance Management)
  11. © 2012-2022 BASE, Inc. 11 #gocon2022_4sponsor @budougumi0617 • メモリ・CPUなどのランタイム情報/ゴルーチンの監視 APM(Application

    Perfomance Management)
  12. © 2012-2022 BASE, Inc. 12 #gocon2022_4sponsor @budougumi0617 • 環境変数の有無で有効化 ◦

    E2EテストやCI上でも動くように未設定でもサーバが起動できるように APMの導入
  13. © 2012-2022 BASE, Inc. 13 #gocon2022_4sponsor @budougumi0617 • 複数サービス間のつながりを可視化 ▪

    Trace: 各サービスで実行されたリクエスト処理 ▪ Span: Trace内で行われた関数呼び出し・SQL・外部API実行などの各操作 分散トレース
  14. © 2012-2022 BASE, Inc. 14 #gocon2022_4sponsor @budougumi0617 • Middlewareパターンによるトレースの取得 •

    メジャーなRouterには公式からMiddleware実装が提供 ◦ net/http router ◦ github.com/labstack/echo ◦ github.com/gin-gonic/gin ◦ github.com/gorilla/mux トレースの実装
  15. © 2012-2022 BASE, Inc. 15 #gocon2022_4sponsor @budougumi0617 • HTTPルーター構築時にデフォルト適用 ▪

    各ハンドラー実装者は意識せずにTraceが設定される トレースの取得
  16. © 2012-2022 BASE, Inc. 16 #gocon2022_4sponsor @budougumi0617 • 関数・メソッド冒頭でNew Relicの関数を呼び出し

    ◦ コードに直接埋め込む必要があるので強結合になる ▪ アノテーションプログラミングなどは当然できない ◦ Spanとして計測したい全関数に書かないといけない Spanの取得
  17. © 2012-2022 BASE, Inc. 17 #gocon2022_4sponsor @budougumi0617 • 強結合 ◦

    諦める ◦ o11yサービスを変えることはめったにない • Spanとして計測したい全関数に書かないといけない ◦ 静的解析ツールを自作して自動で全挿入 ▪ https://pkg.go.dev/github.com/budougumi0617/nrseg ▪ 全削除コマンドは利用予定が無いので現状未実装(ISUCONでNew Relic使うなら作るかも?) ◦ Actionsを自作して挿入漏れはPRのCIでエラーにする ▪ https://github.com/marketplace/actions/action-newrelic-segment-lint Spanの取得
  18. © 2012-2022 BASE, Inc. 18 #gocon2022_4sponsor @budougumi0617 • テーブル+コマンドごとの統計情報など データベース操作の記録

  19. © 2012-2022 BASE, Inc. 19 #gocon2022_4sponsor @budougumi0617 • テーブル+コマンドごとの統計情報など データベース操作の記録

  20. © 2012-2022 BASE, Inc. 20 #gocon2022_4sponsor @budougumi0617 • blank import

    データベース操作の記録
  21. © 2012-2022 BASE, Inc. 21 #gocon2022_4sponsor @budougumi0617 • Trace IDの伝搬/外部リクエストの計測

    APIリクエスト
  22. © 2012-2022 BASE, Inc. 22 #gocon2022_4sponsor @budougumi0617 • RoundTripperを実装 ◦

    HTTPクライアントの初期化を他のRoundTripperと一緒にパッケージング APIリクエストの実装
  23. © 2012-2022 BASE, Inc. 23 #gocon2022_4sponsor @budougumi0617 • トレースとログを紐付けてくれる Logs

    in context
  24. © 2012-2022 BASE, Inc. 24 #gocon2022_4sponsor @budougumi0617 • uber/zapをラップする社内ライブラリでTrace IDなどをログに埋め込み

    ◦ 別途ECSのサイドカーとしてNew Relicへログ送信用のfluent-bitを起動 ◦ uber/zapは公式未対応なので自作ライブラリを作成 ▪ https://pkg.go.dev/github.com/budougumi0617/nrzap Logs in contextの実装
  25. © 2012-2022 BASE, Inc. 25 #gocon2022_4sponsor @budougumi0617 • エラーレポートにはSentryを併用 ◦

    SentryにNew RelicのTrace IDなどを付与しておくとログがすぐ見つかるので便利 ◦ (エラーレポートはまだNew RelicよりSentryのほうが便利かなと思っている) その他
  26. © 2012-2022 BASE, Inc. 26 1 2 3 #gocon2022_4sponsor @budougumi0617

    New Relicで何がわかるようになるか Goで疎結合な実装をするテクニック プラットフォームな設計をする時は プロダクトメンバーの開発体験を意識すること 今日伝えたいこと