はじめに
New Relicはインフラからアプリケーション、フロントエンド、モバイルに至るまで様々なデータを自動的に収集し、可視化することができます。また、自動では収集しないサービス独自のデータだったり、ビジネス指標など、様々なカスタムデータもCustom Eventとして柔軟にNew Relicに送信することもできます。Custom EventはAPI経由で直接登録する事も可能ですが、自動で定期的に情報を収集・登録を行いたい場合は、nri-flexを使うと便利です。本Postでは、Kubernetes上でnri-flexの仕組みを使って柔軟にデータを登録する方法について解説します。
Kubernetes上でのnri-flexの仕組み
nri-flexは、Infrastructureエージェントのプラグインという形で動くため、登録したいデータの収集コマンド等をConfigとして定義し、所定のディレクトリに配置するだけで定期的にデータ収集および登録を実行してくれるとても柔軟性の高い機能です。New RelicのKubernetes Integrationでは、内部的にはInfrastructureエージェントがDaemon Setで起動しているため、このエージェントにConfig Mapで実行させたいコマンドなどを設定することにより、各ノード上で定期的にコマンドが実行され、その結果がNew Relicに送られます。
Daemon Setsであるが故の課題
データを収集したいInfrastructureエージェントにプラグインを設定するだけでカスタムデータが登録できるのはこの機能自体はとても便利です。ただ、Kubernetesで設定するには少し課題があります。前述の通り、Kubernetes Integration上で動くInfrastructureエージェントはDaemon Setで動くため、全てのノードでコマンドが実行されてしまうのです。各ノード内の情報を収集する場合はとても便利なのですが、ノード外の情報を収集したいケース(例えば、外部データベースのミドルウェアレベルのメトリクス収集を行いたい場合など)は、全ノードで実行されるとデータが重複して収集・登録されてしまいます。
nri-flexをDeploymentとして動かす
Daemon Set上でnri-flexを動かすのではなく、独立したDeploymentとしてnri-flexを動かすことでこの課題を解決します。以下のマニフェストにある通り、Infrastructureエージェントをデータ転送モードとして起動することでKubernetes Integrationで収集している情報は取得しないようにし、nri-flex用のConfig Mapを渡してあげることでnri-flexだけを実行するようにしています。この例ではGoogleとYahooに対してpingを行い、そのレスポンス結果を整形してNew Relicに送信する設定になっています。
データを確認する
このサンプルで登録されたデータはpingSample
というテーブルに保存されます。具体的には、Config Map内のapis
配下にあるname
に指定した文字列+Sampleというテーブル名で登録されます。2つのコマンドがping
という名前で設定されているので、両方の結果がpingSample
というテーブルに保存される、という仕組みです。GoogleとYahooに対するping結果が重複なく登録されていることがわかります。

まとめ
いかがでしたか?nri-flexは、とても柔軟にCustom Eventsを登録できる仕組みですが、Kubernetes特有の仕組みがあるが故に個別の考慮が必要になるケースもあります。本PostがKubernetes運用のさらなる効率化に向けた参考になれば幸いです。
nri-flexでは本Postでご紹介したpingサンプルを含め、たくさんのサンプルを公開しています。イチから設定を作り込むのではなくぜひサンプルをご活用ください。
이 블로그에 표현된 견해는 저자의 견해이며 반드시 New Relic의 견해를 반영하는 것은 아닙니다. 저자가 제공하는 모든 솔루션은 환경에 따라 다르며 New Relic에서 제공하는 상용 솔루션이나 지원의 일부가 아닙니다. 이 블로그 게시물과 관련된 질문 및 지원이 필요한 경우 Explorers Hub(discuss.newrelic.com)에서만 참여하십시오. 이 블로그에는 타사 사이트의 콘텐츠에 대한 링크가 포함될 수 있습니다. 이러한 링크를 제공함으로써 New Relic은 해당 사이트에서 사용할 수 있는 정보, 보기 또는 제품을 채택, 보증, 승인 또는 보증하지 않습니다.