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
20
Goで作成したコンテナ形式のLambdaに New Relicを導入する際の備忘録
imkaoru
March 11, 2025
Tweet
Share
More Decks by imkaoru
See All by imkaoru
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
5
1.4k
Other Decks in Programming
See All in Programming
Navigating Dependency Injection with Metro
l2hyunwoo
1
200
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osc25hi-duckdb
takahashiikki
0
230
gunshi
kazupon
1
130
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
200
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
3.2k
Java 25, Nuevas características
czelabueno
0
130
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
150
SQL Server 2025 LT
odashinsuke
0
120
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
230
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
180
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
130
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
880
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Designing Powerful Visuals for Engaging Learning
tmiket
0
190
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
81
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
81
More Than Pixels: Becoming A User Experience Designer
marktimemedia
2
270
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
54
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
400
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! ご清聴いただきありがとうございました!