νμμ λ°λΌ λͺ κ°μ§ λ€λ₯Έ λ°©λ²μΌλ‘ λ΄λ λ¦ Lambda λͺ¨λν°λ§ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμ΅λλ€. κ°μ₯ κ°λ ₯ν κΈ°λ₯ μ±λ₯κ³Ό κ°μ₯ κ°λ ₯ν μ₯μ λλΉ κΈ°λ₯μ μ 곡νλ μ΅μ
μλ CloudWatchλ₯Ό ν΄λ°±μΌλ‘ ꡬμ±νλ κ²μ΄ ν¬ν¨λ©λλ€. μ¦, νμ₯ νλ‘κ·Έλ¨μ ν΅ν΄ μ€νλ λμνΈλ₯Ό λ΄λ λ¦μΌλ‘ λ°°μ‘νκ² λλ©°, νμ₯ νλ‘κ·Έλ¨μ λ¬Έμ κ° μλ κ²½μ° λ΄λ λ¦μ CloudWatchλ₯Ό ν΅ν΄ κ³μν΄μ νμ΄λ‘λλ₯Ό λ°κ² λ©λλ€.
CloudWatch λ체μ μ΄μ :
- λ
립μ μ€ν: ν¨μ μ€νκ³Ό κ΄κ³μμ΄ CloudWatchμ λͺ¨λ λ‘κ·Έλ₯Ό μΊ‘μ²ν©λλ€. ν¨μμ μ μμ μΈ μλμ λ°©ν΄νκ±°λ ν¨μ νΈμΆ κΈ°κ°μ μν₯μ λ―ΈμΉ κ°λ₯μ±μ κ±°μ μμ΅λλ€.
- 보μ λ€νΈμν¬μμ μλ: λ΄λ λ¦μΌλ‘μ μμλ°μ΄λ νΈλν½μ κ°μ§ μ μλ VPCμ κΈ°λ₯μ μ μ©ν©λλ€.
- ν₯μλ λͺ¨λν°λ§ νμ±ν: λ€λ₯Έ ννμ μΈνλΌ λ° λ°μ΄ν°λ² μ΄μ€ μ€νλ λμνΈμ νμν©λλ€. μμΈν λ΄μ©μ Amazon RDS Enhanced λͺ¨λν°λ§ ν΅ν© μ€λͺ
μ λ₯Ό μ°Έμ‘°νμμμ€.
μ΄ λ°°μ‘ μ΅μ
μ κ°μ₯ κ°λ ₯ν μμ μ₯μΉλ₯Ό μ 곡νμ§λ§ AWS CloudWatch μλΉμ€λ λ§μ λ°μ΄ν°λ₯Ό μμ±ν μ μλ€λ μ μ μ μνλ κ²μ΄ μ€μν©λλ€. λΉμ©κ³Ό μ΄λ€ λ΄λ λ¦ μκΈμ λ₯Ό μ νν μ§ μκ°ν λ λ°μ΄ν° μμ§μ μΌλμ λμΈμ.
CloudWatch λ체 μλ λ°©μ
νμ₯ νλ‘κ·Έλ¨μ΄ μμλμ§ μκ±°λ(noop λͺ¨λλΌκ³ λ ν¨) μΆ©λνλ κ²½μ° μμ΄μ νΈκ° μμ±ν NR_LAMBDA_MONITORING
μ€μ μΈμ½λ©νμ§ λͺ»ν©λλ€. λμ NR_LAMBDA_MONITORING
μ€μ΄ CloudWatch λ‘κ·Έμ νμλ©λλ€. newrelic-log-ingestion
ν¨μκ° ν¨μμ λμΌν 리μ μ μ€μΉλμ΄ μκ³ νμ΄λ‘λλ₯Ό μ μ‘νλλ‘ κ΅¬μ±λμμΌλ©° ν¨μμ CloudWatch λ‘κ·Έ κ·Έλ£Ήμ μν΄ νΈλ¦¬κ±°λλ κ²½μ° νμ΄λ‘λ λ°°μ‘μ μν νμ₯ νλ‘κ·Έλ¨μ λν λ체 μν μ ν μ μμ΅λλ€.
μμνκΈ° μ μ
λ체 μ΅μ
μ μ€μ νκΈ° μ μ λ€μμ μλ£ν΄μΌ ν©λλ€.
- λ‘κ·Έλ₯Ό 보λ΄λ €λ AWS 리μ μ
newrelic-log-ingestion
ν¨μλ₯Ό μ€μΉν©λλ€. - λ‘κ·Έλ₯Ό 보λ΄λ κ²½μ° nullκ³Ό λμΌν νν° ν¨ν΄μ μμ±νκ±°λ μ μ‘νλ €λ ν¨μ λ‘κ·Έμ μΌμΉνλ μ¬μ©μ μ§μ ν¨ν΄μ μμ±ν©λλ€. λ΄λ λ¦μ ν¨μμ λν CloudWatch λ‘κ·Έλ₯Ό μμ ν©λλ€. μ€λ³΅λ λ‘κ·ΈμΈμ λ°©μ§νλ €λ©΄ νμ₯ νλ‘κ·Έλ¨μμ λ‘κ·ΈμΈ μ λ¬μ λΉνμ±νν΄μΌ ν©λλ€. νμ₯ νλ‘κ·Έλ¨μ λ‘κ·Έ μ λ¬μ κΈ°λ³Έμ μΌλ‘ λΉνμ±νλμ΄ μμ΅λλ€.
λ΄λ λ¦ Lambda λ μ΄μ΄λ₯Ό μ
λ°μ΄νΈνκΈ° μ μ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€.
- μ΅μ λ μ΄μ΄ λ²μ μΌλ‘ μ
λ°μ΄νΈνκΈ° μ μ μ΅μ λ μ΄μ΄κ° νμ₯μ΄λ μ 3μ μμ‘΄μ±/μ’
μμ±μ μμμν€λ λ³κ²½ μ¬νμ λμ
ν μ μλ€λ μ μ λͺ
μ¬νμΈμ.
- ν΄λΉ κΈ°λ₯μ μ μλνλ κ²μΌλ‘ μλ €μ§ λ μ΄μ΄ λ²μ μ κ³ μ νκ³ λ²κ·Έ ν΄κ²°, μ κΈ°λ₯ λ° λ³΄μ ν¨μΉ ν보 λλ μμ΄μ νΈ EOLμ΄ λ°μν κ²½μ°μλ§ μ΅μ λ μ΄μ΄ λ²μ μΌλ‘ μ
λ°μ΄νΈνμΈμ.
- λͺ¨λ λ³κ²½ μ¬νκ³Ό λ¦΄λ¦¬μ€ λ
ΈνΈλ₯Ό μ£Όμ κΉκ² κ²ν νκ³ μλ‘μ΄ λ μ΄μ΄λ₯Ό νλ‘λμ
μ ꡬν, λ°°ν¬νκΈ° μ μ κ°λ° λλ μμ μ± νκ²½μμ ν
μ€νΈνμΈμ.
ꡬν μ΅μ
CloudWatch λ체λ₯Ό ꡬνν μ μλ μΈ κ°μ§ λ°©λ²μ΄ μμ΅λλ€.
- ν
λ©νΈλ¦¬ νμ΄λ‘λμ λν νμ₯μ νμ±ννκ³ CloudWatchλ₯Ό ν΅ν΄ λ‘κ·Έλ₯Ό μ μ‘ν©λλ€. μ΄ μλ리μ€μμ ν
λ©νΈλ¦¬ νμ΄λ‘λλ νμ₯μ ν΅ν΄ λ°°μ‘λκ³ CloudWatchλ₯Ό ν΅ν΄ λ‘κ·Έλλ©°, νμ₯μ΄ μ€ν¨νλ κ²½μ°μλ νμ΄λ‘λλ λ§μ°¬κ°μ§μ
λλ€.
- ν
리λ©νΈλ¦¬ νμ΄λ‘λ λ° λ‘κ·Έμ λν νμ₯ νμ±ν: μ΄ μλ리μ€μμλ ν
리λ©νΈλ¦¬ νμ΄λ‘λ λ° λ‘κ·Έκ° νμ₯μ ν΅ν΄ μ 곡λ©λλ€.
- νμ₯ λΉνμ±νλ¨: μ΄ μλ리μ€μμλ λ‘κ·Έμ νμ΄λ‘λλ₯Ό μ μ‘νλ λ° νμ CloudWatchκ° μ¬μ©λ©λλ€.
CloudWatchλ‘ λ‘κ·Έλ₯Ό 보λ΄μ§ μλ κ²½μ° μ΄ μ΅μ
μ 리μμ€νλ νμ΄λ‘λκ° νμ λ΄λ λ¦μΌλ‘ 보λ΄μ§λλ‘ λ³΄μ₯νλ κ°μ₯ μ λ ΄νκ³ κ°μ₯ κ°λ ₯ν λ°©λ²μ
λλ€. λ‘κ·Έλ₯Ό 보λ΄λ κ²½μ° μ΄ μ΅μ
μ μ¬μ©νλ©΄ λ‘κ·Έ μ μ‘μ λν μΌλΆ CloudWatch λΉμ©μ΄ λ°μν©λλ€. κ°κ²© μ±
μ μ λν μμΈν λ΄μ©μ λ°μ΄ν° μμ§: μ²κ΅¬ λ° κ·μΉμ μ°Έμ‘°νμΈμ.
λ΄λ λ¦ Lambda λ μ΄μ΄λ₯Ό μΆκ°νλ©΄ νμ₯ κΈ°λ₯μ΄ νμ±νλκ³ κΈ°λ³Έμ μΌλ‘ λ‘κ·Έ λ°°μ‘μ΄ λΉνμ±νλ©λλ€.
ν¨μμ νμ₯ νκ²½ λ³μλ₯Ό μ€μ ν©λλ€.
NEW_RELIC_LAMBDA_EXTENSION_ENABLED
: true
(κΈ°λ³Έκ°)NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS
: false
(κΈ°λ³Έκ°)
newrelic-log-ingestion
ν¨μ νκ²½ λ³μλ₯Ό μ€μ ν©λλ€.
INFRA_ENABLED
: true
LOGGING_ENABLED
: true
(λ‘κ·Έλ₯Ό 보λ΄λ κ²½μ°)
λλ serverless-newrelic-lambda-layers
μ¬μ©νλ κ²½μ° λ€μμ μ€μ ν©λλ€.
enableFunctionLogs: false
ν
enableIntegration
ν
νλ¦Ώμ μμ§ ν΅ν©μ΄ μλ AWS κ³μ μ ν¨μλ₯Ό ꡬν, λ°°ν¬νλ κ²½μ°μλ§ ν¬ν¨λμ΄μΌ ν©λλ€. ν΅ν©μ΄ μ€μ λλ©΄ μ΄ μ΅μ
μ ν¨μλ₯Ό ꡬννλ€, λ°°ν¬νλ€νλ λ° μ¬μ©λ serverless.yml
μμ μ κ±°λμ΄μΌ ν©λλ€.
λλ newrelic-lambda-cli
μ μ¬μ©νλ κ²½μ° λ€μμ μ€μ ν©λλ€.
$newrelic-lambda integrations install --nr-account-id <YOUR_ACCOUNT_ID> --nr-api-key <YOUR_API_KEY> --enable-logs
$newrelic-lambda layers install --function <name or arn> --nr-account-id <YOUR_NEW_RELIC_ACCOUNT_ID>
$newrelic-lambda subscriptions install --function <name or arn> --filter-pattern ""
μ΄ μ΅μ
μ 리μμ€νλ νμ΄λ‘λκ° νμ λ΄λ λ¦μ λλ¬νλλ‘ λ³΄μ₯νλ μ΅μ λΉμ© κ²½λ‘λ₯Ό μ 곡ν©λλ€. μ΄ μ΅μ
μ λ΄λ λ¦ Lambda νμ₯ νλ‘κ·Έλ¨μ ν΅ν΄ ν¨μ λ‘κ·Έλ₯Ό μ 곡νλ―λ‘ νμ₯ νλ‘κ·Έλ¨μ΄ μμλμ§ μκ±°λ μΆ©λμ΄ λ°μνλ©΄ ν¨μ λ‘κ·Έκ° λ΄λ λ¦μμ λλ½λ©λλ€.
κΈ°λ₯ λ‘κ·Έλ₯Ό 보λ΄λ κ²½μ° νμ₯ νλ‘κ·Έλ¨μ΄ κ·Έλ κ² νλλ‘ κ΅¬μ±λμ΄ μλμ§ νμΈνμΈμ. μ΄λ¬ν λ‘κ·Έλ νμ₯ νλ‘κ·Έλ¨μ μν΄μλ§ μ μ‘λλ©° μ€λ³΅μ νΌνκΈ° μν΄ λ‘κ·Έμ λν CloudWatch λ체λ μμ΅λλ€.
λ΄λ λ¦ Lambda λ μ΄μ΄λ₯Ό μΆκ°νλ©΄ νμ₯ κΈ°λ₯μ΄ νμ±νλκ³ κΈ°λ³Έμ μΌλ‘ λ‘κ·Έ λ°°μ‘μ΄ λΉνμ±νλ©λλ€. λ΄λ λ¦μμ ν¨μ λ‘κ·Έλ₯Ό λ³΄λ €λ©΄ νκ²½ λ³μλ₯Ό μ¬μ©νμ¬ νμ₯ νλ‘κ·Έλ¨μ΄ ν¨μ λ‘κ·Έλ₯Ό λ³΄λΌ μ μλλ‘ ν΄μΌ ν©λλ€.
ν¨μ λ‘κ·Έλ ν¨μ νΈμΆ μ€μ ν¨μμ μν΄ κΈ°λ‘λλ λ‘κ·ΈλΌλ μ μ μ μνλ κ²μ΄ μ€μν©λλ€. νμ₯ νλ‘κ·Έλ¨μ START
λ° END
κ°μ Lambda νλ«νΌ λ‘κ·Έλ₯Ό 보λ΄μ§ μμ΅λλ€.
ν¨μμ νμ₯ νκ²½ λ³μλ₯Ό μ€μ ν©λλ€.
NEW_RELIC_LAMBDA_EXTENSION_ENABLED
: true
(κΈ°λ³Έκ°)NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS
: true
2 newrelic-log-ingestion
ν¨μ νκ²½ λ³μλ₯Ό μ€μ ν©λλ€.INFRA_ENABLED
: true
LOGGING_ENABLED
: false
(μ€λ³΅μ λ°©μ§νλ €λ©΄ λ‘κ·Έ ν¬μλ©μ λΉνμ±ννκ±°λ CloudWatch ꡬλ
νν° ν¨ν΄μ NR_LAMBDA_MONITORING
μ€λ§ μΌμΉνλλ‘ μ€μ νμΈμ)
λλ serverless-newrelic-lambda-layers
μ¬μ©νλ κ²½μ° λ€μμ μ€μ ν©λλ€.
cloudWatchFilter: "NR_LAMBDA_MONITORING"
ν
enableIntegration
ν
νλ¦Ώμ μμ§ ν΅ν©μ΄ μλ AWS κ³μ μ ν¨μλ₯Ό ꡬν, λ°°ν¬νλ κ²½μ°μλ§ ν¬ν¨λμ΄μΌ ν©λλ€. ν΅ν©μ΄ μ€μ λλ©΄ μ΄ μ΅μ
μ ν¨μλ₯Ό ꡬννλ€, λ°°ν¬νλ€νλ λ° μ¬μ©λ serverless.yml
μμ μ κ±°λμ΄μΌ ν©λλ€.
λλ newrelic-lambda-cli
μ μ¬μ©νλ κ²½μ° λ€μμ μ€μ ν©λλ€.
$newrelic-lambda integrations install --nr-account-id <YOUR_ACCOUNT_ID> --nr-api-key <YOUR_API_KEY>
$newrelic-lambda layers install --function <name or arn> --nr-account-id <YOUR_NEW_RELIC_ACCOUNT_ID>
$newrelic-lambda subscriptions install --function <name or arn> --filter-pattern "NR_LAMBDA_MONITORING"
μ΄ μ΅μ
μ CloudWatchμ newrelic-log-ingestion
ν¨μμ μ μ μΌλ‘ μμ‘΄νμ¬ λ‘κ·ΈμΈ λ° νμ΄λ‘λλ₯Ό λ΄λ λ¦μ μ λ¬ν©λλ€. μ΄ μ΅μ
μ νμ₯ μ€ν¨λ‘ μΈν μ μ¬μ μΈ λ€μ΄νμμ λ°©μ§νκΈ° μν΄ νμ₯ κΈ°λ₯μ λΉνμ±νν©λλ€.
μ΄ λ°©λ²μ κ²½μ° NR_LAMBDA_MONITORING
μ€μ΄ CloudWatchμ κΈ°λ‘λλ κ²μ λ°©μ§νμ§ μλλ‘ λ΄λ λ¦ Lambda νμ₯μ μμ ν λΉνμ±νν΄μΌ ν©λλ€. λ΄λ λ¦ Lambda νμ₯μ΄ λΉνμ±νλλ©΄ λͺ¨λ ν
λ 리λ CloudWatch, ꡬλ
νν° λ° newrelic-log-ingestion
ν¨μλ₯Ό ν΅ν΄ μ μ‘λ©λλ€.
λ΄λ λ¦ Lambda λ μ΄μ΄λ₯Ό μΆκ°νλ©΄ νμ₯ κΈ°λ₯μ΄ νμ±νλκ³ κΈ°λ³Έμ μΌλ‘ λ‘κ·Έ μ λ¬μ΄ λΉνμ±νλ©λλ€. νκ²½ λ³μλ₯Ό μ¬μ©νμ¬ νμ₯ κΈ°λ₯μ λΉνμ±νν΄μΌ ν©λλ€.
λ€μκ³Ό κ°μ΄ ν¨μμ νμ₯ νκ²½ λ³μλ₯Ό μ€μ ν©λλ€.
NEW_RELIC_LAMBDA_EXTENSION_ENABLED
: false
λ€μκ³Ό κ°μ΄ newrelic-log-ingestion
ν¨μ νκ²½ λ³μλ₯Ό μ€μ ν©λλ€.
INFRA_ENABLED
: true
LOGGING_ENABLED
: true
λλ serverless-newrelic-lambda-layers
μ¬μ©νλ κ²½μ° λ€μμ μ€μ ν©λλ€.
ν
enableIntegration
ν
νλ¦Ώμ μμ§ ν΅ν©μ΄ μλ AWS κ³μ μ ν¨μλ₯Ό ꡬν, λ°°ν¬νλ κ²½μ°μλ§ ν¬ν¨λμ΄μΌ ν©λλ€. ν΅ν©μ΄ μ€μ λλ©΄ μ΄ μ΅μ
μ ν¨μλ₯Ό ꡬννλ€, λ°°ν¬νλ€νλ λ° μ¬μ©λ serverless.yml
μμ μ κ±°λμ΄μΌ ν©λλ€.
λλ newrelic-lambda-cli
μ μ¬μ©νλ κ²½μ° λ€μμ μ€μ ν©λλ€.
$newrelic-lambda integrations install --nr-account-id <YOUR_ACCOUNT_ID> --nr-api-key <YOUR_API_KEY>
$newrelic-lambda layers install --function <name or arn> --nr-account-id <YOUR_NEW_RELIC_ACCOUNT_ID> --disable-extension
$newrelic-lambda subscriptions install --function <name or arn> --filter-pattern ""
CloudWatchλ‘λ§ λ°μ΄ν°λ₯Ό μ μ‘νλλ‘ μλμΌλ‘ μ νν μλ μμ΅λλ€. μ΄κ²μνκΈ° μν΄:
false
κ°μ μ¬μ©νμ¬ ν¨μμ NEW_RELIC_LAMBDA_EXTENSION_ENABLED
νκ²½ λ³μλ₯Ό μΆκ°νμ¬ νμ₯μ λΉνμ±νν©λλ€.
CloudWatch Logs ꡬλ
νν°λ₯Ό λ§λ€μ΄ ν¨μμ λ‘κ·Έλ‘ newrelic-log-ingestion
ν¨μλ₯Ό νΈμΆν©λλ€.
CLIλ λ€μμ μνν μ μμ΅λλ€. newrelic-lambda subscriptions install --function FUNCTION_NAME
λλ AWS μ½μμ μ¬μ©νμ¬ ν¨μμ CloudWatch λ‘κ·Έ κ·Έλ£Ήμμ ꡬλ
νν°λ₯Ό μμ±νμ¬ newrelic-log-ingestion
Lambda ν¨μλ₯Ό νΈμΆν©λλ€.
λλ λ€μ λ¨κ³μ λ°λΌ CloudWatch λ‘κ·Έλ₯Ό λ΄λ λ¦ Lambdaλ‘ μ€νΈλ¦¬λ°ν μ μμ΅λλ€.
CloudWatchλ₯Ό μ΄κ³ μΌμͺ½ λ©λ΄μμ Logs μ νν λ€μ λͺ¨λν°λ§ μ€μΈ ν¨μμ λν λ‘κ·Έ κ·Έλ£Ήμ μ νν©λλ€.
Actions > Subscription filters > Create Lambda subscription filter μ νν©λλ€.
Lambda function μλμμ newrelic-log-ingestion
ν¨μλ₯Ό μ νν©λλ€.
Log format λ₯Ό JSON
λ‘ μ€μ ν©λλ€.
Subscription filter pattern to ?REPORT ?NR_LAMBDA_MONITORING ?"Task timed out" ?RequestId
μ μ€μ ν©λλ€. λλ LOGGING_ENABLED
νκ²½ λ³μλ₯Ό μ¬μ©νμ¬ λͺ¨λ λ‘κ·Έλ₯Ό Google λ‘κ·Έλ‘ μ€νΈλ¦¬λ° νλ κ²½μ° μ΄ νλλ₯Ό λΉμ λμΈμ.
μ€μ
μμ λ°©λ²μμ μ νν newrelic-log-ingestion
Lambda ν¨μκ° Lambda ν¨μμ λμΌν AWS 리μ μ μλμ§ νμΈν©λλ€.