クラウド環境でのOrchestrator構築とアナリティクス

2020年1月8日(水)
井上 秀和

Cosmos DBの作成

ロボットの実行ログ連携に関して、現在のバージョンではElasticSearchとMongoDBを選択肢できます。従来はElasticSearchのみでしたが、19.4以降よりMongoDBが追加されました。筆者は過去、MongoDBを用いたアプリケーション開発の経験があり、MongoDBには非常に愛着があります。Azure Cosomos DBはMongoDB APIインターフェイスを提供しているので、Azure Cosomos DBへのログ出力にチャレンジしてみます。

Azure Cosmos DBはフルマネージドのデータベースサービスで、スループットやスケーリングに優れたドキュメント形式のデータベースです。MongoDBのAPIインターフェイスだけでなく、SQL、Spark、TableといったAPIも提供されています。

それでは、ロボットの実行ログを出力するためのCosmos DBを作成していきましょう。AzureのWebコンソールに戻り、Azure Cosmos DBのメニューから「Azure Cosmos DB のアカウント作成」をクリックします。

リソースグループとアカウント名を入力します。APIにはOrchestratorが対応する「MongoDB用 Azure Cosmos DB API」を指定します。今回は冗長性やマルチリージョンは無効とします。

続いて、ネットワーク等の設定をしていきます。

ここでは、特に指定はありません。

これで準備が整いました。「作成」ボタンをクリックしてAzure Cosmos DBアカウントを作成します。

しばらく待つと、Cosmos DBのアカウントが生成されます。Cosmos DBのメニューへ移動し、Databaseと「Collection」というロボットのログを格納する入れ物を準備します。これはDatabase Idを「RobotLogs」、Collectionを「UiPath」という名称にしておきます。Collectionとは、RDBMSでいうテーブルに該当するものです。

これで、Cosmos DBの準備は整いました。

Cosmos DBへのロボットログの出力

ロボットのログをCosmos DBへ出力するために、Orchestratorの設定ファイルであるWeb.configを修正します。オンプレやIaaS上のOrchestrator環境であれば直接ファイルを修正できますが、App Serviceの場合は少し工夫が必要です。

今回はプレビューの段階ですが「App Service Editor」という便利な機能を見つけたので、これを利用して編集します。

先ほど作成したOrchestratorのApp Serviceのメニューへ戻ります。開発ツールの項目にある「App Service Editor (プレビュー)」を選択すると、別ウィンドウでMicrosoft社のVSCodeに似たインタフェース画面が起動します。App Service Editorではターミナルを使用でき、かつBashコマンドの入力もできます。

Web.configを編集する前にファイルをバックアップします。cp Web.config Web.config.orgと入力し、オリジナルのWeb.configをバックアップしましょう。

それでは、「Web.config」を選択して修正します。

下記のCosmos DBへの接続設定を追加します。Cosmos DBのMongoDBインターフェイスを使用しているため、typeをMongoにして接続子もMongoDB形式にします。

<target name="robotMongoBuffer" xsi:type="BufferingWrapper" flushTimeout="5000">
  <target xsi:type="Mongo" name="robotMongo" connectionString="mongodb://cosmos-thinkit:VSF9sUs3YBmzVa5itsjKmAynRR9rqQVNGUjaLuD6TBkATTxP1spTf0tKAdyaLh5dfOUrOPw1LMbxi8hUuSQfog==@cosmos-thinkit.documents.azure.com:10255/?ssl=true" databaseName="RobotLogs" collectionName="UiPath" >
    <field name="windowsIdentity" layout="${event-properties:item=windowsIdentity}"/>
    <field name="processName" layout="${event-properties:item=processName}"/>
    <field name="jobId" layout="${event-properties:item=jobId}"/>
    <field name="rawMessage" layout="${event-properties:item=rawMessage}"/>
    <field name="robotName" layout="${event-properties:item=robotName}"/>
    <field name="indexName" layout="${event-properties:item=indexName}"/>
    <field name="machineId" layout="${event-properties:item=machineId}"/>
    <field name="tenantKey" layout="${event-properties:item=tenantKey}"/>
    <field name="levelOrdinal" layout="${event-properties:item=levelOrdinal}" bsonType="Int32"/>
  </target>
</target>

次に、logger name="Robot.*"へ「robotMongoBuffer」を追加します。

<rules>
  <logger name="BusinessException.*" minlevel="Info" writeTo="businessExceptionEventLog" final="true" />
  <logger name="Robot.*" writeTo="database,robotMongoBuffer" final="true" />
  <logger name="Monitoring.*" writeTo="monitoring" minlevel="Warn" final="true" />
  <logger name="Quartz.*" minlevel="Warn" writeTo="eventLogQuartz" final="true" />
  <logger name="*" minlevel="Info" writeTo="eventLog" />
</rules>

これで、Cosmos DBへロボットのログを出力する設定は完了です。変更内容を保存してOrchestratorを再起動します。具体的には、App Serviceのメニューからサービスを再起動すればOrchestratorが再起動され、変更内容が反映されます。

それでは早速、ロボット上で作成済みのワークフローを実行します。Cosmos DBのメニューへ戻ってデータエクスプロラーを覗いてみると、データが連携されていることが確認できます。

最後に、プレビュー機能のメニューにある「集約パイプライン」というオプションを有効にしておきます。これにより、MongoDBの集計機能(aggregation pipeline)がAzure Cosmos DBでも使用できるようになります。

UiPath株式会社
コーダーやプロジェクトマネージャーとして、金融、流通、飲食業界向けのシステム・ソフトウェア開発に従事し、2018年よりUiPath社に入社。RPAに関しては、過去にWeb画面、モバイル画面のUIテスト自動化、趣味では株式やFXのアービトラージにて活用していた経験あり。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています