- Introdução
- Melhores práticas
- Tenant
- Sobre o contexto do tenant
- Pesquisa de recursos em um tenant
- Gerenciamento de robôs
- Conectar Robôs ao Orchestrator
- Exemplos de configuração
- Armazenamento de credenciais do robô no CyberArk
- Configuração de robôs assistidos
- Configuração de robôs não assistidos
- Armazenando senhas de Unattended Robots no Azure Key Vault (somente leitura)
- Armazenamento de credenciais de robôs não assistidos no HashiCorp Vault (somente leitura)
- Exclusão de sessões não assistidas desconectadas e não responsivas
- Autenticação do robô
- Autenticação de robôs com credenciais de cliente
- Auditar
- Serviço Catálogo de recursos
- Contexto de Pastas
- Automações
- Processos
- Trabalhos
- Gatilhos
- Logs
- Sobre logs
- Gerenciamento de logs no Orchestrator
- Níveis de Registro de Logs
- Logs do Orchestrator
- Monitoramento
- Filas
- Ativos
- Armazenar Buckets
- Test Suite - Orchestrator
- Administração do host
- Servidor de Identidade
- Autenticação
- Administração da organização
- Outras configurações
- Integrações
- Robôs Clássicos
- Solução de problemas
Logs do Orchestrator
Esses são logs de diagnóstico gerados pelo UiPath Orchestrator sobre seu comportamento.
UiPath.Orchestrator.dll.config
, sob a tag <nlog>
.
UiPath.Orchestrator.dll.config
:
<target xsi:type="EventLog" name="eventLog" layout="${message}" source="Orchestrator" log="Application" />
<logger name="*" minlevel="Info" writeTo="eventLog" />
Os logs gerados pelo Agendador de trabalhos têm um destino e agente 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" />
Exemplo:
Could not create Quartz Job
Os logs gerados por negócios e outras regras de validação têm um destino e agente de log 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" />
Esses tipos de mensagens de erro serão registrados em log no Visualizador de eventos nos seguintes casos:
-
Problemas de validação, como:
Invalid username/email address or password.
The machine name DOC is already taken
-
conflitos de negócios, como:
License expired!
The floating robot's session is already active on machine ROQADOCS06!
The robots already have pending jobs for this Process.
-
exceções não encontradas, como:
QueueName1 does not exist.
<nlog>
seção do arquivo UiPath.Orchestrator.dll.config
.
UiPath.Orchestrator.dll.config
pode ser configurado para enviá-los a um banco de dados diferente.
A página Logs exibe informações da tabela Logs do Banco de dados padrão. Portanto, se essa seção não existir ou os logs forem salvos em um banco de dados diferente, a página ficará vazia. Todos os parâmetros devem estar de acordo com o esquema da tabela, que se parece com isso:
<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" />
UiPath.Orchestrator.dll.config
. Uma lista de destinos disponíveis pode ser encontrada aqui.
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]
GO
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]
GO
<nlog>
.
Para as versões inferiores à 8.0 do 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="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 as versões 8.0 ou superiores do 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="" 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 o Elasticsearch versões 8.0 e superiores funcione devidamente, esses parâmetros são definidos da seguinte forma:
documentType
está vazio.enableApiVersioningHeader
está definido comotrue
.
Versões do Elasticsearch anteriores a 7.16.3
disableProductCheckStatus
como true
no destino Nlog (<target xsi:type="ElasticSearch"
).
false
.
Autenticação de nome de usuário e senha
Para habilitar a autenticação por meio do nome de usuário e senha, você precisa realizar as seguintes etapas:
- Opção 1: se você não usar um destino do NLog, é necessário configurar os seguintes parâmetros:
Logs.Elasticsearch.Username
eLogs.Elasticsearch.Password
. Certifique-se de que seus valores correspondam às configurações do Elasticsearch na Etapa 1. -
Opção 2: se
Logs.RobotLogs.ReadTarget
estiver definido como um destino do NLog, (por exemplo,robotElasticBuffer
) e a configuração deLogs.Elasticsearch.Nodes
não estiver especificada, configure o destino adicionando o seguinte:requireAuth="true" username="XPACKuser" password="p@$$w0rd"
. Certifique-se de que esses valores de parâmetros correspondam às configurações do Elasticsearch na Etapa 1.Para um exemplo de configuração, consulte o seguinte:
<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> - Opção 3: se
Logs.RobotLogs.ReadTarget
estiver definido como um destino do NLog, (por exemplo,robotElasticBuffer
) e um nó do Elasticsearch estiver especificado por meio da configuração deLogs.Elasticsearch.Nodes
, é necessário configurá-lo explicitamente (já que ele substitui as configurações de destino do NLog), e certifique-se de adicionar também o seguinte:requireAuth="true" username="XPACKuser" password="p@$$w0rd"
. Certifique-se de que esses valores de parâmetros correspondam às configurações do Elasticsearch na Etapa 1.
Autenticação OAuth 2
Para alternar para o OAuth2 como um método de autenticação para o Elasticsearch, você precisa realizar as seguintes etapas. Observe que você precisa fornecer suas credenciais atuais para alternar para este método de autenticação baseado em token.
Autenticação de chave de API
Expiração da chave de API
Por padrão, as chaves de API não expiram, mas você ainda pode optar por definir uma data de expiração para elas.
Se sua chave de API estiver configurada para expirar, você deve gerar uma nova e armazená-la no cofre de chaves antes da data de expiração, para garantir que o Orchestrator sempre possa recuperar uma chave válida.
O Orchestrator lê chaves de API do cofre de chaves a cada 15 minutos, portanto, esse é o período máximo de atraso que você pode esperar antes que sua nova chave seja propagada.