このドキュメントでは、次の方法を示して、外形監視ジョブ マネージャーの構成について説明します。
- 環境変数を使用して、外形監視ジョブ マネージャーを構成します。
- スクリプトAPI または スクリプトbrowser モニターの カスタム モジュール を設定します。
- 設定にユーザー定義の変数を提供します。
環境変数を使用した設定
環境変数を使用すると、合成ジョブ マネージャーの構成を微調整して、特定の環境および機能のニーズを満たすことができます。
スクリプト モニターのユーザー定義変数
プライベート外形監視ジョブ マネージャーを使用すると、スクリプト化された監視の環境変数を構成できます。 これらの変数は SJM 上でローカルに管理され、 $env.USER_DEFINED_VARIABLES
を介してアクセスできます。 ユーザー定義変数は 2 つの方法で設定できます。 JSON ファイルをマウントするか、リリースの SJM に環境変数を指定することができます。 両方が指定されている場合、SJM は環境によって提供される値のみを使用します。
スクリプトからユーザー定義の環境変数にアクセスする
構成されたユーザー定義の環境変数を参照するには、予約済みの$env.USER_DEFINED_VARIABLES
に続けて、ドット表記の特定の変数の名前を使用します。
例えば、 $env.USER_DEFINED_VARIABLES.MY_VARIABLE
注意
ユーザー定義の環境変数はログから削除されません。 機密情報には安全な認証情報機能を使用することを検討してください。
カスタムノードモジュール
カスタム ノード モジュールは、1分間あたりの呼出し回数と SJM の両方で提供されます。 これらを使用すると、カスタマイズされたノード モジュールのセットを作成し、外形監視用のスクリプト モニター (スクリプトAPIおよびスクリプトbrowser ) で使用できます。
モジュールをセットアップするには
- ルート フォルダーにnpm の公式ガイドラインに従って、
package.json
ファイルを含むディレクトリを作成します。 SJMはpackage.jsonにリストされている依存関係をインストールします。dependencies
フィールド。 これらの依存関係は、プライベート外形監視ジョブ マネージャーでモニターを実行するときに使用できます。 以下の例をご覧ください。
カスタム モジュール ディレクトリと
package.json
を作成したら、それをdockerおよびKubernetesの SJM に適用します。モジュールが正しくインストールされたかどうか、またはエラーが発生したかどうかを確認するには、 SJM ログの
"... Initialization of Custom Modules ..."
というセクションを確認します。 これらのログには、インストレーション プロセスと発生した潜在的なエラーに関する情報を提供する npm インストレーション ログが含まれます。
これで、このプライベートな場所に送信するモニターのスクリプトに"require('smallest');"
を追加できます。
カスタムモジュールのpackage.json
を変更
ローカル モジュールとホスト モジュールに加えて、 Node.js モジュールも利用できます。 SJM で使用されるカスタム モジュールを更新するには、 package.json
ファイルに変更を加えて、SJM を再起動します。 再起動プロセス中に、SJM は設定の変更を認識し、クリーンアップと再インストール操作を自動的に実行して、更新されたモジュールが確実に適用されるようにします。
注意
ローカル モジュール: package.json
には任意のローカル モジュールを含めることができますが、これらのモジュールはカスタム モジュール ディレクトリの下のツリー内に存在する必要があります。 ツリー外に保存すると、初期化プロセスが失敗し、SJM を起動した後にdockerログにエラー メッセージが表示されます。
データの永久保存
ユーザーは、永続データ ストレージを使用して、 user_defined_variables.json
ファイルを提供したり、カスタム ノード モジュールをサポートしたりすることができます (プライベートの外形監視ジョブ マネージャーはまだ利用できません)。
Docker
Dockerに恒久的なデータ保存を設定するには
- ジョブ マネージャーを起動するホスト上にディレクトリを作成します。 これがソース ディレクトリです。
- ジョブ マネージャーをリリースし、ソース ディレクトリをターゲット ディレクトリ
/var/lib/newrelic/synthetics
にマウントします。
例:
docker run ... -v /sjm-volume:/var/lib/newrelic/synthetics:rw ...
Kubernetes
Kubernetes に永続的なデータ ストレージを設定するには、ユーザーには 2 つのオプションがあります。
- 既存の Persistent Volume (PV) に既存の Persistent VolumeClaim (PVC) を指定し、
synthetics.persistence.existingClaimName
構成値を設定します。
例:
helm install ... --set synthetics.persistence.existingClaimName=sjm-claim ...
- 既存の PersistentVolume (PV) 名を指定し、
synthetics.persistence.existingVolumeName
構成値を設定します。 Helm はユーザー用の PVC を生成します。
ユーザーはオプションで次の値も設定できます。
synthetics.persistence.storageClass
: 既存の PV のストレージ クラス。 指定しない場合、Kubernetes はデフォルトのストレージ クラスを使用します。synthetics.persistence.size
: クレームのサイズ。 設定されていない場合、現在のデフォルトは 2Gi です。
helm install ... --set synthetics.persistence.existingVolumeName=sjm-volume --set synthetics.persistence.storageClass=standard ...
Kubernetes と Docker のサイジングに関する考慮事項
ヒント
Docker 固有のサイジングに関する考慮事項は、まもなく利用可能になります。
大規模な環境で作業している場合は、合成モニターを効率的に実行するための最小要件を満たすように、ジョブ マネージャーの構成をカスタマイズする必要がある場合があります。次のような多くの要因が、合成ジョブ マネージャーの展開のサイジング要件に影響を与える可能性があります。
- 予想される使用量に基づいてすべてのランタイムが必要な場合
- モニターの種類 (ping、シンプルまたはスクリプト化されたブラウザー、およびスクリプト化された API) ごとの 1 分あたりのジョブ数
- 約 3 分でタイムアウトするジョブを含む、ジョブの所要時間
- ジョブの失敗数。ジョブが失敗した場合、組み込みの 3/3 再試行ロジックを提供するためにモニターが失敗し始めると、自動再試行がスケジュールされます。これらの追加のジョブは、合成ジョブ マネージャーのスループット要件に追加されます。
以下にリストされているサイジング構成設定に加えて、同じプライベート ロケーション キーを使用して追加の合成ジョブ マネージャーを展開し、複数の環境間でジョブの負荷を分散することができます。
Kubernetes
Kubernetes 合成ジョブ マネージャーで使用される各ランタイムは、 ヘルム チャートで値を設定することで個別にサイズを調整できます。
1
のデフォルト値からping-runtime.replicaCount
設定を増やすことで、追加の ping ランタイムを開始して、ping モニター負荷の実行を支援できます。
Node.js API と Node.js ブラウザ ランタイムは、 parallelism
とcompletions
の設定の組み合わせを使用して個別にサイズ設定されます。これらの設定の理想的な構成は、お客様の要件によって異なります。
parallelism
設定は、特定のランタイムの同時実行ポッドの数を制御します。parallelism
設定は、コンテナ化されたプライベート ミニオン (CPM) の synthetics.heavyWorkers
設定と同等です。リソース要求と制限値に基づいて、この数のポッドを実行するのに十分なリソースが Kubernetes クラスターにあることを確認してください。
completions
設定は、 CronJob
がそのランタイムの別の Kubernetes ジョブを開始する前に、特定のランタイムのポッドの数を完了する必要があるかを制御します。Kubernetes ジョブ (大文字の J) と合成モニター ジョブの違いに注目してください。効率を向上させるには、 completions
parallelism
値の 6 ~ 10 倍に設定する必要があります。これは、Kubernetes ジョブがすべての completions
が完了するのを待機するため、実行されるポッドの数が parallelism
未満になる可能性がある「完了の終わりに近づく」非効率を最小限に抑えるのに役立ちます。
completions
が 1 より大きい場合、Kubernetes ジョブで定義されたすべての完了 (たとえば 6/6 完了) が満たされるまで、「Completed」ステータスのポッドが kubectl get pods -n YOUR_NAMESPACE
の出力に表示されたままになります。ポッドのステータスが「完了」または「失敗」の場合、リソースはノードから解放されます。
Kubernetes ジョブの有効期間 5 分 (kubectl get jobs -n YOUR_NAMESPACE
) は、ポッドが完了するまでにかかる時間と、1 分あたりに実行する必要がある合成ジョブの数 (ジョブ レート) の変動を考慮した控えめな目標です。次の方程式は、各ランタイムの completions
と parallelism
の開始点として使用できます。プライベート ロケーション キューの増加の観察に基づいて調整を行う必要がある場合があります。
completions = 300 / avg job duration (s)parallelism = synthetics jobs per 5 minutes / completions
ランタイムが異なれば、合成ジョブの期間と速度も異なる可能性があります。次のクエリを使用して、プライベート ロケーションの平均期間と料金を取得できます。
# non-ping average job duration by runtime typeFROM SyntheticCheck SELECT average(duration) AS 'avg job duration' WHERE type != 'SIMPLE' AND location = 'YOUR_PRIVATE_LOCATION' FACET type SINCE 1 hour ago
# non-ping jobs per minute by runtime typeFROM SyntheticCheck SELECT rate(uniqueCount(id), 5 minutes) AS 'jobs per 5 minutes' WHERE type != 'SIMPLE' AND location = 'YOUR_PRIVATE_LOCATION' FACET type SINCE 1 hour ago
ヒント
上記のクエリは現在の結果に基づいています。プライベート ロケーションに結果がない場合、またはジョブ マネージャーが最高のパフォーマンスを発揮していない場合、クエリ結果は正確ではない可能性があります。その場合、 kubectl get jobs -n YOUR_NAMESPACE
継続時間が少なくとも 5 分 (十分な完了)、キューが増大しない (十分な並列処理) ことが確認されるまで、 completions
と parallelism
にいくつかの異なる値を試します。
例 | 説明 |
---|---|
| ランタイムは 1 分あたり 1 つの外形監視ジョブを実行します。 1 つのジョブが完了すると、 |
| ランタイムは一度に 1 つの外形監視ジョブを実行します。 ジョブが完了すると、新しいジョブがすぐに開始されます。 |
| ランタイムは一度に 3 つの外形監視ジョブを実行します。 これらのジョブのいずれかが完了すると、新しいジョブがすぐに開始されます。 |
合成ジョブの完了に時間がかかる場合、ジョブで 5 分間を埋めるために必要な完了数は少なくなりますが、より多くの並列ポッドが必要になります。同様に、1 分あたりにより多くの合成ジョブを処理する必要がある場合は、より多くの並列ポッドが必要になります。parallelism
設定は、1 分あたりに実行できる合成ジョブの数に直接影響します。値が小さすぎるとキューが増大する可能性があります。値が大きすぎると、ノードのリソースが制限される可能性があります。
parallelism
設定がうまく機能してキューをゼロに維持している場合は、 completions
に 300 / avg job duration
から計算される値よりも高い値を設定すると、次のいくつかの方法で効率を向上させることができます。
- CronJob の最小期間である少なくとも 1 分間が合成ジョブで埋められるように、ジョブ期間の変動に対応します。
- 完了サイクルの数を減らして、最後のジョブが完了するまで次の完了セットを開始できない「完了が終わりに近づく」非効率を最小限に抑えます。
completions
値が大きすぎないように注意することが重要です。大きすぎると、CronJob で次のような警告イベントが発生します。
8m40s Warning TooManyMissedTimes cronjob/synthetics-node-browser-runtime too many missed start times: 101. Set or decrease .spec.startingDeadlineSeconds or check clock skew
ヒント
New Relicは、外形監視ジョブ マネージャー ファイルに加えられた変更に対して責任を負わないことを覚えておいてください。