Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録
Search
imkaoru
March 11, 2025
Programming
28
0
Share
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録
imkaoru
March 11, 2025
More Decks by imkaoru
See All by imkaoru
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
5
1.8k
Other Decks in Programming
See All in Programming
SkillがSkillを生む:QA観点出しを自動化した
sontixyou
6
3.4k
The Monolith Strikes Back: Why AI Agents ❤️ Rails Monoliths
serradura
0
330
Running Swift without an OS
kishikawakatsumi
0
830
tRPCの概要と少しだけパフォーマンス
misoton665
2
180
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
220
ハーネスエンジニアリングとは?
kinopeee
9
4.3k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyKaigi 2026, Hakodate, Japan
marcoroth
0
100
Codex CLI でつくる、Issue から merge までの開発フロー
amata1219
0
360
「速くなった気がする」をデータで疑う
senleaf24
0
170
Xdebug と IDE による デバッグ実行の仕組みを見る / Exploring-How-Debugging-Works-with-Xdebug-and-an-IDE
shin1x1
0
380
Google Nest CamとApple Vision frameworkと猫🐈🐈⬛ / onishi50
yutailang0119
0
110
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
150
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.4k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
210
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
480
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
180
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.6k
Technical Leadership for Architectural Decision Making
baasie
3
330
From π to Pie charts
rasagy
0
160
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
150
Designing for Timeless Needs
cassininazir
0
190
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
730
Transcript
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録 2025/03/11 Fukuoka.go#21 なんと10周年 @imkaoru
自己紹介 ディップ株式会社 / バイトルアプリAPIチーム所属 社会人もうすぐ3年目のサーバーサイドエンジニア : ) Goのすきなところ:後方互換性 / 明示的で可読性が高い
/ 標準ライブラリが充実 福岡歴:大学から。一旦東京で社会人して昨年9月に戻ってきました! Qiita:@imkaoru / Kaoru Sato 佐藤 薫
Agenda 背景 Lambda拡張を⼊れてみた GoAgentも組み込む 所感
背景 01
新規開発したとあるバッチの話です 背景 使⽤技術 Lambda(コンテナ形式) Go ※⼀部リソースは省略
今回は入れた監視周りのお話をします 背景 ※ 一部リソースは省略 使用技術 Lambda(コンテナ形式) Go
実現したい「監視要件」 背景 処理の成功・失敗がわかるように New Reli cにログを出力する そのほかのテレメトリデータは、 大きいシステムでないため不要 できれば、 コストの面で
CloudWatchを介さず実現したい ログ取り込みやデータ転送に関 する課金を回避させたい ※ 一部リソースは省略
簡単に導入できるので、ぜひ!! 背景 今回の構成で監視要件を実現するまでの 流れを時系列で書いてみました 一部詰まったポイントがありましたが 「簡単に導入できる」ので、ぜひご参考 にして頂けますと嬉しいです 😊 ※ 一部リソースは省略
Lambda拡張を ⼊れてみた 02
newrelic-lambda-extention Lambda拡張を⼊れてみた サーバレス環境に最適化された NewRelicの拡張レイヤー CloudWatchを介さずにログ転送 可能 レイヤー+Lambda環境変数だけ で簡単に導⼊できる 【出典:Containerizedinstrumentation(https://docs.newrelic.com/docs/)】
2.Lambda環境変数 Lambda拡張を⼊れてみた NEW_RELIC_ACCOUNT_ID アカウントID NEW_RELIC_LICENSE_KEY_SECRET SecretsManagerのシークレット名 NEW_RELIC_EXTENSION_SEND_FUNCTION _LOGS ロギングの有効化 1.Dockerfile
FROMpublic.ecr.aws/newrelic-lambda- layers-for-docker/newrelic-lambda- layers-lambdaextension:x86aslayer ランタイムと互換性のあるレイヤーを追加 COPY--from=layer/opt//opt/ 実⾏⽤コンテナにコピーする CMD[ /opt/extensions/newrelic- lambda-extension ] Lambdaの実⾏と並⾏して動作させる
Lambda拡張を入れてみた New Rel icに ログが出力できていることを確認 🎉
Lambda拡張を入れてみた New Rel icに ログが出力できていることを確認 🎉 ・・・!?
Lambda拡張を入れてみた New Rel icに ログが出力できていることを確認 🎉 ・・・!? でも、あれ? Lambda実行が終わらない 😇
発⽣した問題 Lambda拡張を⼊れてみた ログは出⼒されるものの、設定したタイムアウト上限時間まで実⾏が 終了されない≒不要な課⾦時間が発⽣してしまう 例えば、タイムアウト上限時間を5分に設定していたとして、処理 ⾃体は15秒で終わっていたとしても5分経つまで実⾏が続く タイムアウトエラーになるわけではなく、正常終了はする 終了のシグナルがない場合は拡張レイヤーが待機し、実際にタイ ムアウトする前に必要なクリーンアップを⾏うため
発生した問題 Lambda拡張を入れてみた ログは出力されるものの、設定したタイムアウト上限時間まで実行が 終了されない ≒ 不要な課金時間が発生してしまう 例えば、タイムアウト上限時間を5分に設定していたとして、処理 自体は15秒で終わっていたとしても5分経つまで実行が続く タイムアウトエラーになるわけではなく、正常終了はする 終了のシグナルがない場合は拡張レイヤーが待機し、実際にタイ
ムアウトする前に必要なクリーンアップを行うため そこでNew Relicに 問い合わせしてみました 🥲
GoAgentも組み込む 03
Go Agentも組み込む 結論としては、 「Extensi onのLayer導入のみが実施されており Agentが組み込まれていないことが原因で 期待通りに動作していない ものと思われる」 旨の回答をいただきました 🫡
↓↓↓ GoAgentも組み込む
追加した記述 GoAgentも組み込む nrlambda.ConfigOption() NewRelicエージェント固有の設定を⾏う サーバレスモードやトレーサーの有効化など nrlambda.Start(handler.HandleRequest,app) 適切にトランザクション管理がされるようになる それにより、処理の終了と共に実⾏が終了するようになった!!
ついでに、ログをエンティティに紐付ける Go Agentも組み込む
Go Agentも組み込む
Go Agentも組み込む
Go Agentも組み込む
Go Agentも組み込む O K ! ! 🎉
所感 04
所感 結果的には 「レイヤー + Lambda環境変数 + mai n関数に記述追加」 だけで簡単に導入できた 😊
ただ、結構ドキュメントや情報が点在していて苦戦する場面も.. CloudWatchと比較したときに、もし システムの拡張に合わせてメト リクスやトレースもいい感じにしたい! だったり 柔軟なアラート設定 したい! となった場合に 実現の幅が大きいことも嬉しい 😌 またログについては slog のLogs i n Contextに対応してたりする
参考にさせていただいたDocsたち 🙏 Introduction to AWS Lambda monitoring Containerized instrumentation Environment
variables for AWS Lambda CloudWatch Logsを介さずにLambdaのテレメトリを行うnewrelic-lambda- extensionとその仕組み SDK based instrumentation > Go Go agent configuration v3/integrations/nrlambda Log event data
ThankYou! ご清聴いただきありがとうございました!