2019年12月、 Infrastructure agent version 1.8.0 は、(2つの別々のファイルではなく)1つの設定ファイルを利用し、その他の改善を行うこの新しい設定形式のサポートを開始しました。このドキュメントでは、この新しいフォーマットの動作について説明します。
古い レガシー構成形式 も、現在のインフラストラクチャ エージェントによってサポートされています。
設定の概要については、 Config overview をご覧ください。
構成構造 オンホスト統合の構成 YAML には、YAML 配列を含む最上位セクション integrations
が必要です。各エントリは統合とその構成を表します。
各統合エントリでは、 name
プロパティのみが必須です。他のプロパティはオプションです。
ここでは、2つの統合をフィーチャーした構成例をご紹介します。ビルトインの Docker統合 は設定が不要で、 MySQL統合 です。
integrations:
# New Relic integration that does not require any configuration
- name: nri-docker
# New Relic integration that gets its configuration from the environment
- name: nri-mysql
env:
PORT: 3306
USERNAME: newrelic
PASSWORD: 123456789 # to hide this field, read the secrets management documentation
# Any free-form integration executed via a user-provided command
- name: my-own-integration
exec: python /opt/integrations/my-script.py --host=127.0.0.1
設定用のYAMLファイルは必要なだけ用意でき、統合インスタンスをグループ化することができます。
ヒント フォーマットの問題を避けるために、使用前にYAML設定ファイルを linting することをお勧めします。
各構成 YAML ファイルには、 discovery
および variables
の最上位セクションを含めることもできます。
重要 この設定形式では、エージェントの再起動は必要ありません。保存すると、変更はすぐに検出され、実行されます。つまり、途中の設定変更を保存すると、統合機能が停止する可能性があります。
設定プロパティの一覧 これは、統合を構成するために使用される一般的なプロパティのリストです。これらのプロパティの使用方法や値の例などの詳細については、表の後にあるドキュメントを参照してください。
コンフィグ
説明
name
統合の名前。これは、すべてのオンホスト統合にわたって唯一必須の構成プロパティです。 exec
フィールドが設定されていない場合、それは統合実行可能ファイルの名前にもなります。
cli_args
統合実行可能ファイルを提供するためにname
が使用される場合のコマンドライン引数のオプションのリスト。 エージェント バージョン1.13.0 以降で利用可能です。
exec
統合実行可能ファイルへのフルパスと引数。単一行の文字列または文字列配列の場合があります。指定しない場合、 exec
フィールドはデフォルトで name
フィールドになります。
env
統合に渡される環境変数を含む YAML マップ。ここで、 key
は環境変数名、 value
は変数値です。
config
外部ファイルとして書き込まれる構成、および CONFIG_PATH
環境変数または ${config.path}
変数プレースホルダーとの統合に渡されるパス。
config_template_path
CONFIG_PATH
環境変数または ${config.path}
変数プレースホルダーとの統合にパスが渡される外部ファイル。これを使用すると、ディスカバリーとシークレット・バインディングを任意の外部構成に適用できます。
integration_user
統合を実行するユーザーの名前。
interval
統合の連続実行間の時間。数値の後に時間単位 (s
、 m
または h
) をスペースなしで指定する必要があります。
inventory_source
インベントリソースのカテゴリーとタームをオーバーライドできます。
labels
統合によって報告されたデータ(メトリクス、イベント、インベントリ)を装飾するラベルを持つマップ。
timeout
数値の後に時間単位が続きます (ms
、 s
、 m
または h
)。この期間内に応答しなかった統合は強制終了され、再起動されます。
working_dir
統合バイナリの作業ディレクトリ。
ときに
統合は、その節の評価が真である場合にのみ実行されます。
条件は 以下に定義されています 。
このドキュメントの残りの部分では、機能ごとにグループ化されたconfigプロパティについて説明します。
実行するインテグレーションの選択 どの統合を実行するかを選択するプロパティは 2 つあります: name
と exec
。
すべてのオンホスト統合で唯一の必須プロパティは name
です。このドキュメントで指定されている残りのプロパティはオプションです。
例:
exec: /usr/local/bin/my-integration --metrics --inventory
name
必須の name
プロパティは、次の 2 つの方法で機能します。
If the exec
property is set : name
プロパティは、統合インスタンスの識別子のみを提供します。 この識別子はログメッセージで使用され、デフォルトのインベントリ カテゴリ/ソースを integration/<name>
の形式で提供します (例: integration/nri-redis
)。 このインベントリ パスは、 inventory_source
設定オプションで上書きできます。
If the exec
property is not set : エージェントは、次のいずれかのフォルダーで、 name
値を持つ実行可能ファイルを検索 (そして実行) します。
Linux:
/var/db/newrelic-infra/newrelic-integrations/bin
/var/db/newrelic-infra/newrelic-integrations
/var/db/newrelic-infra/custom-integrations/bin
/var/db/newrelic-infra/custom-integrations
ウィンドウズ
C:\Program Files\New Relic\newrelic-infra\newrelic-integrations\bin
C:\Program Files\New Relic\newrelic-infra\newrelic-integrations
上記のフォルダにこの名前の実行ファイルがない場合、エージェントはエラーを記録し、統合は実行されません。
重要 Windows では、名前に拡張子 .exe
を追加しないでください。エージェントがこれを行います (たとえば、 name: nri-mysql
上記のフォルダーで nri-mysql.exe
を検索します)。
エグゼクティヴ
exec
オプションのプロパティは、実行する統合のパス、コマンド、およびコマンドライン引数を指定します。パス フォルダーまたは引数にスペースが含まれていない場合は、単一行の文字列で記述することができます。
exec: /usr/bin/python /opt/integrations/my-script.py --host=127.0.0.1
パスまたは引数のいずれかに単一要素の一部であるスペースが含まれている場合は、YAML 配列表記を使用できます。 Windows の場合は、次のようにバックスラッシュを引用符でエスケープしてください。
- '"C:\Program Files\My Integration\integration.exe"'
デフォルトの作業ディレクトリは、エージェント構成のルート ディレクトリです。これは、 working_dir
プロパティでオーバーライドできます。
cli_args
cli_args
オプションのプロパティは、統合に渡す必要があるコマンド ライン引数を指定します。これは、統合名識別子のみを提供するため、 name
を使用する場合に便利です ( exec
とは互換性がありません)。
cli_args: [ -interval 10s ]
通常のYAMLの複数行リスト形式も使用できます。
ときに
when
プロパティを使用すると、評価された条件がすべて成功した場合にのみ統合を実行できます。
利用できる条件は
env_exists
: 環境変数が存在し、値が一致しています。
file_exists
: 指定されたファイル パスが存在します。
feature
: 機能フラグが有効になっている場合。
例:
file_exists: /var/run/sshd.pid
統合実行ファイルに設定を渡す 多くの場合、統合実行ファイルは、適切に動作するために設定を受け取る必要があります(例えば、監視対象システムのホスト名とポート、ユーザー認証情報など)。
インフラストラクチャ エージェントを使用すると、次の 3 つの方法 (組み合わせることができます) で統合コマンドを設定できます。
例:
exec: /opt/path/bin/script --host 127.0.0.1 --port 8081
STATUS_URL: http://10.0.0.3/server-status?auto
envelope
env
プロパティを使用すると、実行可能ファイルに渡される環境変数を設定できます。これは、必要な変数を含むキーと値のマップです。
重要 New Relic では、1.8.0 以降のすべてのインフラストラクチャ エージェント バージョンとの互換性を確保するために、以下の例のように、 env
キーを大文字で渡すことをお勧めします。 エージェントのバージョン 1.20.0 以降を使用している場合は、エージェントが自動的に大文字 に変換する ため、小文字を使用できます。
例:
COLLECTION_LIST: '["postgres"]'
COLLECT_DB_LOCK_METRICS: false
統合が構成ファイルで明示的に指定するのではなく、ホストの環境から構成を受信することを期待している場合は、インフラストラクチャ エージェントの passthrough_environment
グローバル構成プロパティで必要な変数を設定する必要があります。
コンフィグ
ここでは、インテグレーションに設定情報を渡すさまざまな方法について説明します。
Pass configuration file directly
統合コマンドの中には、外部ファイルから設定を取得するものがあります。インテグレーションが設定ファイルを必要とする場合、そのパスをコマンドライン引数や環境変数として直接渡すことを妨げるものは何もありません。ここでは、 Flex 統合 の設定を使った例を示します。
CONFIG_FILE: /etc/nri-flex/configs/http-service.yaml
- name: other-integration
exec: /opt/integration/integration -f /opt/integration/config.properties
上の例では、 http-service.yaml
と config.properties
ファイルが存在することを前提としています。 nri-flex
統合は、 CONFIG_FILE
環境変数を介して http-service.yaml
完全なパスを期待し、 other-integration
は、 -f
コマンドライン フラグの後の完全な config.properties
パスを期待していることがわかります。
上記の例では、統合インストーラー/コンフィギュレーターにとって、設定ファイルが提供されたパスに存在し、エージェントと統合がそれらに対して読み取り権限を持っていることが必要です。
Pass configuration through config
section
構成ファイルを残りの統合構成とともに保持したい場合は、統合エントリの config
セクションを使用できます。このセクションには、有効な YAML オブジェクトまたは単なる複数行の文字列を含めることができます。
CONFIG_FILE: ${config.path}
file: /Users/hello/test.csv
- name: other-integration
exec: /opt/integration/integration -f ${config.path}
example.cfg.logger=/var/logs/integration.log
example.cfg.hostname=localhost
上記の例では、 nri-flex
統合が実行されるたびに、エージェントは次の内容の一時ファイルを作成します。
file: /Users/hello/test.csv
上記の YAML は、 nri-flex
統合の構成例にすぎません。エージェントはその内容を無視します。代わりに、一時ファイルを作成し、 ${config.path}
変数プレースホルダーをそのパスに置き換えます。統合の実行が完了すると、一時ファイルは削除されます。
また、エージェントは、 other-integration
統合を実行する前に別の一時ファイルを作成します。
example.cfg.logger=/var/logs/integration.log
example.cfg.hostid=localhost
これにより、 -f ${config.path}
コマンドライン プレースホルダーが、書き込まれたファイルの一時パスに置き換えられます。
慣例により、コマンドライン引数または環境変数値に ${config.path}
変数を配置しない場合、エージェントは、 CONFIG_PATH
環境変数を介して構成ファイルのパスを渡します。
# assuming that nri-example command is prepared to receive the configuration
# file via the CONFIG_PATH environment variable
file: /Users/hello/test.csv
Pass secrets and discovery through config
section
外部ファイルのフルパスをハードコーディングする代わりに config
セクションを使用する主な利点は、 ${variable}
プレースホルダを挿入して 自動検出機能 と シークレット管理 を適用できることです。
ここでは、その例を挙げて説明します。
url: http://my.vault.host/v1/newengine/data/secret
X-Vault-Token: my-vault-token
exec: /opt/foo/bin/monitor --config=${config.path}
foo.port=${discovery.port}
foo.user=${my_credentials.user}
foo.password=${my_credentials.password}
ヒント ( variables
セクションと discovery
セクションの詳細については、 検出 と シークレット管理の ドキュメントを参照してください)。
上記の例は、以下の前提に基づいています。
user
フィールドと password
フィールドで形成された JSON オブジェクトを取得できる Vault サービスがあります。service=foo
というラベルが付けられた Docker コンテナが可変数存在する場合があります。これらのコンテナには、検出可能なパブリック IP とポートを介してエージェント ホストからアクセスできます。ユーザーは、共通のユーザーとパスワードを共有するすべての service=foo
ラベル付きコンテナを監視するように foo-monitor
統合を構成しました。 foo-monitor
統合の各インスタンスでは、 /opt/foo/bin/monitor
実行可能ファイルを実行し、 --config=<path>
コマンドライン引数を介して config
セクション内のテキスト構成を渡す必要があります。 ワークフローの例として、Vaultの呼び出しが次のようなJSONを返すとします。
{"user":"monitorer","password":"5up3r53cr3t!"}
foo-monitor
統合を実行する時点では、 service=foo
というラベルが付いた実行中のコンテナが 3 つあります。
IP: 10.0.0.3
、ポート: 8080
IP: 10.0.0.3
、ポート: 8081
IP: 10.0.0.3
、ポート: 8082
次に、エージェントは、 config
プロパティの内容をテンプレートとして使用して、次の 3 つの一時ファイルを作成します。ただし、 ${placeholders}
は取得した変数と検出された項目に置き換えられます (ファイルのパスはわかりやすくするために作成されています)。
最初の一致 (/tmp/123_discovered
):
foo.password=5up3r53cr3t!
2 番目の一致 (/tmp/456_discovered
):
foo.password=5up3r53cr3t!
3 番目の一致 (/tmp/789_discovered
)
foo.password=5up3r53cr3t!
config
変数プレースホルダーが置き換えられ、一時ファイルが作成された後、 /opt/foo/bin/monitor
実行可能ファイルが 3 回 (一致したコンテナごとに 1 回) 実行され、 ${config.path}
コマンドライン プレースホルダーがそれぞれに対応する一時ファイルに置き換えられます。発見された構成:
最初の一致: /opt/foo/bin/monitor --config=/tmp/123_discovered
2 番目の試合: /opt/foo/bin/monitor --config=/tmp/456_discovered
3番目の試合: /opt/foo/bin/monitor --config=/tmp/789_discovered
セキュリティを確保し、秘密がディスクに漏れる可能性を最小限にするために、エージェントは
エージェントを実行するように構成したユーザーに応じて、エージェント ユーザー (たとえば、 root
または nri-agent
が所有するファイルを作成します。 オーナーに対してのみ読み取り権限を設定します。 統合インスタンスの実行終了時に、作成したファイルを削除します。 config_template_path
統合実行可能ファイルに渡す構成ファイルでシークレットの管理と検出を使用したいが、それらを個別のファイルとして保持したい場合は、 config_template_path: <path>
オプションを使用できます。これは、 config
セクションとまったく同じように機能します。
エージェントは、 秘密管理 と 発見 をファイルの内容に適用します。
エージェントは、 ${config.path}
プレースホルダー (または CONFIG_PATH
環境変数) を介して統合に渡されるさまざまな一時ファイルを作成します。
例:
CONFIG_FILE: ${config.path}
config_template_path: /etc/flex-configs/redis.yml
上記の例では、 redis.yml
外部ファイルには、 ${discovery.ip}
や ${discovery.port}
などのコンテナ検出変数プレースホルダを含めることができます。
エージェントが統合を実行する方法を設定する このセクションのプロパティは、インフラストラクチャ エージェントが実行して統合と対話する方法、またはエージェントが統合のデータを修飾する方法を変更します。
integration_user
統合コマンドは、エージェントと同じユーザー (通常は root
または nri-agent
) として実行されます。権限の制限により、統合を別のユーザーとして実行する必要がある場合は、その名前を integration_user
プロパティで指定する必要があります。
例:
exec: python my-dbus-script.py
インターバル
interval
オプションは、統合の連続実行間の時間を設定します。受け入れられる形式は、整数の直後に時間単位が続きます (s
は秒、 m
は分、 h
は時間) です。
デフォルトは 30s
で、許容される最小値は 15s
です。 15s
より小さい値は自動的に 15s
に設定されます。
例:
STATUS_URL: http://127.0.0.1/status
インベントリソース
在庫品目はすべて、 category/source
分類法に基づいてカタログ化する必要があります。デフォルトでは、各統合インベントリは integration/
+ name
値として保存されます (例: integration/nri-apache
、 integration/nri-mysql
)。
inventory_source
プロパティを使用すると、インベントリ データのデフォルトの分類をオーバーライドできます。
例:
- /var/db/newrelic-infra/newrelic-integrations/bin/nri-apache
inventory_source: config/apache
上記の例では、 nri-nginx
インベントリがあれば、それが New Relic UI の integration/nri-nginx
ソースの下に表示されます。 nri-apache
在庫は config/apache
の下に表示されます。
ラベル
labels
は、統合のために追加のメタデータを提供できるようにするキーと値のマップです。エージェントは、これらのラベルを使用して、特定の統合インスタンスから受信するメトリクス、イベント、およびインベントリを装飾します。
例:
inventory_source: config/apache
上の例では、エージェントは、 nri-apache
インスタンスからのすべてのメトリクスとイベントを次のフィールドで装飾します。
label.env
: production
label.role
: load_balancer
また、統合インベントリに以下の項目が追加されています。
config/apache/labels/env
: production
config/apache/labels/role
: load_balancer
タイムアウト
timeout
値で指定された時刻までに統合がメトリック (または後述のハートビート メッセージ) を返さなかった場合、エージェントは統合プロセスを強制終了し、対応する interval
の後に再起動します。受け入れられる形式は、整数の直後に (スペースなしで) 時間単位が続くものです (ミリ秒はms
、秒は s
、分は m
、時間は h
)。
ゼロ (または負の) timeout
値が指定された場合、統合はタイムアウト期限切れによって強制終了されることなく永久に実行できます。
長時間実行される統合 (実行を継続し、メトリクス/イベント/インベントリを定期的に返す統合) の場合、統合がメトリクス/イベント/インベントリ ペイロードを送信するたびに、タイムアウト期限が再開されます。つまり、長時間実行される統合では、 timeout
より短い間隔で有効な JSON ペイロードを返す必要があります。
空の JSON ({}
) を返すと、タイムアウトを再開する ハートビート メッセージとして解釈され、レポートする情報がない場合でも、長時間実行される統合が強制終了されるのを防ぎます。
デフォルトは 120s
で、許容される最小値は 100ms
です。 100ms
より小さい値は自動的に 100ms
に設定されます。
例:
JMX_HOST: jmx-host.localnet
COLLECTION_FILES: "/etc/newrelic-infra/integrations.d/jvm-metrics.yml"
作業用ディレクトリ
working_dir
コマンドの作業ディレクトリを設定します。空または指定されていない場合、エージェントはインフラストラクチャ エージェントの現在のディレクトリでコマンドを実行します。
デフォルトは、インフラストラクチャ エージェントのルート ディレクトリです。
例:
exec: /opt/integration/bin/integration
working_dir: /opt/integration/scratch-zone
古い統合設定の更新 2019 年 12 月に、 インフラストラクチャ エージェント バージョン 1.8.0 では、異なる構成形式の使用が開始されました。
これらの形式の主な違いは、古い構成形式では 2 つの別個の構成ファイル ( INTEGRATION_NAME-definition.yml
ファイルと INTEGRATION_NAME-config.yml
ファイル) が使用されるのに対し、新しいバージョンでは 1 つの構成ファイルが使用されることです。
ここでは、新しい設定機能によって追加された機能をご紹介します。
コマンドライン引数、環境変数、外部ファイルによる柔軟な設定が可能です。 異なる統合機能を同じファイルにまとめることができる。 ホットリロード:新しい統合を追加したり、その構成を変更したりする際に、エージェントを再起動する必要がありません。 タイムアウト:ユーザーが指定した時間までに統合が応答しなかった場合、統合プロセスは強制終了して再起動されます。 すべてのオンホスト統合に新しい設定形式が用意されているわけではありませんが、すべてのオンホスト統合の設定を新しい形式に更新することで、新機能を利用することができます。
以下のYAMLは、古い設定形式を使用したApache統合 の設定例を示しています。なお、この設定は新しいエージェントでも動作しますが、機能を最大限に活用するために統合を更新することをお勧めします。
integration_name: com.newrelic.apache
- name: apache-server-metrics
status_url: http://127.0.0.1/server-status?auto
- name: apache-server-inventory
古い統合設定を新しいフォーマットに更新するには、次のいずれかの方法を使用します。
アシスト方式 New Relic CLI を使って、以下のコマンドを実行すると、古い定義・設定ファイルが新しい設定形式に自動的に変換されます。
$ newrelic agent config migrateV3toV4 -d /path/definitionFile -c /path/configFile -o /path/outputFile
例:
Redis 以下のパスは、Linuxベースの統合のためのデフォルトの場所です。カスタムの場所を使用している場合は、パスを調整する必要があります。
newrelic agent config migrateV3toV4 \
-d /var/db/newrelic-infra/newrelic-integrations/redis-definition.yml \
-c /etc/newrelic-infra/integrations.d/redis-config.yml \
-o /etc/newrelic-infra/integrations.d/redis.yml
Microsoft SQL 以下のパスは、Windowsベースの統合のためのデフォルトの場所です。カスタムの場所を使用している場合は、パスを調整する必要があります。
newrelic agent config migrateV3toV4 ^
-d 'C:\Program Files\New Relic\newrelic-infra\newrelic-integrations\mssql-definition.yml' ^
-c 'C:\Program Files\New Relic\newrelic-infra\integrations.d\mssql-config.yml' ^
-o 'C:\Program Files\New Relic\newrelic-infra\integrations.d\mssql.yml'
マニュアル方式 統合ファイルを手動で変換する場合
instances
最上位セクションの名前を integrations
に変更します。integration_name
最上位セクションを削除し、それを各統合エントリに追加します。統合タイプごとに個別のファイルを保持する必要がなくなり、従来の統合エントリを他の統合と同じファイルにグループ化できます。ここでは、新バージョンのApache統合設定の例を紹介します。
STATUS_URL : http : //127.0.0.1/server - status ? auto
STATUS_URL : http : //127.0.0.1/server - status ? auto
inventory_source : config/apache
重要 古い構成形式はホットリロードをサポートしていないことに注意してください。したがって、インフラストラクチャ エージェントを再起動して、古い統合構成を削除する必要があります。それ以外の場合、古いインスタンスと新しいインスタンスが共存します。