💪

New Relic Flex を SAMで管理してLambdaで動かす

2022/12/01に公開

はじめに

こんにちは!NE株式会社の tatsuo48 です。
みなさん、NewRelicをつかってオブザーバビリティ(可観測性)ガンガン上げていますか?
今回はオブザーバビリティ(可観測性)を上げるのに役立つツール「Flex」についてのご紹介と、SAMを使ったLambdaへのデプロイについてお話しします。

Flexとは?

まずは公式情報をペタリ。

簡単にいうと、「設定ファイルを1枚書くだけでさまざまなデータソースのデータをNewRelicに送れる便利ツール」です。
例えば、以下のようにMySQLとの統合であれば、データ取得のクエリを書くだけであとは自動的にクエリを定期実行して取得したデータをNewRelicに送ってくれます!
mysql-database-example.yml

Lambdaで動かす

そんなFlexですが、公式の使い方にもある通り通常はインフラエージェントに内包されたものを利用します。
https://github.com/newrelic/nri-flex#installation

Flex comes bundled with the New Relic infrastructure agent. To install the infrastructure agent, see Install the infrastructure agent.

ですが、これがもしLambdaのようなServerless環境で使えたらサーバの管理もいらないですし便利ですよね?

ということで動かしてみました!
実際のSAMの設定ファイルおよびバイナリは以下のリポジトリにサンプルを作りましたので見てみてください。
https://github.com/tatsuo48/newrelic-flex-sam-sample

ここではポイントだけ説明します。

nri-flexのバイナリを配置

nri-flex/flexConfigs/mysql.ymlについて

  • db_conn: newrelic:$$DB_PASSWORD@tcp(localhost:3306)/sysというように $$を使うことで環境変数を参照します。
    • 後述しますが、DBのパスワードなどの秘匿値は環境変数に設定して渡すようにすると良いでしょう

template.yamlについて

  • INSIGHTS_URLにはデータの送信先となるエンドポイントを指定します。

    • https://insights-collector.newrelic.com/v1/accounts/{{your account ID}}/eventsとなります。
  • (これはどちらかというとSAM,CloudFormationのTIPSですが、)以下のように書くことでSecrets Managerの値をSAMデプロイ時に取得して環境変数に入れることができます。

      Environment:
        Variables:
          DB_PASSWORD: "{{resolve:secretsmanager:DB_PASSWORD}}"

※Lambdaの環境変数に入るので、AWSコンソールで確認できることにはご注意ください。

  • INSIGHTS_API_KEYという環境変数名でライセンスキーを渡します。

  • CodeUriなどは以下のように入れ込んだバイナリを指定するようにします。

    Properties:
      CodeUri: nri-flex/
      Handler: nri-flex

おわりに

お読みいただきありがとうございました。
みなさんもNewRelicを使ってガンガンオブザーバビリティ(可観測性)上げていきましょ〜〜!

参考資料

Discussion