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
0
11
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録
imkaoru
March 11, 2025
Tweet
Share
More Decks by imkaoru
See All by imkaoru
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
2
120
Other Decks in Programming
See All in Programming
CSC509 Lecture 03
javiergs
PRO
0
320
ポスターセッション: 「まっすぐ行って、右!」って言ってラズパイカーを動かしたい 〜生成AI × Raspberry Pi Pico × Gradioの試作メモ〜
komofr
0
930
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
320
SpecKitでどこまでできる? コストはどれくらい?
leveragestech
0
480
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
490
フロントエンド開発に役立つクライアントプログラム共通のノウハウ / Universal client-side programming best practices for frontend development
nrslib
7
3.9k
Reduxモダナイズ 〜コードのモダン化を通して、将来のライブラリ移行に備える〜
pvcresin
2
670
ネイティブ製ガントチャートUIを作って学ぶUICollectionViewLayoutの威力
jrsaruo
0
120
ソフトウェア設計の実践的な考え方
masuda220
PRO
3
400
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
890
Pull-Requestの内容を1クリックで動作確認可能にするワークフロー
natmark
1
440
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
240
Featured
See All Featured
Gamification - CAS2011
davidbonilla
81
5.5k
Writing Fast Ruby
sferik
629
62k
Agile that works and the tools we love
rasmusluckow
331
21k
Site-Speed That Sticks
csswizardry
11
880
Making the Leap to Tech Lead
cromwellryan
135
9.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
54
3k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
A designer walks into a library…
pauljervisheath
209
24k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Building Adaptive Systems
keathley
43
2.8k
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! ご清聴いただきありがとうございました!