Creación de un script
Para utilizar la función de supervisión de disponibilidad para los tipos de supervisión Explorador con scripts y REST con scripts, primero debe crear y cargar un script, que es una ruta de usuario registrada que se utiliza para simular transacciones de usuario en la aplicación.
El script se debe grabar en los siguientes tipos de archivo según el tipo de supervisión que se desee crear mediante el script:
- Archivo
.side
aplicable solo al tipo de supervisión Explorador con scripts. Se crea el archivo.side
mediante el grabador del entorno de desarrollo integrado (IDE) de Selenium. Para obtener información sobre los comandos de Selenium y cómo exportar un archivo.side
, consulte Documentación de Selenium. Tenga en cuenta que solo puede cargar un único script en Application Performance Monitoring; la carga de un conjunto de pruebas no está soportada. - Archivo
.ts
aplicable solo al tipo de supervisión Explorador con scripts. Puede utilizar.ts
TypeScript al trabajar con Playwright. Para obtener información sobre Playwright, consulte https://playwright.dev/docs/intro. - Archivo
.js
aplicable solo al tipo de supervisión de REST con scripts. El archivo.js
se puede crear mediante el paquetepostman-request
. Para obtener información sobre el paquetepostman-request
, consulte postman-request.
Para cargar el script en Application Performance Monitoring:
También puede utilizar las opciones disponibles en la parte superior de la página para realizar las siguientes acciones en el script:
- Editar: haga clic en esta opción para editar el script. Tenga en cuenta que si una supervisión utiliza este script, la edición del script puede generar parámetros incompatibles y tendrá que realizar las modificaciones correspondientes también en la supervisión.
- Ver: haga clic en esta opción para ver el script.
- Descargar: haga clic para descargar el archivo de script (
.side
,.playwright
o.js
). - Agregar etiquetas: haga clic para agregar etiquetas al script.
- Suprimir: haga clic en esta opción para suprimir el script. Tenga en cuenta que si una supervisión está utilizando este script, no podrá suprimir el script.
Al final de la página, puede ver la lista de supervisiones mediante el script o hacer clic en Crear supervisión para crear una supervisión con scripts. Para obtener más información, consulte Creación de una supervisión.
Opciones avanzadas para actualizar scripts
Los scripts de la supervisión de disponibilidad permiten registrar rutas de usuario y simular transacciones de usuario en una aplicación.
Puede actualizar la secuencia de comandos con comandos personalizados para realizar determinadas tareas y en las siguientes secciones se detallan algunos de los comandos que puede agregar a la secuencia de comandos:
Se recomienda utilizar siempre un script original y cargarlo y validarlo en una supervisión con scripts ejecutada en Application Performance Monitoring, antes de editarlo y realizar cambios. La actualización del script con contenido personalizado, como variables, puede interferir con la nueva ejecución del script desde el despliegue del IDE de Selenium.
Agregar variables personalizadas
Puede agregar variables personalizadas al contenido de los scripts .side
y .js
, que se pueden utilizar para definir parámetros dinámicos. Esto permite controlar estos parámetros desde el script o la supervisión en Application Performance Monitoring. Por ejemplo, si espera que cambie un nombre de usuario o un nombre de selección de elemento o si desea convertir ese valor en secreto para que otros usuarios que tengan acceso a la supervisión no puedan ver el valor, puede utilizar variables personalizadas.
param name
es obligatorio, pero param value
y isParamValueSecret
son opcionales. El valor por defecto de isParamValueSecret
es false
. Consulte los siguientes formatos:
-
Formato lateral y JS:
<ORAP><ON>param name</ON><OV>param value</OV><OS>isParamValueSecret(true/false)</OS></ORAP>
-
Formato del dramaturgo:
console.log("<ORAP><ON>param name</ON><OV>param value</OV><OS>isParamValueSecret(true/false)</OS></ORAP>");
Agregar marcadores personalizados
Puede agregar comandos de marcador personalizados al contenido de las secuencias de comandos .side
y .js
, que se pueden utilizar para transferir un mensaje personalizado y una duración desde la secuencia de comandos a Explorador de métricas en el servicio de supervisión. Esto le permite transferir una dimensión CustomMarker, por ejemplo, "DURATION: Check Elements" y una operación, por ejemplo, setValue
al servicio de supervisión. La dimensión CustomMarker está disponible con la métrica CustomMetric y con esta dimensión, puede agregar las siguientes operaciones al script como marcadores de duración para los pasos de transacción, como la duración del tiempo entre el inicio de sesión y la carga de página completa:
setValue
: registra la duración entre la hora de inicio del script y el momento en que se llama a esta operación.startTime
: registra la duración del tiempo entre esta operación y la operaciónendTime
.endTime
: registra la duración del tiempo entre la operaciónstartTime
y esta operación.
Tenga en cuenta que las operaciones startTime
y endTime
funcionan conjuntamente entre sí. Para un CustomMarker que contiene las operaciones startTime
y endTime
, el valor de métrica es <endTime - startTime>
.
A continuación, se muestran los comandos y ejemplos de la dimensión CustomMarker y las operaciones:
- Script secundario:
Agregue bloques de comandos con la operación que desea realizar. El valor del comando debe ser
Este es el comando utilizado para capturar un marcador personalizado en una secuencia de comandosoraSynCustomMarker
para que se reconozca como un comando personalizado. Los valores de los parámetros de comandotarget
yvalue
deben ser el valor de la dimensión CustomMarker y la operación respectivamente..side
:{ “id”: “36d45a35-5c07-4d86-8144-90ee7b52260b”, “comment”: “”, “command”: “oraSynCustomMarker”, “target”: “Add Marker Name”, “targets”: [], “value”: “setValue” }
A continuación le mostramos un ejemplo:
{ “id”: “36d45a35-5c07-4d86-8144-90ee7b52260b”, “comment”: “For calling Availability Monitoring custom metrics”, “command”: “oraSynCustomMarker”, “target”: “DURATION: Check Elements”, “targets”: [], “value”: “setValue” }
- Script Js:
Agregue el siguiente comando:
oraSynCustomMarker(customMarker, customOperation)
SustituyacustomMarker
por el valor de la dimensión CustomMarker yCustomOperation
por la operación que se va a realizar en la dimensión. A continuación le mostramos un ejemplo:oraSynCustomMarker("DURATION: Check Elements", "setValue")
- Guión de dramaturgo:
Utilice el siguiente formato:
console.log("oraSynCustomMarker:setValue:SetMarker"); // capturing the marker from the starting of the script console.log("oraSynCustomMarker:startTime:PageDuration"); // setting the starting marker console.log("oraSynCustomMarker:endTime:PageDuration"); // setting the end marker of the respective starting marker
También puede crear alarmas en el servicio de control mediante CustomMetric y la dimensión CustomMarker para recibir notificaciones cuando la métrica cumpla los disparadores especificados por la alarma. Para obtener información sobre la función Alarmas y cómo crearlas, consulte Gestión de alarmas.
Agregar capturas de pantalla personalizadas
Puede agregar un comando a los scripts .side
y .ts
para capturar capturas de pantalla personalizadas. Esta funcionalidad le permite realizar capturas de pantalla en cualquier momento durante la ejecución del script para diagnosticar problemas. Puede tomar un máximo de diez capturas de pantalla personalizadas además de las capturas de pantalla estándar.
- Script secundario:
{ "id": "e227f32f-47f6-432b-976a-6b5db5b53e94", "comment": "", "command": "oraSynCustomScreenshot", "target": "AddScreenshotName", "targets": [], "value": "true" }
- Guión de dramaturgo:
console.log("oraSynCustomScreenshot:<fileName>")
Usar autenticación multifactor (MFA)
Las transacciones de supervisión de disponibilidad soportan la autenticación multifactor (MFA) que genera un token de contraseña de un solo uso basada en tiempo (TOTP) al que se le asigna el secreto de autenticación. Para la generación de este TOTP, debe proporcionar la clave secreta durante la creación de la supervisión.
oraSynTimeBasedOTP
y, a continuación, introducir la variable ${oraSynTimeBasedOTP}
en la que se debe utilizar el valor TOTP:
- Script secundario:
{ "id": "123abc12-12ab-1a12-1a2a-1234ab123abc", "comment": "", "command": "oraSynTimeBasedOTP", "target": "1ABCDE1A1XTXVOIDQRZP1ZXTZAUDLIBJZ", "targets": [], "value": "" } // After providing the command, user needs to provide the variable. { "id": "123abc12-12ab-1a12-1a2a-1234ab123abc", "comment": "", "command": "type", "target": "id=mfa_token", "targets": [ ["id=mfa_token", "id"], ["name=mfa_token", "name"], ["css=#mfa_token", "css:finder"], ["xpath=//input[@id='mfa_token']", "xpath:attributes"], ["xpath=//div[@id='root']/div[3]/div/div[2]/form/div/div/input", "xpath:idRelative"], ["xpath=//div/input", "xpath:position"] ], "value": "${oraSynTimeBasedOTP}" }
El comando para generar TOTP esoraSynTimeBasedOTP
. Este comando acepta la clave secreta necesaria para generar el TOTP. La clave secreta se debe transferir como destino. Se puede transferir como variable normal o como variable confidencial:-
Parámetro normal:
{ "id": "123abc12-12ab-1a12-1a2a-1234ab123abc", "comment": "", "command": "oraSynTimeBasedOTP", "target": "1ABCDE1A1XTXVOIDQRZP1ZXTZAUDLIBJZ", "targets": [], "value": "" }
-
Parámetro de contraseña confidencial o similar:
{ "id": "123abc12-12ab-1a12-1a2a-1234ab123abc", "comment": "", "command": "oraSynTimeBasedOTP", "target": "<ORAP><ON>MFA_Secret</ON><OV>1ABCDE1A1XTXVOIDQRZP1ZXTZAUDLIBJZ</OV><OS>true</OS></ORAP>", "targets": [], "value": "" }
{ "id": "123abc12-12ab-1a12-1a2a-1234ab123abc", "comment": "", "command": "type", "target": "id=mfa_token", "targets": [ ["id=mfa_token", "id"], ["name=mfa_token", "name"], ["css=#mfa_token", "css:finder"], ["xpath=//input[@id='mfa_token']", "xpath:attributes"], ["xpath=//div[@id='root']/div[3]/div/div[2]/form/div/div/input", "xpath:idRelative"], ["xpath=//div/input", "xpath:position"] ], "value": "${oraSynTimeBasedOTP}" }
Debe mencionar dónde se debe usar el TOTP (que se genera). Por lo general, TOTP se introducirá como un valor en el campo de entrada de texto TOTP correspondiente. TOTP se almacenaría en el nombre de variable
${oraSynTimeBasedOTP}
. Debe proporcionar el nombre de variable como${oraSynTimeBasedOTP}
donde se introducirá el valor TOTP. -
-
Guión de dramaturgo:
El comando para generar el TOTP esoraSynTimeBasedOTP
. Este comando acepta la clave secreta necesaria para generar el TOTP.console.log("oraSynTimeBasedOTP:<value>")
Por ejemplo:
var oraSynTimeBasedOTP = ''; // Mandatory to define. This variable holds the TOTP value. console.log('oraSynTimeBasedOTP:1ABCDE1A1XTXVOIDQRZP1ZXTZAUDLIBJZ'); // This is normal parameter format to provide the MFA secret. await page.getByRole('textbox', { name: 'Enter One Time Passcode'}).fill(oraSynTimeBasedOTP); // Here the TOTP value will be utilized to fill in the TOTP text input field.
Uso de secretos de almacén
Actualmente, la autenticación de secretos de Vault en puntos estratégicos públicos y puntos estratégicos dedicados se realiza mediante S2S y principales de instancia, respectivamente. S2S y el principal de instancia no se pueden utilizar en puntos estratégicos locales.
Para los puntos estratégicos locales, debe utilizar la entidad de recurso. Una vez agregada la palabra clave RESOURCE_PRINCIPAL
al script, la entidad de recurso se utilizará para autenticar secretos de almacén. Esto funciona en todo tipo de puntos de vista. Para obtener información, consulte Uso de secretos de almacén con principales de recursos.
.side
, .ts
o .js
que se resolverán en tiempo de ejecución. Esto permite actualizar variables como nombres de usuario y contraseñas de forma dinámica, sin actualizar los scripts ni reiniciar las supervisiones. Solo tiene que crear secretos en el almacén y utilizarlos en scripts que se resolverán durante la ejecución de la supervisión definiendo las siguientes políticas en el inquilino:
-
Política de puntos estratégicos públicos
Puede definir políticas para que el servicio APM acceda a secretos en un almacén o compartimento específico:
- Un almacén específico:
Allow service applicationperformancemonitoring to read secret-family in compartment <compartment-name> where all {target.vault.id=‘ocid1.vault.oc1.<vault-ocid>’ , any {target.vaultsecret.id=‘ocid1.vaultsecret.oc1.phx.<secret-ocid1>, target.vaultsecret.id=‘ocid1.vaultsecret.oc1.phx.<secret-ocid2>}}
-
Un compartimento específico, con el nombre del compartimento:
Allow service applicationperformancemonitoring to read secret-family in compartment <compartment-name>
Un compartimento específico, con el ID del compartimento:
Allow service applicationperformancemonitoring to read secret-family in compartment id <compartment-ocid>
- Un almacén específico:
-
Política de puntos estratégicos dedicados
Puede definir políticas para que el servicio APM acceda a los secretos de un compartimento mediante el nombre o el ID del compartimento:
-
Un compartimento específico, con el nombre del compartimento:
Allow dynamic-group <dvp dynamic group eg stack-11-aug-apmSyntheticDVP-dg> read secret-family in compartment <compartment-name>
-
Un compartimento específico, con el ID del compartimento:
Allow dynamic-group <dvp dynamic group eg stack-11-aug-apmSyntheticDVP-dg> read secret-family in compartment id <compartment-ocid>
-
-
Según el tipo de secuencia de comandos, utilice la siguiente sintaxis:
-
Para la secuencia de comandos
.side
, utilice la siguiente sintaxis:<ORAS>secretOcid</ORAS><ORASREG>vaultRegion</ORASREG>
Por ejemplo:
<ORAS>ocid1.vaultsecret.oc1.phx.abcdefghijklmnopqrstuvwxyz123456789</ORAS><ORASREG>us-phoenix-1</ORASREG>
-
Para la secuencia de comandos
.ts
, utilice la siguiente sintaxis:var password = "<ORAS>ocid1.vault.oc1.vault-ocid</ORAS><ORASREG>vaultRegion</ORASREG>" await page.getByRole('textbox', { name: 'password' }).fill(password);
-
Para la secuencia de comandos
.js
, utilice la siguiente sintaxis:method: 'GET', url:'<ORAS>secretOcid</ORAS><ORASREG>vaultRegion</ORASREG>'
Por ejemplo:
method: 'GET', url:'<ORAS>ocid1.vaultsecret.oc1.phx.abcdefghijklmnopqrstuvwxyz123456789</ORAS><ORASREG>us-phoenix-1</ORASREG>'
Este
secretOcid
se resolverá durante la ejecución para recuperar los valores secretos actuales.La sintaxis
<ORASREG>
es opcional. Se puede utilizar cuando el servicio de almacén está en una región diferente a la de los monitores. Puede utilizarvaultRegion
para especificar en qué región se encuentra el almacén y los secretos se resolverán desde allí. Permite utilizar el mismo script entre regiones. Tenga en cuenta que sólo debe haber un<ORASREG>region</ORASREG>
en el script.Nota
La longitud máxima para el valor secreto es255
. -
Uso de secretos de almacén con principales de recursos
Puede actualizar la secuencia de comandos para utilizar secretos de Vault con entidades de recurso.
El soporte basado en la entidad de recurso se agrega para acceder a secretos de Vault. Las políticas basadas en la entidad de recurso se pueden agregar para permitir que las supervisiones Restaurar, Siderunner y Playwright accedan a los secretos del almacén.
- Cree un grupo dinámico en el tipo de recurso de supervisión.
Agregue una de las siguientes reglas para permitir que todos los recursos de supervisión del tipo de recurso
apmsyntheticmonitor
accedan a los secretos de Vault:- Opción 1:
All {resource.type='apmsyntheticmonitor'}
Utilice esta opción si tiene un único recurso (como un único monitor).
- Opción 2:
ANY {resource.type='apmsyntheticmonitor'}
Utilice esta opción si tiene un único recurso (como una única supervisión) o si tiene varios recursos (como dominio de APM y otros).
- Opción 1:
- Agregue una política para permitir el acceso a los almacenes mediante principales de recursos:
Allow dynamic-group <vault dg> to read to secret-family in compartment <compartment-name>
Opcional: para acceso a secretos de Vault entre arrendamientos, realice lo siguiente:
- Agregue políticas al arrendamiento del dominio de APM:
DEFINE tenancy vault_tenancy as <ocid_of_vault_tenancy> ENDORSE dynamic-group apm_domain_tenancy_dynamic_group to read secret-family in tenancy vault_tenancy
- Agregue políticas al arrendamiento de Vault:
DEFINE tenancy apm_domain_tenancy as <ocid_of_apm_domain_tenancy> DEFINE dynamic-group apm_domain_tenancy_dynamic_group as <ocid_of_apm_domain_tenancy_dynamic_group> ADMIT dynamic-group apm_domain_tenancy_dynamic_group of tenancy apm_domain_tenancy to read secret-family in compartment <vault_compartment_name>
Para obtener información sobre las sentencias
DEFINE
,ENDORSE
yADMIT
, consulte la documentación de Object Storage. - Agregue políticas al arrendamiento del dominio de APM:
- Agregar parámetros de Vault en el script con la palabra clave
RESOURCE_PRINCIPAL
Proporcione la sintaxis adecuada en el scriptjs
,side
oplaywright
. Junto con el OCID secreto del almacén y la región, se debe transferir una palabra claveRESOURCE_PRINCIPAL
.Nota
Solo se debe agregar en uno de los parámetros de Vault.Ejemplo paralelo:
Por el lado, el script se parece al siguiente ejemplo:
"command": "<ORAS>ocid1.vaultsecret.oc1.phx.amaaaaaatttttuuuuaa</ORAS><ORASREG>us-phoenix-1</ORASREG><ORASAUTH>RESOURCE_PRINCIPAL</ORASAUTH>",
Ejemplo de dramaturgo:
Para el dramaturgo, el script se parece al siguiente ejemplo:var password = "<ORAS>ocid1.vault.oc1.vault-ocid</ORAS><ORASREG>vaultRegion</ORASREG><ORASAUTH>RESOURCE_PRINCIPAL</ORASAUTH>" await page.getByRole('textbox', { name: 'password' }).fill(password);
Para obtener más información, consulte Uso de secretos de almacén.
Ejemplo de JS:
Para la supervisión SCRIPTED_REST, utilice la palabra clave
RESOURCE_PRINCIPAL
en la secuencia de comandos.Por ejemplo, consulte la siguiente secuencia de comandos
.js
:var request = require('postman-request'); var options = { method: '<ORAS>ocid1.vaultsecret.oc1.phx.amaaaaaafpqv5yya7p2uv63scv37yz64u75x47ajuibwoynro3ygbu2rrtxa</ORAS>', url: '<ORAS>ocid1.vaultsecret.oc1.phx.amaaaaaafpqv5yyagfnrwsjmoabretgffs4nkfocrfokvnldtt7nee7htsya</ORAS><ORASREG>us-phoenix-1</ORASREG><ORASAUTH>RESOURCE_PRINCIPAL</ORASAUTH>' }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(response.statusCode); });