Slide 1

Slide 1 text

New Relic 1 年⽣の振り返りと Cloud Cost Intelligence について New Relic User Group Vol.16 2025.12.17 (Wed)

Slide 2

Slide 2 text

登壇者紹介 株式会社 PLAY PLAY CLOUD 本部 技術推進室 マネージャー 兼 テックリード 丸⼭ 健⼀ 2016 年、エンジニアとして新卒⼊社。 動画配信プラットフォーム の開発を担当 する中で、アカウント認証基盤や視聴動向データの分析基 盤、チャット機能やカード決済機能などの多くのシステム や機能の設計から実装までを⼿がける。 2022 年に技術ブログ「PLAY DEVELOPERS BLOG」を ⽴ち上げ。現在は会社の技術推進役として、複数の開発チ ームやグループ会社に対する技術⽀援を⾏う。 @maruyamaworks

Slide 3

Slide 3 text

会社紹介

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

サービス概要 昨年11⽉より を利⽤

Slide 6

Slide 6 text

New Relic 導⼊の背景

Slide 7

Slide 7 text

システムの複雑性を増すさまざまな要素 外部サービスとの連携 AI 機能強化 ⾮同期処理 動画変換 / 画像変換 多様化するインフラ基盤 イベント駆動型アーキテクチャ 複雑なドメイン知識 ⼤規模データの処理 セキュリティ対策 ライブラリの脆弱性管理

Slide 8

Slide 8 text

PLAY CLOUD の開発と運⽤における課題感 調査時間の増加 トラブル対応の属⼈化 インフラコストの増加 システムが多機能化し 複雑性が増すにつれて 課題が顕在化 ➡ ⼿遅れになる前に対策を考えなければ!

Slide 9

Slide 9 text

https://x.com/NewRelicJapan/status/1803634966284345715 AWS Summit Japan 2024

Slide 10

Slide 10 text

● 2024 年 6 ⽉ New Relic 導⼊までの流れ AWS Summit Japan 2024 で New Relic の⽅と接触 翌⽇、New Relic の無料アカウントを発⾏して触ってみる ● 2024 年 10 ⽉ 期間限定トライアル開始(無制限で New Relic を使⽤可能) 本番環境に計装を⾏いデータ送信量を⾒積もり、社内稟議へ ● 2024 年 11 ⽉ New Relic 正式利⽤開始! ● 2025 年 4 ⽉ 技術推進室発⾜、組織としてオブザーバビリティをさらに加速

Slide 11

Slide 11 text

1 年間の振り返り

Slide 12

Slide 12 text

● Browser Monitoring ○ User ID 連携 ○ Source map 連携 ○ デプロイ時刻の連携 ○ Errors Inbox の Slack 通知 ● APM ● Distributed Tracing ○ SQS, DynamoDB をまたいだトレーシング対応 やったこと(計装⾯)

Slide 13

Slide 13 text

● New Relic の基本的な使い⽅について社内勉強会を実施 ● サービスレビューの実施 ○ 週次でチームごとに New Relic ダッシュボードを確認 ○ 確認する内容 ■ 「コスト」「エラーレート」「パフォーマンス」の観点 ■ 前週と⽐べて想定外の変化がないかを確認 ■ その他気になるエラー等あれば共有、深掘り ➡ エンジニアに o11y への関⼼を持ってもらう やったこと(組織⾯)

Slide 14

Slide 14 text

サービスレビュー コスト エラーレート パフォーマンス

Slide 15

Slide 15 text

苦労したこと その1 Node.js エージェントが⼊らない

Slide 16

Slide 16 text

検証環境で Node.js エージェントを導⼊したところ メモリ不⾜で アプリがクラッシュ してしまう... エージェントのためにサーバースペックを上げたくはない... Node.js エージェントが⼊らない

Slide 17

Slide 17 text

パフォーマンス改善をする ために New Relic を⼊れる はずが... New Relic を⼊れる ために パフォーマンス改善をする ことに...

Slide 18

Slide 18 text

0x プロファイラを使って 分析を⾏ったところ 関数の再帰呼び出し が ⼤きな負荷になっている ことを特定

Slide 19

Slide 19 text

問題箇所を修正したら API の応答時間が半減! 2.5 s → 1.3 s 深いコールスタックも消えた!

Slide 20

Slide 20 text

New Relic エージェントを⼊れても アプリが安定動作するようになりました 🎉

Slide 21

Slide 21 text

newrelic.js でエージェント機能の取捨選択をしよう exports.config = { transaction_tracer: { record_sql: 'off', !// SQL の記録を OFF }, slow_sql: { enabled: false, !// スロークエリの収集を OFF }, span_events: { enabled: true, max_samples_stored: 50, !// 分散トレーシングの収集量を制限 }, application_logging: { enabled: false, !// アプリケーションログの収集を OFF }, };

Slide 22

Slide 22 text

苦労したこと その2 分散トレーシングをつなぐカスタム計装

Slide 23

Slide 23 text

⾮同期処理を可視化するためにカスタム計装を⾏って Trace Context が引き継がれるように実装しています Lambda SQS Lambda SendMessage Invoke Message Attributes insertDistributedTraceHeaders() acceptDistributedTraceHeaders()

Slide 24

Slide 24 text

とにかく数が多いので根気のいる作業 😨

Slide 25

Slide 25 text

最近 DynamoDB Streams を経由する場合 でも 分散トレーシングがつながるようになりました Lambda DynamoDB Lambda WriteItem Invoke Attributes insertDistributedTraceHeaders() acceptDistributedTraceHeaders() via DDB Streams DynamoDB テーブルのレコードに Trace Context を格納して受け渡す!

Slide 26

Slide 26 text

本⽇、弊社テックブログで 解説記事を公開しました! https://developers.play.jp

Slide 27

Slide 27 text

苦労したこと その3 セッションリプレイのデータ送信量が⼤きすぎる していること

Slide 28

Slide 28 text

サービスの性質上、ユーザーの管理画⾯における滞在時間が⻑いため、 セッションリプレイが 2 時間を超える ことも珍しくない(データ容量を⾷う...)

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

エラーの発⽣前後だけ セッションリプレイが⾒れれば⼗分なのですが 現状だといい⽅法がない模様。New Relic 側の今後のアップデートに期待します!

Slide 31

Slide 31 text

苦労したこと その4 ブラウザ拡張機能に起因するエラー していること

Slide 32

Slide 32 text

ユーザーのブラウザにインストールされている 拡張機能に起因するエラー が Browser Monitoring の Errors Inbox に結構な頻度で⼊ってくる 😭

Slide 33

Slide 33 text

Browser Agent の setErrorHandler() で除外しようとしているのですが どうもうまく機能しておらず... いい⽅法を知っている⽅がいたら教えてください 🙇 function handleError(err) { if (err.stack!?.includes("chrome-extension:!//")) { !// true を返せば New Relic にエラーは送信されないはず... return true; } return false; }); window.newrelic.setErrorHandler(handleError);

Slide 34

Slide 34 text

Cloud Cost Intelligence について

Slide 35

Slide 35 text

New Relic で AWS のコストを可視化する⽅法について調べると 多くの記事ではこのような形のグラフが出てきます 予期せぬコストが発⽣していても グラフの傾きが増えるだけなので ⾒落としやすい 😭

Slide 36

Slide 36 text

AWS Cost Explorer みたいなこんな感じの グラフにしたい...

Slide 37

Slide 37 text

NRQL を試⾏錯誤するもうまくいかず... 😭

Slide 38

Slide 38 text

弊社では “Budget Falcon” という⾃社開発の OSS で 毎⽇ Slack にグラフ画像を 投稿しています github.com/playjp/budget-falcon プロモーションを含みます

Slide 39

Slide 39 text

Budget Falcon みたいなグラフを New Relic ダッシュボードにも置きたい...

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

いい感じにコストを可視化することができました!

Slide 42

Slide 42 text

FROM CloudCost SELECT SUM(line_item_unblended_cost) WHERE line_item_line_item_type IN ('Usage', 'DiscountedUsage') AND line_item_usage_account_id IN ('123456789012') !-- AccountID FACET line_item_product_code SINCE 7 days ago TIMESERIES 1 day NRQL でデータを引けるので Dashboard にも配置することが可能です!

Slide 43

Slide 43 text

● プレビュー期間中なので、まずは機能の有効化が必要 ● AWS 側で Cost & Usage Report を 1 時間ごとに S3 に出⼒する設定を⾏う ○ 命名規則とか結構厳しいので、docs をよく読んで設定しましょう! ● S3 に対してアクセス可能な IAM ロールを発⾏する ● IAM ロールを New Relic 側に渡して、S3 へのアクセス権限を NR に付与 Cloud Cost Intelligence の設定⽅法

Slide 44

Slide 44 text

今後の展望

Slide 45

Slide 45 text

今後の展望 計装率 100% PLAY CLOUD 全体に New Relic を導⼊する サービス全体の可視化 完全なサービスマップを構築し 全体の品質を確認できるように 各チームが⾃⾛して改善する仕組みづくり 例えば、ある指標に対してどのチームが最も改善 できたか、お互いが競い合うような⽂化をつくるなど 導⼊だけで終わりではなく、組織に改善の⽂化を根付かせることが重要

Slide 46

Slide 46 text

「⾒たい」と「⾒せたい」がつながる世界を作る