- Visão geral
- Requisitos
- Instalação
- Q&A: Deployment templates
- Configuração das máquinas
- Configurando o objectstore externo
- Configurando um registro externo do Docker
- Configuração do balanceador de carga
- Configuração do DNS
- Como configurar o Microsoft SQL Server
- Configuração dos certificados
- Instalação online de produção pronta para alta disponibilidade de vários nós
- Instalação offline de produção pronta para alta disponibilidade de vários nós
- Disaster Recovery - Instalando o cluster secundário
- Baixando os pacotes de instalação
- Parâmetros do install-uipath.sh
- Como habilitar o High Availability Add-on do Redis para o cluster
- Arquivo de configuração do Document Understanding
- Adicionando um nó de agente dedicado com suporte a GPU
- Adição de um nó de agente dedicado ao Task Mining
- Conexão do aplicativo Task Mining
- Adicionando um nó de agente dedicado para robôs do Automation Suite
- Pós-instalação
- Administração de cluster
- Monitoramento e alertas
- Migração e atualização
- Opções de migração
- Etapa 1: mover os dados da organização do Identity, de independente para o Automation Suite
- Etapa 2: restauração do banco de dados de produtos independente
- Etapa 3: backup do banco de dados da plataforma no Automation Suite
- Etapa 4: mesclando organizações no Automation Suite
- Etapa 5: atualização das strings de conexão do produto migradas
- Etapa 6: migração do Insights independente
- Etapa 7: exclusão do tenant padrão
- Executando uma migração de único tenant
- Configuração específica do produto
- Melhores práticas e manutenção
- Solução de problemas
- Como solucionar problemas dos serviços durante a instalação
- Como desinstalar o cluster
- Como limpar os artefatos offline para melhorar o espaço em disco
- Como limpar os dados do Redis
- Como habilitar o registro em log do Istio
- Como limpar logs manualmente
- Como limpar logs antigos armazenados no bucket do sf-logs
- Como desabilitar os logs de streaming para o AI Center
- Como depurar instalações do Automation Suite com falha
- Como excluir imagens do instalador antigo após a atualização
- Como limpar automaticamente instantâneos do Longhorn
- Como desabilitar o descarregamento de soma de verificação do TX
- Como definir manualmente o nível de log do ArgoCD como Info
- Como gerar o pull_secret_value codificado para registros externos
- Como lidar com cifras fracas no TLS 1.2
- Como trabalhar com certificados
- Como coletar dados de uso de DU com objectstore (Ceph) no cluster
- Como instalar o RKE2 SELinux em ambientes air-gapped
- Como limpar backups diferenciados antigos em um servidor NFS
- Não é possível executar uma instalação offline no SO RHEL 8.4
- Erro ao baixar o pacote
- A instalação offline falha devido a um binário ausente
- Problema de certificado na instalação offline
- A primeira instalação falha durante a configuração do Longhorn
- Erro de validação da string de conexão ao SQL
- Verificação de pré-requisito para o módulo iscsid do selinux falha
- Azure disk not marked as SSD
- Falha após a atualização do certificado
- Antivírus causa problemas de instalação
- Automation Suite not working after OS upgrade
- O Automation Suite requer que backlog_wait_time seja definido como 0
- Nó da GPU afetado por indisponibilidade de recurso
- Não é possível montar o volume devido a não estar pronto para cargas de trabalho
- Falha na coleta de logs do pacote de suporte
- A atualização de nó único falha no estágio de malha
- Cluster unhealthy after automated upgrade from 2021.10
- Upgrade fails due to unhealthy Ceph
- RKE2 não é iniciado devido a um problema de espaço
- A validação de SQL falha durante a atualização
- pod snapshot-controller-crds no estado CrashLoopBackOff após a atualização
- Falha ao carregar ou baixar dados no objectstore
- PVC resize does not heal Ceph
- Falha no redimensionamento do PVC
- Falha no redimensionamento do PVC do Objectstore
- Pod do Rook Ceph ou Looker travado no estado Init
- Erro de anexo de volume StatefulSet
- Falha ao criar volumes persistentes
- Patch de reclamação de armazenamento
- Falha de backup devido ao erro TooManySnapshots
- Todas as réplicas do Longhorn estão com falha
- Configurando um intervalo de tempo limite para os portais de gerenciamento
- Atualizar as conexões de diretório subjacentes
- Autenticação não funciona após migração
- kinit: não é possível encontrar o KDC para o realm <AD Domain> ao obter credenciais iniciais
- kinit: o Keytab não contém chaves adequadas para *** ao obter credenciais iniciais
- Falha na operação GSSAPI devido a código de status inválido
- Alarme recebido para trabalho com falha do Kerberos-tgt-update
- Provedor de SSPI: servidor não encontrado no banco de dados Kerberos
- Falha de login para usuário do AD devido a conta desabilitada
- ArgoCD login failed
- Falha ao obter a imagem do sandbox
- Os pods não são exibidos na UI do ArgoCD
- Falha de teste do Redis
- O servidor RKE2 falha ao iniciar
- Segredo não encontrado no namespace da UiPath
- O ArgoCD entra em estado Em andamento após a primeira instalação
- Problemas de acesso à conta somente leitura do ArgoCD
- Pods de MongoDB em CrashLoopBackOff ou provisionamento de PVC pendente após exclusão
- Unhealthy services after cluster restore or rollback
- Pods presos em Init:0/X
- Prometheus no estado CrashloopBackoff com erro de falta de memória (OOM)
- Métricas Ceph-rook ausentes nos painéis de monitoramento
- Os pods não podem se comunicar com o FQDN em um ambiente de proxy
- Falha ao configurar alertas por e-mail após a atualização
- Nenhum problema upstream íntegro
- O Document Understanding não está no menu de navegação esquerdo do Automation Suite
- Status de Falha ao criar uma sessão de rotulagem de dados
- Status de Falha ao tentar implantar uma habilidade de ML
- Trabalho de migração falha no ArgoCD
- Reconhecimento de escrita com o Extrator de formulários inteligente não está funcionando
- Falha na implantação de habilidade de ML devido à expiração do token
- Execução de alta disponibilidade com o Process Mining
- Falha na ingestão do Process Mining ao fazer logon usando o Kerberos
- Não é possível conectar-se ao banco de dados AutomationSuite_ProcessMining_Warehouse usando uma string de conexão em formato pyodbc.
- A instalação do Airflow falha com sqlalchemy.exc.ArgumentError: não foi possível analisar o URL rfc1738 da string ''
- Como adicionar uma regra de tabela de IP para usar a porta 1433 do SQL Server
- Usando a ferramenta de diagnóstico do Automation Suite
- Usando o pacote de suporte do Automation Suite
- Exploração de logs
Preparando o Orchestrator
Para migrar o Orchestrator da licença independente para o Automation Suite, você deve reunir definições e vários arquivos da instalação independente e aplicá-los à instalação do Automation Suite.
Dependendo das configurações que você usa no Orchestrator, você pode precisar preparar web.config, appSettings, armazenamento, NLog, armazenamentos de credenciais, chaves de criptografia e chave de criptografia por tenant.
Visão geral da migração
Para migrar o Orchestrator da licença independente para o Automation Suite, você deve reunir definições e vários arquivos da instalação independente e aplicá-los à instalação do Automation Suite.
Embora apenas parte das definições seja configurável no momento da instalação, todas devem estar disponíveis para configuração pós-instalação.
- Para configurar as definições no momento da instalação, adicione-as no arquivo
cluster_config.json; - A atualização das definições após a conclusão da instalação depende de qual é o escopo da configuração e se uma funcionalidade está disponível para configuração a partir dos parâmetros de aplicativo-de-aplicativos ou não.
You can store custom files that are needed inside the Orchestrator pods, such as assemblies or other storage files, in the built-in Ceph object store. The storage files are stored in a bucket for each tenant. The plugins are stored in the uipath bucket under orchestrator/plugins/nlog or orchestrator/plugins/securestore.
Você pode adicionar configuração personalizada da seguinte maneira:
- editando os parâmetros da aplicação no ArgoCD (substituições de parâmetros);
- editando os arquivos dentro do ConfigMap do Kubernetes
orchestrator-customconfiga partir do namespaceuipath.
Preparando web.config
A maioria das configurações web.config não tem um equivalente ou é implementada no Automation Suite usando outros mecanismos.
As opções que você precisa configurar são as seguintes:
security.requestFiltering.requestLimits.maxAllowedContentLength
security.requestFiltering.requestLimits.maxAllowedContentLength
Tome nota do valor dessa configuração para uso posterior. Decida se você precisa configurá-la no Automation Suite. Seu valor padrão é 300MiB.
Preparando AppSettings
Pode ser necessário migrar as alterações personalizadas feitas na seção appSettings ou secureAppSettings do arquivo de configuração UiPath.Orchestrator.dll.config. Você pode adicionar appSettings e secureAppSettings personalizados ao mapa de configuração orchestrator-customconfig.
Na seção appSettings do arquivo de configuração UiPath.Orchestrator.dll.config, identifique qualquer configuração modificada ou adicionada. Salve essas configurações em um arquivo .json para que estejam disponíveis em etapas posteriores.
Você pode descriptografar qualquer seção de configuração de aplicativo protegida com a opção de configuração protegida da CLI do Orchestrator. Você só precisa usar as configurações que alterou ou adicionou e ainda são relevantes no Automation Suite.
You can create the appsettings.json file as shown in the following example:
{
"ExampleSetting.Enabled": true,
"ExampleSetting.Type": "BasicExample",
"ExampleSetting.Count": 3
}
{
"ExampleSetting.Enabled": true,
"ExampleSetting.Type": "BasicExample",
"ExampleSetting.Count": 3
}
Preparando armazenamento
Decide what you need for the storage migration and if your current storage configuration stays the same or if you would instead let Automation Suite manage the storage for you. Automation Suite offers the option to store the blobs in Ceph, which can be used in all Orchestrator pods. In the case of a migration, you must copy the existing files to the current blob storage.
Se você estiver usando armazenamento do tipo FileSystem com uma pasta local, copie os dados da pasta de armazenamento para uma pasta em um nó do Automation Suite. Em seguida, utilizando um utilitário como rclone, você pode copiar os dados para o Orchestrator. Se você usa o Ceph, nenhuma configuração adicional será necessária, pois essa é a opção padrão.
Se você quiser usar o sistema de arquivos com um compartilhamento de rede do Windows, precisará configurar o armazenamento no aplicativo ArgoCD do Orchestrator. Recupere os dados de conexão para o compartilhamento de rede do Windows a partir da chave Storage.Location de sua configuração atual do Orchestrator. Como o Automation Suite é executado em máquinas Linux, você não pode contar com a autenticação integrada para acessar o compartilhamento de rede, portanto, precisa das credenciais de uma conta que possa acessá-lo.
Atualmente, apenas compartilhamentos de rede que usam o protocolo SMB são compatíveis. Compartilhamentos de rede que empregam NFS não são compatíveis.
Se você usar opções de armazenamento remoto, como Azure, AWS ou Minio, certifique-se de adicionar as configurações Storage.Location e Storage.Type ao arquivo appsettings.json.
Preparando o NLog
Você pode fazer as seguintes personalizações ao NLog:
- alterar os destinos existentes
- adicionar novos destinos
- adicionar extensões do NLog
Revise a seção NLog do arquivo de configuração e crie a configuração personalizada do NLog. Para habilitar o armazenamento de logs do robô no Elasticsearch, você pode fornecer o nome de usuário, a senha e o URI como parâmetros do Automation Suite, e o destino é configurado automaticamente. Para habilitar cenários personalizados para logs do robô, você precisa configurar o destino manualmente.
Se forem necessárias extensões NLog, crie uma pasta contendo todas as extensões e suas dependências.
For example, the folder could be named nlogextensions. By default, Orchestrator loads the following extensions, so you do not need to include them in the folder or the NLog configuration:
NLog.Targets.ElasticSearch
UiPath.Orchestrator.Logs.Elasticsearch
Microsoft.ApplicationInsights.NLogTarget
NLog.Extensions.AzureEventHub
NLog.Targets.ElasticSearch
UiPath.Orchestrator.Logs.Elasticsearch
Microsoft.ApplicationInsights.NLogTarget
NLog.Extensions.AzureEventHub
Crie o nlog.custom.configarquivo que contém as seções padrão: extensões, destinos e regras.
assemblyFileA seção de extensões é uma matriz de itens que especificam os conjuntos de extensão usando e o caminho do conjunto relativo à nlogextensionspasta .
O Orchestrator define destinos e regras NLog que são configurados, ou parcialmente configurados, para casos de uso comuns. Quando a personalização é necessária para esses destinos, você só precisa incluir as propriedades modificadas na configuração do NLog. Você não pode remover propriedades existentes da configuração predefinida; você pode, no entanto, alterá-las. No pod do Orchestrator, os destinos incluídos por padrão são definidos no local /opt/app-root/app/nlog.config.json.
Example: nlog.custom.config file that writes logs to Azure Blob:
{
"NLog": {
"autoReload": false,
"throwConfigExceptions": false,
"internalLogLevel": "Warn",
"internalLogToConsole": true,
"default-wrapper": {
"type": "UiPrettyExceptionWrapper"
},
"targets": {
"robotElasticBuffer": {
"type": "BufferingWrapper",
"flushTimeout": 5000,
"target": {
"type": "ElasticSearch",
"name": "robotElastic",
"requireAuth": false,
"uri": "",
"username": "",
"password": "",
"index": "${event-properties:item=indexName}-${date:format=yyyy.MM}",
"documentType": "logEvent",
"includeAllProperties": true,
"layout": "${message}",
"excludedProperties": "agentSessionId,tenantId,indexName"
}
},
"serverElasticBuffer": {
"type": "BufferingWrapper",
"flushTimeout": 5000,
"target": {
"type": "ElasticSearch",
"name": "serverElastic",
"requireAuth": false,
"uri": "",
"username": "",
"password": "",
"index": "serverdiagnostics-${date:format=yyyy.MM}",
"documentType": "logEvent",
"includeAllProperties": true,
"layout": "${machinename} ${message}"
}
},
"database": {
"type": "AsyncWrapper",
"overflowAction": "Block",
"queueLimit": 100,
"fullBatchSizeWriteLimit": 2,
"batchSize": 50,
"timeToSleepBetweenBatches": 1,
"optimizeBufferReuse": true,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Default}",
"keepConnection": "true",
"isolationLevel": "ReadCommitted",
"commandText": "INSERT INTO dbo.Logs (OrganizationUnitId, TenantId, TimeStamp, Level, WindowsIdentity, ProcessName, JobKey, Message, RawMessage, RobotName, MachineId, UserKey, HostMachineName) VALUES (@organizationUnitId, @tenantId, @timeStamp, @level, @windowsIdentity, @processName, @jobId, @message, @rawMessage, @robotName, @machineId, @userKey, @hostMachineName)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@level",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@windowsIdentity",
"layout": "${event-properties:item=windowsIdentity}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@message",
"layout": "${message}"
},
{
"name": "@rawMessage",
"layout": "${event-properties:item=rawMessage}"
},
{
"name": "@robotName",
"layout": "${event-properties:item=robotName}"
},
{
"name": "@machineId",
"layout": "${event-properties:item=machineId}"
},
{
"name": "@userKey",
"layout": "${event-properties:item=userKey}"
},
{
"name": "@hostMachineName",
"layout": "${event-properties:item=machineName}"
}
]
}
},
"monitoring": {
"type": "BufferingWrapper",
"bufferSize": 100,
"flushTimeout": 5000,
"slidingTimeout": false,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Default}",
"keepConnection": "true",
"commandText": "insert into stats.ErrorLogs (OrganizationUnitId, TenantId, TimeStamp, CorrelationId, Source, Level, RobotId, ProcessName, JobKey, QueueDefinitionId, Message) values (@organizationUnitId, @tenantId, @timestamp, @correlationId, @logSource, @level, @robotId, @processName, @jobId, @queueId, @message)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timestamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@correlationId",
"layout": "${event-properties:item=Correlation}"
},
{
"name": "@logSource",
"layout": "${event-properties:item=logSource}"
},
{
"name": "@level",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@robotId",
"layout": "${event-properties:item=robotId}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@queueId",
"layout": "${event-properties:item=queueId}"
},
{
"name": "@message",
"layout": "${message}"
}
]
}
},
"insightsRobotLogs": {
"type": "BufferingWrapper",
"bufferSize": 100,
"flushTimeout": 5000,
"slidingTimeout": false,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Insights}",
"keepConnection": "true",
"commandText": "insert into dbo.RobotLogs (OrganizationUnitId, TenantId, TimeStamp, WindowsIdentity, ProcessName, JobKey, RawMessage, RobotName, MachineId, Message, LevelOrdinal, NumCustomFields) values (@organizationUnitId, @tenantId, @timeStamp, @windowsIdentity, @processName, @jobId, @rawMessage, @robotName, @machineId, @message, @levelOrdinal, @numCustomFields)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@windowsIdentity",
"layout": "${event-properties:item=windowsIdentity}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@rawMessage",
"layout": "${event-properties:item=rawMessage}"
},
{
"name": "@robotName",
"layout": "${event-properties:item=robotName}"
},
{
"name": "@machineId",
"layout": "${event-properties:item=machineId}"
},
{
"name": "@message",
"layout": "${message}"
},
{
"name": "@levelOrdinal",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@numCustomFields",
"layout": "${ui-robot-logs-num-custom-fields}"
}
]
}
},
"stdout": {
"type": "Console",
"layout": {
"type": "JsonLayout",
"includeAllProperties": true,
"Attributes": [
{
"name": "ts",
"layout": "${longdate}"
},
{
"name": "traceId",
"layout": "${aspnet-TraceIdentifier}"
},
{
"name": "level",
"layout": "${level:upperCase=true}"
},
{
"name": "logger",
"layout": "${logger}"
},
{
"name": "message",
"layout": "${message}"
},
{
"name": "exception",
"layout": "${onexception:${ui-pretty-exception}}"
}
]
}
}
},
"rules": {
"10_Robot_Insights": {
"logger": "Robot.*",
"ruleName": "insightsRobotLogsRule",
"minLevel": "Info",
"writeTo": "insightsRobotLogs",
"enabled": false,
"final": false,
"filterDefaultAction": "Log"
},
"20_Robot_Primary": {
"logger": "Robot.*",
"ruleName": "primaryRobotLogsTarget",
"writeTo": "database",
"minLevel": "Trace",
"maxLevel": "Fatal",
"final": true
},
"30_Business_Exceptions": {
"logger": "BusinessException.*",
"minLevel": "Info",
"writeTo": "",
"enabled": true,
"final": true
},
"40_Monitoring": {
"logger": "Monitoring.*",
"minLevel": "Warn",
"maxLevel": "Fatal",
"writeTo": "monitoring",
"final": true
},
"50_Quartz": {
"logger": "Quartz.*",
"minLevel": "Warn",
"writeTo": "stdout",
"final": true
},
"60_Quartz_Blackhole": {
"logger": "Quartz.*",
"maxLevel": "Warn",
"writeTo": "",
"final": true
},
"70_Final": {
"logger": "*",
"minLevel": "Info",
"maxLevel": "Fatal",
"writeTo": "stdout",
"final": false
}
}
}
}
{
"NLog": {
"autoReload": false,
"throwConfigExceptions": false,
"internalLogLevel": "Warn",
"internalLogToConsole": true,
"default-wrapper": {
"type": "UiPrettyExceptionWrapper"
},
"targets": {
"robotElasticBuffer": {
"type": "BufferingWrapper",
"flushTimeout": 5000,
"target": {
"type": "ElasticSearch",
"name": "robotElastic",
"requireAuth": false,
"uri": "",
"username": "",
"password": "",
"index": "${event-properties:item=indexName}-${date:format=yyyy.MM}",
"documentType": "logEvent",
"includeAllProperties": true,
"layout": "${message}",
"excludedProperties": "agentSessionId,tenantId,indexName"
}
},
"serverElasticBuffer": {
"type": "BufferingWrapper",
"flushTimeout": 5000,
"target": {
"type": "ElasticSearch",
"name": "serverElastic",
"requireAuth": false,
"uri": "",
"username": "",
"password": "",
"index": "serverdiagnostics-${date:format=yyyy.MM}",
"documentType": "logEvent",
"includeAllProperties": true,
"layout": "${machinename} ${message}"
}
},
"database": {
"type": "AsyncWrapper",
"overflowAction": "Block",
"queueLimit": 100,
"fullBatchSizeWriteLimit": 2,
"batchSize": 50,
"timeToSleepBetweenBatches": 1,
"optimizeBufferReuse": true,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Default}",
"keepConnection": "true",
"isolationLevel": "ReadCommitted",
"commandText": "INSERT INTO dbo.Logs (OrganizationUnitId, TenantId, TimeStamp, Level, WindowsIdentity, ProcessName, JobKey, Message, RawMessage, RobotName, MachineId, UserKey, HostMachineName) VALUES (@organizationUnitId, @tenantId, @timeStamp, @level, @windowsIdentity, @processName, @jobId, @message, @rawMessage, @robotName, @machineId, @userKey, @hostMachineName)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@level",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@windowsIdentity",
"layout": "${event-properties:item=windowsIdentity}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@message",
"layout": "${message}"
},
{
"name": "@rawMessage",
"layout": "${event-properties:item=rawMessage}"
},
{
"name": "@robotName",
"layout": "${event-properties:item=robotName}"
},
{
"name": "@machineId",
"layout": "${event-properties:item=machineId}"
},
{
"name": "@userKey",
"layout": "${event-properties:item=userKey}"
},
{
"name": "@hostMachineName",
"layout": "${event-properties:item=machineName}"
}
]
}
},
"monitoring": {
"type": "BufferingWrapper",
"bufferSize": 100,
"flushTimeout": 5000,
"slidingTimeout": false,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Default}",
"keepConnection": "true",
"commandText": "insert into stats.ErrorLogs (OrganizationUnitId, TenantId, TimeStamp, CorrelationId, Source, Level, RobotId, ProcessName, JobKey, QueueDefinitionId, Message) values (@organizationUnitId, @tenantId, @timestamp, @correlationId, @logSource, @level, @robotId, @processName, @jobId, @queueId, @message)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timestamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@correlationId",
"layout": "${event-properties:item=Correlation}"
},
{
"name": "@logSource",
"layout": "${event-properties:item=logSource}"
},
{
"name": "@level",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@robotId",
"layout": "${event-properties:item=robotId}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@queueId",
"layout": "${event-properties:item=queueId}"
},
{
"name": "@message",
"layout": "${message}"
}
]
}
},
"insightsRobotLogs": {
"type": "BufferingWrapper",
"bufferSize": 100,
"flushTimeout": 5000,
"slidingTimeout": false,
"target": {
"type": "Database",
"dbProvider": "sqlserver",
"connectionString": "${ui-connection-strings:item=Insights}",
"keepConnection": "true",
"commandText": "insert into dbo.RobotLogs (OrganizationUnitId, TenantId, TimeStamp, WindowsIdentity, ProcessName, JobKey, RawMessage, RobotName, MachineId, Message, LevelOrdinal, NumCustomFields) values (@organizationUnitId, @tenantId, @timeStamp, @windowsIdentity, @processName, @jobId, @rawMessage, @robotName, @machineId, @message, @levelOrdinal, @numCustomFields)",
"parameters": [
{
"name": "@organizationUnitId",
"layout": "${event-properties:item=organizationUnitId}"
},
{
"name": "@tenantId",
"layout": "${event-properties:item=tenantId}"
},
{
"name": "@timeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"name": "@windowsIdentity",
"layout": "${event-properties:item=windowsIdentity}"
},
{
"name": "@processName",
"layout": "${event-properties:item=processName}"
},
{
"name": "@jobId",
"layout": "${event-properties:item=jobId}"
},
{
"name": "@rawMessage",
"layout": "${event-properties:item=rawMessage}"
},
{
"name": "@robotName",
"layout": "${event-properties:item=robotName}"
},
{
"name": "@machineId",
"layout": "${event-properties:item=machineId}"
},
{
"name": "@message",
"layout": "${message}"
},
{
"name": "@levelOrdinal",
"layout": "${event-properties:item=levelOrdinal}"
},
{
"name": "@numCustomFields",
"layout": "${ui-robot-logs-num-custom-fields}"
}
]
}
},
"stdout": {
"type": "Console",
"layout": {
"type": "JsonLayout",
"includeAllProperties": true,
"Attributes": [
{
"name": "ts",
"layout": "${longdate}"
},
{
"name": "traceId",
"layout": "${aspnet-TraceIdentifier}"
},
{
"name": "level",
"layout": "${level:upperCase=true}"
},
{
"name": "logger",
"layout": "${logger}"
},
{
"name": "message",
"layout": "${message}"
},
{
"name": "exception",
"layout": "${onexception:${ui-pretty-exception}}"
}
]
}
}
},
"rules": {
"10_Robot_Insights": {
"logger": "Robot.*",
"ruleName": "insightsRobotLogsRule",
"minLevel": "Info",
"writeTo": "insightsRobotLogs",
"enabled": false,
"final": false,
"filterDefaultAction": "Log"
},
"20_Robot_Primary": {
"logger": "Robot.*",
"ruleName": "primaryRobotLogsTarget",
"writeTo": "database",
"minLevel": "Trace",
"maxLevel": "Fatal",
"final": true
},
"30_Business_Exceptions": {
"logger": "BusinessException.*",
"minLevel": "Info",
"writeTo": "",
"enabled": true,
"final": true
},
"40_Monitoring": {
"logger": "Monitoring.*",
"minLevel": "Warn",
"maxLevel": "Fatal",
"writeTo": "monitoring",
"final": true
},
"50_Quartz": {
"logger": "Quartz.*",
"minLevel": "Warn",
"writeTo": "stdout",
"final": true
},
"60_Quartz_Blackhole": {
"logger": "Quartz.*",
"maxLevel": "Warn",
"writeTo": "",
"final": true
},
"70_Final": {
"logger": "*",
"minLevel": "Info",
"maxLevel": "Fatal",
"writeTo": "stdout",
"final": false
}
}
}
}
A pasta de extensões nlogextensions é copiada no armazenamento de objeto no local de plug-ins conhecidos. A Ferramenta de Configuração do Orchestrator pode fazer isso automaticamente atualizando, simultaneamente, a configuração do NLog. O script altera nlog.custom.config automaticamente para prefixar cada assemblyFile da matriz de extensões com /var/orchestrator/plugins/nlog/ se ainda não estiver prefixado.
Preparando armazenamentos de credenciais
Você pode migrar plug-ins personalizados de armazenamentos de credenciais para o Automation Suite. Para fazer isso, atualize a configuração no mapa de configuração e copie os conjuntos de plug-ins para o bucket de armazenamento de objetos correspondente.
- Os plug-ins devem funcionar no Linux.
- Os plugins não devem gravar em nenhum armazenamento além de
/tmp.
Os seguintes plug-ins de armazenamento de credenciais são implantados automaticamente no Orchestrator via Automation Suite:
UiPath.Orchestrator.AzureKeyVault.SecureStore.dllUiPath.Orchestrator.SecureStore.CyberArkCCP.dll
O Automation Suite não oferece suporte ao CyberArk AIM, portanto, você não pode migrá-lo. Recomendamos migrar para o armazenamento de credenciais CyberArkCCP.
Se você usar qualquer outro plug-in dos Armazenamentos de Credenciais, copie-o em uma pasta, como securestoreplugins.
Adicione as configurações do Armazenamento de Credenciais no arquivo appsettings.json da seguinte maneira:
- para desabilitar os plug-ins padrão, adicione a configuração
Plugins.SecureStores.Defaultcom um valor vazio de string emappsettings.json; - adicione todos os plug-ins personalizados à configuração
Plugins.SecureStores, separados por;emappsettings.json; - adicione qualquer configuração de plug-in personalizado da seguinte maneira:
Plugins.SecureStores.<<FriendlyName>>.<<SettingName>>.
A pasta do plug-in securestoreplugins é copiada no armazenamento de objetos no local conhecido de plug-ins.
Os assemblies em Plugins.SecureStores são carregados a partir desta pasta.
Os assemblies de Plugins.SecureStore.Default são carregados a partir da pasta de plug-ins na pasta do aplicativo Orchestrator.
Preparando a chave de criptografia
Por padrão, no momento da instalação, o Orchestrator gera uma Chave de Criptografia a ser usada para as informações confidenciais no banco de dados. Você deve migrar essa chave se quiser reutilizar um banco de dados em uma nova implantação do Orchestrator.
Para recuperar a chave de criptografia, siga as seguintes etapas:
- Descriptografe a seção
secureAppSettingsdo arquivoUiPath.Orchestrator.dll.config, se necessário. Para obter detalhes, consulte Criptografia das seções do UiPath.Orchestrator.dll.config. - Recupere a chave de criptografia de
UiPath.Orchestrator.dll.config. Para obter detalhes, consulte EncryptionKey.
Preparando a chave de criptografia por Tenant
O certificado de chave de criptografia é instalado no repositório de certificados do Windows. Você deve fornecer o certificado ao ambiente do Automation Suite para que esteja disponível para os pods do Orchestrator.
As configurações CertificatesStoreLocation e Azure.KeyVault.CertificateThumbprint não são mais necessárias no Automation Suite, mas você pode usar CertificatePassword se necessário.
Siga as seguintes etapas:
- Revise o appSettings e obtenha as configurações
AzureKeyVault.*. - Armazene
Azure.KeyVault.VaultAddress,Azure.KeyVault.ClientIdeAzure.KeyVault.DirectoryIdpara uso posterior. - Recupere o certificado e, se necessário, a senha do certificado.