New Relic for Lambdaを試してみる

こんにちは。[NewRelicアドベントカレンダー](https://qiita.com/advent-calendar/2019/newrelic)17日目のエントリになります。

NewRelic for Lambdaは今年リリースされた機能の一つです。Lambdaの実行時間、外部サービスとの通信や、コールドスタートなどなど見えるようです。さっそく試していきましょう！

# one.newrelic.com 

まずはNewRelic One([NewRelic ONEとは](https://newrelic.co.jp/blog/fs19))のトップページにある**AWS Lambda setup**から設定に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100093/b479a92e-9e8b-747b-5ffe-9c3cccf35103.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100093/3f199b9d-f268-bc0d-0491-895dacd5f6ff.png)

NewReicのアカウントとAWSアカウントを設定してモニタリングのためのリソースをいくつか作っていきます。
監視したいLambdaのラッパーとして**NR Wrapper**、そのlambdaのログをNewRelicのシステムに効率的に流す**Log ingestion Lambda**を用意していきます。
<img width="788" alt="new-relic-lambda-monitoring-architecture.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100093/ddc126a0-1072-e5eb-b0c3-8b83bd93b4a5.png">
*https://docs.newrelic.co.jp/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/enable-new-relic-monitoring-aws-lambda*

# Step 1. Configure AWS to communicate with New Relic

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100093/65a6380d-b547-52f9-2f26-f8287d2b71fe.png)
*https://one.newrelic.com/launcher/lambda-nerdlets.launcher-lambda-onboarding*


newrelic-lambda-cliを使って設定するようです。
`newrelic-lambda integrations install` を実行していきます。

```sh
$ newrelic-lambda integrations install --nr-account-id [NR_ACCOUNT_ID] \
                                                      --linked-account-name [LINKED_ACCOUNT_NAME_IN_NR] \
                                                      --nr-api-key <NR_API_KEY> \
                                                      --aws-region <AWS_REGION> \
                                                      --aws-profile <AWS_PROFILE>
```


# Step 2. Install instrumentation

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100093/27df4bc3-a66e-890b-9b97-c8d113167873.png)

Serverless Frameworkプラグインも提供されているようですが、今回はLambdaレイヤーを足す方法でやってみます。

1. newrelic-lambda-cliをインストールして

```sh
pip3 install newrelic-lambda-cli
```

2. Lambdaの一覧を出力。NewRelic wrapperの導入状況を確認します

```sh
$ newrelic-lambda functions list
Function Name                                                     Runtime    Installed
----------------------------------------------------------------  ---------  -----------
...
EcsErrorNotify                                                    python3.6  No
...
```

3. NewRelic wrapperをLambda関数に追加します

```sh
$ newrelic-lambda layers install \
  --function EcsErrorNotify \
  --nr-account-id ... \
  --aws-profile ... \
  --aws-region ...
✨ Install Complete ✨
```

Installed=Yesとなっていますね。よさそうです

```sh
$ newrelic-lambda functions list
Function Name                                                     Runtime    Installed
----------------------------------------------------------------  ---------  -----------
...
EcsErrorNotify                                                    python3.6  Yes
...
```


# Step 3. Configure CloudWatch logs to stream to New Relic Lambda

```sh
$ newrelic-lambda subscriptions install --function EcsErrorNotify
Adding New Relic log subscription to 'EcsErrorNotify'
✨ Install Complete ✨
```

ここまでの設定でNewRelic for Lambdaのモニタリングができるようになります！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100093/60d93d26-7da9-50b2-2fed-149ea5a83441.png)


Lambda関数の実行時間と内部で実行している外部サービスとの通信ごとの時間が見えます。boto3でecsサービスのPOSTリクエストと、Slackへのapi通信の様子が見えますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100093/c9bb8fbb-70b3-dd42-b94a-6012835a1b52.png)

# ということで、

さくっとNewRelic for Lambdaの導入をしてみました。これから実際にいろいろと使ってきたいと思います！
[NewRelicアドベントカレンダー](https://qiita.com/advent-calendar/2019/newrelic)17日目のエントリでした。