$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)

    View Slide

  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 商業誌出版予定
    清水 陽一郎 (しみず よういちろう)

    View Slide

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

    View Slide

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

    View Slide

  5. © 2012-2022 BASE, Inc. 5
    #gocon2022_4sponsor
    @budougumi0617
    ● Go on ECS Fargate
    お題: BASEカード

    View Slide

  6. © 2012-2022 BASE, Inc. 6
    © 2012-2022 BASE, Inc. 6
    New Relicとは

    View Slide

  7. © 2012-2022 BASE, Inc. 7
    #gocon2022_4sponsor
    @budougumi0617
    New Relicとは
    ● Telemetry Data Platform
    ○ テレメトリデータの収集・可視化
    ● Full-Stack Observability
    ○ 計測データの分析・可視化インターフェイス
    ● Alerts and Applied Intelligence

    View Slide

  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

    View Slide

  9. © 2012-2022 BASE, Inc. 9
    © 2012-2022 BASE, Inc. 9
    New Relicの機能と導入

    View Slide

  10. © 2012-2022 BASE, Inc. 10
    #gocon2022_4sponsor
    @budougumi0617
    ● サービス・アプリケーション全体のサービスレベルの把握
    APM(Application Perfomance Management)

    View Slide

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

    View Slide

  12. © 2012-2022 BASE, Inc. 12
    #gocon2022_4sponsor
    @budougumi0617
    ● 環境変数の有無で有効化
    ○ E2EテストやCI上でも動くように未設定でもサーバが起動できるように
    APMの導入

    View Slide

  13. © 2012-2022 BASE, Inc. 13
    #gocon2022_4sponsor
    @budougumi0617
    ● 複数サービス間のつながりを可視化
    ■ Trace: 各サービスで実行されたリクエスト処理
    ■ Span: Trace内で行われた関数呼び出し・SQL・外部API実行などの各操作
    分散トレース

    View Slide

  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
    トレースの実装

    View Slide

  15. © 2012-2022 BASE, Inc. 15
    #gocon2022_4sponsor
    @budougumi0617
    ● HTTPルーター構築時にデフォルト適用
    ■ 各ハンドラー実装者は意識せずにTraceが設定される
    トレースの取得

    View Slide

  16. © 2012-2022 BASE, Inc. 16
    #gocon2022_4sponsor
    @budougumi0617
    ● 関数・メソッド冒頭でNew Relicの関数を呼び出し
    ○ コードに直接埋め込む必要があるので強結合になる
    ■ アノテーションプログラミングなどは当然できない
    ○ Spanとして計測したい全関数に書かないといけない
    Spanの取得

    View Slide

  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の取得

    View Slide

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

    View Slide

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

    View Slide

  20. © 2012-2022 BASE, Inc. 20
    #gocon2022_4sponsor
    @budougumi0617
    ● blank import
    データベース操作の記録

    View Slide

  21. © 2012-2022 BASE, Inc. 21
    #gocon2022_4sponsor
    @budougumi0617
    ● Trace IDの伝搬/外部リクエストの計測
    APIリクエスト

    View Slide

  22. © 2012-2022 BASE, Inc. 22
    #gocon2022_4sponsor
    @budougumi0617
    ● RoundTripperを実装
    ○ HTTPクライアントの初期化を他のRoundTripperと一緒にパッケージング
    APIリクエストの実装

    View Slide

  23. © 2012-2022 BASE, Inc. 23
    #gocon2022_4sponsor
    @budougumi0617
    ● トレースとログを紐付けてくれる
    Logs in context

    View Slide

  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の実装

    View Slide

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

    View Slide

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

    View Slide