Data Plusで利用できるストリーミング エクスポート機能を使用すると、New Relic によって取り込まれたデータを AWS Kinesis Firehose または Azure Event Hub に送信できます。NerdGraphを使用してストリーミング ルールを作成および更新する方法と、既存のルールを表示する方法について説明します。これらの呼び出しを行うには、NerdGraph エクスプローラーを使用できます。
ストリーミング エクスポートとは
New Relic 組織によってデータが取り込まれると、ストリーミング エクスポート機能によってそのデータが AWS Kinesis Firehose または Azure Event Hub に送信されます。NRQLを使用して定義されるカスタム ルールを設定して、エクスポートする New Relic データの種類を制御できます。新しいエクスポート圧縮機能を使用して、エクスポート前にこのデータを圧縮することも選択できます。
ストリーミング エクスポートを使用できる例:
- データレイクにデータを入力するには
- AI/ML トレーニングの強化
- コンプライアンス、法律、またはセキュリティ上の理由による長期保存
ストリーミング エクスポート ルールはいつでも無効または有効にできます。ただし、ストリーミング エクスポートは現在取り込まれたデータのみを送信することに注意してください。つまり、ストリーミング エクスポートを無効にして再度有効にすると、オフのときに取り込まれたデータはこの機能では送信されません。過去のデータをエクスポートするには、 Historical data exportを使用できます。
要件と限界
ストリーミング データの制限: 1 か月にストリーミングできるデータの量は、1 か月に 取り込まれたデータの 合計によって制限されます。 ストリーミング データ量が取り込みデータ量を超える場合、ストリーミング エクスポートへのアクセスと使用を停止する場合があります。
パーミッション関連の要件。
- Data Plusオプション付きの Pro または Enterprise エディション
- ユーザー タイプ:コア ユーザーまたはフル プラットフォーム ユーザー
- ストリーミングデータの許可
New Relic データを受信するには、AWS Kinesis Firehose または Azure Event Hub をセットアップする必要があります。まだこれを行っていない場合は、以下のAWSまたはAzureの手順に従ってください。
NRQL 要件:
- 集計のないフラットなクエリである必要があります。たとえば、
SELECT *
またはSELECT column1, column2
フォームがサポートされています。 - サブクエリを除く、
WHERE
句のすべてに適用されます。 - クエリに
FACET
句、COMPARE WITH
またはLOOKUP
を含めることはできません。 - ネストされたクエリはサポートされていません。
- メトリック タイムスライス データではなく、NRDB に格納されたデータ型をサポートします。
AWS Kinesis Firehose をセットアップする
AWS へのストリーミング データ エクスポートを設定するには、最初に Amazon Kinesis Firehose を設定する必要があります。この手順については、次の 3 つのステップで説明します。
ストリーミングエクスポート用のFirehoseを作成する
New Relic データをストリーミングする専用の Firehose を作成します。
- Amazon Kinesis Data Firehose にアクセスします。
- 配信ストリームを作成します。
- ストリームに名前を付けます (この名前は後でルール登録で使用します)。
- Direct PUT or other sourcesを使用して、New Relic の JSON イベント形式 (S3、Redshift、OpenSearch など) と互換性のある宛先を指定します。
IAM Firehose 書き込みアクセスポリシーを作成する
- IAM コンソールに移動し、ユーザーとしてサインインします。
- 左側のナビゲーションでPolicies [ポリシー]をクリックし、 Create policy [ポリシーの作成] をクリックします。
- Firehose サービスを選択し、
PutRecord
とPutRecordBatch
を選択します。 Resources
では、配信ストリームを選択し、ARN を追加して、ストリームのリージョンを選択します。- AWS アカウント番号を入力し、名前ボックスに目的の配信ストリーム名を入力します。
- ポリシーを作成します。
New Relic の書き込みアクセスを許可するための IAM ロールを作成する
IAM ロールを設定するには:
- IAM に移動し、 Rolesをクリックします。
- AWS アカウントのロールを作成し、 for another AWS accountを選択します。
- New Relic エクスポート アカウント ID を入力します:
888632727556
。 - Require external IDを選択し、エクスポート元の New Relic アカウントのアカウント IDを入力します。
- Permissionsをクリックし、上で作成したポリシーを選択します。
- ロール名 (これはエクスポート登録で使用されます) と説明を追加します。
- ロールを作成します。
これらの手順が完了したら、NerdGraph を使用してエクスポート ルールを設定できます。 詳細については、 「NerdGraph 呼び出しの重要なフィールド」を参照してください。
Azure イベント ハブをセットアップする
Azure へのストリーミング データ エクスポートを設定するには、最初にイベント ハブを設定する必要があります。この手順については、次の 3 つのステップで説明します。
または、こちらの Azure ガイドに従うこともできます。
イベントハブネームスペースを作成する
- Microsoft Azure アカウント内の Event Hubs に移動します。
- 手順に従って、Event Hubs 名前空間を作成します。すべてのデータを確実に受信できるように、自動インフレを有効にすることをお勧めします。
- パブリック アクセスが有効になっていることを確認します。共有アクセス ポリシーを使用して、イベント ハブで安全に認証します。
- イベント Hubs ネームスペースがデプロイされたら、 Go to resourceをクリックします。
イベントハブを作成する
左側の列でEvent Hubsをクリックします。
次に、 +Event Hubをクリックしてイベント ハブを作成します。
目的のイベント ハブ名を入力します。後でストリーミング エクスポート ルールを作成するために必要になるため、これを保存します。
Retentionの場合は、 Delete
Cleanup policy
、および必要なRetention time (hrs)
を選択します。重要
現在、ストリーミング エクスポートは、 Compact保持ポリシーを持つイベント ハブではサポートされていません。
イベント ハブが作成されたら、イベント ハブをクリックします。
共有アクセスポリシーを作成して添付する
- 左側の列で、 Shared access policiesに移動します。
- ページの上部近くにある+Addをクリックします。
- 共有アクセス ポリシーの名前を選択します。
- Sendにチェックを入れて、 Createをクリックします。
- 作成したポリシーをクリックし、 Connection string–primary keyをコピーします。 これを認証してイベント ハブにデータを送信するために使用するため、これを保存します。
これらの手順が完了したら、Nerdgraph 呼び出しの重要なフィールドに関する次のセクションを参照してください。
NerdGraph 呼び出しの重要なフィールド
これから説明するストリーミング データ エクスポートの NerdGraph 呼び出しのほとんどは、アカウントに関連するいくつかのフィールドを使用します。
AWS Kinesis Firehose の場合:
awsAccountId
: AWS アカウント ID 。例えば:10000000000
deliveryStreamName
: Kinesis ストリーム名。例:firehose-test-stream
.region
:AWS リージョン。例:us-east-1
.role
: Kinesis Firehose のAWS IAM ロール。これは常にfirehose-role
です。
Azure イベント ハブの場合:
eventHubConnectionString
: Azure イベント ハブの接続文字列。次のように見えます:Endpoint=sb://<NamespaceName>.servicebus.windows.net/;SharedAccessKeyName=<KeyName>;SharedAccessKey=<KeyValue>;EntityPath=<EventHubName>
eventHubName
: イベント ハブ名。例:my-event-hub
.
ストリーミング エクスポート ルールを作成する方法
まず、エクスポートするデータを決定します。次に、NerdGraph 呼び出しで、NRQL を使用して必要なストリーミング ルールを作成します。いくつかの例を挙げます。
ストリームを作成する
新しいストリーミング ルールを作成するときは、次のすべてのフィールドが必要になります。AWS Kinesis Firehose にエクスポートするストリーミング ルールを作成する例を次に示します。
mutation { streamingExportCreateRule( accountId: YOUR_NR_ACCOUNT_ID ruleParameters: { description: "ADD_RULE_DESCRIPTION" name: "PROVIDE_RULE_NAME" nrql: "SELECT * FROM NodeStatus" payloadCompression: DISABLED } awsParameters: { awsAccountId: "YOUR_AWS_ACCOUNT_ID" deliveryStreamName: "FIREHOSE_STREAM_NAME" region: "SPECIFY_AWS_REGION" role: "firehose-role" } ) { id status }}
Azure Event Hub にエクスポートするストリーミング ルールを作成する例を次に示します。
mutation { streamingExportCreateRule( accountId: YOUR_NR_ACCOUNT_ID ruleParameters: { description: "ADD_RULE_DESCRIPTION" name: "PROVIDE_RULE_NAME" nrql: "SELECT * FROM NodeStatus" payloadCompression: DISABLED } azureParameters: { eventHubConnectionString: "YOUR_EVENT_HUB_SAS_CONNECTION_STRING" eventHubName: "YOUR_EVENT_HUB_NAME" } ) { id status }}
ルール ID とステータスを含む結果がすぐに得られます。ステータスはCREATION_IN_PROGRESS
として表示されます。ルール ID を使用して、ルールが正常に作成されたかどうかを確認できます。
ポリシーの検証に時間がかかるため、ルールの作成が完了するまでに最大 6 分かかる場合があります。
ルールの登録が完了する前に、別のミューテーション アクション ( Enable
、 Disable
、またはUpdate
など) を開始することはできません。これは、ルールが作成プロセスに対してロックされているためです。ルールの登録プロセスが完了する前に別のミューテーション アクションを試みると、「エクスポート ルールは現在、別の要求によって更新されています。しばらく待ってからもう一度お試しください。」のようなメッセージが表示されます。
Delete
はいつでも使用できます。
ルールの作成に必要な約 6 分以内であれば、いつでも作成を終了してステータスを変更できます。ステータスはENABLED
、 DISABLED
、またはCREATION_FAILED
に変わります。
値に関する次の詳細を参照してください。
ENABLED
ルールが正常に作成され、データのストリーミングが開始されたことを意味します。CREATION_FAILED
ルールの作成に失敗したことを意味します。これはいくつかの理由で発生する可能性がありますが、多くの場合、AWS ポリシーまたは Azure SAS 検証の失敗が原因です。DISABLED
は、ルールが作成されたものの、フィルタ ストリームの制限に達した、またはフィルタ ストリーム ルールの作成に失敗したなどの理由により、まだ有効になっていないことを意味します。6 分経ってもステータスがCREATION_IN_PROGRESS
のままの場合は、サービスのシステム エラーが原因でルールの作成に失敗したことを意味します。ルールを削除して、新しいルールをもう一度作成してみてください。
ストリーミング ルールが作成されると、それを表示できます。
ストリームを更新する
新しいストリーミング ルールを更新するときは、次のすべてのフィールドが必要になります。ストリーミング ルールを更新する例を次に示します。
AWS Kinesis Firehose:
mutation { streamingExportUpdateRule( id: RULE_ID ruleParameters: { description: "ADD_RULE_DESCRIPTION" name: "PROVIDE_RULE_NAME" nrql: "YOUR_NRQL_QUERY" payloadCompression: DISABLED } awsParameters: { awsAccountId: "YOUR_AWS_ACCOUNT_ID" deliveryStreamName: "FIREHOSE_STREAM_NAME" region: "SPECIFY_AWS_REGION" role: "firehose-role" } ) { id status }}
Azure イベント ハブ:
mutation { streamingExportUpdateRule( id: RULE_ID ruleParameters: { description: "ADD_RULE_DESCRIPTION" name: "PROVIDE_RULE_NAME" nrql: "YOUR_NRQL_QUERY" payloadCompression: DISABLED } azureParameters: { eventHubConnectionString: "YOUR_EVENT_HUB_SAS_CONNECTION_STRING" eventHubName: "YOUR_EVENT_HUB_NAME" } ) { id status }}
更新中は、メッセージ フィールドに次のメッセージが表示されます。後でもう一度確認してください。」完全に更新されるまで最大 6 分かかる場合があります。
streamingRule
を呼び出してルールを取得することで、ルールが更新されたかどうかを確認できます。ルールが更新されている間、ルールはロックされ、他のミューテーション アクションはルールに対して実行できません。同じルールに対して別のミューテーション アクションを実行しようとすると、「エクスポート ルールは現在別のリクエストによって更新されています。しばらく待ってからもう一度お試しください」というメッセージが表示されます。ユーザーは、削除されたルールを除くすべてのステータスのルールを更新できます。
ストリームを無効にする
ルールを無効にするには、ルール ID を指定するだけです。ストリームを無効にする例を次に示します。
mutation { streamingExportDisableRule(id: RULE_ID) { id status message }}
ルールのステータスがENABLED
の場合にのみ、ルールを無効にできます。別の状態にあるルールを無効にしようとすると、「ステータスが許可されていないため、エクスポート ルールを有効または無効にすることはできません」というエラー メッセージが返されます。別のミューテーションが行われたためにルールがロックされている場合、ルールを無効にすることはできません。
ストリームを有効にする
ルールを有効にする場合は、ルール ID のみを指定する必要があります。ストリームを有効にする例を次に示します。
mutation { streamingExportEnableRule(id: RULE_ID) { id status message }}
ステータスがDISABLED
の場合にのみルールを有効にできます。別の状態にあるルールを有効にしようとすると、「ステータスが許可されていないため、エクスポート ルールを有効または無効にすることはできません」のようなエラー メッセージが返されます。別のミューテーションが行われたためにルールがロックされている場合、ルールを有効にすることはできません。
ストリームを削除する
ストリームを削除するには、ルール ID を指定する必要があります。次に例を示します。
mutation { streamingExportDeleteRule(id: RULE_ID) { id ... }}
削除は、まだ削除されていない限り、どのステータスのルールでも実行できます。ルールが削除されると、再度有効にすることはできません。削除後 24 時間以内であれば、ルール ID を指定してsteamingRule
API を呼び出すことで、ルールを引き続き表示できます。24 時間後、ルールは NerdGraph で検索できなくなります。
ストリームを表示
アカウント ID とルール ID を照会して、特定のストリーム ルールに関する情報を照会できます。次に例を示します。
AWS Kinesis Firehose:
{ actor { account(id: YOUR_NR_ACCOUNT_ID) { streamingExport { streamingRule(id: "RULE_ID") { aws { awsAccountId deliveryStreamName region role } createdAt description id message name nrql status updatedAt payloadCompression } } } }}
Azure イベント ハブ:
{ actor { account(id: YOUR_NR_ACCOUNT_ID) { streamingExport { streamingRule(id: "RULE_ID") { azure { eventHubConnectionString eventHubName } createdAt description id message name nrql status updatedAt payloadCompression } } } }}
既存のすべてのストリームを照会することもできます。次に例を示します。
{ actor { account(id: YOUR_NR_ACCOUNT_ID) { streamingExport { streamingRules { aws { awsAccountId region deliveryStreamName role } azure { eventHubConnectionString eventHubName } createdAt description id message name nrql status updatedAt payloadCompression } } } }}
輸出圧縮を理解する
オプションで、ペイロードをエクスポートする前に圧縮することもできますが、これはデフォルトでは無効になっています。 これにより、取り込まれたデータの制限に達することを回避し、送信コストを節約できます。
ruleParameters
のpayloadCompression
フィールドを使用して圧縮を有効にできます。このフィールドには、次のいずれかの値を指定できます。
DISABLED
: ペイロードはエクスポート前に圧縮されません。指定しない場合、payloadCompression
はデフォルトでこの値になります。GZIP
: エクスポートする前にペイロードを GZIP 形式で圧縮します
現在利用可能な圧縮形式は GZIP のみですが、将来的にはさらに多くの形式を利用できるようになる可能性があります。
既存の AWS エクスポート ルールで圧縮が有効になっている場合、Kinesis Firehose からの次のメッセージには圧縮データと非圧縮データの両方が含まれる可能性があります。これは、Kinesis Firehose 内のバッファリングが原因です。これを回避するには、圧縮を有効にする前にエクスポート ルールを一時的に無効にするか、圧縮データのみが流れる新しい Kinesis Firehose ストリームを作成します。
この問題が発生し、S3 または別のファイル ストレージ システムにエクスポートしている場合は、次の手順に従ってデータの圧縮部分を表示できます。
- オブジェクトを手動でダウンロードします。
- 圧縮データを新しいファイルにコピーして、オブジェクトを 2 つの個別のファイルに分割します。
- 新しい圧縮専用データ ファイルを解凍します。
圧縮データを取得したら、それを S3 (または使用している他のサービス) に再アップロードし、古いファイルを削除できます。
S3 または別のファイル ストレージ システムでは、オブジェクトが連続して追加される複数の GZIP エンコードされたペイロードで構成される場合があることに注意してください。 したがって、解凍ライブラリには、このような連結された GZIP ペイロードを処理する機能が必要です。
AWS での自動解凍
データが AWS に到着したら、自動的に解凍するオプションが必要になる場合があります。データを S3 バケットにストリーミングしている場合、自動解凍を有効にする方法は 2 つあります。
Azure での自動解凍
データを Azure にエクスポートしている場合は、 Stream Analytics ジョブを使用して、イベント ハブに保存されているオブジェクトの解凍されたバージョンを表示できます。これを行うには、次の手順に従います。
- このガイドのステップ 16 までに従ってください。
- 手順 13 では、何も壊さずに同じイベント ハブを出力として使用することを選択できますが、手順 17 に進んでジョブを開始する場合は、テストされていないため、これはお勧めしません。
- ストリーミング分析ジョブの左側のペインで、 Inputsをクリックし、設定した入力をクリックします。
- 右側に表示されるペインの一番下までスクロールし、次の設定で入力を構成します。
- イベントシリアル化形式:JSON
- エンコード: UTF-8
- イベント圧縮タイプ: GZip
- ペインの下部にあるSaveをクリックします。
- 画面の横にあるQueryをクリックします。 Input previewタブを使用すると、この画面からイベント ハブにクエリを実行できるようになります。