Blue Prism の Data Gateway を動かしてみる

はじめに
==========================

Blue Prism には、セッションログやワークキューの状態などのログデータを、外部のログ基盤にエクスポートする「Data Gateway」という仕組みがあります。
この記事では、docker を使って手元に Elasticsearch + Kibana 環境を作り、そこに Blue Prism の Data Gateway からログをエクスポートしてみます。

ドキュメントには Splunk などの名前しか出てきませんが、Data Gateway は内部で logstash を使っているそうなので、Elasticsearch との相性は良さそうです。

Data Gateway をインストールする
============================

[v6.7 User Guide - Data Gateways（要ログイン）](https://portal.blueprism.com/documents/v67-user-guide-data-gateways) に沿って、Data Gateway をインストールします。

インストーラーは[製品 > Extras（要ログイン）](https://portal.blueprism.com/product/extras) からダウンロードできます

インストールの手順からわかるように、Data Gateway を使うには、BPServer.exe をつかって Blue Prism をサーバーとして動かす必要があります。サーバーとして動かす手順は[こちら](https://qiita.com/muuuuuwa/items/8fdd65eb0e0b71263644#blue-prism-%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B)を参照してください。

BPServer.exe の「サーバー構成の詳細」画面左下に「データゲートウェイプロセスを有効にする」チェックボックスがあるので On にして、「保存」をクリックします。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/c69d6d78-7d8d-56dc-5e65-eb76de63e248.png)




Elasticsearch と Kibana を用意する
=======================================

ローカル検証用に Elasticsearch と Kibana が動く docker-compose ファイルを用意し、```docker-compose up``` します。

``` yaml
version: '2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
    volumes:
        - elasticsearch-data:/usr/share/elasticsearch/data
    ports:
        - 9200:9200
        - 9300:9300
    environment:
        discovery.type : single-node
  kibana:
    image: docker.elastic.co/kibana/kibana:7.0.1
    ports:
        - 5601:5601

volumes:
    elasticsearch-data:
        driver: local
```

```
>docker-compose up
Starting docker-compose-elasticsearch-kibana-simple_elasticsearch_1 ... done                                            Starting docker-compose-elasticsearch-kibana-simple_kibana_1        ... done                                            Attaching to docker-compose-elasticsearch-kibana-simple_elasticsearch_1, docker-compose-elasticsearch-kibana-simple_kibana_1
elasticsearch_1  | OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
elasticsearch_1  | {"type": "server", "timestamp": "2020-05-04T23:32:02,871+0000", "level": "INFO", "component": "o.e.e.NodeEnvironment", "cluster.name": "docker-cluster", "node.name": "855c6cbffedd",  "message": "using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [52.6gb], net total_space [58.4gb], types [ext4]"  }
elasticsearch_1  | {"type": "server", "timestamp": "2020-05-04T23:32:02,878+0000", "level": "INFO", "component": "o.e.e.NodeEnvironment", "cluster.name": "docker-cluster", "node.name": "855c6cbffedd",  "message": "heap size [1007.3mb], compressed ordinary object pointers [true]"  }
elasticsearch_1  | {"type": "server", "timestamp": "2020-05-04T23:32:02,929+0000", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "docker-cluster", "node.name": "855c6cbffedd",  "message": "node name [855c6cbffedd], node ID [JYHFh1LDSK61s12txY6glA]"  }
elasticsearch_1  | {"type": "server", "timestamp": "2020-05-04T23:32:02,931+0000", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "docker-cluster", "node.name": "855c6cbffedd",  "message": "version[7.0.1], pid[1], build[default/docker/e4efcb5/2019-04-29T12:56:03.145736Z], OS[Linux/4.9.184-linuxkit/amd64], JVM[Oracle Corporation/OpenJDK 64-Bit Server VM/12.0.1/12.0.1+12]"  }
elasticsearch_1  | {"type": "server", "timestamp": "2020-05-04T23:32:02,933+0000", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "docker-cluster", "node.name": "855c6cbffedd",  "message": "JVM home [/usr/share/elasticsearch/jdk]"  }
elasticsearch_1  | {"type": "server", "timestamp": "2020-05-04T23:32:02,935+0000", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "docker-cluster", "node.name": "855c6cbffedd",  "message": "JVM arguments [-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.io.tmpdir=/tmp/elasticsearch-4297416070440673874, -XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=data, -XX:ErrorFile=logs/hs_err_pid%p.log, -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m, -Djava.locale.providers=COMPAT, -Dio.netty.allocator.type=unpooled, -Des.cgroups.hierarchy.override=/, -Des.path.home=/usr/share/elasticsearch, -Des.path.conf=/usr/share/elasticsearch/config, -Des.distribution.flavor=default, -Des.distribution.type=docker, -Des.bundled_jdk=true]"  }
elasticsearch_1  | {"type": "server", "timestamp": "2020-05-04T23:32:06,092+0000", "level": "INFO", "component": "o.e.p.PluginsService", "cluster.name": "docker-cluster", "node.name": "855c6cbffedd",  "message": "loaded module [aggs-matrix-stats]"  }
elasticsearch_1  | {"type": "server", "timestamp": "2020-05-04T23:32:06,092+0000", "level": "INFO", "component": "o.e.p.PluginsService", "cluster.name": "docker-cluster", "node.name": "855c6cbffedd",  "message": "loaded module [analysis-common]"  }
....
```
http://localhost:5601/app/kibana を開くと、Kibana のコンソールが表示されます。


データゲートウェイを設定する
============================
インタラクティブクライアントの「システム」タブで「データゲートウェイ」を選択し、エクスポートしたいデータなどを設定し、「適用」をクリックします。
![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/74d10996-ae74-83a0-1cf6-1a159e105ae1.jpeg)


インタラクティブクライアントの「システム」タブで「データゲートウェイ > 構成」を選択し、「新しいデータゲートウェイ出力を追加」をクリックします。
![7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/a2abf898-357f-983c-ad37-2ea9e1c5c94f.jpeg)


あとでマニュアルで修正するので、この「データゲートウェイ出力」ダイアログではファイルを選択し、適当なパスを設定し、「次へ」をクリックします。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/a8f00d61-5310-5dbb-fe2c-41456f288dad.png)


「送付するデータを選択」ダイアログではエクスポートしたいデータの種類を選択します。その後、「次へ」をクリックします。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/a00a7259-97d8-95b0-8128-a2bdafc69f89.png)


「出力構成のプレビュー」ダイアログで、「出力の詳細を編集」ボタンをクリックします。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/02812f74-2682-22c9-c95b-c1641d58619c.png)


「データゲートウェイ出力の詳細」ダイアログで、下図のように値を設定し（elasticsearch の部分を追加）、「詳細出力を保存」をクリックします。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/d3107cf4-77f9-1b10-1f5f-055a696c83a6.png)


入力例のテキストはこちらの通りです

```
if [event][EventType] == 1 or [event][EventType] == 4  {
    file { 
        path => "C:\BluePrism\datagateway_outputs\session_logs_%{+YYYY-MM-dd}.txt"
        codec => line { format => "%{event}"}
    }
    elasticsearch {
        hosts => ["localhost"]
        index => "blueprism_log"
    }
}
```

logstash の設定ファイルのドキュメントは[こちら](https://www.elastic.co/guide/en/logstash/current/configuration.html)にあります。

確認ダイアログが出るので「はい」を選択します。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/27674b69-3ef0-d1f8-53d8-0ed498722c7e.png)


再起動を促されるダイアログが出るので「OK」をクリックします。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/02052ed6-060f-7049-279b-8e1e20948e66.png)


Blue Prism サーバーを停止して、再度起動します。


Kibana での確認
===============================

コントロールから適当な公開されているプロセスをランタイムリソース上にドラッグ&ドロップしてセッションを作成し、実行します。

しばらくすると、Kibana からセッションログが確認できます。
![14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/564576/d364f1f3-388e-000e-1636-408aa01ed83b.png)

セッションログの分析など、捗りそうですね。