この記事は、How To Use New Relic Flex To Create Your Own Codeless Custom Integrationsの意訳です。
世界はソフトウェアで動いています。しかし、どのくらいのソフトウェアが存在するのかは、推測するしかありません。いつでも、何百万ものカスタムアプリケーションがさまざまなプラットフォームやオペレーティングシステム上で動作しており、ビジネスプロセスや私たちのデータを維持するためのサービス、デーモン、APIなど無限に存在します。
そのソフトウェアを計装することが、New Relic のミッションの中心です。New Relic は、一般的なインフラストラクチャサービスやアプリケーションに接続する数百ものインテグレーション機能を提供しています。これらのインテグレーションは、各サービスに合わせて実装・カスタマイズされているため、最初から厳選されたデータを活用することができます。
この厳選されたアプローチは、MySQL、Redis、NGINXなどの一般的なサービスやアプリケーションには有効です。しかし、何千社もの企業を動かしている何百万ものカスタムアプリケーションについてはどうでしょうか?お客様が作成するすべてのカスタムアプリケーションにインテグレーション機能を提供することはできません。しかし、New Relic Flexがあれば、それが可能になります。
New Relic Flexとは?
New Relic Flex は、アプリケーションにとらわれないオールインワンのツールで、さまざまなサービスからメトリックデータを収集することができます。Flex のアプローチは、特定のソフトウェアやサービスに特化したインテグレーション機能とは異なります。ソフトウェアやサービスと直接対話するのではなく、Flex は New Relic Infrastructure エージェントを介してソフトウェアやサービスから標準的フォーマットで構造化されたデータを抽出し、その出力を処理してデータをNew Relicに格納します。
このアプローチによって、HTTP経由のJSONやシェルセッションの標準出力など、何らかの方法でメトリックデータを公開しているあらゆるアプリケーションを計装し、そのデータをNew Relic Oneで他の重要なテレメトリーデータと組み合わせることができます。計装できるサービスは、Flex がサポートするインタフェースの種類によって制限されますが、その数は増え続けておりオープンソースのコントリビューションも受け付けています。サービスが外部にインタフェースを公開していればFlexによりデータ統合できます。
Flexを始めるには
New Relic Flexは、Infrastructure エージェントにバンドルされており、他の New Relic インテグレーションと同様に設定して有効化します。設定ファイルを作成し、エージェントを起動すると、Flex は定義したデータソースからのデータ取得を開始します。収集されたデータは、メトリックを生成して保存する前に解析やフィルタリングすることもできます。
Flex を使い始めるには、Infrastructureエージェントのインストールフォルダのintegrations.d の下にある YAML 設定ファイルを編集します。
- Linux:
/etc/newrelic-infra/integrations.d
- Windows:
C:Program Files\New Relic\newrelic-infra\integrations.d
Flexの設定
以下は、2つのデータソース(APIとコマンド)からデータを取得することを想定した場合の設定例です。name と event_type の値は、後でデータを照会できるように、New Relic でイベント名を生成するために使用されます。各セクションは、データの取得先と関数(そのデータの解析、加工)で構成されていることに注意してください。
integrations:
- name: nri-flex # We're telling the Infra agent to run Flex!
interval: 60s
timeout: 5s
config: # Flex configuration starts here!
name: sample_source
apis:
- event_type: apiCallSample # Name of the event in New Relic
url: https://jsonplaceholder.typicode.com/posts
method: POST
payload: >
{"title": "foo","body": "bar","userId": 1}
- event_type: commandSample # Name of the event in New Relic
commands:
- run: du -c /somedir
set_header: [dirSizeBytes,dirName]
regex_match: true
split: horizontal
split_by: (\d+)\s+(.*)
- run: some_other_command
split_by: \s+
複数のデータソースから統合したい場合も柔軟に対応できます。必要なだけnri-flex
のブロックを追加するだけです。
integrations:
- name: nri-flex
config:
name: flexName_1
- name: nri-flex
config:
name: flexName_2
- name: nri-flex
config:
name: flexName_3
もしくは、別のファイルに定義してリンクさせることもできます。
integrations:
- name: nri-flex
config_template_path: /path/to/flex/integration.yml
Flexの機能を使えば、収集したデータに対して様々な作業を行うことができます。例としては以下のようなものがあります。
math
: データに対して算術演算を行う
sample_include_filter
: 指定されたキーと値のペアだけを保存する
value_parser
: 正規表現を使ってデータから値を抽出する
Githubリポジトリには、Linux や Windows のサービスやコマンドラインユーティリティなど、200 以上のカスタムインテグレーションのサンプルが掲載されています。
では、Flexの使い方の例を見てみましょう。
例: Monitoring config files’ sizes in Linux
Linuxには、Unixの理念に基づき、ファイルシステムのさまざまな側面を監視するための便利なコマンドライン・ユーティリティが数多く用意されています。これらのデータを New Relic Infrastructure に取り込んでしまえれば、いちいち一つ一つのサーバーにログインして確認する必要がなくなりますね。
Flex で Linux のファイルシステムをインストルメントするには、データを分割して適切なヘッダーを設定する関数を使って、コマンド API を呼び出します。ここでは、stat
コマンドを使って設定ファイルのサイズを監視します。YAMLファイルを見てみましょう。
integrations:
- name: nri-flex
config:
name: linuxFileSize
apis:
- name: linuxFileSize
commands:
- run: stat -c '%n;%s' /etc/*conf
split: horizontal
set_header: [fileName,fileSizeBytes]
regex_match: false
split_by: ";"
ファイルを保存した直後からデータが収集されるので、Query Builderで次のクエリを実行してデータを確認します。
監視対象のファイルサイズが急激に増加したり予期せぬ変化が起きる場合に備え、NRQL クエリを使ってアラートを設定すれば、あとは New Relic がやってくれます。
今すぐFlexコミュニティに参加しよう
Flexの可能性は無限大で、しかも参入障壁はとても低いのです。この可能性に興味を持った方は、Flexのオープンソースリポジトリにアクセスして、ステップバイステップのチュートリアルや大量のサンプルに従って試してみてください。Flexはオープンソースのプロジェクトなので、サンプルの追加やドキュメントの改善など、さまざまな形で貢献することができます。プルリクエストも大歓迎です。
さて、あなたはどんなクールなものをFlexで計装しようと思いますか?
Flex機能については以下のブログでも詳しく紹介していますのでぜひ参考にしてください。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。