- 概要
- 要件
- インストール
- インストール後
- クラスターの管理
- 監視とアラート機能
- 移行とアップグレード
- 製品固有の設定
- ベスト プラクティスとメンテナンス
- トラブルシューティング
- インストール時にサービスをトラブルシューティングする方法
- クラスターをアンインストールする方法
- オフライン成果物をクリーンアップしてディスク領域を改善する方法
- Redis データをクリアする方法
- Istio ログを有効化する方法
- ログを手動でクリーンアップする方法
- sf-logs バケットに保存されている古いログをクリーンアップする方法
- AI Center のストリーミング ログを無効化する方法
- 失敗した Automation Suite インストールをデバッグする方法
- アップグレード後に古いインストーラーからイメージを削除する方法
- Longhorn のスナップショットを自動的にクリーンアップする方法
- TX チェックサム オフロードを無効化する方法
- ArgoCD のログ レベルを手動で Info に設定する方法
- 外部レジストリーのエンコードされたpull_secret_valueを生成する方法
- TLS 1.2 で弱い暗号に対処する方法
- 証明書の操作方法
- クラスター内の ObjectStore (Ceph) を使用して DU の使用状況データを収集する方法
- エアギャップ環境に RKE2 SELinux をインストールする方法
- NFS サーバー上の古い差分バックアップをクリーンアップする方法
- RHEL 8.4 OS でオフライン インストールを実行できない
- バンドルのダウンロード中のエラー
- バイナリがないため、オフライン インストールが失敗する
- オフライン インストールでの証明書の問題
- Longhorn のセットアップ中に最初のインストールが失敗する
- SQL 接続文字列の検証エラー
- selinux iscsid モジュールの前提条件の確認が失敗する
- Azure ディスクが SSD としてマークされない
- 証明書の更新後のエラー
- ウイルス対策が原因でインストールの問題が発生する
- OS のアップグレード後に Automation Suite が動作しない
- Automation Suite で backlog_wait_time を 0 に設定する必要がある
- リソースが利用できないことの影響を受ける GPU ノード
- ワークロードの準備ができていないためボリュームをマウントできない
- サポート バンドルのログ収集の失敗
- 管理ポータルのタイムアウト期間を設定する
- 基になるディレクトリ接続を更新する
- 移行後に認証が機能しない
- Kinit: Cannot find KDC for realm <AD Domain> while getting initial credentials
- kinit: Keytab contains no suitable keys for *** while getting initial credentials
- 無効なステータス コードが原因で GSSAPI 操作が失敗した
- Alarm received for failed kerberos-tgt-update job
- SSPI Provider: Server not found in Kerberos database
- アカウントが無効なため AD ユーザーのログインに失敗した
- ArgoCD へのログインに失敗した
- サンドボックス イメージを取得できない
- ポッドが ArgoCD UI に表示されない
- Redis プローブの障害
- RKE2 サーバーの起動に失敗する
- UiPath 名前空間でシークレットが見つからない
- 初回インストール後に ArgoCD が進行中ステートになる
- ArgoCD の読み取り専用アカウントにアクセスする際の問題
- MongoDB ポッドが CrashLoopBackOff になるか、削除後に PVC プロビジョニングの保留中になる
- クラスターの復元またはロールバック後にサービスが異常になる
- Init:0/X でポッドがスタックする
- Prometheus が CrashloopBackoff ステートにあり、メモリ不足 (OOM) エラーを伴う
- Ceph-rook のメトリックが監視ダッシュボードに表示されない
- プロキシ環境でポッドが FQDN と通信できない
- アップグレード後にメール アラートを設定できない
- アップストリームに正常な問題はありません
- Automation Suite 診断ツールを使用する
- Automation Suite サポート バンドルを使用する
- ログを確認する
Orchestrator をスタンドアロンから Automation Suite に移行するには、スタンドアロンのインストールから設定と各種ファイルを収集し、Automation Suite のインストールに適用する必要があります。
Orchestrator で使用する設定によっては、web.config、appSettings、ストレージ、NLog、資格情報ストア、暗号化キー、テナントごとの暗号化キーを準備しなければならない場合があります。
移行の概要
Orchestrator をスタンドアロンから Automation Suite に移行するには、スタンドアロンのインストールから設定と各種ファイルを収集し、Automation Suite のインストールに適用する必要があります。
インストール時には一部の設定しか構成できませんが、インストール後の構成ではすべての設定が利用可能になるはずです。
- インストール時に設定を構成するには、その設定を
cluster_config.jsonファイルに追加します。 - インストール完了後の設定の更新は、設定範囲に加え、ある機能が app-of-apps パラメーターからの構成で利用可能かどうかによって異なります。
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.
以下によって、カスタム構成を追加できます。
- ArgoCD でアプリケーション パラメーターを編集する (パラメーターの上書き)
- 名前空間
uipathから Kubernetes ConfigMaporchestrator-customconfig内のファイルを編集する
Web.config を準備する
ほとんどの 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 で関連している設定を使用することだけです。
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
}
ストレージを準備する
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.
ローカル フォルダーで FileSystem タイプのストレージを使用している場合は、ストレージ フォルダーのデータを Automation Suite のノードにあるフォルダーにコピーします。次に、rclone などのユーティリティを使用して、データを Orchestrator にコピーできます。Ceph を使用する場合は、これが既定のオプションであるため、他の構成は必要ありません。
Windows ネットワーク共有で FileSystem を使用する場合は、ArgoCD Orchestrator アプリでストレージを構成する必要があります。現在の Orchestrator 構成から Windows ネットワーク共有への接続データを Storage.Location キーから取得します。Automation Suite は Linux マシンで実行されるため、ネットワーク共有へのアクセスに統合認証を利用することはできません。したがって、ネットワーク共有にアクセス可能なアカウントの資格情報が必要です。
現在は、SMB プロトコルを使用するネットワーク共有のみがサポートされています。NFS を使用するネットワーク共有はサポートされていません。
Azure、AWS、Minio などのリモート ストレージ オプションを使用する場合は、必ず Storage.Location および Storage.Type の設定を appsettings.json に追加してください。
NLog を準備する
NLog に対して以下のカスタマイズを実行できます。
- 既存のターゲットの変更
- 新しいターゲットの追加
- NLog 拡張機能の追加
構成ファイルの NLog セクションを確認し、NLog のカスタム構成を構築します。Elasticsearch でロボット ログのストレージを有効化するために、Automation Suite のパラメーターとしてユーザー名、パスワード、および URI を指定できます。ターゲットは自動的に構成されます。ロボット ログのカスタム シナリオを有効化するには、ターゲットを手動で構成する必要があります。
NLog 拡張機能が必要な場合は、すべての拡張機能とその依存関係を含むフォルダーを作成します。
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
拡張機能、ターゲット、ルールといった標準的なセクションを含む nlog.custom.config ファイルを作成します。
拡張機能セクションは、assemblyFile を使用して拡張機能アセンブリを指定する項目の配列と、nlogextensions フォルダーを基準とするこのアセンブリのパスです。
Orchestrator は、一般的なユース ケース用に構成 (または部分的に構成) されている NLog のターゲットとルールを定義します。これらのターゲットにカスタマイズが必要な場合は、変更されたプロパティを NLog 構成に含めるだけです。あらかじめ定義された構成から既存のプロパティを削除することはできません。ただし、変更は可能です。Orchestrator ポッドでは、既定で含まれるターゲットが /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
}
}
}
}
拡張機能フォルダー nlogextensions は、既知のプラグインの場所にあるオブジェクト ストアにコピーされます。NLog 構成の更新中でも、Orchestrator 構成ツールによる自動実行が可能です。まだプレフィックスが付いていない場合は、スクリプトによって nlog.custom.config が自動的に変更され、各 assemblyFile に /var/orchestrator/plugins/nlog/ の拡張機能配列からプレフィックスが付けられます。
資格情報ストアを準備する
資格情報ストアのカスタム プラグインを Automation Suite に移行できます。そのためには、構成マップ内の構成を更新し、対応するオブジェクト ストア バケットにプラグイン アセンブリをコピーします。
- プラグインは Linux で動作する必要があります。
- プラグインは、
/tmp以外のストレージに書き込むことはできません。
以下の資格情報ストア プラグインが、Automation Suite の Orchestrator に自動的にデプロイされます。
UiPath.Orchestrator.AzureKeyVault.SecureStore.dllUiPath.Orchestrator.SecureStore.CyberArkCCP.dll
Automation Suite は CyberArk AIM をサポートしていないため、移行できません。CyberArkCCP 資格情報ストアへの移行をお勧めします。
他の資格情報ストア プラグインを使用する場合は、securestoreplugins などのフォルダーにプラグインをコピーします。
以下のように、appsettings.json ファイルに資格情報ストアの設定を追加します。
- 既定のプラグインを無効化するため、
appsettings.jsonに構成Plugins.SecureStores.Defaultを空の文字列値で追加します。 appsettings.jsonで、すべてのカスタム プラグインをPlugins.SecureStores設定に追加し、;で区切ります。- 次のように、カスタム プラグインの設定を追加します。
Plugins.SecureStores.<<FriendlyName>>.<<SettingName>>
securestoreplugins プラグイン フォルダーは、既知のプラグインの場所にあるオブジェクト ストア内にコピーされます。
このフォルダーから、Plugins.SecureStores 内のアセンブリが読み込まれます。
Orchestrator アプリ フォルダーにあるプラグイン フォルダーから、Plugins.SecureStore.Default 内のアセンブリが読み込まれます。
暗号化キーを準備する
既定では、インストール時に、Orchestrator がデータベース内の機密情報に使用される暗号化キーを生成します。新しい Orchestrator デプロイでデータベースを再利用する場合は、この暗号化キーを移行する必要があります。
暗号化キーを取得するには、次の手順に従います。
- 必要に応じて、
UiPath.Orchestrator.dll.configファイルのsecureAppSettingsセクションを復号します。詳細については、「UiPath.Orchestrator.dll.config セクションを暗号化する」をご覧ください。 UiPath.Orchestrator.dll.configから暗号化キーを取得します。詳細については、「暗号化キー」をご覧ください。
テナントごとに暗号化キーを準備する
暗号化キー証明書は、Windows 証明書ストアにインストールされます。証明書は、Orchestrator ポッドで使用できるようにするために、Automation Suite 環境に提供する必要があります。
CertificatesStoreLocation と Azure.KeyVault.CertificateThumbprint の設定は Automation Suite ではもう必要ありませんが、必要に応じて CertificatePassword を使用することはできます。
次の手順を実行します。
- appSettings を確認し、
AzureKeyVault.*の設定を取得します。 - 後で使用するために、
Azure.KeyVault.VaultAddress、Azure.KeyVault.ClientId、Azure.KeyVault.DirectoryIdを保存します。 - 証明書、および必要に応じて証明書のパスワードを取得します。