このドキュメントでは、次の方法を示して、外形監視ジョブ マネージャー の構成について説明します。
環境変数を使用した設定 環境変数を使用すると、合成ジョブ マネージャーの構成を微調整して、特定の環境および機能のニーズを満たすことができます。
Dockerの環境設定 変数は、起動時に-e, --env引数を使用して提供されます。
次の表は、synthetics ジョブ マネージャーがサポートするすべての環境変数を示しています。PRIVATE_LOCATION_KEYは必須で、その他の変数はすべてオプションです。
名前
説明
PRIVATE_LOCATION_KEY
Required. プライベートロケーション エンティティ リストにあるプライベートロケーション キー。
DOCKER_API_VERSION
形式: "vX.Y"指定されたDockerサービスで使用されるAPIバージョン。
デフォルト: v1.35.
DOCKER_HOST
合成ジョブ マネージャーを特定のDOCKER_HOSTにポイントします。存在しない場合、デフォルト値は /var/run/docker.sock.
HORDE_API_ENDPOINT
米国ベースのアカウントの場合、エンドポイントは次のとおりです。 https://synthetics-horde.nr-data.net.
EUベース のアカウントの場合、エンドポイントは次のとおりです。 https://synthetics-horde.eu01.nr-data.net/
モニターにサービスを提供するために、合成ジョブ マネージャーが適切なエンドポイントに接続できることを確認します。
DOCKER_REGISTRY
ランタイム イメージがホストされる Docker レジストリ ドメイン。これを使用して、 docker.ioをデフォルトとしてオーバーライドします。
DOCKER_REPOSITORY
ランタイム イメージがホストされている Docker リポジトリまたは組織。これを使用して、 newrelicデフォルトとして上書きします。
HORDE_API_PROXY_HOST
Horde 通信に使用されるプロキシ サーバー ホスト。形式: "localhost" 。
HORDE_API_PROXY_PORT
Horde 通信に使用されるプロキシ サーバー ポート。形式: 8888 。
HORDE_API_PROXY_USERNAME
Horde 通信に使用されるプロキシ サーバーのユーザー名。形式: "username" 。
HORDE_API_PROXY_PW
Horde 通信に使用されるプロキシ サーバーのパスワード。形式: "password" 。
HORDE_API_PROXY_ACCEPT_SELF_SIGNED_CERT
Horde 通信に使用されるプロキシ サーバー接続の自己署名プロキシ証明書を受け入れますか?許容値: true
CHECK_TIMEOUT
モニター チェックの実行が許可される最大秒数。この値は、0 秒 (除く) から 900 秒 (含む) までの整数である必要があります (たとえば、1 秒から 15 分まで)。
デフォルト: 180 秒
LOG_LEVEL
デフォルト: INFO.
追加オプション: WARN 、 ERROR 、 DEBUG
HEAVYWEIGHT_WORKERS
一度に実行できる同時重量ジョブ ( browser /スクリプト化されたbrowserおよびスクリプト化された API) の数。
デフォルト: 使用可能な CPU - 1。
DESIRED_RUNTIMES
特定のランタイム イメージを実行するために使用される配列。 形式: ['newrelic/外形監視-ping-runtime:latest','newrelic/外形監視-node- API -runtime:latest','newrelic/外形監視-node-browser-runtime:latest']
デフォルト: すべての最新のランタイム。
VSE_PASSPHRASE
設定すると、 verified script execution が有効になり、この値がpassphrase として使用されます。
USER_DEFINED_VARIABLES
ユーザーが定義したキーバリューペアのセットをローカルにホストすること。
ENABLE_WASM
設定されている場合、ノードbrowserランタイムの Web アセンブリが有効になります。 WebAssembly を使用するには、外形監視ジョブ マネージャーの最小バージョンが release-367 以上であり、ノードbrowserランタイム バージョンが 2.3.21 以上である必要があります。
Podman環境設定 変数は、起動時に-e, --env引数を使用して提供されます。
次の表には、外形監視ジョブ マネージャーがサポートするすべての環境変数が表示されます。 PRIVATE_LOCATION_KEYは必須ですが、その他の変数はオプションです。Podman 環境で外形監視ジョブ マネージャーを実行するには、最小バージョンがリリース 418 以上である必要があります。
名前
説明
PRIVATE_LOCATION_KEY
Required. プライベートロケーション エンティティ リストにあるプライベートロケーション キー。
HORDE_API_ENDPOINT
米国ベースのアカウントの場合、エンドポイントは次のとおりです。 https://synthetics-horde.nr-data.net.
EUベース のアカウントの場合、エンドポイントは次のとおりです。 https://synthetics-horde.eu01.nr-data.net/
モニターにサービスを提供するために、合成ジョブ マネージャーが適切なエンドポイントに接続できることを確認します。
PODMAN_API_SERVICE_HOST
SJM が実行される場所に作成されたポッドに追加されたホスト エントリ。これを使用して、 podman.serviceデフォルトとして上書きします。
PODMAN_API_SERVICE_PORT
インスタンス内で Podman LibPod RESTful API サービスが実行されているポート。これを使用して、 8000デフォルトとして上書きします。
PODMAN_API_VERSION
使用されている Podman LibPod RESTful API の特定のバージョン。これを使用して、 v5.0.0デフォルトとして上書きします。
PODMAN_POD_NAME
SJM コンテナが実行されるポッドの名前。これを使用して、 SYNTHETICSデフォルトとして上書きします。
DOCKER_REGISTRY
ランタイム イメージがホストされる Docker レジストリ ドメイン。これを使用して、 docker.ioをデフォルトとしてオーバーライドします。
DOCKER_REPOSITORY
ランタイム イメージがホストされている Docker リポジトリまたは組織。これを使用して、 newrelicデフォルトとして上書きします。
HORDE_API_PROXY_HOST
Horde 通信に使用されるプロキシ サーバー ホスト。形式: "localhost" 。
HORDE_API_PROXY_PORT
Horde 通信に使用されるプロキシ サーバー ポート。形式: 8888 。
HORDE_API_PROXY_USERNAME
Horde 通信に使用されるプロキシ サーバーのユーザー名。形式: "username" 。
HORDE_API_PROXY_PW
Horde 通信に使用されるプロキシ サーバーのパスワード。形式: "password" 。
HORDE_API_PROXY_ACCEPT_SELF_SIGNED_CERT
Horde 通信に使用されるプロキシ サーバー接続の自己署名プロキシ証明書を受け入れますか?許容値: true
CHECK_TIMEOUT
モニター チェックの実行が許可される最大秒数。この値は、0 秒 (除く) から 900 秒 (含む) までの整数である必要があります (たとえば、1 秒から 15 分まで)。
デフォルト: 180 秒
LOG_LEVEL
デフォルト: INFO.
追加オプション: WARN 、 ERROR 、 DEBUG
HEAVYWEIGHT_WORKERS
一度に実行できる同時重量ジョブ ( browser /スクリプト化されたbrowserおよびスクリプト化された API) の数。
デフォルト: 使用可能な CPU - 1。
DESIRED_RUNTIMES
特定のランタイム イメージを実行するために使用される配列。 形式: ['newrelic/外形監視-ping-runtime:latest','newrelic/外形監視-node- API -runtime:latest','newrelic/外形監視-node-browser-runtime:latest']
デフォルト: すべての最新のランタイム。
VSE_PASSPHRASE
設定すると、 verified script execution が有効になり、この値がpassphrase として使用されます。
USER_DEFINED_VARIABLES
ユーザーが定義したキーバリューペアのセットをローカルにホストすること。
ENABLE_WASM
設定されている場合、ノードbrowserランタイムの Web アセンブリが有効になります。 WebAssembly を使用するには、外形監視ジョブ マネージャーの最小バージョンが release-367 以上であり、ノードbrowserランタイム バージョンが 2.3.21 以上である必要があります。
Kubernetesの環境設定 変数は、起動時に--set引数を使用して提供されます。
次のリストは、synthetics ジョブ マネージャーがサポートするすべての環境変数を示しています。synthetics.privateLocationKeyは必須で、その他の変数はすべてオプションです。
多数の追加の高度な設定が利用可能であり、Helm チャートの README に完全に記載されています。
名前
説明
synthetics.privateLocationKey
Required if synthetics.privateLocationKeySecretName is not set .プライベートロケーション Web ページにあるプライベートロケーションのキー 。
synthetics.privateLocationKeySecretName
Required if synthetics.privateLocationKey is not set 。キーprivateLocationKeyを含む Kubernetes シークレットの名前。これには、外形監視プライベートロケーションに関連付けられた認証キーが含まれます。
imagePullSecrets
指定されたコンテナレジストリからイメージを引き出すために使用されるシークレットオブジェクトの名前です。
fullnameOverride
デフォルトを置き換えて、デプロイメントに使用される名前のオーバーライド。
appVersionOverride
chart.yml で指定されたバージョンの代わりに使用する、synthetics-job-manager のリリース バージョン。
synthetics.logLevel
デフォルト: INFO.
追加オプション: WARN 、 ERROR
synthetics.hordeApiEndpoint
米国ベースのアカウントの場合、エンドポイントは次のとおりです。 https://synthetics-horde.nr-data.net.
EUベース のアカウントの場合、エンドポイントは次のとおりです。 https://synthetics-horde.eu01.nr-data.net/
モニターにサービスを提供するために、合成ジョブ マネージャーが適切なエンドポイントに接続できることを確認します。
synthetics.minionDockerRunnerRegistryEndpoint
MinionRunnerイメージがホストされているDockerレジストリと組織。これを使用して、デフォルトとしてquay.io/newrelicをオーバーライドします(たとえば、 docker.io/newrelic )
synthetics.vsePassphrase
設定すると、 verified script execution が有効になり、この値がpassphrase として使用されます。
synthetics.vsePassphraseSecretName
設定すると、検証済みスクリプトの実行が有効になり、この値を使用して、 vsePassphraseというキーを持つ Kubernetes シークレットからパスフレーズを取得します。
synthetics.enableWasm
設定されている場合、ノードbrowserランタイムの Web アセンブリが有効になります。 WebAssembly を使用するには、外形監視ジョブ マネージャーの最小バージョンが release-367 以上であり、ノードbrowserランタイム バージョンが 2.3.21 以上である必要があります。
synthetics.apiProxyHost
Horde 通信に使用されるプロキシ サーバー。形式: "host" 。
synthetics.apiProxyPort
Horde 通信に使用されるプロキシ サーバー ポート。形式: port 。
synthetics.hordeApiProxySelfSignedCert
Horde 通信にプロキシ サーバーを使用する場合は、自己署名証明書を受け入れます。許容値: true 。
synthetics.hordeApiProxyUsername
Horde 通信用のプロキシ サーバーのユーザー名。フォーマット: "username"
synthetics.hordeApiProxyPw
Horde 通信用のプロキシ サーバーのパスワード。形式: "password" 。
synthetics.userDefinedVariables.userDefinedJson
ユーザー定義変数の JSON 文字列。 ユーザーはスクリプト内でこれらの変数にアクセスできます。 形式: '{"key":"value","key2":"value2"}' 。
synthetics.userDefinedVariables.userDefinedFile
ユーザー定義変数を含む JSON ファイルへの、ユーザーにとってローカルなパス。 これは--set-file経由で渡され、値ファイルで設定することはできません。
synthetics.userDefinedVariables.userDefinedPath
user_define_variables.json 파일에 대한 사용자가 제공한 PertantVolume의 경로입니다.この変数が設定されている場合、ユーザーは Persistent Volume または Persistent VolumeClaim を指定する必要があります。
synthetics.persistence.existingClaimName
ボリュームをマウントする場合、ユーザーはクラスター内に既に存在する PersistentVolumeClaim の名前を指定できます。 対応する PersistentVolume が存在することを前提とします。
synthetics.persistence.existingVolumeName
ボリュームをマウントし、PersistentVolumeClaim を指定しない場合、ユーザーは少なくとも Persistent Volume 名を指定する必要があります。 Helm は PersistentVolumeClaim を生成します。
synthetics.persistence.storageClass
生成された PersistentVolumeClaim の StorageClass の名前。 これは、既存の PV の StorageClassName と一致する必要があります。 プロバイダーでない場合、Kubernetes はデフォルトのストレージ クラスが存在する場合はそれを使用します。
synthetics.persistence.size
生成された PersistentVolumeClaim のボリュームのサイズ。 フォーマット: 10Gi 。 デフォルトは2Giです。
global.checkTimeout
モニター チェックの実行が許可される最大秒数。この値は、0 秒 (除く) から 900 秒 (含む) までの整数である必要があります (たとえば、1 秒から 15 分まで)。
デフォルト: 180 秒
image.repository
引くための容器です。
デフォルト: docker.io/newrelic/synthetics-job-runner
image.pullPolicy
引きの方針です。
デフォルト: IfNotPresent
podSecurityContext
Synthetics-job-manager ポッドのカスタム セキュリティ コンテキストを設定します。
ping-runtime.enabled
永続的な ping ランタイムをデプロイする必要があるかどうか。ping モニターを使用しない場合は、これを無効にすることができます。
デフォルト: true
ping-runtime.replicaCount
デプロイする ping ランタイム コンテナーの数。ping 監視のニーズに基づいてデプロイをスケーリングするには、replicaCount を増やします。
デフォルト: 1
ping-runtime.image.repository
ping ランタイム用にプルするコンテナー イメージ。
デフォルト: docker.io/newrelic/synthetics-ping-runtime
ping-runtime.image.pullPolicy
ping-runtime コンテナーのプル ポリシー。
デフォルト: IfNotPresent
node-api-runtime.enabled
Node.js API ランタイムをデプロイする必要があるかどうか。スクリプト化された API モニターを使用しない場合、これを無効にすることができます。
デフォルト: true
node-api-runtime.parallelism
デプロイする Node.js API ランタイムCronJobsの数。同時に実行される Node.js API ジョブの最大数。追加の詳細 。
デフォルト: 1
node-api-runtime.completions
1 分あたりに完了する Node.js API ランタイムCronJobsの数。並列処理とともにこの設定を増やして、スループットを向上させます。これは、並列処理が増加するたびに増加する必要があり、完了は常に少なくとも並列処理以上である必要があります。 .API ランタイム ジョブが実行されていない期間がある場合は、この設定を増やしてください。追加の詳細 。
デフォルト: 6
node-api-runtime.image.repository
Node.js API ランタイム用にプルするコンテナー イメージ。
デフォルト: docker.io/newrelic/synthetics-node-api-runtime
node-api-runtime.image.pullPolicy
Node.js API ランタイム コンテナーのプル ポリシー。
デフォルト: IfNotPresent
node-browser-runtime.enabled
Node.js ブラウザー ランタイムをデプロイする必要があるかどうか。シンプルなブラウザ モニタまたはスクリプト化されたブラウザ モニタを使用しない場合は、これを無効にすることができます。
デフォルト: true
node-browser-runtime.parallelism
デプロイする Chrome ブラウザー ランタイムCronJobsの数。同時に実行される Chrome ブラウザ ジョブの最大数。追加の詳細 。
デフォルト: 1
node-browser-runtime.completions
1 分あたりに完了する Chrome ブラウザ ランタイムCronJobsの数。並列処理とともにこの設定を増やして、スループットを向上させます。これは、並列処理が増加するたびに増加する必要があり、完了は常に少なくとも並列処理以上である必要があります。ブラウザーのランタイム ジョブが実行されていない期間があることに気付いた場合は、この設定を増やしてください。追加の詳細 。
デフォルト: 6
node-browser-runtime.image.repository
Node.js ブラウザー ランタイム用にプルするコンテナー イメージ。
デフォルト: docker.io/newrelic/synthetics-node-browser-runtime
node-browser-runtime.image.pullPolicy
Node.js ブラウザー ランタイム コンテナーのプル ポリシー。
デフォルト: IfNotPresent
OpenShift環境設定 変数は、起動時に--set引数を使用して提供されます。
次のリストは、synthetics ジョブ マネージャーがサポートするすべての環境変数を示しています。synthetics.privateLocationKeyは必須で、その他の変数はすべてオプションです。
多数の追加の高度な設定が利用可能であり、Helm チャートの README に完全に記載されています。
名前
説明
synthetics.privateLocationKey
Required . プライベートロケーション キー 。プライベートロケーション エンティティ リストにあります。
imagePullSecrets
指定されたコンテナレジストリからイメージを引き出すために使用されるシークレットオブジェクトの名前です。
fullnameOverride
デフォルトを置き換えて、デプロイメントに使用される名前のオーバーライド。
appVersionOverride
chart.yml で指定されたバージョンの代わりに使用する、synthetics-job-manager のリリース バージョン。
synthetics.logLevel
デフォルト: INFO.
追加オプション: WARN 、 ERROR
synthetics.hordeApiEndpoint
米国ベースのアカウントの場合、エンドポイントは次のとおりです。 https://synthetics-horde.nr-data.net.
EUベース のアカウントの場合、エンドポイントは次のとおりです。 https://synthetics-horde.eu01.nr-data.net/
モニターにサービスを提供するために、合成ジョブ マネージャーが適切なエンドポイントに接続できることを確認します。
synthetics.vsePassphrase
設定すると、 verified script execution が有効になり、この値がpassphrase として使用されます。
synthetics.vsePassphraseSecretName
設定すると、検証済みスクリプトの実行が有効になり、この値を使用して、 vsePassphraseというキーを持つ Kubernetes シークレットからパスフレーズを取得します。
synthetics.enableWasm
設定されている場合、ノードbrowserランタイムの Web アセンブリが有効になります。 WebAssembly を使用するには、外形監視ジョブ マネージャーの最小バージョンが release-367 以上であり、ノードbrowserランタイム バージョンが 2.3.21 以上である必要があります。
synthetics.apiProxyHost
Horde 通信に使用されるプロキシ サーバー。形式: "host" 。
synthetics.apiProxyPort
Horde 通信に使用されるプロキシ サーバー ポート。形式: port 。
synthetics.hordeApiProxySelfSignedCert
Horde 通信にプロキシ サーバーを使用する場合は、自己署名証明書を受け入れます。許容値: true 。
synthetics.hordeApiProxyUsername
Horde 通信用のプロキシ サーバーのユーザー名。フォーマット: "username"
synthetics.hordeApiProxyPw
Horde 通信用のプロキシ サーバーのパスワード。形式: "password" 。
synthetics.userDefinedVariables.userDefinedJson
ユーザー定義変数の JSON 文字列。 ユーザーはスクリプト内でこれらの変数にアクセスできます。 形式: '{"key":"value","key2":"value2"}' 。
synthetics.userDefinedVariables.userDefinedFile
ユーザー定義変数を含む JSON ファイルへの、ユーザーにとってローカルなパス。 これは--set-file経由で渡され、値ファイルで設定することはできません。
synthetics.userDefinedVariables.userDefinedPath
ユーザーが指定したPersistentVolume上の user_defined_variables.jsonファイルへのパス。この変数が設定されている場合、ユーザーはPersistentVolumeまたはPersistentVolumeClaim指定する必要があります。
global.persistence.existingClaimName
ボリュームをマウントする場合、ユーザーはクラスター内に既に存在するPersistentVolumeClaimの名前を指定できます。対応するPersistentVolumeが存在することを前提としています。
global.persistence.existingVolumeName
ボリュームをマウントし、 PersistentVolumeClaimを指定しない場合、ユーザーは少なくともPersistentVolume名を指定する必要があります。Helm はPersistentVolumeClaimを生成します。
global.persistence.storageClass
生成されたPersistentVolumeClaimのStorageClassの名前。これは既存の PV のStorageClassNameと一致する必要があります。プロバイダーでない場合、 Kubernetes は デフォルトのストレージ クラス (存在する場合) を使用します。
global.persistence.size
生成されたPersistentVolumeClaimのボリュームのサイズ。フォーマット: 10Gi 。デフォルトは2Gi 。
global.checkTimeout
モニター チェックの実行が許可される最大秒数。この値は、0 秒 (除く) から 900 秒 (含む) までの整数である必要があります (たとえば、1 秒から 15 分まで)。
デフォルト: 180 秒
image.repository
引くための容器です。
デフォルト: docker.io/newrelic/synthetics-job-runner
image.pullPolicy
引きの方針です。
デフォルト: IfNotPresent
podSecurityContext
synthetics-job-managerポッドのカスタム セキュリティ コンテキストを設定します。
ping-runtime.enabled
永続的な ping ランタイムをデプロイする必要があるかどうか。ping モニターを使用しない場合は、これを無効にすることができます。
デフォルト: true
ping-runtime.replicaCount
デプロイする ping ランタイム コンテナの数。ping 監視のニーズに基づいてデプロイメントをスケールするには、 replicaCountを増やします。
デフォルト: 1
ping-runtime.image.repository
ping ランタイム用にプルするコンテナー イメージ。
デフォルト: docker.io/newrelic/synthetics-ping-runtime
ping-runtime.image.pullPolicy
ping-runtime コンテナーのプル ポリシー。
デフォルト: IfNotPresent
node-api-runtime.enabled
Node.js API ランタイムをデプロイする必要があるかどうか。スクリプト化された API モニターを使用しない場合、これを無効にすることができます。
デフォルト: true
node-api-runtime.parallelism
デプロイする Node.js API ランタイムCronJobsの数。同時に実行される Node.js API ジョブの最大数。追加の詳細 。
デフォルト: 1
node-api-runtime.completions
1 分あたりに完了する Node.js API ランタイムCronJobsの数。並列処理とともにこの設定を増やして、スループットを向上させます。これは、並列処理が増加するたびに増加する必要があり、完了は常に少なくとも並列処理以上である必要があります。 .API ランタイム ジョブが実行されていない期間がある場合は、この設定を増やしてください。追加の詳細 。
デフォルト: 6
node-api-runtime.image.repository
Node.js API ランタイム用にプルするコンテナー イメージ。
デフォルト: docker.io/newrelic/synthetics-node-api-runtime
node-api-runtime.image.pullPolicy
Node.js API ランタイム コンテナーのプル ポリシー。
デフォルト: IfNotPresent
node-browser-runtime.enabled
Node.js ブラウザー ランタイムをデプロイする必要があるかどうか。シンプルなブラウザ モニタまたはスクリプト化されたブラウザ モニタを使用しない場合は、これを無効にすることができます。
デフォルト: true
node-browser-runtime.parallelism
デプロイする Chrome ブラウザー ランタイムCronJobsの数。同時に実行される Chrome ブラウザ ジョブの最大数。追加の詳細 。
デフォルト: 1
node-browser-runtime.completions
1 分あたりに完了する Chrome ブラウザ ランタイムCronJobsの数。並列処理とともにこの設定を増やして、スループットを向上させます。これは、並列処理が増加するたびに増加する必要があり、完了は常に少なくとも並列処理以上である必要があります。ブラウザーのランタイム ジョブが実行されていない期間があることに気付いた場合は、この設定を増やしてください。追加の詳細 。
デフォルト: 6
node-browser-runtime.image.repository
Node.js ブラウザー ランタイム用にプルするコンテナー イメージ。
デフォルト: docker.io/newrelic/synthetics-node-browser-runtime
node-browser-runtime.image.pullPolicy
Node.js ブラウザー ランタイム コンテナーのプル ポリシー。
デフォルト: IfNotPresent
スクリプト モニターのユーザー定義変数 プライベート外形監視ジョブ マネージャーを使用すると、スクリプト化された監視の環境変数を構成できます。 これらの変数は SJM 上でローカルに管理され、 $env.USER_DEFINED_VARIABLESを介してアクセスできます。 ユーザー定義変数は 2 つの方法で設定できます。 JSON ファイルをマウントするか、リリースの SJM に環境変数を指定することができます。 両方が指定されている場合、SJM は環境によって提供される値のみを使用します。
JSONファイルの実装 ユーザーは JSON 形式のファイルを作成し、そのファイルが配置されているボリュームを SJM コンテナ内の指定されたターゲット パスにマウントできます。
ファイルには読み取り権限が必要であり、JSON 形式のマップが含まれている必要があります。 ユーザー定義変数ファイルの例:
"my_password" : "PASSW0RD123" ,
"my_URL" : "https://newrelic.com/" ,
ファイルをホスト上のソース ディレクトリに配置します。 SJM은 파일 이름이 user_define_variables.json이 될 것으로 예상합니다.
Dockerの例です。
想定されるターゲット ディレクトリは次のとおりです。 /var/lib/newrelic/synthetics/variables/
$ docker run .. . -v /variables:/var/lib/newrelic/synthetics/variables:rw .. .
Podmanの例:
SELinux の場合は、ボリュームを:zまたは:Zで追加でマウントします。詳細については、 Podman のドキュメントを参照してください。 想定されるターゲット ディレクトリは次のとおりです。 /var/lib/newrelic/synthetics/variables/
$ podman run .. . -v /variables:/var/lib/newrelic/synthetics/variables:rw,z .. .
Kubernetesの例。
Kubernetes の SJM ポッドにファイルを提供する場合、ユーザーには 2 つのオプションがあります。 以下の可能性があります:
ローカルファイルを渡します。 user_defined_variables.jsonを含む PersistentVolume を提供します。ローカルファイルを渡す このオプションは、ConfigMap Kubernetes リソースを作成し、それを SJM ポッドにマウントします。
$ helm install newrelic/synthetics-job-manager .. . --set-file "synthetics.userDefinedVariables.userDefinedFile=[local-path]/user_defined_variables.json" .. .
マウント PersistentVolume このオプションでは、ユーザーはuser_defined_variables.jsonファイルを含むPersistentVolumeまたは同じファイルに対するPersistentVolumeClaim指定する必要があります。PersistentVolumeを使用した helm chart インストレーションの詳細については、 永続的なデータ ストレージ の手順に従ってください。
ユーザーが下記の説明に従ってPersistentVolumeを準備したら、SJM をリリースし、 user_defined_variables.jsonファイルが配置されているパスを設定し、必要に応じてその他のsynthetics.persistence変数を設定します。
$ helm install newrelic/synthetics-job-manger .. . --set synthetics.userDefinedVariables.userDefinedPath = "variables"
環境変数として渡す 変数は環境変数を介してそれぞれのコンテナ システムに渡される場合があります。
Dockerの例です。
-eフラグを使用して、 USER_DEFINED_VARIABLESという名前の環境変数を設定し、JSON 形式のマップ文字列の値を指定します。
$ docker run .. . -e USER_DEFINED_VARIABLES = '{"key":"value","name":"sjm"}' .. .
Podmanの例:
-eフラグを使用して、 USER_DEFINED_VARIABLESという名前の環境変数を設定し、JSON 形式のマップ文字列の値を指定します。
$ podman run .. . -e USER_DEFINED_VARIABLES = '{"key":"value","name":"sjm"}' .. .
Kubernetesの例。
JSON 形式の文字列を渡すには、 --set-literalフラグを使用します。
$ helm install newrelic/synthetics-job-manager .. . --set-literal synthetics.userDefinedVariables.userDefinedJson = '{"key":"value","name":"sjm"}' .. .
スクリプトからユーザー定義の環境変数にアクセスする 構成されたユーザー定義の環境変数を参照するには、予約語の$env.USER_DEFINED_VARIABLESに続けて、ドット表記の特定の変数の名前を使用します (例: $env.USER_DEFINED_VARIABLES.MY_VARIABLE )。
注意 ユーザー定義の環境変数はログから削除されません。 機密情報には安全な認証情報 機能を使用することを検討してください。
カスタムノードモジュール カスタム ノード モジュールは、1分間あたりの呼出し回数と SJM の両方で提供されます。 これらを使用すると、カスタマイズされたノード モジュール のセットを作成し、外形監視用のスクリプト モニター (スクリプトAPIおよびスクリプトbrowser ) で使用できます。
カスタムモジュールディレクトリを設定する ルート フォルダーにnpm の公式ガイドライン に従って、 package.jsonファイルを含むディレクトリを作成します。 SJMはpackage.jsonにリストされている依存関係をインストールします。 dependenciesフィールド。 これらの依存関係は、プライベート外形監視ジョブ マネージャーでモニターを実行するときに使用できます。 以下の例をご覧ください。
例 この例では、次のような構造のカスタムモジュールディレクトリを使用しています。
/example-custom-modules-dir/
└── package.json ⇦ the only mandatory file
package.jsonはdependenciesローカル モジュール (例: counter ) とホストされたモジュール (例: smallestバージョン1.0.1 ) の両方として定義します。
"name" : "custom-modules" ,
"version" : "1.0.0" , ⇦ optional
"description" : "example custom modules directory" , ⇦ optional
"smallest" : "1.0.1" , ⇦ hosted module
"counter" : "file:./counter" ⇦ local module
Docker、Podman、KubernetesのSJMにカスタムモジュールディレクトリを追加します。 Docker dockerの場合、リリース SJM はディレクトリを /var/lib/newrelic/synthetics/modules にマウントします。 例えば:
$ docker run .. . -v /example-custom-modules-dir:/var/lib/newrelic/synthetics/modules:rw .. .
ポッドマン podman の場合は、SJM をリリースして/var/lib/newrelic/synthetics/modulesにディレクトリをマウントします。 SELinux の場合は、 :zまたは:Zを使用してボリュームを追加でマウントします。詳細については、 Podman のドキュメント を参照してください。例えば:
$ podman run .. . -v /example-custom-modules-dir:/var/lib/newrelic/synthetics/modules:rw,z .. .
Kubernetes Kubernetes の場合、カスタム モジュールを有効にして SJM を起動する前に、 /var/lib/newrelic/synthetics/modulesのディレクトリが PV 上に存在している必要があります。
ヒント 複数のポッド間でストレージを共有する必要がある場合は、PV アクセス モードを ReadWriteMany にする必要があります。
1 つの方法は、カスタム モジュール ディレクトリを PV にコピーするためだけに PV をマウントするポッドを作成することです。次の例では、Amazon EKS と Amazon EFS を使用します。
ネームスペース、永続ボリューム、および永続ボリューム要求を作成する EFS ファイルシステムがすでにセットアップされており、クラスターにEFS CSI ドライバー がインストールされていることを確認してください。PV のspec.csi.volumeHandleの EFS ファイルシステム ID も必要になります。
$ kubectl apply -f - << EOF
$ apiVersion: storage.k8s.io/v1
$ provisioner: efs.csi.aws.com
$ name: custom-modules-pvc
$ persistentVolumeReclaimPolicy: Retain
$ storageClassName: efs-sc
$ driver: efs.csi.aws.com
$ volumeHandle: <your-efs-filesystem-id>
$ kind: PersistentVolumeClaim
$ name: custom-modules-pvc
$ storageClassName: efs-sc
~/.kube/configのnewrelicネームスペースに切り替えます。
$ kubectl config get-contexts
$ kubectl config set-context YOUR_CONTEXT --namespace = newrelic
$ kubectl config view --minify | grep namespace:
この時点で、PVC は RWX アクセス モードで PV にバインドされる必要があります。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
persistentvolume/custom-modules-pvc 5Gi RWX Retain Bound newrelic/custom-modules-pvc efs-sc <unset> 4m46s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
persistentvolumeclaim/custom-modules-pvc Bound custom-modules-pvc 5Gi RWX efs-sc <unset> 4m10s
カスタムモジュールディレクトリをコピーするには、 mount-custom-mods-pod作成します。 $ kubectl apply -f - << EOF
$ name: mount-custom-mods-pod
$ - name: mount-custom-mods-pod
$ - mountPath: "/var/lib/newrelic/synthetics/modules"
$ name: custom-modules-storage
$ - name: custom-modules-storage
$ claimName: custom-modules-pvc
この時点で、ボリュームを使用するためにmount-custom-mods-podが作成され、構成される必要があります。
$ kubectl describe po mount-custom-mods-pod | grep -A4 Volumes:
Volumes:
custom-modules-storage:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: custom-modules-pvc
ReadOnly: false
PV、PVC、またはmount-custom-mods-podに関連する警告がないかイベントを確認します。
$ kubectl get events --field-selector type = Warning --sort-by = '.lastTimestamp'
カスタムモジュールディレクトリをPVにコピーします node_modules npm installの SJM によって生成されるため、コピーする必要はありません。
$ rm -rf node_modules && cd ..
mount-custom-mods-podが実行中であることを確認してください。
NAME READY STATUS RESTARTS AGE
mount-custom-mods-pod 1/1 Running 0 5m43s
PVにコピーします。
$ kubectl cp custom-modules newrelic/mount-custom-mods-pod:/var/lib/newrelic/synthetics/modules
PV に/var/lib/newrelic/synthetics/modules/custom-modules/package.jsonが存在することを確認してください。
$ kubectl exec -it mount-custom-mods-pod -- bash
root@mount-custom-mods-pod:/# cd /var/lib/newrelic/synthetics/modules/
root@mount-custom-mods-pod:/var/lib/newrelic/synthetics/modules# ls -l
total 4
drwxr-xr-x 2 root root 6144 Jun 29 03:49 custom-modules
root@mount-custom-mods-pod:/var/lib/newrelic/synthetics/modules# ls -l custom-modules/
total 4
-rw-r--r-- 1 501 staff 299 Jun 29 03:49 package.json
カスタムモジュール機能を有効にしたSJMをリリース インストレーション中に、コマンドラインまたは YAML ファイルでpersistence.existingClaimNameとcustomNodeModules.customNodeModulesPathの値を設定します。 customNodeModules.customNodeModulesPath値には、カスタム モジュール ファイルが存在する永続ボリューム上のサブパスを指定する必要があります。例えば:
$ helm upgrade --install synthetics-job-manager newrelic/synthetics-job-manager -n newrelic --set global.persistence.existingClaimName = custom-modules-pvc --set global.customNodeModules.customNodeModulesPath = custom-modules --set synthetics.privateLocationKey = YOUR_PRIVATE_LOCATION_KEY
Release "synthetics-job-manager" does not exist. Installing it now.
NAME: synthetics-job-manager
LAST DEPLOYED: Fri Jun 28 16:53:28 2024
NAMESPACE: newrelic
STATUS: deployed
REVISION: 1
TEST SUITE: None
custom-modulesディレクトリには、 node_modulesにインストールされたパッケージが含まれるようになりました。
$ kubectl exec -it mount-custom-mods-pod -- bash
root@mount-custom-mods-pod:/# cd /var/lib/newrelic/synthetics/modules/
root@mount-custom-mods-pod:/var/lib/newrelic/synthetics/modules# ls -l custom-modules/
total 16
-rw-r--r-- 1 root root 836 Jun 29 03:51 README
drwxr-xr-x 18 root root 6144 Jun 29 03:51 node_modules
-rw-r--r-- 1 501 staff 299 Jun 29 03:49 package.json
-rw-r--r-- 1 root root 190 Jun 29 03:51 package.json.shasum
カスタム ノード モジュールが検出されない場合は、 custom-modulesディレクトリとpackage.jsonファイルの権限を調整します。
$ kubectl exec -it mount-custom-mods-pod -- bash
root@mount-custom-mods-pod:/# cd /var/lib/newrelic/synthetics/modules/
root@mount-custom-mods-pod:/var/lib/newrelic/synthetics/modules# chmod -R 777 custom-modules
root@mount-custom-mods-pod:/var/lib/newrelic/synthetics/modules# chown -R 2000:2000 custom-modules
モジュールが正しくインストールされたかどうか、またはエラーが発生したかどうかを確認するには、 synthetics-job-manager コンテナ またはポッドの ログで次の行を探します。
2024-06-29 03:51:28,407{UTC} [main] INFO c.n.s.j.p.options.CustomModules - Detected mounted path for custom node modules
2024-06-29 03:51:28,408{UTC} [main] INFO c.n.s.j.p.options.CustomModules - Validating permission for custom node modules package.json file
2024-06-29 03:51:28,409{UTC} [main] INFO c.n.s.j.p.options.CustomModules - Installing custom node modules...
2024-06-29 03:51:44,670{UTC} [main] INFO c.n.s.j.p.options.CustomModules - Custom node modules installed successfully.
これで、このプライベートな場所に送信するモニターのスクリプト に"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 .. .
ポッドマン Podman で永続的なデータ ストレージを設定するには:
ジョブ マネージャーを起動するホスト上にディレクトリを作成します。 これがソース ディレクトリです。 ジョブ マネージャーをリリースし、ソース ディレクトリをターゲット ディレクトリ/var/lib/newrelic/syntheticsにマウントします。 例:
$ podman run .. . -v /sjm-volume:/var/lib/newrelic/synthetics:rw,z .. .
Kubernetes Kubernetes に永続的なデータ ストレージを設定するには、ユーザーには 2 つのオプションがあります。
既存の PersistentVolume (PV) に既存の PersistentVolumeClaim (PVC) を指定して、 synthetics.persistence.existingClaimName構成値を設定してください。例:
$ helm install .. . --set synthetics.persistence.existingClaimName = sjm-claim .. .
既存の PersistentVolume (PV) 名を指定して、 synthetics.persistence.existingVolumeName構成値を設定してください。Helm はユーザー用の PVC を生成します。ユーザーはオプションで次の値も設定できます。
Sizing considerations for Docker and Podman プライベートロケーションを効率的に実行するには、監視ワークロードを処理するのに十分な CPU リソースをホスト上にプロビジョニングする必要があります。 サイズはさまざまな要因によって左右されますが、ニーズはすぐに見積もることができます。重量級のモニター (シンプル ブラウザー、スクリプト ブラウザー、スクリプト API モニターなど) ごとに 1 つの CPU コアが 必要になります。現在のセットアップを診断する場合でも、将来のセットアップを計画する場合でも、必要なコアの数を計算するのに役立つ 2 つの式を以下に示します。
公式1:既存の場所の診断 現在のプライベートロケーションを維持するのが難しく、ジョブがキューに登録されているのではないかと思われる場合は、この式を使用して実際に必要なコアの数を調べてください。 これは、システムの観測可能なパフォーマンスに基づいています。
$$ C_req = (R_proc + R_growth) \cdot D_avg,m $$
C _ r e q C\_req C _ re q =必要な CPU コア数 。R _ p r o c R\_proc R _ p roc = 1 分あたりに処理される 高負荷ジョブの速度 。R _ g r o w t h R\_growth R _ g ro wt h = jobManagerHeavyweightJobsキューが 1 分あたりに増加している** 速度**。D _ a v g , m D\_avg,m D _ a vg , m = 重いジョブの平均所要時間 (分) 。This formula calculates your true job arrival rate by adding the jobs your system is processing to the jobs that are piling up in the queue. Multiplying this total load by the average job duration tells you exactly how many cores you need to clear all the work without queuing.
公式2: 新しい場所または将来の場所の予測 新しいプライベートロケーションを設定している場合、またはモニターの追加を計画している場合は、この公式を使用して事前にニーズを予測してください。
$$ C_req = N_mon \cdot D_avg,m \cdot \frac1P_avg,m $$
C _ r e q C\_req C _ re q =必要な CPU コア数 。N _ m o n N\_mon N _ m o n = 実行を計画している重量級モニター の合計数 。D _ a v g , m D\_avg,m D _ a vg , m = 重いジョブの平均実行時間 (分) 。P _ a v g , m P\_avg,m P _ a vg , m = 重量モニターの平均期間 (分 単位) (たとえば、5 分ごとに実行されるモニターの場合、P _ a v g , m = 5 P\_avg,m = 5 P _ a vg , m = 5 になります)。This calculates your expected workload from first principles: how many monitors you have, how often they run, and how long they take.
重要なサイズ決定要因
これらの数式を使用する場合は、次の要素を考慮してください。
ジョブ期間 (D _ a v g , m D\_avg,m D _ a vg , m ): 平均には、タイムアウトする ジョブ (多くの場合、約 3 分) を含める必要があります。これらのジョブは、期間全体にわたってコアを保持するためです。ジョブの失敗と再試行: モニターが失敗すると、自動的に再試行されます。これらの再試行は、合計負荷に追加される追加のジョブです。継続して失敗し再試行するモニターは、実質的にその期間が倍増し 、スループットに大きな影響を与えます。スケールアウト: ホストにコアを追加する (スケールアップ) ことに加えて、同じプライベートロケーションキーを持つ追加の外部監視ジョブマネージャーを展開して、複数の環境間でジョブの負荷を分散する (スケールアウト) ことができます。単一の外形監視ジョブ マネージャー (SJM) には、1 分あたり約 15 の重量ジョブ というスループット制限があることに注意することが重要です。 これは、SJM ごとに処理されるジョブの数よりも、複数の SJM 間でのジョブの効率的な競争を優先する内部スレッド戦略によるものです。計算により、より高いスループットが必要であることが示された場合は、追加の SJM を展開してスケールアウトする 必要があります。 ジョブ キューが大きくなっているかどうかを確認し 、さらに SJM が必要かどうかを判断できます。
同じプライベートロケーションキーを持つ SJM を追加すると、いくつかの利点が得られます。
負荷分散 : プライベートロケーションのジョブは、利用可能なすべての SJM に分散されます。フェイルオーバー保護 : 1 つの SJM インスタンスがダウンしても、他のインスタンスがジョブの処理を続行できます。より高い合計スループット : プライベート ロケーションの合計スループットは、各 SJM からのスループットの合計になります (たとえば、2 つの SJM は最大 30 件/分までのジョブを提供します)。診断用のNRQL書き込み これらの書き込みを書き込みビルダー で実行して、診断式の入力を取得できます。 安定した平均値を得るために、時間範囲を十分に長い期間に設定してください。
1. Find the rate of jobs processed per minute (R _ p r o c R\_proc R _ p roc ) : This query counts the number of non-ping (heavyweight) jobs completed over the last day and shows the average rate per minute.
SELECT rate ( uniqueCount ( id ) , 1 minute ) AS 'job rate per minute'
WHERE location = 'YOUR_PRIVATE_LOCATION' AND typeLabel != 'Ping'
2. Find the rate of queue growth per minute (R _ g r o w t h R\_growth R _ g ro wt h ) : This query calculates the average per-minute growth of the jobManagerHeavyweightJobs queue on a time series chart. A line above zero indicates the queue is growing, while a line below zero means it's shrinking.
FROM SyntheticsPrivateLocationStatus
SELECT derivative ( jobManagerHeavyweightJobs , 1 minute ) AS 'queue growth rate per minute'
WHERE name = 'YOUR_PRIVATE_LOCATION'
TIMESERIES SINCE 1 day ago
ヒント 必ずプライベートロケーションが存在するアカウントを選択してください。 微分関数は大きく変化する可能性があるため、このクエリを時系列として表示するのが最適です。目標は、1 分あたりのキューの増加率を推定することです。さまざまな時間範囲をPlayて、最も効果的な方法を見つけてください。
3. Find total number of heavyweight monitors (N _ m o n N\_mon N _ m o n ) : This query finds the unique count of heavyweight monitors.
SELECT uniqueCount ( monitorId ) AS 'monitor count'
WHERE location = 'YOUR_PRIVATE_LOCATION' AND typeLabel != 'Ping'
4. Find average job duration in minutes (D _ a v g , m D\_avg,m D _ a vg , m ) : This query finds the average execution duration of completed non-ping jobs and converts the result from milliseconds to minutes. executionDuration represents the time the job took to execute on the host.
SELECT average ( executionDuration ) / 60 e3 AS 'avg job duration (m)'
WHERE location = 'YOUR_PRIVATE_LOCATION' AND typeLabel != 'Ping'
5. 平均ヘビーウェイト モニター期間 (P _ a v g , m P\_avg,m P _ a vg , m ) を見つける: プライベートロケーションのjobManagerHeavyweightJobsキューが増大している場合、既存の結果から平均モニター期間を計算することは正確ではありません。 これは、合成モニター ページのモニターのリストから推定する必要があります。 正しい New Relic アカウントを選択してください。また、 privateLocationでフィルタリングする必要がある場合があります。
ヒント 合成モニターは複数のサブアカウントに存在する場合があります。書き込みビルダーで選択できる数を超えるサブアカウントがある場合は、モニター数が最も多いアカウントを選択してください。
ping モニターとpingJobsキューに関する注意 Pingモニターは異なります。 これらは、それぞれ CPU コアを完全に消費しない軽量ジョブです。代わりに、別のキュー ( pingJobs ) を使用し、ワーカー スレッドのプールで実行されます。
リソースの消費量は少なくなりますが、大量の ping ジョブ、特に失敗するジョブは、パフォーマンスの問題を引き起こす可能性があります。次の点に留意してください。
リソース モデル: Ping ジョブは専用の CPU コアではなくワーカー スレッドを利用します。これらにはジョブあたりのコア数の計算は適用されません。タイムアウトと再試行: 失敗した ping ジョブは、最大60 秒間 ワーカー スレッドを占有する可能性があります。最初に HTTP HEAD リクエスト (30 秒のタイムアウト) を試行します。これが失敗した場合は、HTTP GETリクエストを使用してすぐに再試行します (さらに 30 秒のタイムアウト)。スケーリング: サイズ設定の式は異なりますが、同じ原則が適用されます。大量の ping ジョブを処理し、 pingJobsキューが拡大しないようにするには、スケールアップまたはスケールアウト (あるいはその両方) が必要になる場合があります。スケールアップとは、ホストまたはネームスペースあたりの CPU リソースとメモリ リソースを増やすことを意味します。 スケール アウトとは、ping ランタイムのインスタンスを追加することを意味します。これは、より多くのホスト、より多くのネームスペース、または同じネームスペース内で さらに多くのジョブ マネージャーをデプロイすることによって実行できます。 あるいは、Kubernetes のping-runtime使用すると、デプロイメントごとにより多くのレプリカを 設定できます。Sizing considerations for Kubernetes and OpenShift Kubernetes および OpenShift 合成ジョブ マネージャーによって使用される各ランタイムは、 Helm チャート で値を設定することで個別にサイズを変更できます。node-api-runtime とnode-browser-runtime は、 parallelismとcompletions設定の組み合わせを使用して個別にサイズ設定されます。
The parallelism setting controls how many pods of a particular runtime run concurrently. The completions setting controls how many pods must complete before the CronJob starts another Kubernetes Job for that runtime. How to Size Your Deployment: A Step-by-Step Guide Your goal is to configure enough parallelism to handle your job load without exceeding the throughput limit of your SJM instances.
Step 1: Estimate Your Required Workload Completions: This determines how many runtime pods should complete before a new Kubernetes Job is started.
First, determine your private location's average job execution duration and job rate. Use executionDuration as it most accurately reflects the pod's active runtime.
SELECT average ( executionDuration / 60 e3 ) AS 'D_avg_m'
WHERE typeLabel != 'Ping' AND location = 'YOUR_PRIVATE_LOCATION'
FACET typeLabel SINCE 1 hour ago
$$ Completions = \frac5D_avg,m $$
Where D _ a v g , m D\_avg,m D _ a vg , m is your average job execution duration in seconds .
Required Parallelism: This determines how many workers (pods) you need running concurrently to handle your 5-minute job load.
SELECT rate ( uniqueCount ( id ) , 5 minutes ) AS 'N_m'
WHERE typeLabel != 'Ping' AND location = 'YOUR_PRIVATE_LOCATION'
FACET typeLabel SINCE 1 hour ago
$$ P_req = \fracN_mCompletions $$
Where N _ m N\_m N _ m is your number of jobs per 5 minutes . This P _ r e q P\_req P _ re q value is your target total parallelism .
Step 2: Check Against the Single-SJM Throughput Limit Max Parallelism: This determines how many workers (pods) your SJM can effectively utilize.
$$ P_max \approx 15 \cdot D_avg,m $$
This P _ m a x P\_max P _ ma x value is your system limit for one SJM Helm deployment .
ヒント The above queries are based on current results. If your private location does not have any results or the job manager is not performing at its best, query results may not be accurate. In that case, start with the examples in the table below and adjust until your queue is stable.
ヒント A key consideration is that a single SJM instance has a maximum throughput of approximately 15 heavyweight jobs per minute . You can calculate the maximum effective parallelism (P _ m a x P\_max P _ ma x ) a single SJM can support before hitting this ceiling.
Compare your required parallelism (P _ r e q P\_req P _ re q ) from Step 1 to the maximum parallelism (P _ m a x P\_max P _ ma x ) from Step 2.
Scenario A: P _ r e q ≤ P _ m a x P\_req \le P\_max P _ re q ≤ P _ ma x
Scenario B: P\_req > P\_max
Step 4: Monitor Your Queue After applying your changes, you must verify that your job queue is stable and not growing. A consistently growing queue means your location is still under-provisioned.
Run this query to check the queue's growth rate:
SELECT derivative ( jobManagerHeavyweightJobs , 1 minute ) AS 'Heavyweight Queue Growth Rate (per min)'
FROM SyntheticsPrivateLocationStatus
WHERE name = 'YOUR_PRIVATE_LOCATION'
SINCE 1 hour ago TIMESERIES
If the "Queue Growth Rate" is consistently positive, you need to install more SJM Helm deployments (Scenario B) or re-check your parallelism settings (Scenario A).
Configuration Examples and Tuning The parallelism setting directly affects how many synthetics jobs per minute can be run. Too small a value and the queue may grow. Too large a value and nodes may become resource constrained.
例
説明
parallelism=1 completions=1
ランタイムは 1 分あたり 1 つの外形監視ジョブを実行します。 1 つのジョブが完了すると、 CronJob設定は次の瞬間に新しいジョブを開始します。 Throughput will be extremely limited with this configuration.
parallelism=1 completions=6
The runtime will execute 1 synthetics job at a time. After the job completes, a new job will start immediately. After 6 jobs complete, the CronJob configuration will start a new Kubernetes Job. Throughput will be limited. A single long-running synthetics job will block the processing of any other synthetics jobs of this type.
parallelism=3 completions=24
The runtime will execute 3 synthetics jobs at once. After any of these jobs complete, a new job will start immediately. After 24 jobs complete, the CronJob configuration will start a new Kubernetes Job. Throughput is much better with this or similar configurations.
If your parallelism setting is working well (keeping the queue at zero), setting a higher completions value (e.g., 6-10x parallelism) can improve efficiency by:
Accommodating variability in job durations. Reducing the number of completion cycles to minimize the "nearing the end of completions" inefficiency where the next batch can't start until the final job from the current batch completes. 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外形監視ジョブ マネージャー ファイルに加えた変更については責任を負いません。
Scaling out with multiple SJM deployments To scale beyond the ~15 jobs/minute throughput of a single SJM, you must install multiple, separate SJM Helm releases .
重要 Do not use replicaCount to scale the job manager pod. You cannot scale by increasing the replicaCount for a single Helm release. The SJM architecture requires a 1:1 relationship between a runtime pod and its parent SJM pod. If runtime pods send results back to the wrong SJM replica (e.g., through a Kubernetes service), those results will be lost.
The correct strategy is to deploy multiple SJM instances, each as its own Helm release. Each SJM will compete for jobs from the same private location, providing load balancing, failover protection, and an increased total job throughput.
Simplified Scaling Strategy Assuming P\_req > P\_max and you need to scale out, you can simplify maintenance by treating each SJM deployment as a fixed-capacity unit.
Set Max Parallelism: For each SJM, set parallelism to the same P _ m a x P\_max P _ ma x value. This maximizes the potential throughput of each SJM.
Set Completions: For each SJM, set completions to a fixed value as well. The P _ r e q P\_req P _ re q formula from Step 1 can be modified to estimate completions by substituting in the P _ m a x P\_max P _ ma x value:
$$ Completions = \fracN_mP_max $$
Where N _ m N\_m N _ m is your number of jobs per 5 minutes . Adjust as needed after deploying to target a 5 minute Kubernetes job age per runtime, i.e., node-browser-runtime and node-api-runtime.
Install Releases: Install as many separate Helm releases as you need to handle your total P _ r e q P\_req P _ re q . For example, if your total P _ r e q P\_req P _ re q is 60 and you've fixed each SJM's parallelism at 20 (P _ m a x P\_max P _ ma x from Step 2 ), you would need three separate Helm deployments to meet the required job demand.
Monitor and Add: Monitor your job queue (see Step 4 ). If it starts to grow, simply install another Helm release (e.g., sjm-delta) using the same fixed configuration.
By fixing parallelism and completions to static values based on P _ m a x P\_max P _ ma x , increasing or decreasing capacity becomes a simpler process of adding or removing Helm releases . This helps to avoid wasting cluster resources on a parallelism value that is higher than the SJM can effectively utilize.
Installation Example When installing multiple SJM releases, you must provide a unique name for each release . All instances must be configured with the same private location key .
Setting the fullnameOverride is highly recommended to create shorter, more manageable resource names. For example, to install two SJMs named sjm-alpha and sjm-beta into the newrelic namespace (both using the same values.yaml with your fixed parallelism and completions):
$ helm upgrade --install sjm-alpha newrelic/synthetics-job-manager \
> --set fullnameOverride = sjm-alpha \
> --set ping-runtime.fullnameOverride = sjm-alpha-ping \
> --set node-api-runtime.fullnameOverride = sjm-alpha-api \
> --set node-browser-runtime.fullnameOverride = sjm-alpha-browser
$ helm upgrade --install sjm-beta newrelic/synthetics-job-manager \
> --set fullnameOverride = sjm-beta
> --set ping-runtime.fullnameOverride = sjm-beta-ping \
> --set node-api-runtime.fullnameOverride = sjm-beta-api \
> --set node-browser-runtime.fullnameOverride = sjm-beta-browser
You can continue this pattern (sjm-charlie, sjm-delta, etc.) for as many SJMs as needed to keep the job queue from growing.