- 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
- Autenticação do SmartCard
- 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
- Teste do Orquestrador
- Outras configurações
- Integrações
- Robôs Clássicos
- Administração do host
- Sobre o nível do host
- Gerenciamento dos administradores do sistema
- Gerenciando Tenants
- Configurando notificações de e-mail do sistema
- Logs de auditoria para o portal do host
- Modo de Manutenção
- Administração da organização
- Solução de problemas
Logs de diagnóstico do Orchestrator
Esses são logs de diagnóstico gerados pelo UiPath Orchestrator sobre seu comportamento.
Habilitação de logs de diagnóstico do UiPath Orchestrator
Os logs de diagnóstico do UiPath Orchestrator ficam habilitados após a sua instalação com sucesso. Eles dependem da infraestrutura do NLog e sua configuração pode ser encontrada no arquivo UiPath.Orchestrator.dll.config, sob a tag <nlog>.
Lembre-se de que tanto as exceções do servidor do Orchestrator, quanto o rastreamento de pilha na janela Detalhes do trabalho, serão registrados em log em inglês, independentemente de qual idioma tenha sido escolhido pelo usuário.
Destinos dos logs de diagnóstico do UiPath Orchestrator
Todos os logs de aplicativos serão registrados no Visualizador de eventos no nível de registro em log mínimo de Informações. Isso é especificado pelas seguintes linhas no arquivo 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.
Logs de execução do Orchestrator
The Orchestrator Execution Logs are sent by the Robots connected to it and are displayed in the Logs section of the Jobs or Robots pages. The application receives the data from the Robots, adds its own parameters (TenantID, FolderID), and forwards the messages to different targets, as specified in the <nlog> section from the UiPath.Orchestrator.dll.config file.
Destinos dos logs de execução do Orchestrator
Por padrão, todos os logs do UiPath Robot são enviados para a tabela Logs do Banco de dados padrão do Orchestrator, onde o UiPath Orchestrator também armazena outras informações.
Você pode, no entanto, optar por enviar logs do UiPath Robot para um banco de dados diferente configurando-o na seção target xsi:type="Database" connectionString="..." do arquivo UiPath.Orchestrator.dll.config.
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" />
Outros destinos podem ser adicionados aos logs, configurando o arquivo UiPath.Orchestrator.dll.config. Uma lista de destinos disponíveis pode ser encontrada aqui.
Se a quantidade de logs de Robôs armazenada na tabela for maior que 1 milhão, recomendamos criar o seguinte índice para um desempenho de pesquisa melhorado:
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
Servidor Elasticsearch
Por padrão, há um destino do Elasticsearch configurado a partir do script de instalação. O índice é diferente para cada tenant, mas isso pode ser configurado a partir do destino especificado na seção <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:
documentTypeestá vazio.enableApiVersioningHeaderestá definido comotrue.
Versões do Elasticsearch anteriores a 7.16.3
Embora a versão 7.16.3 do Elasticsearch seja preferida, você pode optar por usar uma versão anterior definindo o parâmetro disableProductCheckStatus como true no destino Nlog (<target xsi:type="ElasticSearch").
Este parâmetro está oculto e seu valor padrão é false.
A opção de salvar logs do robô em um servidor do Elasticsearch só se torna efetiva depois que você o configura, e não é aplicada retroativamente. Isso significa que você não terá mais acesso a quaisquer logs que já estavam no banco de dados no momento em que você configurou a opção, porque os logs só podem ser recuperados e exibidos a partir de um único destino.
Autenticação do X-PACK
Por padrão, as funcionalidades de segurança do Elasticsearch serão desabilitadas se você tiver uma licença básica ou de teste. É altamente recomendável que você as habilite.
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:
-
Configure o servidor do Elasticsearch da seguinte maneira:
-
Adicione a configuração
xpack.security.enabledao arquivo de configuraçãoelasticsearch.yml. -
Configure um nome de usuário e senha.
Para obter mais detalhes, consulte a documentação do Elasticsearch.
-
-
Configure o arquivo
UiPath.Orchestrator.dll.configdo Orchestrator da seguinte maneira:
-
Opção 1: se você não usar um destino do NLog, é necessário configurar os seguintes parâmetros:
Logs.Elasticsearch.UsernameeLogs.Elasticsearch.Password. Certifique-se de que seus valores correspondam às configurações do Elasticsearch na Etapa 1. -
Opção 2: se
Logs.RobotLogs.ReadTargetestiver definido como um destino do NLog, (por exemplo,robotElasticBuffer) e a configuração deLogs.Elasticsearch.Nodesnã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.ReadTargetestiver 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.
-
Configure o servidor do Elasticsearch da seguinte maneira:
a. Habilite o TLS (HTTPS) para a camada de transporte.
b. Atualize as seguintes configurações no arquivo de configuração
elasticsearch.yml:-
xpack.security.authc.token.enabled: true -
xpack.security.enabled: true -
xpack.security.authc.token.timeout– Essa configuração é opcional e controla o tempo de validade de um token. Por padrão, seu valor fica definido como 20 minutos.Para obter mais detalhes, consulte a documentação do Elasticsearch.
-
-
Atualize os parâmetros a seguir no arquivo
UiPath.Orchestrator.dll.configdo Orchestrator para refletir as configurações que você escolheu na Etapa 1.-
Logs.Elasticsearch.TlsEnabled = ”true”– Por padrão, esse parâmetro fica definido comotruee garante que o TLC (HTTPS) esteja habilitado. -
Logs.Elasticsearch.OAuthEnabled = ”true”– Por padrão, esse parâmetro fica definido comofalse. Para mais informações sobre isso, consulteLogs.Elasticsearch.OAuthEnabled. -
Logs.Elasticsearch.OAuthExpireInSeconds = ”1200”- Este parâmetro é opcional a menos que o valor padrão de1200seja alterado na configuraçãoxpack.security.authc.token.timeoutdo Elasticsearch. Este parâmetro deve ter o mesmo valor que na configuração do Elasticsearch. Para mais informações sobre isso, consulteLogs.Elasticsearch.OAuthExpireInSeconds.Observação:As duas primeiras etapas ajudam a configurar um mecanismo de autenticação baseado em token para a leitura de logs. Se você usar o NLog, uma etapa adicional é necessária.
-
-
To enable OAuth2 for Nlog, make sure to also configure the following parameter in Orchestrator's
UiPath.Orchestrator.dll.configfile. Note that you must fill in the username and password for authentication in Elasticsearch because the initial token is generated based on those credentials.-
OAuthEnabled = “true”- Por padrão, ele é definido comofalse. Para obter mais informações, consulte a página UiPath.Orchestrator.dll.config.Importante:Se
Logs.RobotLogs.ReadTargetestiver definido como um destino de NLog (por exemplo,robotElasticBuffer) e a configuraçãoLogs.Elasticsearch.Nodesnão estiver especificada, então oLogs.Elasticsearch.OAuthEnabledserá preenchido a partir da configuração do destino do NLog. A mesma lógica se aplica para o nome de usuário e senha.
-
Autenticação de chave de API
Para habilitar a autenticação por meio da chave de API, siga as etapas descritas abaixo.
-
Gere a chave de API seguindo estas etapas.
-
Armazene a chave de API como um segredo em seu cofre de chaves do Azure.
-
Configure os seguintes parâmetros de destino do Nlog com seus dados, criando assim uma conexão entre o Orchestrator e seu cofre de chaves que permite que a chave seja recuperada:
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"Os seguintes parâmetros precisam ser editados com seus valores:
<SecretName>- o nome que você definiu para sua chave de API no cofre de chaves<KeyVaultUri>- o URI do seu cofre de chaves<KeyVaultDirectoryId>- seu ID de diretório do cofre de chaves<KeyVaultClientId>- seu ID do cliente do cofre de chaves<KeyVaultCertificateThumbprint>- a impressão digital do seu certificado de cofre de chavesCurrentUser/LocalMachine- o local no qual o certificado é armazenado
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.