orchestrator
2023.10
false
Guía del usuario de Orchestrator
Automation CloudAutomation Cloud Public SectorAutomation SuiteStandalone
Last updated 11 de nov. de 2024

Registros de Orchestrator

Registros de diagnóstico de Orchestrator

Estos son registros de diagnóstico generados por UiPath® Orchestrator con respecto a su comportamiento.

Habilitar los registros de diagnóstico de UiPath Orchestrator

Los registros de diagnóstico de UiPath Orchestrator se activan una vez que UiPath Orchestrator se ha instalado correctamente. Dependen de la infraestructura NLog y su configuración se encuentra en el archivo UiPath.Orchestrator.dll.config, con la etiqueta <nlog>.
Nota: Ten en cuenta que tanto las excepciones del servidor de Orchestrator, como el seguimiento de la pila en la ventana **Detalles del trabajo**, se registran en inglés, independientemente del idioma elegido por el usuario.

Objetivos de los registros de diagnóstico de UiPath Orchestrator

Todos los registros de la aplicación se registran en el Visor de eventos con el nivel mínimo de registro de Información. Esto se especifica mediante las siguientes líneas en el archivo UiPath.Orchestrator.dll.config:

<target xsi:type="EventLog" name="eventLog" layout="${message}" source="Orchestrator" log="Application" />

<logger name="*" minlevel="Info" writeTo="eventLog" />

Los registros generados por el Planificador de trabajos tienen un objetivo y un registrador separados:

<target xsi:type="EventLog" name="eventLogQuartz" layout="[Quartz] ${message} ${onexception: ${exception:format=tostring}}" source="Orchestrator" log="Application" />

<logger name="Orchestrator.Quartz.*" minlevel="Info" writeTo="eventLogQuartz" />

Ejemplo:

  • No se pudo crear el trabajo de Quartz

Los registros generados por negocio y otras reglas de validación tienen un objetivo y un registrador separados:

<target xsi:type="EventLog" name="businessExceptionEventLog" layout="${message}${onexception:${exception:format=tostring:maxInnerExceptionLevel=5:innerFormat=tostring}}" source="Orchestrator.BusinessException" log="Application" />

<logger name="BusinessException.*" minlevel="Info" writeTo="businessExceptionEventLog" final="true" />

Este tipo de mensajes de error se registran en el Visor de eventos en los siguientes casos:

  • problemas de validación como:

    • Nombre de usuario / dirección de correo electrónico o contraseña no válidos.
    • El nombre de la máquina DOC ya está tomado
  • conflictos empresariales como:

    • La licencia expiró.
    • ¡La sesión del robot flotante ya está activa en la máquina ROQADOCS06!
    • Los robots ya tienen trabajos pendientes para este proceso.
  • no se han encontrado excepciones como:

    • NombreDeCola1 no existe.

Registros de ejecución de Orchestrator

Los registros de ejecución de Orchestrator los envían los Robots conectados a él y se muestran en la sección Registros de las páginas Trabajos o Robots. La aplicación recibe los datos de los UiPath Robots, añade sus propios parámetros (TenantID, FolderID), y envía los mensajes a diferentes destinos, tal y como se especificará en la <nlog>sección del archivo UiPath.Orchestrator.dll.config.

Objetivos de los registros de ejecución de Orchestrator

De forma predeterminada, todos los registros del robot se envían a la tabla Registros de la base de datos predeterminada de Orchestrator, donde UiPath Orchestrator también almacena otra información.

Sin embargo, puedes elegir enviar registros de robot a una base de datos diferente configurándola en la target xsi:type="Database" connectionString="..."sección del archivo UiPath.Orchestrator.dll.config.

La página Registros muestra la información de la tabla de registros de la Base de datos por defecto. Por lo tanto, si esta sección no existe, o los registros se guardan en una base de datos diferente, la página está vacía. Todos los parámetros deben estar de acuerdo con el esquema de la tabla, que tiene este aspecto:

<target xsi:type="Database" name="database" connectionString="${ui-connection-strings:item=Default}" keepConnection="true">
 <commandText>
  insert into dbo.Logs (OrganizationUnitId, TenantId, TimeStamp, Level, WindowsIdentity, ProcessName, JobKey, Message, RawMessage)
  values (@organizationUnitId, @tenantId, @timeStamp, @level, @windowsIdentity, @processName, @jobId, @message, @rawMessage)
 </commandText>
  <parameter name="@organizationUnitId" layout="${event-properties:item=organizationUnitId}" />
  <parameter name="@tenantId" layout="${event-properties:item=tenantId}" />
  <parameter name="@timeStamp" layout="${date}" />
  <parameter name="@level" layout="${event-properties:item=levelOrdinal}" />
  <parameter name="@windowsIdentity" layout="${event-properties:item=windowsIdentity}" />
  <parameter name="@processName" layout="${event-properties:item=processName}" />
  <parameter name="@jobId" layout="${event-properties:item=jobId}" />
  <parameter name="@message" layout="${message}" />
  <parameter name="@rawMessage" layout="${event-properties:item=rawMessage}" />
</target>
 <logger name="Robot.*" writeTo="database" final="true" /><target xsi:type="Database" name="database" connectionString="${ui-connection-strings:item=Default}" keepConnection="true">
 <commandText>
  insert into dbo.Logs (OrganizationUnitId, TenantId, TimeStamp, Level, WindowsIdentity, ProcessName, JobKey, Message, RawMessage)
  values (@organizationUnitId, @tenantId, @timeStamp, @level, @windowsIdentity, @processName, @jobId, @message, @rawMessage)
 </commandText>
  <parameter name="@organizationUnitId" layout="${event-properties:item=organizationUnitId}" />
  <parameter name="@tenantId" layout="${event-properties:item=tenantId}" />
  <parameter name="@timeStamp" layout="${date}" />
  <parameter name="@level" layout="${event-properties:item=levelOrdinal}" />
  <parameter name="@windowsIdentity" layout="${event-properties:item=windowsIdentity}" />
  <parameter name="@processName" layout="${event-properties:item=processName}" />
  <parameter name="@jobId" layout="${event-properties:item=jobId}" />
  <parameter name="@message" layout="${message}" />
  <parameter name="@rawMessage" layout="${event-properties:item=rawMessage}" />
</target>
 <logger name="Robot.*" writeTo="database" final="true" />
Se pueden añadir otros objetivos a los registros configurando el archivo UiPath.Orchestrator.dll.config. Aquí encontrarás una de objetivos disponibles.
Nota:

Al actualizar Orchestrator, los destinos de Nlog se eliminan y se vuelven a crear de la siguiente manera:

  • Tras actualizar a 2022.4, los objetivos de la base de datos NLog vuelven a sus valores predeterminados.
  • Tras actualizar a 2022.10, los objetivos de la base de datos NLog se eliminan y se reemplazan con objetivos nuevos y mejorados.
Esto cubre los objetivos database, monitoring y insightsRobotLogs.
Importante: Si el número de registros de UiPath Robots almacenados en la tabla es superior a 1 millón, se recomienda crear el siguiente índice para mejorar el rendimiento de la búsqueda:
CREATE NONCLUSTERED INDEX [IX_Search] ON [dbo].[Logs]
(
[TenantId] ASC,
[OrganizationUnitId] ASC,
[Level] ASC,
[TimeStamp] DESC
)WITH (STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF, ONLINE = OFF, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
GOCREATE NONCLUSTERED INDEX [IX_Search] ON [dbo].[Logs]
(
[TenantId] ASC,
[OrganizationUnitId] ASC,
[Level] ASC,
[TimeStamp] DESC
)WITH (STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF, ONLINE = OFF, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
GO

Servidor Elasticsearch

Por defecto, hay un destino de Elasticsearch configurado desde el script de instalación. El índice es diferente para cada tenant, pero puede configurarse desde el destino especificado en la sección <nlog>:
Para versiones de Elasticsearch anteriores a la 8.0:
<target name="robotElasticBuffer" xsi:type="BufferingWrapper" flushTimeout="5000">
<target xsi:type="ElasticSearch" name="robotElastic" uri="uritoelasticsearchnode" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="logEvent" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,organizationId,indexName" />
</target>
</target><target name="robotElasticBuffer" xsi:type="BufferingWrapper" flushTimeout="5000">
<target xsi:type="ElasticSearch" name="robotElastic" uri="uritoelasticsearchnode" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="logEvent" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,organizationId,indexName" />
</target>
</target>
Para versiones de Elasticsearch 8.0 y superiores:
<target name="robotElasticBuffer" xsi:type="BufferingWrapper" flushTimeout="5000">
<target xsi:type="ElasticSearch" name="robotElastic" uri="uritoelasticsearchnode" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="" enableApiVersioningHeader="true" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,organizationId,indexName" />
</target>
</target><target name="robotElasticBuffer" xsi:type="BufferingWrapper" flushTimeout="5000">
<target xsi:type="ElasticSearch" name="robotElastic" uri="uritoelasticsearchnode" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="" enableApiVersioningHeader="true" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,organizationId,indexName" />
</target>
</target>

Para que las versiones 8.0 y superiores de Elasticsearch funcionen correctamente, hay que establecer estos parámetros de la siguiente manera:

  • documentType está vacío.
  • enableApiVersioningHeader se configura como true.
Nota: la opción para guardar los registros de robots en un servidor de Elasticsearch solo se hace efectiva una vez que lo configuras y no se aplica retroactivamente. Esto significa que ya no tendrás acceso a ningún registro que ya estuviera en la base de datos en el momento en que configuraste la opción, porque los registros solo se pueden recuperar y mostrar desde un único destino.

Autenticación de X-PACK

Nota: de forma predeterminada, las características de seguridad de Elasticsearch están deshabilitadas si tienes una licencia básica o de prueba. Recomendamos encarecidamente que los habilites.

Autenticación con nombre de usuario y contraseña

Para habilitar la autenticación a través de un nombre de usuario y una contraseña, es necesario seguir los siguientes pasos:

  1. Configura el servidor Elasticsearch de la siguiente manera:
    • Añade la configuración xpack.security.enabled al archivo de configuración elasticsearch.yml.
    • Establece un nombre de usuario y contraseña.

      Para más detalles, consulta la documentación de Elasticsearch.

  2. Configura el archivo UiPath.Orchestrator.dll.config de Orchestrator como sigue:
  • Opción 1: Si no utilizas un destino de NLog, deberás configurar los siguientes parámetros: Logs.Elasticsearch.Username y Logs.Elasticsearch.Password. Asegúrate de que tus valores coinciden con la configuración de Elasticsearch del paso 1.
  • Opción 2: Si Logs.RobotLogs.ReadTarget se establece en un destino de NLog (por ejemplo robotElasticBuffer, y no se especifica la configuración Logs.Elasticsearch.Nodes, el establece el destino añadiendo lo siguiente: requireAuth="true" username="XPACKuser" password="p@$$w0rd". Asegúrate de que los valores de estos parámetros coinciden con la configuración de Elasticsearch del paso 1.

    Para obtener más información sobre estos parámetros, consulta la página UiPath.Orchestrator.dll.config.

    Para ver un ejemplo de configuración, consulta lo siguiente:

    <target name="robotElasticBuffer" xsi:type="BufferingWrapper" flushTimeout="5000">
            <target xsi:type="ElasticSearch" name="robotElastic" uri="" requireAuth="true" username="XPACKusername" password="p@$$w0rd" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="logEvent" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,indexName" />
          </target><target name="robotElasticBuffer" xsi:type="BufferingWrapper" flushTimeout="5000">
            <target xsi:type="ElasticSearch" name="robotElastic" uri="" requireAuth="true" username="XPACKusername" password="p@$$w0rd" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="logEvent" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,indexName" />
          </target>
  • Opción 3: si Logs.RobotLogs.ReadTarget se establece a un destino NLog (por ejemplo, robotElasticBuffer), y un nodo Elasticsearch se especifica a través de la configuración Logs.Elasticsearch.Nodes, es necesario configurarlo explícitamente (ya que anula la configuración del destino NLog), y asegurarse de añadir también lo siguiente: requireAuth="true" username="XPACKuser" password="p@$$w0rd". Asegúrate de que los valores de estos parámetros coinciden con la configuración de Elasticsearch del paso 1.

Autenticación de OAuth 2

Para cambiar a OAuth2 como método de autenticación para Elasticsearch, debes seguir los siguientes pasos. Ten en cuenta que debes facilitar tus credenciales actuales para cambiar a este método de autenticación basado en tokens.

  1. Configura el servidor Elasticsearch de la siguiente manera:

    a. Habilita TLS (HTPS) para la capa de transporte.

    b. Actualiza la siguiente configuración en el archivo de configuración elasticsearch.yml:
    • xpack.security.authc.token.enabled: true
    • xpack.security.enabled: true
    • xpack.security.authc.token.timeout - Esta configuración es opcional y controla el tiempo de validez de un token. Por defecto, su valor está establecido en 20 minutos.

      Para más detalles, consulta la documentación de Elasticsearch.

  2. Actualiza los siguientes parámetros del archivo UiPath.Orchestrator.dll.config de Orchestrator para que se refleje la configuración que elegiste en el Paso 1.
    • Logs.Elasticsearch.TlsEnabled = ”true” - Por defecto, este parámetro está establecido en true y garantiza que TLC (HTTPS) está activado.
    • Logs.Elasticsearch.OAuthEnabled = ”true” : de forma predeterminada, este parámetro está establecido en false. Para más información, consulta Logs.Elasticsearch.OAuthEnabled.
    • Logs.Elasticsearch.OAuthExpireInSeconds = ”1200” : este parámetro es opcional a menos que el valor predeterminado de 1200 se cambie en la configuración de Elasticsearch xpack.security.authc.token.timeout . Este parámetro debe tener el mismo valor que en la configuración de Elasticsearch. Para más información, consulta Logs.Elasticsearch.OAuthExpireInSeconds.
      Nota: los dos primeros pasos te ayudan a configurar un mecanismo de autenticación basado en tokens para leer los registros. Si usas NLog, es necesario un paso adicional.
  3. Para habilitar OAuth2 para Nlog, asegúrate de configurar el siguiente parámetro en el archivo UiPath.Orchestrator.dll.config de Orchestrator. Ten en cuenta que debes rellenar el nombre de usuario y contraseña para la autenticación en Elasticsearch porque el token inicial se genera en base a esas credenciales.
    • OAuthEnabled = “true”: de forma predeterminada, está establecido en false. Para más información, visita la página UiPath.Orchestrator.dll.config.
      Importante: si Logs.RobotLogs.ReadTarget está configurado a un destino NLog (por ejemplo, robotElasticBuffer) y la configuración Logs.Elasticsearch.Nodes no se especifica, Logs.Elasticsearch.OAuthEnabled se rellena desde la configuración del destino NLog. Se aplica la misma lógica para el nombre de usuario y la contraseña.

Autenticación de clave API

Para habilitar la autenticación mediante la clave API, sigue los pasos que se indican a continuación.

  1. Genera la clave de API siguiendo estos pasos.
  2. Almacene la clave de API como secreta en su almacén de claves de Azure.
  3. Configura los siguientes parámetros de destino Nlog con tus datos, creando así una conexión entre Orchestrator y tu almacén de claves que permita recuperar la clave:
    apiKeyEnabled="true"
    apiKeyProvider="AzureKeyVault"
    apiKeySecretName="<SecretName>"
    azureKeyVaultUri="<KeyVaultUri>"
    azureKeyVaultDirectoryId="<KeyVaultDirectoryId>"
    azureKeyVaultClientId="<KeyVaultClientId>"
    azureKeyVaultCertificateThumbprint="<KeyVaultCertificateThumbprint>"
    azureKeyVaultCertificateStoreLocation="CurrentUser/LocalMachine"apiKeyEnabled="true"
    apiKeyProvider="AzureKeyVault"
    apiKeySecretName="<SecretName>"
    azureKeyVaultUri="<KeyVaultUri>"
    azureKeyVaultDirectoryId="<KeyVaultDirectoryId>"
    azureKeyVaultClientId="<KeyVaultClientId>"
    azureKeyVaultCertificateThumbprint="<KeyVaultCertificateThumbprint>"
    azureKeyVaultCertificateStoreLocation="CurrentUser/LocalMachine"

    Los siguientes parámetros deben editarse con sus valores:

    • <SecretName> : el nombre que establece para la clave de API en el almacén de claves
    • <KeyVaultUri> : el URI de tu almacén de claves
    • <KeyVaultDirectoryId> : tu ID del directorio de almacén de claves
    • <KeyVaultClientId> : tu ID de cliente de almacén de claves
    • <KeyVaultCertificateThumbprint> : la huella digital de tu certificado de almacén de claves
    • CurrentUser/LocalMachine : la ubicación donde se almacena el certificado

Caducidad de la clave API

De forma predeterminada, las claves de API no caducan, pero aún puedes elegir establecer una fecha de caducidad para ellas.

Si su clave de API va a caducar, debe generar una nueva y almacenarla en el almacén de claves antes de la fecha de caducidad, para asegurarse de que Orchestrator siempre pueda recuperar una clave válida.

Orchestrator lee las claves de API del almacén de claves cada 15 minutos, por lo que este es el retraso máximo que puede esperar antes de que se propague la clave nueva.

¿Te ha resultado útil esta página?

Obtén la ayuda que necesitas
RPA para el aprendizaje - Cursos de automatización
Foro de la comunidad UiPath
Uipath Logo White
Confianza y seguridad
© 2005-2024 UiPath. Todos los derechos reservados.