Te ofrecemos esta traducción automática para facilitar la lectura.
En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.
Las variables ambientales le permiten ajustar la configuración del administrador de trabajos de Sintético para satisfacer sus necesidades ambientales y funcionales específicas.
Las variables se proporcionan al inicio utilizando el argumento -e, --env .
La siguiente tabla muestra todas las variables de entorno que soporta Sintético job manager. PRIVATE_LOCATION_KEY es obligatorio y todas las demás variables son opcionales.
Nombre
Descripción
PRIVATE_LOCATION_KEY
Required. Clave de ubicación privada, como se encuentra en la lista de entidades de Ubicación Privada.
DOCKER_API_VERSION
Formato: "vX.Y" versión de API que se utilizará con el servicio Docker determinado.
Por defecto: v1.35.
DOCKER_HOST
Apunta al administrador de trabajos de Sintético a un DOCKER_HOST determinado. Si está ausente, el valor predeterminado es /var/run/docker.sock.
HORDE_API_ENDPOINT
Para cuentas con sede en EE. UU., el extremo es: https://synthetics-horde.nr-data.net.
Para cuentas basadas en la UE , el extremo es: https://synthetics-horde.eu01.nr-data.net/
Asegúrese de que su administrador de trabajo de Sintético pueda conectarse al extremo apropiado para atender su monitor.
DOCKER_REGISTRY
El dominio del Registro Docker donde se alojan las imágenes en tiempo de ejecución. Utilice esto para anular docker.io como valor predeterminado.
DOCKER_REPOSITORY
El repositorio u organización Docker donde se alojan las imágenes en tiempo de ejecución. Emplee esto para anular newrelic como valor predeterminado.
HORDE_API_PROXY_HOST
Host de servidor proxy utilizado para la comunicación de la Horda. Formato: "localhost".
HORDE_API_PROXY_PORT
Puerto del servidor proxy utilizado para la comunicación de la Horda. Formato: 8888.
HORDE_API_PROXY_USERNAME
Nombre de usuario del servidor proxy utilizado para la comunicación de la Horda. Formato: "username".
HORDE_API_PROXY_PW
Contraseña del servidor proxy utilizada para la comunicación de la Horda. Formato: "password".
HORDE_API_PROXY_ACCEPT_SELF_SIGNED_CERT
¿Aceptar certificados de proxy autofirmados para la conexión del servidor proxy utilizado para la comunicación de la Horda? Valores aceptables: true
CHECK_TIMEOUT
La cantidad máxima de segundos que se permite que se ejecuten las comprobaciones de su monitor. Este valor debe ser un número entero entre 0 segundos (excluido) y 900 segundos (incluido) (por ejemplo, de 1 segundo a 15 minutos).
Predeterminado: 180 segundos
LOG_LEVEL
Por defecto: INFO.
Opciones adicionales: WARN, ERROR, DEBUG
HEAVYWEIGHT_WORKERS
El número de trabajos pesados simultáneos (browser/ browser con secuencias de comandos y API con secuencias de comandos) que se pueden ejecutar al mismo tiempo.
Valor predeterminado: CPU disponibles - 1.
DESIRED_RUNTIMES
Una matriz que se puede utilizar para ejecutar imágenes en tiempo de ejecución específicas. Formato: ['newrelic/Sintético-ping-runtime:latest','newrelic/Sintético-node-API-runtime:latest','newrelic/Sintético-node-browser-runtime:latest']
Valor predeterminado: todos los tiempos de ejecución más recientes.
VSE_PASSPHRASE
Si se establece, habilita verified script execution y utiliza este valor como passphrase.
USER_DEFINED_VARIABLES
Un conjunto alojado localmente de pares de valores principales definidos por el usuario.
ENABLE_WASM
Si se configura, habilita webassembly para el tiempo de ejecución del navegador de nodos. Para emplear webassembly, la versión mínima de su administrador de trabajos Sintéticos debe ser release-367 o superior y la versión de ejecución del navegador de nodo debe ser 2.3.21 o superior.
Las variables se proporcionan al inicio utilizando el argumento -e, --env .
La siguiente tabla muestra todas las variables de entorno que admite el administrador de trabajos de Sintéticos. Se requiere PRIVATE_LOCATION_KEY y todas las demás variables son opcionales. Para ejecutar el administrador de trabajos Sintéticos en un entorno Podman, la versión mínima debe ser release-418 o superior.
Nombre
Descripción
PRIVATE_LOCATION_KEY
Required. Clave de ubicación privada, como se encuentra en la lista de entidades de Ubicación Privada.
HORDE_API_ENDPOINT
Para cuentas con sede en EE. UU., el extremo es: https://synthetics-horde.nr-data.net.
Para cuentas basadas en la UE , el extremo es: https://synthetics-horde.eu01.nr-data.net/
Asegúrese de que su administrador de trabajo de Sintético pueda conectarse al extremo apropiado para atender su monitor.
PODMAN_API_SERVICE_HOST
La entrada de host agregada al pod creado donde se ejecutará el SJM. Emplee esto para anular podman.service como valor predeterminado.
PODMAN_API_SERVICE_PORT
El puerto en el que se ejecuta el servicio API RESTful de Podman LibPod en la instancia. Emplee esto para anular 8000 como valor predeterminado.
PODMAN_API_VERSION
La versión específica de la API RESTful de Podman LibPod que se está empleando. Emplee esto para anular v5.0.0 como valor predeterminado.
PODMAN_POD_NAME
El nombre del pod en el que se ejecuta el contenedor SJM. Emplee esto para anular SYNTHETICS como valor predeterminado.
DOCKER_REGISTRY
El dominio del Registro Docker donde se alojan las imágenes en tiempo de ejecución. Utilice esto para anular docker.io como valor predeterminado.
DOCKER_REPOSITORY
El repositorio u organización Docker donde se alojan las imágenes en tiempo de ejecución. Emplee esto para anular newrelic como valor predeterminado.
HORDE_API_PROXY_HOST
Host de servidor proxy utilizado para la comunicación de la Horda. Formato: "localhost".
HORDE_API_PROXY_PORT
Puerto del servidor proxy utilizado para la comunicación de la Horda. Formato: 8888.
HORDE_API_PROXY_USERNAME
Nombre de usuario del servidor proxy utilizado para la comunicación de la Horda. Formato: "username".
HORDE_API_PROXY_PW
Contraseña del servidor proxy utilizada para la comunicación de la Horda. Formato: "password".
HORDE_API_PROXY_ACCEPT_SELF_SIGNED_CERT
¿Aceptar certificados de proxy autofirmados para la conexión del servidor proxy utilizado para la comunicación de la Horda? Valores aceptables: true
CHECK_TIMEOUT
La cantidad máxima de segundos que se permite que se ejecuten las comprobaciones de su monitor. Este valor debe ser un número entero entre 0 segundos (excluido) y 900 segundos (incluido) (por ejemplo, de 1 segundo a 15 minutos).
Predeterminado: 180 segundos
LOG_LEVEL
Por defecto: INFO.
Opciones adicionales: WARN, ERROR, DEBUG
HEAVYWEIGHT_WORKERS
El número de trabajos pesados simultáneos (browser/ browser con secuencias de comandos y API con secuencias de comandos) que se pueden ejecutar al mismo tiempo.
Valor predeterminado: CPU disponibles - 1.
DESIRED_RUNTIMES
Una matriz que se puede utilizar para ejecutar imágenes en tiempo de ejecución específicas. Formato: ['newrelic/Sintético-ping-runtime:latest','newrelic/Sintético-node-API-runtime:latest','newrelic/Sintético-node-browser-runtime:latest']
Valor predeterminado: todos los tiempos de ejecución más recientes.
VSE_PASSPHRASE
Si se establece, habilita verified script execution y utiliza este valor como passphrase.
USER_DEFINED_VARIABLES
Un conjunto alojado localmente de pares de valores principales definidos por el usuario.
ENABLE_WASM
Si se configura, habilita webassembly para el tiempo de ejecución del navegador de nodos. Para emplear webassembly, la versión mínima de su administrador de trabajos Sintéticos debe ser release-367 o superior y la versión de ejecución del navegador de nodo debe ser 2.3.21 o superior.
Las variables se proporcionan al inicio utilizando el argumento --set .
La siguiente lista muestra todas las variables de entorno que admite Sintético job manager. synthetics.privateLocationKey es obligatorio y todas las demás variables son opcionales.
Required if synthetics.privateLocationKeySecretName is not set. ubicación privada clave de la ubicación privada, tal como se encuentra en la página web de la ubicación privada.
synthetics.privateLocationKeySecretName
Required if synthetics.privateLocationKey is not set. Nombre del secreto de Kubernetes que contiene la clave privateLocationKey, que contiene la clave de autenticación asociada a tu ubicación privada de Sintético.
imagePullSecrets
El nombre del objeto secreto utilizado para extraer una imagen de un registro de contenedor específico.
fullnameOverride
Anulación del nombre utilizado para su implementación, reemplazando el predeterminado.
appVersionOverride
Versión de lanzamiento de Sintético-job-manager para usar en lugar de la versión especificada en chart.yml.
synthetics.logLevel
Por defecto: INFO.
Opciones adicionales: WARN, ERROR
synthetics.hordeApiEndpoint
Para cuentas con sede en EE. UU., el extremo es: https://synthetics-horde.nr-data.net.
Para cuentas basadas en la UE , el extremo es: https://synthetics-horde.eu01.nr-data.net/
Asegúrese de que su administrador de trabajo de Sintético pueda conectarse al extremo apropiado para atender su monitor.
synthetics.minionDockerRunnerRegistryEndpoint
El registro y la organización Docker donde se aloja la imagen minion Runner. Utilice esto para anular quay.io/newrelic como valor predeterminado (por ejemplo, docker.io/newrelic).
synthetics.vsePassphrase
Si se establece, habilita verified script execution y utiliza este valor como passphrase.
synthetics.vsePassphraseSecretName
Si se establece, habilita la ejecución de script verificada y utiliza este valor para recuperar la frase de contraseña de un secreto de Kubernetes con una clave llamada vsePassphrase.
synthetics.enableWasm
Si se configura, habilita webassembly para el tiempo de ejecución del navegador de nodos. Para emplear webassembly, la versión mínima de su administrador de trabajos Sintéticos debe ser release-367 o superior y la versión de ejecución del navegador de nodo debe ser 2.3.21 o superior.
synthetics.apiProxyHost
Servidor proxy utilizado para la comunicación de la Horda. Formato: "host".
synthetics.apiProxyPort
Puerto del servidor proxy utilizado para la comunicación de la Horda. Formato: port.
synthetics.hordeApiProxySelfSignedCert
Acepte certificados autofirmados cuando utilice un servidor proxy para la comunicación de la Horda. Valores aceptables: true.
synthetics.hordeApiProxyUsername
Nombre de usuario del servidor proxy para la comunicación de la Horda. Formato: "username"
synthetics.hordeApiProxyPw
Contraseña del servidor proxy para la comunicación de la Horda. Formato: "password".
synthetics.userDefinedVariables.userDefinedJson
Una cadena JSON de variables definidas por el usuario. El usuario puede acceder a estas variables en su script. Formato: '{"key":"value","key2":"value2"}'.
synthetics.userDefinedVariables.userDefinedFile
Una ruta local para el usuario a un archivo JSON que contiene variables definidas por el usuario. Esto se pasa a través de --set-file y no se puede configurar en el archivo de valores.
synthetics.userDefinedVariables.userDefinedPath
Una ruta en el PersistentVolume proporcionado por el usuario al archivo user_defined_variables.json. El usuario debe proporcionar un PersistentVolume o PersistentVolumeClaim si esta variable está completa.
synthetics.persistence.existingClaimName
Si monta un volumen, el usuario puede proporcionar un nombre para un PersistentVolumeClaim que ya existe en el clúster. Presume la existencia de un PersistentVolume correspondiente.
synthetics.persistence.existingVolumeName
Si monta un volumen y no proporciona un PersistentVolumeClaim, el usuario debe, como mínimo, proporcionar un nombre de PersistentVolume. Helm generará un PersistentVolumeClaim.
synthetics.persistence.storageClass
El nombre de StorageClass para el PersistentVolumeClaim generado. Esto debe coincidir con StorageClassName en el PV existente. Si no son proveedores, Kubernetes utilizará la clase de almacenamiento predeterminada, si está presente.
synthetics.persistence.size
El tamaño del volumen para el PersistentVolumeClaim generado. Formato: 10Gi. 2Gi predeterminado.
global.checkTimeout
La cantidad máxima de segundos que se permite que se ejecuten las comprobaciones de su monitor. Este valor debe ser un número entero entre 0 segundos (excluido) y 900 segundos (incluido) (por ejemplo, de 1 segundo a 15 minutos).
Predeterminado: 180 segundos
image.repository
El contenedor para tirar.
Por defecto: docker.io/newrelic/synthetics-job-runner
image.pullPolicy
La política de atracción.
Por defecto: IfNotPresent
podSecurityContext
Establezca un contexto de seguridad personalizado para el pod Sintético-job-manager.
ping-runtime.enabled
Si se debe implementar o no el tiempo de ejecución del ping persistente. Esto se puede desactivar si no utiliza el monitor de ping.
Por defecto: true
ping-runtime.replicaCount
El número de contenedores de tiempo de ejecución de ping a desplegar. Aumente el replicaCount para escalar el despliegue según sus necesidades de monitoreo de ping.
Por defecto: 1
ping-runtime.image.repository
La imagen del contenedor que se extraerá para el tiempo de ejecución de ping.
Por defecto: docker.io/newrelic/synthetics-ping-runtime
ping-runtime.image.pullPolicy
La política de extracción para el contenedor de tiempo de ejecución de ping.
Por defecto: IfNotPresent
node-api-runtime.enabled
Si se debe implementar o no el tiempo de ejecución de la API de Node.js. Esto se puede desactivar si no utiliza el monitor API con script.
Por defecto: true
node-api-runtime.parallelism
La cantidad de tiempo de ejecución de API de Node.js CronJobs para implementar. La cantidad máxima de trabajos simultáneos de la API de Node.js que se ejecutarán en cualquier momento. Detalles adicionales.
Por defecto: 1
node-api-runtime.completions
La cantidad de tiempos de ejecución de API de Node.js CronJobs que se deben completar por minuto. Aumente esta configuración junto con el paralelismo para mejorar el rendimiento. Esto debe aumentarse cada vez que se aumenta el paralelismo y las terminaciones siempre deben ser al menos mayores o iguales que el paralelismo. . Aumente esta configuración si observa períodos de tiempo sin trabajos de ejecución de API en ejecución. Detalles adicionales.
Por defecto: 6
node-api-runtime.image.repository
La imagen del contenedor que se extraerá para el tiempo de ejecución de la API de Node.js.
Por defecto: docker.io/newrelic/synthetics-node-api-runtime
node-api-runtime.image.pullPolicy
La política de extracción para el contenedor de tiempo de ejecución de la API de Node.js.
Por defecto: IfNotPresent
node-browser-runtime.enabled
Si se debe desplegar o no el tiempo de ejecución browser Node.js. Esto se puede desactivar si no utiliza el script simple o monitor del browser.
Por defecto: true
node-browser-runtime.parallelism
El número de tiempo de ejecución browser Chrome CronJobs para desplegar. La cantidad máxima de trabajos simultáneos browser Chrome que se ejecutarán en cualquier momento. Detalles adicionales.
Por defecto: 1
node-browser-runtime.completions
El número de tiempos de ejecución browser Chrome CronJobs que se deben completar por minuto. Aumente esta configuración junto con el paralelismo para mejorar el rendimiento. Esto debe aumentarse cada vez que se aumenta el paralelismo y las terminaciones siempre deben ser al menos mayores o iguales que el paralelismo. Aumente esta configuración si observa períodos de tiempo sin que se ejecuten trabajos de tiempo de ejecución browser . Detalles adicionales.
Por defecto: 6
node-browser-runtime.image.repository
La imagen del contenedor que se extraerá para el tiempo de ejecución browser Node.js.
Por defecto: docker.io/newrelic/synthetics-node-browser-runtime
node-browser-runtime.image.pullPolicy
La política de extracción para el contenedor de tiempo de ejecución browser Node.js.
Por defecto: IfNotPresent
Las variables se proporcionan al inicio utilizando el argumento --set .
La siguiente lista muestra todas las variables de entorno que admite Sintético job manager. synthetics.privateLocationKey es obligatorio y todas las demás variables son opcionales.
El nombre del objeto secreto utilizado para extraer una imagen de un registro de contenedor específico.
fullnameOverride
Anulación del nombre utilizado para su implementación, reemplazando el predeterminado.
appVersionOverride
Versión de lanzamiento de Sintético-job-manager para usar en lugar de la versión especificada en chart.yml.
synthetics.logLevel
Por defecto: INFO.
Opciones adicionales: WARN, ERROR
synthetics.hordeApiEndpoint
Para cuentas con sede en EE. UU., el extremo es: https://synthetics-horde.nr-data.net.
Para cuentas basadas en la UE , el extremo es: https://synthetics-horde.eu01.nr-data.net/
Asegúrese de que su administrador de trabajo de Sintético pueda conectarse al extremo apropiado para atender su monitor.
synthetics.vsePassphrase
Si se establece, habilita verified script execution y utiliza este valor como passphrase.
synthetics.vsePassphraseSecretName
Si se establece, habilita la ejecución de script verificada y utiliza este valor para recuperar la frase de contraseña de un secreto de Kubernetes con una clave llamada vsePassphrase.
synthetics.enableWasm
Si se configura, habilita webassembly para el tiempo de ejecución del navegador de nodos. Para emplear webassembly, la versión mínima de su administrador de trabajos Sintéticos debe ser release-367 o superior y la versión de ejecución del navegador de nodo debe ser 2.3.21 o superior.
synthetics.apiProxyHost
Servidor proxy utilizado para la comunicación de la Horda. Formato: "host".
synthetics.apiProxyPort
Puerto del servidor proxy utilizado para la comunicación de la Horda. Formato: port.
synthetics.hordeApiProxySelfSignedCert
Acepte certificados autofirmados cuando utilice un servidor proxy para la comunicación de la Horda. Valores aceptables: true.
synthetics.hordeApiProxyUsername
Nombre de usuario del servidor proxy para la comunicación de la Horda. Formato: "username"
synthetics.hordeApiProxyPw
Contraseña del servidor proxy para la comunicación de la Horda. Formato: "password".
synthetics.userDefinedVariables.userDefinedJson
Una cadena JSON de variables definidas por el usuario. El usuario puede acceder a estas variables en su script. Formato: '{"key":"value","key2":"value2"}'.
synthetics.userDefinedVariables.userDefinedFile
Una ruta local para el usuario a un archivo JSON que contiene variables definidas por el usuario. Esto se pasa a través de --set-file y no se puede configurar en el archivo de valores.
synthetics.userDefinedVariables.userDefinedPath
Una ruta en el PersistentVolume proporcionado por el usuario al archivo user_defined_variables.json . El usuario debe proporcionar PersistentVolume o PersistentVolumeClaim si esta variable está completa.
global.persistence.existingClaimName
Si se monta un volumen, el usuario puede proporcionar un nombre para un PersistentVolumeClaim que ya existe en el clúster. Supone la existencia de un PersistentVolume correspondiente.
global.persistence.existingVolumeName
Si se monta un volumen y no se proporciona un PersistentVolumeClaim, el usuario debe proporcionar como mínimo un nombre PersistentVolume . Helm generará un PersistentVolumeClaim.
global.persistence.storageClass
El nombre del StorageClass para el PersistentVolumeClaim generado. Esto debe coincidir con el StorageClassName en el PV existente. Si no hay proveedores, Kubernetes empleará la clase de almacenamiento predeterminada si está presente.
global.persistence.size
El tamaño del volumen para el PersistentVolumeClaim generado. Formato: 10Gi. Valor predeterminado 2Gi.
global.checkTimeout
La cantidad máxima de segundos que se permite que se ejecuten las comprobaciones de su monitor. Este valor debe ser un número entero entre 0 segundos (excluido) y 900 segundos (incluido) (por ejemplo, de 1 segundo a 15 minutos).
Predeterminado: 180 segundos
image.repository
El contenedor para tirar.
Por defecto: docker.io/newrelic/synthetics-job-runner
image.pullPolicy
La política de atracción.
Por defecto: IfNotPresent
podSecurityContext
Establezca un contexto de seguridad personalizado para el pod synthetics-job-manager .
ping-runtime.enabled
Si se debe implementar o no el tiempo de ejecución del ping persistente. Esto se puede desactivar si no utiliza el monitor de ping.
Por defecto: true
ping-runtime.replicaCount
El número de ping que el contenedor va a desplegar. Aumente replicaCount para escalar la implementación según sus necesidades de monitoreo de ping.
Por defecto: 1
ping-runtime.image.repository
La imagen del contenedor que se extraerá para el tiempo de ejecución de ping.
Por defecto: docker.io/newrelic/synthetics-ping-runtime
ping-runtime.image.pullPolicy
La política de extracción para el contenedor de tiempo de ejecución de ping.
Por defecto: IfNotPresent
node-api-runtime.enabled
Si se debe implementar o no el tiempo de ejecución de la API de Node.js. Esto se puede desactivar si no utiliza el monitor API con script.
Por defecto: true
node-api-runtime.parallelism
La cantidad de tiempo de ejecución de API de Node.js CronJobs para implementar. La cantidad máxima de trabajos simultáneos de la API de Node.js que se ejecutarán en cualquier momento. Detalles adicionales.
Por defecto: 1
node-api-runtime.completions
La cantidad de tiempos de ejecución de API de Node.js CronJobs que se deben completar por minuto. Aumente esta configuración junto con el paralelismo para mejorar el rendimiento. Esto debe aumentarse cada vez que se aumenta el paralelismo y las terminaciones siempre deben ser al menos mayores o iguales que el paralelismo. . Aumente esta configuración si observa períodos de tiempo sin trabajos de ejecución de API en ejecución. Detalles adicionales.
Por defecto: 6
node-api-runtime.image.repository
La imagen del contenedor que se extraerá para el tiempo de ejecución de la API de Node.js.
Por defecto: docker.io/newrelic/synthetics-node-api-runtime
node-api-runtime.image.pullPolicy
La política de extracción para el contenedor de tiempo de ejecución de la API de Node.js.
Por defecto: IfNotPresent
node-browser-runtime.enabled
Si se debe desplegar o no el tiempo de ejecución browser Node.js. Esto se puede desactivar si no utiliza el script simple o monitor del browser.
Por defecto: true
node-browser-runtime.parallelism
El número de tiempo de ejecución browser Chrome CronJobs para desplegar. La cantidad máxima de trabajos simultáneos browser Chrome que se ejecutarán en cualquier momento. Detalles adicionales.
Por defecto: 1
node-browser-runtime.completions
El número de tiempos de ejecución browser Chrome CronJobs que se deben completar por minuto. Aumente esta configuración junto con el paralelismo para mejorar el rendimiento. Esto debe aumentarse cada vez que se aumenta el paralelismo y las terminaciones siempre deben ser al menos mayores o iguales que el paralelismo. Aumente esta configuración si observa períodos de tiempo sin que se ejecuten trabajos de tiempo de ejecución browser . Detalles adicionales.
Por defecto: 6
node-browser-runtime.image.repository
La imagen del contenedor que se extraerá para el tiempo de ejecución browser Node.js.
Por defecto: docker.io/newrelic/synthetics-node-browser-runtime
node-browser-runtime.image.pullPolicy
La política de extracción para el contenedor de tiempo de ejecución browser Node.js.
Por defecto: IfNotPresent
Variables definidas por el usuario para monitor con script
Los administradores de trabajos de Private Sintético le permiten configurar variables de entorno para el monitor con script. Estas variables se administran localmente en SJM y se puede acceder a ellas a través de $env.USER_DEFINED_VARIABLES. Puede configurar variables definidas por el usuario de dos maneras. Puede montar un archivo JSON o puede proporcionar una variable de entorno al SJM en el lanzamiento. Si se proporcionan ambos, el SJM solo utilizará valores proporcionados por el entorno.
El usuario puede crear un archivo con formato JSON y montar el volumen donde se encuentra el archivo en una ruta de destino especificada en el contenedor SJM.
El archivo debe tener permisos de lectura y contener un mapa con formato JSON. Ejemplo de archivo de variables definidas por el usuario:
{
"KEY":"VALUE",
"user_name":"MINION",
"my_password":"PASSW0RD123",
"my_URL":"https://newrelic.com/",
"ETC":"ETC"
}
Coloque el archivo en el directorio de origen del host. El SJM espera que el nombre del archivo sea user_defined_variables.json
Ejemplo Docker:
El directorio objetivo esperado es: /var/lib/newrelic/synthetics/variables/
bash
$
docker run ... -v /variables:/var/lib/newrelic/synthetics/variables:rw ...
Ejemplo de Podman:
En el caso de SELinux, monte el volumen adicionalmente con :z o :Z. Para obtener más información, consulte la documentación de Podman. El directorio objetivo esperado es: /var/lib/newrelic/synthetics/variables/
bash
$
podman run ... -v /variables:/var/lib/newrelic/synthetics/variables:rw,z ...
Ejemplo de Kubernetes:
El usuario tiene dos opciones al proporcionar un archivo al pod SJM en Kubernetes. Que puede:
Pasar un archivo local.
Proporcione un PersistentVolume que incluya user_defined_variables.json.
Pasar en un archivo local
Esta opción crea un recurso ConfigMap Kubernetes y lo monta en el pod SJM.
Esta opción requiere que el usuario proporcione un PersistentVolume que incluya el archivo user_defined_variables.json o un PersistentVolumeClaim al mismo. Para obtener más detalles sobre la instalación del gráfico de Helm usando un PersistentVolume, siga las instrucciones en almacenamiento de datos permanente.
Una vez que el usuario preparó un PersistentVolume como se describe a continuación, inicie el SJM, configure la ruta donde se encuentra el archivo user_defined_variables.json y configure cualquier otra variable synthetics.persistence según sea necesario.
Las variables pueden pasar a su respectivo sistema contenedor a través de la variable de entorno.
Ejemplo Docker:
Utilice la bandera -e para configurar una variable de entorno denominada USER_DEFINED_VARIABLES y asígnele el valor de una cadena de mapa con formato JSON.
bash
$
docker run ... -eUSER_DEFINED_VARIABLES='{"key":"value","name":"sjm"}'...
Ejemplo de Podman:
Utilice la bandera -e para configurar una variable de entorno denominada USER_DEFINED_VARIABLES y asígnele el valor de una cadena de mapa con formato JSON.
bash
$
podman run ... -eUSER_DEFINED_VARIABLES='{"key":"value","name":"sjm"}'...
Ejemplo de Kubernetes:
Emplee la bandera --set-literal para pasar la cadena con formato JSON.
Acceder a variables de entorno definidas por el usuario desde un script
Para hacer referencia a una variable de entorno definida por el usuario configurada, emplee el $env.USER_DEFINED_VARIABLES reservado seguido del nombre de una variable dada con notación de punto (por ejemplo, $env.USER_DEFINED_VARIABLES.MY_VARIABLE).
Advertencia
Las variables de entorno definidas por el usuario no se desinfectan del log. Considere utilizar la característica de credenciales seguras para información confidencial.
Módulos de nodo personalizados
Se proporcionan módulos de nodo personalizados tanto en llamadas por minuto como en SJM. Le permiten crear un conjunto personalizado de módulos de nodo y usarlos en un monitor con script ( API con script y browser con script) para monitoreo sintético.
Configurar su directorio de módulos personalizados
Cree un directorio con un archivo package.json siguiendo las pautas oficiales de npm en la carpeta raíz. El SJM instalará cualquier dependencia enumerada en el paquete.json. campo dependencies . Estas dependencias estarán disponibles cuando se ejecute el monitor en el administrador de trabajos privado de Sintético. Vea un ejemplo de esto a continuación.
Ejemplo
En este ejemplo, se utiliza un directorio de módulo personalizado con la siguiente estructura:
/example-custom-modules-dir/
├── counter
│ ├── index.js
│ └── package.json
└── package.json ⇦ the only mandatory file
package.json define dependencies como un módulo local (por ejemplo, counter) y cualquier módulo alojado (por ejemplo, smallest versión 1.0.1):
Agregue su directorio de módulos personalizados al SJM para Docker, Podman o Kubernetes
Para docker, lanza SJM montando el directorio en /var/lib/newrelic/synthetics/modules. Por ejemplo:
bash
$
docker run ... -v /example-custom-modules-dir:/var/lib/newrelic/synthetics/modules:rw ...
Para podman, inicie SJM montando el directorio en /var/lib/newrelic/synthetics/modules. En el caso de SELinux, monte el volumen adicionalmente con :z o :Z. Para obtener más información, consulte la documentación de Podman. Por ejemplo:
bash
$
podman run ... -v /example-custom-modules-dir:/var/lib/newrelic/synthetics/modules:rw,z ...
Para Kubernetes, el directorio en /var/lib/newrelic/synthetics/modules debe existir en un PV antes de iniciar SJM con módulos personalizados habilitados.
Sugerencia
El modo de acceso a PV debe ser ReadWriteMany si necesita compartir almacenamiento entre varios pods.
Un método es crear un pod que monte el PV solo con el propósito de copiar el directorio de módulos personalizados al PV. El siguiente ejemplo emplea Amazon EFS con Amazon EKS:
Cree el namespace, el volumen persistente y la reclamación del volumen persistente
Cerciorar de que ya configuró su sistema de archivos EFS e instaló el controlador CSI de EFS en su clúster. También necesitará su ID de sistema de archivos EFS para los PV spec.csi.volumeHandle.
bash
$
kubectl apply -f - <<EOF
$
apiVersion: v1
$
kind: Namespace
$
metadata:
$
name: newrelic
$
$
---
$
kind: StorageClass
$
apiVersion: storage.k8s.io/v1
$
metadata:
$
name: efs-sc
$
provisioner: efs.csi.aws.com
$
$
---
$
apiVersion: v1
$
kind: PersistentVolume
$
metadata:
$
name: custom-modules-pvc
$
spec:
$
capacity:
$
storage: 5Gi
$
volumeMode: Filesystem
$
accessModes:
$
- ReadWriteMany
$
persistentVolumeReclaimPolicy: Retain
$
storageClassName: efs-sc
$
csi:
$
driver: efs.csi.aws.com
$
volumeHandle: <your-efs-filesystem-id>
$
$
---
$
apiVersion: v1
$
kind: PersistentVolumeClaim
$
metadata:
$
name: custom-modules-pvc
$
namespace: newrelic
$
spec:
$
accessModes:
$
- ReadWriteMany
$
storageClassName: efs-sc
$
resources:
$
requests:
$
storage: 5Gi
$
EOF
Cambie al namespace newrelic en su ~/.kube/config.
Compruebe que /var/lib/newrelic/synthetics/modules/custom-modules/package.json exista en el PV.
bash
$
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
lanzar el SJM con la característica de módulos personalizados habilitada
Establezca valores para persistence.existingClaimName y customNodeModules.customNodeModulesPath en la línea de comando o en un archivo YAML durante la instalación. El valor customNodeModules.customNodeModulesPath debe especificar la subruta en el volumen persistente donde existen sus archivos de módulos personalizados. Por ejemplo:
Para comprobar si los módulos se instalaron correctamente o si se produjo algún error, busque las siguientes líneas en los registros del contenedor o podsynthetics-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...
Ahora puede agregar "require('smallest');" al script del monitor que envía a esta ubicación privada.
Cambiar package.json
Además de los módulos locales y alojados, también puede utilizar módulos de Node.js. Para actualizar los módulos personalizados utilizados por su SJM, realice cambios en el archivo package.json y reinicie SJM. Durante el proceso de reinicio, el SJM reconocerá el cambio de configuración y realizará automáticamente operaciones de limpieza y reinstalación para garantizar que se apliquen los módulos actualizados.
Advertencia
Módulos locales: si bien su package.json puede incluir cualquier módulo local, estos módulos deben residir dentro del árbol debajo de su directorio de módulos personalizados. Si se almacena fuera del árbol, el proceso de inicialización fallará y verá un mensaje de error en el log docker después de iniciar SJM.
Almacenamiento permanente de datos
Es posible que el usuario desee emplear almacenamiento de datos permanente para proporcionar el archivo user_defined_variables.json o admitir módulos de nodo personalizados.
Docker
Para configurar el almacenamiento permanente de datos en Docker:
Cree un directorio en el host donde está iniciando Job Manager. Este es su directorio de origen.
Inicie el Administrador de trabajos, montando el directorio de origen en el directorio de destino /var/lib/newrelic/synthetics.
Ejemplo:
bash
$
docker run ... -v /sjm-volume:/var/lib/newrelic/synthetics:rw ...
Podman
Para configurar el almacenamiento de datos permanente en Podman:
Cree un directorio en el host donde está iniciando Job Manager. Este es su directorio de origen.
Inicie el Administrador de trabajos, montando el directorio de origen en el directorio de destino /var/lib/newrelic/synthetics.
Ejemplo:
bash
$
podman run ... -v /sjm-volume:/var/lib/newrelic/synthetics:rw,z ...
Kubernetes
Para configurar el almacenamiento permanente de datos en Kubernetes, el usuario tiene dos opciones:
Proporcione un PersistentVolumeClaim (PVC) existente para un PersistentVolume (PV) existente y establezca el valor de configuración synthetics.persistence.existingClaimName . Ejemplo:
Proporcione un nombre de PersistentVolume (PV) existente y establezca el valor de configuración synthetics.persistence.existingVolumeName . Helm generará una PVC para el usuario. El usuario también puede configurar opcionalmente los siguientes valores:
synthetics.persistence.storageClass:La clase de almacenamiento del PV existente. Si no se proporciona, Kubernetes empleará la clase de almacenamiento predeterminada.
synthetics.persistence.size:El tamaño de la reclamación. Si no se configura, el valor predeterminado actualmente es 2Gi.
Consideraciones de dimensionamiento para Docker y Podman
Para garantizar que su ubicación privada funcione de manera eficiente, debe aprovisionar suficientes recursos de CPU en su host para manejar su carga de trabajo de monitoreo. Muchos factores influyen en el tamaño, pero puedes estimar rápidamente tus necesidades. Necesitará 1 núcleo de CPU para cada monitor pesado (es decir, navegador simple, navegador con script o monitor de API con script). A continuación se muestran dos fórmulas que lo ayudarán a calcular la cantidad de núcleos que necesita, ya sea que esté diagnosticando una configuración actual o planeando una futura.
Fórmula 1: Diagnóstico de una ubicación existente
Si su ubicación privada actual tiene dificultades para mantener el ritmo y sospecha que hay cola de trabajos, emplee esta fórmula para descubrir cuántos núcleos necesita realmente. Se basa en el rendimiento observable de su sistema.
$$ C_req = (R_proc + R_growth) \cdot D_avg,m $$
C_req = Núcleos de CPU requeridos.
R_proc = La tasa de trabajos pesados que se procesan por minuto.
R_growth = La velocidad a la que su cola jobManagerHeavyweightJobscrece por minuto.
D_avg,m = La duración promedio de trabajos pesados en minutos.
Esta fórmula calcula la tasa real de llegada de trabajos sumando los trabajos que su sistema está procesando a los trabajos que se están acumulando en la cola. Multiplicar esta carga total por la duración media del trabajo le indicará exactamente cuántos núcleos necesita para completar todo el trabajo sin colas.
Fórmula 2: Pronosticar una ubicación nueva o futura
Si está configurando una nueva ubicación privada o planea agregar más monitores, use esta fórmula para pronosticar sus necesidades con anticipación.
N_mon = La cantidad total de monitores pesados que planea ejecutar.
D_avg,m = La duración promedio de un trabajo pesado en minutos.
P_avg,m = El periodo promedio para monitores pesados en minutos (por ejemplo, un monitor que se ejecuta cada 5 minutos tiene P_avg,m=5).
Esto calcula tu carga de trabajo prevista a partir de principios básicos: cuántos monitores tienes, con qué frecuencia se ejecutan y cuánto tiempo tardan.
Factores de tamaño importantes
Al emplear estas fórmulas, recuerde tener en cuenta estos factores:
Duración del trabajo (D_avg,m): su promedio debe incluir trabajos que expiran (generalmente ~3 minutos), ya que estos mantienen un núcleo durante toda su duración.
Errores de trabajo y reintentos: cuando un monitor falla, se vuelve a intentar automáticamente. Estos reintentos son trabajos adicionales que se suman a la carga total. Un monitor que falla y vuelve a intentarlo constantemente multiplica efectivamente su periodo, lo que afecta significativamente el rendimiento.
Escalamiento horizontal: además de agregar más núcleos a un host (escalamiento vertical), puede implementar administradores de trabajos sintéticos adicionales con la misma clave de ubicación privada para equilibrar la carga de trabajos en múltiples entornos (escalamiento horizontal).
Es importante tener en cuenta que un solo Sintéticos Job Manager (SJM) tiene un límite de rendimiento de aproximadamente 15 trabajos pesados por minuto. Esto se debe a una estrategia de subprocesamiento interno que favorece la competencia eficiente de trabajos entre múltiples SJM sobre la cantidad bruta de trabajos procesados por SJM. Si sus cálculos indican la necesidad de un mayor rendimiento, deberá ampliar la escala implementando SJM adicionales. Puede verificar si su cola de trabajos está creciendo para determinar si se necesitan más SJM.
Agregar más SJM con la misma clave de ubicación privada ofrece varios beneficios:
Equilibrio de carga: los trabajos para la ubicación privada se distribuyen entre todos los SJM disponibles.
Protección contra conmutación por error: si una instancia de SJM deja de funcionar, las demás pueden continuar procesando trabajos.
Mayor rendimiento total: el rendimiento total de su ubicación privada se convierte en la suma del rendimiento de cada SJM (por ejemplo, dos SJM proporcionan hasta ~30 trabajos/minuto).
Consulta de NRQL para diagnóstico
Puede ejecutar estas consultas en el generador de consultas para obtener los insumos para la fórmula de diagnóstico. Cerciorar de establecer el rango de tiempo en un periodo lo suficientemente largo para obtener un promedio estable.
1. Calcular la tasa de trabajos procesados por minuto (R_proc): Esta consulta cuenta el número de trabajos que no son de ping (pesados) completados durante el último día y muestra la tasa promedio por minuto.
FROM SyntheticCheck
SELECT rate(uniqueCount(id),1minute)AS'job rate per minute'
WHERE location ='YOUR_PRIVATE_LOCATION'AND typeLabel !='Ping'
SINCE 1day ago
2. Encuentra la tasa de crecimiento de la cola por minuto (R_growth): Esta consulta calcula el crecimiento promedio por minuto de la cola jobManagerHeavyweightJobs en un gráfico de seriales temporales. Una línea por encima de cero indica que la cola está creciendo, mientras que una línea por debajo de cero significa que está disminuyendo.
FROM SyntheticsPrivateLocationStatus
SELECT derivative(jobManagerHeavyweightJobs,1minute)AS'queue growth rate per minute'
WHERE name ='YOUR_PRIVATE_LOCATION'
TIMESERIES SINCE 1day ago
Sugerencia
Cerciorar de seleccionar la cuenta donde existe la ubicación privada. Es mejor ver esta consulta como un serial de tiempo porque la función derivada puede variar mucho. El objetivo es obtener una estimación de la tasa de crecimiento de la cola por minuto. Play con diferentes rangos de tiempo para ver qué funciona mejor.
3. Encontrar el número total de monitores pesados (N_mon): Esta consulta encuentra el recuento único de monitores pesados.
FROM SyntheticCheck
SELECT uniqueCount(monitorId)AS'monitor count'
WHERE location ='YOUR_PRIVATE_LOCATION'AND typeLabel !='Ping'
SINCE 1day ago
4. Calcular la duración promedio del trabajo en minutos (D_avg,m): Esta consulta encuentra la duración promedio de ejecución de los trabajos no ping completados y convierte el resultado de milisegundos a minutos. executionDuration representa el tiempo que tardó el trabajo en ejecutar en el host.
WHERE location ='YOUR_PRIVATE_LOCATION'AND typeLabel !='Ping'
SINCE 1day ago
5. Encuentre el periodo promedio del monitor de peso pesado (P_avg,m): si la cola jobManagerHeavyweightJobs de la ubicación privada está creciendo, no es preciso calcular el periodo promedio del monitor a partir de los resultados existentes. Esto deberá estimar a partir de la lista de monitores en la página Monitores Sintéticos. Cerciórate de seleccionar la cuenta New Relic correcta y es posible que debas filtrar por privateLocation.
Sugerencia
Los monitores sintéticos pueden existir en múltiples subcuentas. Si tienes más subcuentas de las que se pueden seleccionar en el generador de consultas, elige las cuentas con más monitores.
Nota sobre los monitores de ping y la cola pingJobs
Los monitores de ping son diferentes. Son trabajos ligeros que no consumen un núcleo de CPU completo cada uno. En su lugar, emplean una cola separada (pingJobs) y se ejecutan en un grupo de subprocesos de trabajo.
Si bien consumen menos recursos, un gran volumen de trabajos de ping, especialmente los fallidos, aún pueden causar problemas de rendimiento. Tenga en cuenta estos puntos:
Modelo de recursos: los trabajos de ping emplean subprocesos de trabajo, no núcleos de CPU dedicados. En estos casos no se aplica el cálculo de núcleo por puesto de trabajo.
Tiempo de espera y reintento: un trabajo de ping fallido puede ocupar un hilo de trabajo durante hasta 60 segundos. Primero intenta una solicitud HTTP HEAD (tiempo de espera de 30 segundos). Si eso falla, vuelve a intentarlo inmediatamente con una solicitud HTTP GET (otro tiempo de espera de 30 segundos).
Escalamiento: aunque la fórmula de dimensionamiento es diferente, se aplican los mismos principios. Para manejar un gran volumen de trabajos de ping y evitar que la cola pingJobs crezca, es posible que necesite escalar verticalmente u horizontalmente. Escalar significa aumentar los recursos de CPU y memoria por host o namespace. Escalar horizontalmente significa agregar más instancias del tiempo de ejecución de ping. Esto se puede hacer implementando más administradores de trabajos en más hosts, en más espacios de nombres o incluso dentro del mismo namespace. Alternativamente, el ping-runtime en Kubernetes le permite establecer una mayor cantidad de réplicas por implementación.
Consideraciones de dimensionamiento para Kubernetes y OpenShift
Cada entorno de ejecución empleado por el administrador de trabajos Kubernetes y OpenShift Sintético se puede dimensionar de forma independiente configurando valores en el gráfico de Helm. El node-api-runtime y el node-browser-runtime se dimensionan de forma independiente empleando una combinación de las configuraciones parallelism y completions.
La configuración parallelism controla cuántos pods de un entorno de ejecución particular se ejecutan simultáneamente.
La configuración completions controla cuántos pods deben completar antes de que CronJob inicie otro trabajo Kubernetes para ese tiempo de ejecución.
Cómo dimensionar su despliegue: Una guía paso a paso
Su objetivo es configurar el paralelismo suficiente para manejar su carga de trabajo sin exceder el límite de rendimiento de su instancia SJM.
Paso 1: Estima tu carga de trabajo requerida
Finalizaciones: Esto determina cuántos pods de tiempo de ejecución deben completar antes de que se inicie un nuevo trabajo Kubernetes.
Primero, determine la duración promedio de ejecución de trabajos y la tasa de trabajos en su ubicación privada. Emplee executionDuration ya que refleja con mayor precisión el tiempo de ejecución activo del pod.
-- Get average job execution duration (in seconds)
WHERE typeLabel !='Ping'AND location ='YOUR_PRIVATE_LOCATION'
FACET typeLabel SINCE 1hour ago
$$ Finalizaciones = \frac5D_avg,m $$
Donde D_avg,m es la duración promedio de ejecución del trabajo en segundos.
Paralelismo requerido: Esto determina cuántos trabajadores (pods) necesita ejecutar simultáneamente para manejar su carga de trabajo de 5 minutos.
-- Get jobs per 5 minutes
FROM SyntheticCheck
SELECT rate(uniqueCount(id),5 minutes)AS'N_m'
WHERE typeLabel !='Ping'AND location ='YOUR_PRIVATE_LOCATION'
FACET typeLabel SINCE 1hour ago
$$ P_req = \fracN_mCompletaciones $$
Donde N_m es su número de trabajos por 5 minutos. Este valor P_req es su paralelismo total objetivo.
Paso 2: Comprobar el límite de rendimiento de un solo SJM
Paralelismo máximo: Esto determina cuántos trabajadores (pods) puede emplear eficazmente su SJM.
$$ P_max ≈ 15 ⋅ D_avg,m $$
Este valor P_max es el límite de su sistema para una implementación de SJM Helm .
Sugerencia
Las consultas anteriores se basan en los resultados actuales. Si su ubicación privada no tiene ningún resultado o el administrador de trabajos no está funcionando de la mejor manera, es posible que los resultados de la consulta no sean precisos. En ese caso, comience con los ejemplos de la tabla siguiente y ajústelos hasta que su cola sea estable.
Sugerencia
Una consideración clave es que una sola instancia de SJM tiene un rendimiento máximo de aproximadamente 15 trabajos pesados por minuto. Puedes calcular el paralelismo efectivo máximo (P_max) que un solo SJM puede soportar antes de alcanzar este límite.
Paso 3: Comparar, configurar y escalar
Compara el paralelismo requerido (P_req) del Paso 1 con el paralelismo máximo (P_max) del Paso 2.
Scenario A:P_req≤P_max
Diagnóstico: Su carga de trabajo se encuentra dentro del límite de una sola instancia de SJM.
Acción:
Deberás desplegar una versión de SJM Helm.
En tu gráfico Helm values.yaml, establece parallelism en tu P_req calculado.
Establece completions en tus Completaciones calculadas. Para una mayor eficiencia, este valor normalmente debería ser de 6 a 10 veces su configuración parallelism.
Scenario B:P\_req > P\_max
Diagnóstico: Su carga de trabajo supera el límite de ~15 trabajos/minuto de un solo SJM.
Tras aplicar los cambios, debe verificar que su cola de trabajos sea estable y no esté creciendo. Una cola que crece constantemente significa que su ubicación aún no cuenta con los recursos suficientes.
Ejecute esta consulta para comprobar la tasa de crecimiento de la cola:
-- Check for queue growth (a positive value means the queue is growing)
Si la "Tasa de crecimiento de la cola" es consistentemente positiva, debe instalar más despliegue de SJM Helm (Escenario B) o volver a revisar su configuración parallelism (Escenario A).
Ejemplos de configuración y ajuste
La configuración parallelism afecta directamente la cantidad de trabajos de Sintéticos por minuto que se pueden ejecutar. Si el valor es demasiado pequeño, la cola puede crecer. Si el valor es demasiado grande, los nodos pueden sufrir limitaciones de recursos.
Ejemplo
Descripción
parallelism=1completions=1
El tiempo de ejecución ejecutará 1 trabajo Sintético por minuto. Después de que se complete 1 trabajo, la configuración CronJob comenzará un nuevo trabajo en el siguiente minuto. Throughput will be extremely limited with this configuration.
parallelism=1completions=6
El entorno de ejecución ejecutará 1 trabajo de Sintéticos a la vez. Una vez finalizado el trabajo, comenzará inmediatamente otro. Después de que se completen 6 trabajos, la configuración CronJob iniciará un nuevo trabajo de Kubernetes. Throughput will be limited. Un único trabajo de Sintéticos de larga duración bloqueará el procesamiento de cualquier otro trabajo de Sintéticos de este tipo.
parallelism=3completions=24
El entorno de ejecución ejecutará 3 trabajos de Sintéticos a la vez. Una vez finalizado cualquiera de estos trabajos, comenzará inmediatamente otro. Después de que se completen 24 trabajos, la configuración CronJob iniciará un nuevo trabajo de Kubernetes. Throughput is much better with this or similar configurations.
Si su configuración parallelism funciona correctamente (manteniendo la cola en cero), establecer un valor completions mayor (por ejemplo, 6-10 veces el parallelism) puede mejorar la eficiencia al:
Adaptar a la variabilidad en la duración de los trabajos.
Reducir el número de ciclos de finalización para minimizar la ineficiencia de "finalización inminente de las finalizaciones", donde el siguiente lote no puede comenzar hasta que finalice el último trabajo del lote actual.
Es importante tener en cuenta que el valor completions no debe ser demasiado grande o CronJob experimentará un evento de advertencia como el siguiente:
bash
$
8m40s Warning TooManyMissedTimes cronjob/synthetics-node-browser-runtime too many missed start times: 101. Set or decrease .spec.startingDeadlineSeconds or check clock skew
Sugerencia
New Relic no es responsable de ninguna modificación que realice en los archivos del administrador de trabajos de Sintéticos.
Escalado horizontal con múltiples despliegues de SJM
Para escalar más allá del rendimiento de ~15 trabajos/minuto de un solo SJM, debe instalar varias versiones separadas de SJM Helm.
Importante
No emplee replicaCount para escalar el pod del administrador de trabajos.No se puede escalar aumentando el replicaCount para una sola versión de Helm. La arquitectura SJM requiere una relación 1:1 entre un pod de tiempo de ejecución y su pod SJM padre. Si el pod de tiempo de ejecución envía los resultados a la réplica SJM incorrecta (por ejemplo, a través de un servicio Kubernetes), esos resultados se perderán.
La estrategia correcta es desplegar múltiples instancias de SJM, cada una como su propia versión Helm. Cada SJM competirá por los trabajos desde la misma ubicación privada, lo que proporcionará equilibrio de carga, protección contra fallos y un mayor rendimiento total de trabajos.
Estrategia de escalamiento simplificada
Suponiendo que P\_req > P\_max y necesite escalar horizontalmente, puede simplificar el mantenimiento tratando cada despliegue de SJM como una unidad de capacidad fija.
Establecer paralelismo máximo: Para cada SJM, establezca parallelism en el mismo valor P_max. Esto maximiza el rendimiento potencial de cada SJM.
Completaciones de conjuntos: Para cada SJM, establezca también completions en un valor fijo. La fórmula P_req del Paso 1 se puede modificar para estimar las finalizaciones sustituyendo el valor P_max:
$$ Finalizaciones = \fracN_mP_max $$
Donde N_m es su número de trabajos por 5 minutos. Ajustar según sea necesario luego de la implementación para lograr un tiempo de ejecución de 5 minutos por trabajo Kubernetes por entorno de ejecución, es decir, node-browser-runtime y node-api-runtime.
Versiones de instalación: Instale tantas versiones separadas de Helm como necesite para manejar su total de P_req. Por ejemplo, si su P_req total es 60 y fijó parallelism de cada SJM en 20 (P_max del paso 2), necesitaría tres despliegues Helm separados para satisfacer la demanda de trabajo requerida.
Monitorear y agregar: Monitorear su cola de trabajos (consulte el paso 4). Si comienza a crecer, simplemente instale otra versión de Helm (por ejemplo, sjm-delta) empleando la misma configuración fija.
Al fijar el paralelismo y las finalizaciones a valores estáticos basados en P_max, aumentar o disminuir la capacidad se convierte en un proceso más simple de agregar o eliminar versiones de Helm. Esto ayuda a evitar el desperdicio de recursos del clúster en un valor de paralelismo superior al que el SJM puede emplear de manera efectiva.
Ejemplo de instalación
Al instalar varias versiones de SJM, debe proporcionar un nombre único para cada versión. Todas las instancias deben configurar con la misma clave de ubicación privada.
Se recomienda encarecidamente establecer fullnameOverride para crear nombres de recursos más cortos y manejables. Por ejemplo, para instalar dos SJM llamados sjm-alpha y sjm-beta en el namespace newrelic (ambos usando el mismo values.yaml con su paralelismo y autocompletado fijos):