Orchestrator
2023.4
False
Image de fond de la bannière
Guide de l'utilisateur d'Orchestrator
Dernière mise à jour 4 mars 2024

Journaux d'Orchestrator

Journaux de diagnostic d'Orchestrator

Il s'agit de journaux de diagnostic générés par UiPath Orchestrator concernant son comportement.

Activation des journaux de diagnostic d'UiPath Orchestrator

Les journaux de diagnostic d'UiPath Orchestrator sont activés une fois UiPath Orchestrator correctement installé. Ils reposent sur l'infrastructure de NLog et leur configuration est disponible dans le fichier UiPath.Orchestrator.dll.config, sous la balise <nlog>.
Remarque : notez que les exceptions du serveur d'Orchestrator et la pile de trace dans la fenêtre **Détails de la tâche **(Job Details), sont consignées en anglais, quelle que soit la langue choisie par l'utilisateur.

Cibles des journaux de diagnostic d'UiPath Orchestrator

Tous les journaux des applications sont consignés dans l'Observateur d'événements au niveau de journalisation minimal Information. Ceci est indiqué par les lignes suivantes dans le fichier UiPath.Orchestrator.dll.config :

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

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

Les journaux générés par le Planificateur de tâches (Jobs Scheduler) ont une cible et un enregistreur distincts :

<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" />

Exemple :

  • Could not create Quartz Job

Les journaux générés par les règles métier et autres règles de validation ont une cible et un enregistreur distincts :

<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" />

Ces types de messages d’erreur sont consignés dans l'observateur d’événements dans les cas suivants :

  • les problèmes de validation tels que :

    • Invalid username/email address or password.
    • The machine name DOC is already taken
  • les conflits métier tels que :

    • License expired!
    • The floating robot's session is already active on machine ROQADOCS06!
    • The robots already have pending jobs for this Process.
  • les exceptions non trouvées telles que :

    • QueueName1 does not exist.

Journaux d'exécution d'Orchestrator

Les journaux d'exécution d'Orchestrator sont envoyés par les Robots (Robots) qui leur sont connectés et sont affichés dans la section Journaux (Logs) des pages Tâches (Jobs) ou Robots (Robots). L'application reçoit les données provenant des Robots, ajoute ses propres paramètres (IDTenant, IDDossier) et transmet les messages aux différentes cibles, comme indiqué dans la section <nlog> du fichier UiPath.Orchestrator.dll.config.

Cibles des journaux d'exécution d'Orchestrator

Par défaut, tous les journaux du Robot sont envoyés à la table Journaux (Logs) de la base de données par défaut d'Orchestrator, où UiPath Orchestrator enregistre d'autres informations. Toutefois, le fichier UiPath.Orchestrator.dll.config peut également être configuré de manière à les envoyer vers une base de données différente.

La page Journaux (Logs) affiche les informations provenant de la table Journaux (Logs) de la Base de données par défaut (Default Database). Par conséquent, si cette section n'existe pas ou si les journaux sont enregistrés dans une base de données différente, la page est vide. Tous les paramètres doivent être conformes au schéma de table, qui ressemble à ceci :

<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" />
Vous pouvez ajouter d'autres cibles aux journaux en configurant le fichier UiPath.Orchestrator.dll.config. Vous trouverez une liste de cibles disponibles ici.
Remarque :

Lors de la mise à niveau d'Orchestrator, les cibles Nlog sont supprimées et recréées, comme suit :

  • Lors de la mise à niveau vers 2022,4, Les cibles de base de données Nlog retrouvent leurs valeurs par défaut.
  • Lors de la mise à niveau vers 2022.10, Les cibles de la base de données Nlog sont supprimées et remplacées par des cibles nouvelles et améliorées.
Cela couvre les cibles database, monitoring et insightsRobotLogs.
Important : si le nombre de journaux de Robot stocké dans la table est supérieur à 1 million, nous vous recommandons de créer l'index suivant pour améliorer les performances de recherche :
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

Serveur Elasticsearch

Par défaut, une cible Elasticsearch est configurée depuis le script d'installation. L'index est différent pour chaque locataire, mais vous pouvez le configurer à partir de la cible spécifiée dans la section <nlog>.
Pour les versions d'Elasticsearch antérieures à 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>
Pour les versions 8.0 et ultérieures à Elasticsearch :
<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>

Pour que les versions 8.0 et supérieures d'Elasticsearch fonctionnent correctement, ces paramètres sont définis comme suit :

  • documentType est vide.
  • enableApiVersioningHeader est défini sur true.
Remarque : l’option permettant d’enregistrer les journaux du robot sur un serveur Elasticsearch ne devient efficace qu’une fois que vous l’avez configurée, et n’est pas appliquée rétroactivement. Cela signifie que vous n’aurez plus accès aux journaux qui se trouvaient déjà dans la base de données au moment où vous avez configuré l’option, car les journaux ne peuvent être récupérés et affichés qu’à partir d’une seule destination.

Authentification X-PACK

Remarque : par défaut, les fonctionnalités de sécurité Elasticsearch sont désactivées si vous disposez d'une licence de base ou d'une licence d'essai. Nous vous recommandons fortement de les activer.

Authentification par nom d'utilisateur et mot de passe

Pour activer l'authentification via un nom d'utilisateur et un mot de passe, vous devez suivre les étapes suivantes :

  1. Configurez le serveur Elasticsearch comme suit :
    • Ajoutez le paramètre xpack.security.enabled au fichier de configuration elasticsearch.yml .
    • Configurez un nom d'utilisateur et un mot de passe.

      Pour plus de détails à ce sujet, consultez la documentation Elasticsearch.

  2. Configurez le fichier UiPath.Orchestrator.dll.config d'Orchestrator comme suit :
  • Option 1: si vous n'utilisez pas de cible NLog, vous devez configurer les paramètres suivants : Logs.Elasticsearch.Username et Logs.Elasticsearch.Password. Assurez-vous que leurs valeurs correspondent aux paramètres Elasticsearch de l'étape 1.
  • Option 2: si Logs.RobotLogs.ReadTarget est défini sur une cible NLog (par exemple, robotElasticBuffer) et que le paramètre Logs.Elasticsearch.Nodes n'est pas spécifié, configurez la cible en ajoutant les éléments suivants : requireAuth="true" username="XPACKuser" password="p@$$w0rd". Assurez-vous que ces valeurs de paramètres correspondent aux paramètres Elasticsearch de l'étape 1.

    Pour plus d'informations sur ces paramètres, consultez la page UiPath.Orchestrator.dll.config.

    Pour obtenir un exemple de configuration, consultez :

    <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>
  • Option 3: si Logs.RobotLogs.ReadTarget est défini sur une cible NLog (par exemple, robotElasticBuffer) et qu'un nœud Elasticsearch est spécifié via le paramètre Logs.Elasticsearch.Nodes , vous devez le configurer explicitement (car il remplace les paramètres de la cible NLog) , et assurez-vous d'ajouter également les éléments suivants : requireAuth="true" username="XPACKuser" password="p@$$w0rd". Assurez-vous que ces valeurs de paramètres correspondent aux paramètres Elasticsearch de l'étape 1.

Authentification OAuth 2

Pour passer à OAuth2 comme méthode d'authentification pour Elasticsearch, vous devez suivre les étapes suivantes. Notez que vous devez fournir vos informations d'identification actuelles pour passer à cette méthode d'authentification basée sur les jetons.

  1. Configurez le serveur Elasticsearch comme suit :

    a. Activez TLS (HTTPS) pour la couche transport.

    b. Mettez à jour les paramètres suivants dans le fichier de configuration elasticsearch.yml :
    • xpack.security.authc.token.enabled: true
    • xpack.security.enabled: true
    • xpack.security.authc.token.timeout : ce paramètre est facultatif et contrôle la durée de validité d'un jeton. Par défaut, sa valeur est définie sur 20 minutes.

      Pour plus de détails à ce sujet, consultez la documentation Elasticsearch.

  2. Mettez à jour les paramètres suivants dans le fichier UiPath.Orchestrator.dll.config d'Orchestrator pour refléter les paramètres que vous avez choisis à l'étape 1.
    • Logs.Elasticsearch.TlsEnabled = ”true” : par défaut, ce paramètre est défini sur true et garantit que TLC (HTTPS) est activé.
    • Logs.Elasticsearch.OAuthEnabled = ”true” : par défaut, ce paramètre est défini sur false. Pour plus de détails, voir Logs.Elasticsearch.OAuthEnabled.
    • Logs.Elasticsearch.OAuthExpireInSeconds = ”1200” :Ce paramètre est facultatif sauf si la valeur par défaut de 1200 est modifiée dans le paramètre Elasticsearch xpack.security.authc.token.timeout. Ce paramètre doit avoir la même valeur que dans la configuration d’Elasticsearch. Pour plus de détails, voir Logs.Elasticsearch.OAuthExpireInSeconds.
      Remarque : les deux premières étapes vous aident à configurer un mécanisme d'authentification basé sur des jetons pour la lecture des journaux. Si vous utilisez NLog, une étape supplémentaire est nécessaire.
  3. Pour activer OAuth2 pour Nlog, assurez-vous de configurer également le paramètre suivant dans le fichier UiPath.Orchestrator.dll.config d'Orchestrator. Notez que vous devez renseigner le nom d' utilisateur et le mot de passe pour l'authentification dans Elasticsearch, car le jeton initial est généré sur la base de ces informations d'identification.
    • OAuthEnabled = “true” : par défaut, ce paramètre est défini sur false. Pour plus d’informations sur ces paramètres, consultez la page UiPath.Orchestrator.dll.config.
      Important : si Logs.RobotLogs.ReadTarget est défini sur une cible NLog (par exemple, robotElasticBuffer) et que le paramètre Logs.Elasticsearch.Nodes n'est pas spécifié, le Logs.Elasticsearch.OAuthEnabled est rempli à partir de la configuration de la cible NLog. La même logique est appliquée pour le nom d'utilisateur et le mot de passe.

Authentification par clé API

Pour activer l'authentification via la clé API, suivez les étapes décrites ci-dessous.

  1. Générez la clé d’API en suivant ces étapes.
  2. Stockez la clé API en tant que clé secrète dans votre coffre de clés Azure.
  3. Configurez les paramètres cibles Nlog suivants avec vos données, créant ainsi une connexion entre Orchestrator et votre coffre de clés qui permet de récupérer la clé :
    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"

    Les paramètres suivants doivent être modifiés avec vos valeurs :

    • <SecretName> : nom que vous avez défini pour votre clé API dans le coffre de clés
    • <KeyVaultUri> - l'URI de votre coffre de clés
    • <KeyVaultDirectoryId> - votre ID de répertoire de coffre de clés
    • <KeyVaultClientId> - l'ID client de votre coffre de clés
    • <KeyVaultCertificateThumbprint> – l’empreinte de votre certificat de coffre de clés
    • CurrentUser/LocalMachine : l'emplacement de stockage du certificat

Expiration de la clé API

Par défaut, les clés API n'expirent pas, mais vous pouvez toujours choisir de définir une date d'expiration pour elles.

Si votre clé API est configurée pour expirer, vous devez en générer une nouvelle et la stocker dans le coffre de clés avant la date d'expiration, afin de vous assurer qu'Orchestrator peut toujours récupérer une clé valide.

Orchestrator lit les clés API à partir du coffre de clés toutes les 15 minutes. Il s'agit du délai maximal auquel vous pouvez vous attendre avant la propagation de votre nouvelle clé.

Cette page vous a-t-elle été utile ?

Obtenez l'aide dont vous avez besoin
Formation RPA - Cours d'automatisation
Forum de la communauté UiPath
Logo Uipath blanc
Confiance et sécurité
© 2005-2024 UiPath. All rights reserved.