UiPath Orchestrator向けのElasticsearch/Kibanaの構築メモ

## イントロ
ググると出てくる、[[2018.3対応版]Orchestrator導入ステップバイステップガイド](https://www.uipath.com/ja/resources/knowledge-base/orchestrator-installation-guide-2018.3) 。コレを使って Orchestrator向けに ElasticSearch/Kibanaを構築したときの覚え書きです。ガイドからは微妙に読み取れなかったところを中心に書いていこうと思います。

ちなみに使用している Orchestratorは2018.4.5です。

>2019/12/18現在
> 上記のリンク切れてますね。2019LTS対応版というのが出たから、なくなったのかな。。。というわけで一応そちらへのリンクを貼っておきます。。
> https://www.uipath.com/ja/resources/knowledge-base/orchestrator-installation-guide
> 前バージョンのヤツなくなるのは困るんですけどね、、。

## 準備と主要なモノのダウンロード

サーバはWindows Server。今回は AWSの Windows Server 2019[^1] を使いました。
またダウンロードについて。「ステップバイステップガイド」の 5.Elasticsearch / Kibana連携 を見ると、、、必要なモノは以下です。

- [Java JRE](https://www.java.com/en/download/manual.jsp)。「Windows Offline (64-bit)」のリンクでよいでしょう。
- [Elasticsearch 6.4.2](https://www.elastic.co/jp/downloads/past-releases/elasticsearch-6-4-2) 。「msi (beta)」のリンクからダウンロード。
- [Kiabana 6.4.2](https://www.elastic.co/jp/downloads/past-releases/kibana-6-4-2) 。「Windows」のリンクからダウンロード。
- [NSSM](https://nssm.cc/download)。NSSMというプロセスをサービス化するツールを。nssm 2.24 でよいかと。

[^1]: Windows_Server-2019-English-Full-Base-2019.06.12 (ami-077528626d6f3e504) でした。

## インストール
基本的に「ステップバイステップガイド」の 「5.2 Windows版Elasticsearchのインストールと設定手順」 のとおりでOKでしょう。
Elasticsearchはデフォルトでは下記のディレクトリにインストールされるみたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/864e5163-472f-f850-df4b-9b7dbc0bfc9c.png)
インストールが完了したのち、ブラウザで http://localhost:9200/ にアクセスして、なにかJSONファイルが落ちてくることを確認しましょう。


### ネットワーク設定を変更する
Elasticsearchはデフォルトでは自ノードからの接続しか受け付けないようで、これだとOrchestratorからログを投げられても受信できません。ということでOrchestratorサーバからの接続を受け付けるよう設定を変更します。

具体的には、``C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml`` に、

```
network.host: 0.0.0.0
```

を追加し、下記のように Elasticsearchサービスを再起動します。
(これ自体は スタートメニューをおして「ser」などと入れればアシストされると思います)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/7d01eed7-d034-9647-16d5-b3a336bcf3b8.png)
この設定追加ですが、ガイドにも微妙に書いてあるんですが、、Elasticsearchシロウトには分かりませんorz。。ハマりました。

またWindowsのファイアウォールの設定追加も必要です。具体的には、コントロールパネル >> Windows Defenderファイアウォール >> 左メニューの詳細設定を開き、受信の規則 >> 新しい規則 をクリック。その後、 ポート>特定のローカルポート: 9200 > 接続を許可する、であとは次へ次へでOKかと。名前は適当に9200とか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/35dec622-e109-30b4-7c02-624aae0b7806.png)

以上でOKです。Orchestratorなど他のサーバからも http://[IPアドレス]:9200 で繋がることを確認しておきましょう！


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/3b3c993c-8272-a3a2-93ba-5162f218e7b4.png)


### Kibanaのインストール

Kibanaのインストールも基本ガイド通り。「5.3Windows版Kibanaのインストールと設定手順」をみながら実施しましょう。
といってもほぼ書いちゃうけど、

zipファイルを適宜解凍して(``C:\ProgramData\kibana-6.4.2-windows-x86_64\``に解凍しました)、
Elasticsearchと同様に設定ファイル(``[インストールディレクトリ]\config\kibana.yml`` )に下記のリモート接続可の設定を追加

```
server.host: "0.0.0.0"
```

そして、ファイアウォールの受信設定(5601を許可)を行い、、、

最後に下記の通りプロンプトからプロセスを起動します。

```
C:\Users\Administrator> cd %programdata%
C:\ProgramData> cd kibana-6.4.2-windows-x86_64\bin
C:\ProgramData\kibana-6.4.2-windows-x86_64\bin>.\kibana.bat
```

さて、http://[IPアドレス]:5601/ にアクセスすると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/754ba2c7-a3b0-134e-2a91-77994f63f611.png)

表示されましたー。。


### Kibanaをサービス化する

プロンプトで起動したプロセスを、Windowsのサービスとして起動したい場合は、以下の作業を。
起動したKibanaをCtrl-Cで停止。先にダウンロードしておいた nssmというツールを適宜解凍して、そのディレクトリに移動。

そして以下のコマンドを実行します。

```
C:\ProgramData\nssm-2.24\win64> nssm.exe install "Elasticsearch Kibana" "C:\ProgramData\kibana-6.4.2-windows-x86_64\bin\kibana.bat"
Service "Elasticsearch Kibana" installed successfully!
```
(インストールしたディレクトリなどは、適宜読み替えてください)
Windowsの「サービス」に表示されるようになったはずなので、サービスから「開始」してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/29037eea-0cb1-46fd-5835-8bf2891b6ee2.png)

起動出来たら、再度、画面が表示されることを確認しましょう！


あとガイドには「インデックスシャード数」を変更するって作業がありました。適宜やっておきましょう。


## Orchestratorからの接続と疎通確認

さて、Elasticsearchが Orchestratorサーバからの接続を受け付けるようになったので、いよいよ Orchestrator から接続してみましょう。
Orchestratorの設定ファイルは``C:\Program Files (x86)\UiPath\Orchestrator\Web.config`` でした。

なのでWeb.configをひらいて

```xml:Web.config
<target name="robotElasticBuffer" xsi:type="BufferingWrapper" flushTimeout="5000">
    <target xsi:type="ElasticSearch" name="robotElastic" uri="" requireAuth="false" username="" password="" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="logEvent" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,organizationUnitId,indexName"/>
</target>
<target name="serverElasticBuffer" xsi:type="BufferingWrapper" flushTimeout="5000">
    <target xsi:type="ElasticSearch" name="serverElastic" uri="" requireAuth="false" username="" password="" index="serverdiagnostics-${date:format=yyyy.MM}" documentType="logEvent" includeAllProperties="true" layout="${machinename} ${message}"/>
</target>
```

など空になっている uri属性を

```
uri="http://172.31.38.10:9200"
```

などElasticsearchのURLにします。また、もうすこし下の rules 要素について

```xml:Web.config
<rules>
  <logger name="Robot.*" final="true" writeTo="database"/>
  ..略
</rules>
```

と書き込み先がSQL Serverのみとなっているところを

```xml:Web.config
<rules>
  <logger name="Robot.*" final="true" writeTo="database,robotElasticBuffer"/>
  ..略
</rules>
```

として、Elasticsearchにもログを書き込むように設定追加します。

OrchestratorにRDPではいったあと、下記の手順でIISを再起動すれば、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/097fe31e-d1e7-4775-fa09-3e63fd6a1916.png)

Orchestrator側の設定追加は以上です。

Kibanaの Management>> Index Patterns を見ていると、初めは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/d459a737-1c23-caf9-f446-ca0bd2c55980.png)

となっていたのですが、Orchestratorに接続した Robotでワークフローを実行すると、めぐり巡って Orchestrator上のログがElasticsearchサーバに連携された結果、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/5a01b2b4-d88d-6736-b307-d4c7bf9be79d.png)

などの表示になっていればOKです！！！


## Orchestratorからのログを表示するKibanaの設定について
最後にガイドの「5.4 OrchestratorでのElasticsearch接続設定と動作確認」にしたがって、Kibanaの設定を行います。

先のIndex Patternsの画面より index pattern:「default-*」と入力して「Next step」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/dc1d09be-19dd-57e0-18bb-7b75c2451145.png)

Time Filter field name:「``@timestamp``」を選んで「Create index pattern」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/3dabc4db-ce81-36bb-95de-f8c9501b04c6.png)

下記の通り、なにやら色々と作成できたみたいですね！左メニューの Discoverに行って、右上から表示期間で「Today」などを選択すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/2b57838d-e039-664e-8140-c2b4bfaa51f4.png)

たしかにログがElasticsearchまで到達していることが確認出来ました！！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/5197d99d-20f9-2cfd-c548-b7edbf2c7700.png)

おつかれさまでした。

Orchestratorは ロボットがワークフローを実行したときの実行ログをグラフィカルに閲覧する機能がとっても貧弱なので、Elasticsearch/Kibanaはなにかと重宝しそうです。

## 関連リンク

- [[2018.3対応版]Orchestrator導入ステップバイステップガイド](https://www.uipath.com/ja/resources/knowledge-base/orchestrator-installation-guide-2018.3) (2019/12/18時点リンク切れ)
- [Orchestrator導入ステップバイステップガイド(直近版)](https://www.uipath.com/ja/resources/knowledge-base/orchestrator-installation-guide)
- [Elastic 公式](https://www.elastic.co/jp/)
- [RPA Reporting with ElasticSearch and Kibana - UiPath](https://www.uipath.com/hubfs/How-to%20-%20Standard%20RPA%20Execution%20Reporting%20with%20Kibana.pdf) uipath orchestrator kibana でググったら出てきたPDF。フィルタとかとても参考になる
- [Kibanaで簡単! サクサク ビジュアライズしよう！](https://qiita.com/kitfactory/items/9c2f990d87e33fab828a) 時間毎の可視化とか、とても参考になりました
- [Kibana Dashboard 実行ログ分析テンプレート](https://www.uipath.com/ja/resources/knowledge-base/kibana-dashboard-template-guide) ← ナレッジベースにあった。要確認。