- 概述
- 要求
- 安装
- 安装后
- 集群管理
- 监控和警示
- 迁移和升级
- 特定于产品的配置
- 最佳实践和维护
- 故障排除
- 无法获取沙盒映像
- Pod 未显示在 ArgoCD 用户界面中
- Redis 探测器失败
- RKE2 服务器无法启动
- 在 UiPath 命名空间中找不到密码
- ArgoCD 在首次安装后进入“进行中”状态
- 意外不一致;手动运行 fsck
- MongoDB Pod 处于 CrashLoopBackOff 状态或在删除后处于“等待 PVC 配置”状态
- MongoDB Pod 从 4.4.4-ent 升级到 5.0.7-ent 失败
- 集群还原或回滚后服务运行状况不佳
- Pod 在 Init:0/X 中卡住
- Prometheus 处于 CrashLoopBackoff 状态,并出现内存不足 (OOM) 错误
- 监控仪表板中缺少 Ceph-rook 指标
- 使用 Automation Suite 诊断工具
- 使用 Automation Suite 支持包工具
- 探索日志
正在准备 Orchestrator
要将 Orchestrator 从独立安装迁移到 Automation Suite,您必须从独立安装中收集设置和各种文件,并将其应用于 Automation Suite 安装。
web.config
、 appSettings
、存储、NLog、凭据存储、加密密钥和加密密钥。
要将 Orchestrator 从独立安装迁移到 Automation Suite,您必须从独立安装中收集设置和各种文件,并将其应用于 Automation Suite 安装。
虽然在安装时只能配置部分设置,但所有设置都应可用于安装后配置。
- 如要在安装时配置设置,请将其添加到
cluster_config.json
文件中; - 在安装完成后更新设置取决于设置的作用域,以及某个功能是否可用于通过 app-of-apps 参数进行配置。
orchestrator/plugins/nlog
或 orchestrator/plugins/securestore
下的 uipath
存储桶中。
您可以按如下方式添加自定义配置:
- 通过编辑 ArgoCD 中的应用程序参数(参数覆盖);
- 通过编辑 Kubernetes 配置映射
orchestrator-customconfig
中命名空间uipath
中的文件。
web.config
设置没有等效项,或者在 Automation Suite 中使用其他机制实现。
您确实需要配置以下选项:
security.requestFiltering.requestLimits.maxAllowedContentLength
security.requestFiltering.requestLimits.maxAllowedContentLength
记下此设置的值以备后用。决定是否需要在 Automation Suite 中对其进行配置。其默认值为 300MiB。
UiPath.Orchestrator.dll.config
配置文件的 appSettings
或 secureAppSettings
部分中进行的自定义更改。您可以将自定义 appSettings
和 secureAppSettings
添加到 orchestrator-customconfig
配置映射。
UiPath.Orchestrator.dll.config
配置文件的 appSettings
部分中,标识所有已修改或添加的设置。将这些设置保存在 .json
文件中,以便在后续步骤中使用。
您可以使用 Orchestrator CLI 保护配置选项解密任何受保护的应用程序配置部分。您只需使用已更改或添加且在 Automation Suite 中仍然相关的设置。
appSettings.custom.json
文件,如以下示例所示:
{
"ExampleSetting.Enabled": true,
"ExampleSetting.Type": "BasicExample",
"ExampleSetting.Count": 3
}
{
"ExampleSetting.Enabled": true,
"ExampleSetting.Type": "BasicExample",
"ExampleSetting.Count": 3
}
决定存储迁移所需的内容,以及当前的存储配置是否保持不变,或者是否让 Automation Suite 为您管理存储。Automation Suite 提供了将 Blob 存储在 Ceph 中的选项,该选项可用于所有 Orchestrator Pod。在迁移的情况下,必须将现有文件复制到当前 Blob 存储。
rclone
等实用程序将数据复制到 Orchestrator。 如果您使用 Ceph,则不需要其他配置,因为这是默认选项。
Storage.Location
键,从当前的 Orchestrator 配置中检索与 Windows 网络共享的连接数据。由于 Automation Suite 在 Linux 计算机上运行,因此您不能依赖集成身份验证来访问网络共享,而是需要可以访问它的帐户的凭据。
Storage.Location
和 Storage.Type
设置添加到 appSettings.custom.json
中。
您可以对 NLog 进行以下自定义:
- 更改现有目标
- 添加新目标
- 添加 NLog 扩展程序
查看配置文件的 NLog 部分,并构建 NLog 自定义配置。要在 Elasticsearch 中启用机器人日志存储,您可以提供用户名、密码和 URI 作为 Automation Suite 参数,然后系统会自动配置目标。要为机器人日志启用自定义方案,您需要手动配置目标。
如果需要 NLog 扩展程序,请创建一个包含所有扩展程序及其依赖项的文件夹。
nlogextensions
。默认情况下,Orchestrator 加载以下扩展程序,因此您无需将它们包含在文件夹或 NLog 配置中:
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
nlog.custom.config
文件:扩展程序、目标和规则。
assemblyFile
指定扩展程序集的一系列项目,以及程序集相对于 nlogextensions
文件夹的路径。
/opt/app-root/app/nlog.config.json
位置。
nlog.custom.config
文件:
{
"NLog": {
"autoReload": false,
"throwConfigExceptions": false,
"internalLogLevel": "Warn",
"internalLogToConsole": true,
"default-wrapper": {
"type": "UiPrettyExceptionWrapper"
},
"extensions": [
{ "assembly": "UiPath.Orchestrator.Logs.DatabaseBulk.NLogTarget" }
],
"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": 60,
"timeToSleepBetweenBatches": 1,
"optimizeBufferReuse": true,
"target": {
"type": "DatabaseBulk",
"connectionString": "${ui-connection-strings:item=Default}",
"tableName": "[dbo].[Logs]",
"batchSize": "20",
"parameters": [
{
"dbType": "BigInt",
"name": "OrganizationUnitId",
"propertyItem": "organizationUnitId"
},
{
"dbType": "Int",
"name": "TenantId",
"propertyItem": "tenantId"
},
{
"dbType": "DateTime",
"name": "TimeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"dbType": "Int",
"name": "Level",
"propertyItem": "levelOrdinal"
},
{
"dbType": "NVarChar",
"name": "WindowsIdentity",
"propertyItem": "windowsIdentity"
},
{
"dbType": "NVarChar",
"name": "ProcessName",
"propertyItem": "processName"
},
{
"dbType": "UniqueIdentifier",
"name": "JobKey",
"propertyItem": "jobId"
},
{
"dbType": "NVarChar",
"name": "Message"
},
{
"dbType": "NVarChar",
"name": "RawMessage",
"propertyItem": "rawMessage"
},
{
"dbType": "NVarChar",
"name": "RobotName",
"propertyItem": "robotName"
},
{
"dbType": "BigInt",
"name": "MachineId",
"propertyItem": "machineId"
},
{
"dbType": "UniqueIdentifier",
"name": "UserKey",
"propertyItem": "userKey"
},
{
"dbType": "NVarChar",
"name": "HostMachineName",
"propertyItem": "machineName"
}
]
}
},
"monitoring": {
"type": "AsyncWrapper",
"overflowAction": "Block",
"queueLimit": 100,
"fullBatchSizeWriteLimit": 2,
"batchSize": 60,
"optimizeBufferReuse": true,
"target": {
"type": "DatabaseBulk",
"connectionString": "${ui-connection-strings:item=Default}",
"tableName": "[stats].[ErrorLogs]",
"batchSize": "20",
"parameters": [
{
"dbType": "BigInt",
"name": "OrganizationUnitId",
"propertyItem": "organizationUnitId"
},
{
"dbType": "BigInt",
"name": "TenantId",
"propertyItem": "tenantId"
},
{
"dbType": "DateTime",
"name": "TimeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"dbType": "UniqueIdentifier",
"name": "CorrelationId",
"propertyItem": "Correlation"
},
{
"dbType": "Int",
"name": "Source",
"propertyItem": "logSource"
},
{
"dbType": "Int",
"name": "Level",
"propertyItem": "levelOrdinal"
},
{
"dbType": "BigInt",
"name": "RobotId",
"propertyItem": "robotId"
},
{
"dbType": "NVarChar",
"name": "ProcessName",
"propertyItem": "processName"
},
{
"dbType": "UniqueIdentifier",
"name": "JobKey",
"propertyItem": "jobId"
},
{
"dbType": "BigInt",
"name": "QueueDefinitionId",
"propertyItem": "queueId"
},
{
"dbType": "NVarChar",
"name": "Message"
}
]
}
},
"insightsRobotLogs": {
"type": "AsyncWrapper",
"overflowAction": "Block",
"queueLimit": 100,
"fullBatchSizeWriteLimit": 2,
"batchSize": 60,
"optimizeBufferReuse": true,
"target": {
"type": "DatabaseBulk",
"connectionString": "${ui-connection-strings:item=Insights}",
"tableName": "[dbo].[RobotLogs]",
"batchSize": "20",
"parameters": [
{
"dbType": "BigInt",
"name": "OrganizationUnitId",
"propertyItem": "organizationUnitId"
},
{
"dbType": "Int",
"name": "TenantId",
"propertyItem": "tenantId"
},
{
"dbType": "DateTime",
"name": "TimeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"dbType": "NVarChar",
"name": "WindowsIdentity",
"propertyItem": "windowsIdentity"
},
{
"dbType": "NVarChar",
"name": "ProcessName",
"propertyItem": "processName"
},
{
"dbType": "UniqueIdentifier",
"name": "JobKey",
"propertyItem": "jobId"
},
{
"dbType": "NVarChar",
"name": "RawMessage",
"propertyItem": "rawMessage"
},
{
"dbType": "NVarChar",
"name": "RobotName",
"propertyItem": "robotName"
},
{
"dbType": "BigInt",
"name": "MachineId",
"propertyItem": "machineId"
},
{
"dbType": "NVarChar",
"name": "Message"
},
{
"dbType": "Int",
"name": "LevelOrdinal",
"propertyItem": "levelOrdinal"
},
{
"dbType": "Int",
"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,
"filters": {
"defaultAction": "Ignore",
"when": {
"condition": "level >= LogLevel.Error or ends-with('${message}',' execution ended')",
"action": "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
},
"70_Final": {
"logger": "*",
"minLevel": "Info",
"maxLevel": "Fatal",
"writeTo": "stdout",
"final": false
}
}
}
}
{
"NLog": {
"autoReload": false,
"throwConfigExceptions": false,
"internalLogLevel": "Warn",
"internalLogToConsole": true,
"default-wrapper": {
"type": "UiPrettyExceptionWrapper"
},
"extensions": [
{ "assembly": "UiPath.Orchestrator.Logs.DatabaseBulk.NLogTarget" }
],
"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": 60,
"timeToSleepBetweenBatches": 1,
"optimizeBufferReuse": true,
"target": {
"type": "DatabaseBulk",
"connectionString": "${ui-connection-strings:item=Default}",
"tableName": "[dbo].[Logs]",
"batchSize": "20",
"parameters": [
{
"dbType": "BigInt",
"name": "OrganizationUnitId",
"propertyItem": "organizationUnitId"
},
{
"dbType": "Int",
"name": "TenantId",
"propertyItem": "tenantId"
},
{
"dbType": "DateTime",
"name": "TimeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"dbType": "Int",
"name": "Level",
"propertyItem": "levelOrdinal"
},
{
"dbType": "NVarChar",
"name": "WindowsIdentity",
"propertyItem": "windowsIdentity"
},
{
"dbType": "NVarChar",
"name": "ProcessName",
"propertyItem": "processName"
},
{
"dbType": "UniqueIdentifier",
"name": "JobKey",
"propertyItem": "jobId"
},
{
"dbType": "NVarChar",
"name": "Message"
},
{
"dbType": "NVarChar",
"name": "RawMessage",
"propertyItem": "rawMessage"
},
{
"dbType": "NVarChar",
"name": "RobotName",
"propertyItem": "robotName"
},
{
"dbType": "BigInt",
"name": "MachineId",
"propertyItem": "machineId"
},
{
"dbType": "UniqueIdentifier",
"name": "UserKey",
"propertyItem": "userKey"
},
{
"dbType": "NVarChar",
"name": "HostMachineName",
"propertyItem": "machineName"
}
]
}
},
"monitoring": {
"type": "AsyncWrapper",
"overflowAction": "Block",
"queueLimit": 100,
"fullBatchSizeWriteLimit": 2,
"batchSize": 60,
"optimizeBufferReuse": true,
"target": {
"type": "DatabaseBulk",
"connectionString": "${ui-connection-strings:item=Default}",
"tableName": "[stats].[ErrorLogs]",
"batchSize": "20",
"parameters": [
{
"dbType": "BigInt",
"name": "OrganizationUnitId",
"propertyItem": "organizationUnitId"
},
{
"dbType": "BigInt",
"name": "TenantId",
"propertyItem": "tenantId"
},
{
"dbType": "DateTime",
"name": "TimeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"dbType": "UniqueIdentifier",
"name": "CorrelationId",
"propertyItem": "Correlation"
},
{
"dbType": "Int",
"name": "Source",
"propertyItem": "logSource"
},
{
"dbType": "Int",
"name": "Level",
"propertyItem": "levelOrdinal"
},
{
"dbType": "BigInt",
"name": "RobotId",
"propertyItem": "robotId"
},
{
"dbType": "NVarChar",
"name": "ProcessName",
"propertyItem": "processName"
},
{
"dbType": "UniqueIdentifier",
"name": "JobKey",
"propertyItem": "jobId"
},
{
"dbType": "BigInt",
"name": "QueueDefinitionId",
"propertyItem": "queueId"
},
{
"dbType": "NVarChar",
"name": "Message"
}
]
}
},
"insightsRobotLogs": {
"type": "AsyncWrapper",
"overflowAction": "Block",
"queueLimit": 100,
"fullBatchSizeWriteLimit": 2,
"batchSize": 60,
"optimizeBufferReuse": true,
"target": {
"type": "DatabaseBulk",
"connectionString": "${ui-connection-strings:item=Insights}",
"tableName": "[dbo].[RobotLogs]",
"batchSize": "20",
"parameters": [
{
"dbType": "BigInt",
"name": "OrganizationUnitId",
"propertyItem": "organizationUnitId"
},
{
"dbType": "Int",
"name": "TenantId",
"propertyItem": "tenantId"
},
{
"dbType": "DateTime",
"name": "TimeStamp",
"layout": "${date:format=yyyy-MM-dd HH\\:mm\\:ss.fff}"
},
{
"dbType": "NVarChar",
"name": "WindowsIdentity",
"propertyItem": "windowsIdentity"
},
{
"dbType": "NVarChar",
"name": "ProcessName",
"propertyItem": "processName"
},
{
"dbType": "UniqueIdentifier",
"name": "JobKey",
"propertyItem": "jobId"
},
{
"dbType": "NVarChar",
"name": "RawMessage",
"propertyItem": "rawMessage"
},
{
"dbType": "NVarChar",
"name": "RobotName",
"propertyItem": "robotName"
},
{
"dbType": "BigInt",
"name": "MachineId",
"propertyItem": "machineId"
},
{
"dbType": "NVarChar",
"name": "Message"
},
{
"dbType": "Int",
"name": "LevelOrdinal",
"propertyItem": "levelOrdinal"
},
{
"dbType": "Int",
"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,
"filters": {
"defaultAction": "Ignore",
"when": {
"condition": "level >= LogLevel.Error or ends-with('${message}',' execution ended')",
"action": "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
},
"70_Final": {
"logger": "*",
"minLevel": "Info",
"maxLevel": "Fatal",
"writeTo": "stdout",
"final": false
}
}
}
}
nlogextensions
将复制到对象存储库中众所周知的插件位置。Orchestrator 配置程序工具可以自动执行此操作,同时还可以更新 NLog 配置。脚本会自动更改 nlog.custom.config
,以便为扩展程序数组中的每个程序集文件添加 /var/orchestrator/plugins/nlog/
前缀(如果尚未添加前缀)。
您可以将凭据存储的自定义插件迁移到 Automation Suite。为此,请更新配置映射中的配置,并将插件程序集复制到相应的对象存储桶。
- 插件必须在 Linux 上运行。
- 除
/tmp
外,插件不得写入任何存储空间。
以下凭据存储插件会自动部署到 Automation Suite 中的 Orchestrator:
UiPath.Orchestrator.AzureKeyVault.SecureStore.dll
-
UiPath.Orchestrator.SecureStore.CyberArkCCP.dll
securestoreplugins
。
appSettings.custom.json
文件中添加凭据存储设置,如下所示:
-
要禁用默认插件,请在
appSettings.custom.json
中添加具有空字符串值的配置Plugins.SecureStores.Default
; -
将所有自定义插件添加到
Plugins.SecureStores
设置中,并在appSettings.custom.json
中用;
分隔; -
添加任何自定义插件设置,如下所示:
Plugins.SecureStores.<<FriendlyName>>.<<SettingName>>
。
securestoreplugins
插件文件夹复制到对象存储库中众所周知的插件位置。
Plugins.SecureStores
中的程序集从此文件夹加载。
Plugins.SecureStore.Default
中的程序集从 Orchestrator 应用程序文件夹中的插件文件夹加载。
默认情况下,Orchestrator 在安装时会生成一个加密密钥,用于数据库中的敏感信息。如果要在新的 Orchestrator 部署中重用数据库,则必须迁移此密钥。
要检索加密密钥,请执行以下步骤:
- 按需加密
UiPath.Orchestrator.dll.config
文件的secureAppSettings
部分。有关详情,请参阅加密 UiPath.Orchestrator.dll.config 部分。 - 从
UiPath.Orchestrator.dll.config
中检索加密密钥。有关详细信息,请参阅加密密钥。
加密密钥证书安装在 Windows 证书存储中。您必须向 Automation Suite 环境提供证书,以便 Orchestrator Pod 可以使用该证书。
CertificatesStoreLocation
和 Azure.KeyVault.CertificateThumbprint
设置,但您可以根据需要使用 CertificatePassword
。
采取以下步骤:
- 查看 appSettings 并获取
AzureKeyVault.*
设置。 - 存储
Azure.KeyVault.VaultAddress
、Azure.KeyVault.ClientId
和Azure.KeyVault.DirectoryId
以备后用。 - 检索证书,必要时检索证书密码。