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
NetworkXとGNNで学ぶグラフデータ分析入門〜複雑な関係性を解き明かすPythonの力〜
mhrtech
3
970
CSC305 Lecture 01
javiergs
PRO
1
390
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
3
1.5k
あなたの知らない「動画広告」の世界 - iOSDC Japan 2025
ukitaka
0
350
CSC305 Lecture 03
javiergs
PRO
0
230
iOSDC.pdf
chronos2500
2
650
Playwrightはどのようにクロスブラウザをサポートしているのか
yotahada3
7
2.2k
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
a_okui
0
190
Conquering Massive Traffic Spikes in Ruby Applications with Pitchfork
riseshia
0
140
Local Peer-to-Peer APIはどのように使われていくのか?
hal_spidernight
2
440
GitHub Actions × AWS OIDC連携の仕組みと経緯を理解する
ota1022
0
230
After go func(): Goroutines Through a Beginner’s Eye
97vaibhav
0
220
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
How GitHub (no longer) Works
holman
315
140k
Why Our Code Smells
bkeepers
PRO
339
57k
Automating Front-end Workflow
addyosmani
1371
200k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
It's Worth the Effort
3n
187
28k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
How to Think Like a Performance Engineer
csswizardry
27
2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
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! ご清聴いただきありがとうございました!