Orchestrator
2022.4
False
Orchestrator Logs - Standalone 2022.4
Imagen de fondo del banner
Logotipo
Guía del usuario de Orchestrator
Última actualización 15 de feb. de 2024

Registros de Orchestrator

Registros de diagnóstico de Orchestrator

Son registros de diagnóstico generados por UiPath Orchestrator sobre 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:

  • Could not create Quartz Job

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:

    • Invalid username/email address or password.
    • The machine name DOC is already taken
  • conflictos empresariales como:

    • License expired!
    • The floating robot's session is already active on machine ROQADOCS06!
    • The robots already have pending jobs for this Process.
  • no se han encontrado excepciones como:

    • QueueName1 does not exist.

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 Robots, añade sus propios parámetros (TenantID, FolderID), y envía los mensajes a diferentes destinos, tal y como se especificará en la sección<nlog> del archivo UiPath.Orchestrator.dll.config.

Objetivos de los registros de ejecución de Orchestrator

Por defecto, todos los registros del Robot se envían a la tabla Registros de la base de datos predeterminada de Orchestrator, donde UiPath Orchestrator almacena otra información, pero el archivo UiPath.Orchestrator.dll.config puede configurarse para enviarlos también a una base de datos diferente.

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: si el número de registros de 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="" 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="" 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.
Versiones de Elasticsearch anteriores a 7.16.3
Aunque se prefiere la versión 7.16.3 de Elasticsearch, puedes optar por utilizar una versión anterior estableciendo el parámetro disableProductCheckStatus en true en el destino Nlog (<target xsi:type="ElasticSearch").
Este parámetro está oculto y su valor predeterminado es false.
Nota: La opción de guardar los registros del robot en un servidor de Elasticsearch solo se hace efectiva una vez que lo configuras, y no se aplica de forma retroactiva. 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 pueden recuperarse y mostrarse 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.

      For more details on this, see the Elasticsearch documentation.

  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 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.

      For more details on this, see the Elasticsearch documentation.

  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”- Por defecto, este parámetro está establecido en false. Para obtener más información, consulta Logs.Elasticsearch.OAuthEnabled.
    • Logs.Elasticsearch.OAuthExpireInSeconds = ”1200” - This parameter is optional unless the default value of 1200 is changed in the Elasticsearch xpack.security.authc.token.timeout setting. This parameter must have the same value as in the Elasticsearch configuration. For more on this, see 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” - By default, it is set to false. For more on this, see the UiPath.Orchestrator.dll.config page.
      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. Generate the API key by following these steps.
  2. Almacena la clave de la API como secreto en tu 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.

Icono de soporte y servicios
Obtén la ayuda que necesitas
Icono de UiPath Academy
RPA para el aprendizaje - Cursos de automatización
Icono de UiPath Forum
Foro de la comunidad UiPath
Logotipo blanco de UiPath
Confianza y seguridad
© 2005-2024 UiPath. All rights reserved.