はじめに
Blue Prism には、セッションログやワークキューの状態などのログデータを、外部のログ基盤にエクスポートする「Data Gateway」という仕組みがあります。
この記事では、docker を使って手元に Elasticsearch + Kibana 環境を作り、そこに Blue Prism の Data Gateway からログをエクスポートしてみます。
ドキュメントには Splunk などの名前しか出てきませんが、Data Gateway は内部で logstash を使っているそうなので、Elasticsearch との相性は良さそうです。
Data Gateway をインストールする
v6.7 User Guide - Data Gateways(要ログイン) に沿って、Data Gateway をインストールします。
インストーラーは製品 > Extras(要ログイン) からダウンロードできます
インストールの手順からわかるように、Data Gateway を使うには、BPServer.exe をつかって Blue Prism をサーバーとして動かす必要があります。サーバーとして動かす手順はこちらを参照してください。
BPServer.exe の「サーバー構成の詳細」画面左下に「データゲートウェイプロセスを有効にする」チェックボックスがあるので On にして、「保存」をクリックします。
Elasticsearch と Kibana を用意する
ローカル検証用に Elasticsearch と Kibana が動く docker-compose ファイルを用意し、docker-compose up
します。
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 のコンソールが表示されます。
データゲートウェイを設定する
インタラクティブクライアントの「システム」タブで「データゲートウェイ」を選択し、エクスポートしたいデータなどを設定し、「適用」をクリックします。
インタラクティブクライアントの「システム」タブで「データゲートウェイ > 構成」を選択し、「新しいデータゲートウェイ出力を追加」をクリックします。
あとでマニュアルで修正するので、この「データゲートウェイ出力」ダイアログではファイルを選択し、適当なパスを設定し、「次へ」をクリックします。
「送付するデータを選択」ダイアログではエクスポートしたいデータの種類を選択します。その後、「次へ」をクリックします。
「出力構成のプレビュー」ダイアログで、「出力の詳細を編集」ボタンをクリックします。
「データゲートウェイ出力の詳細」ダイアログで、下図のように値を設定し(elasticsearch の部分を追加)、「詳細出力を保存」をクリックします。
入力例のテキストはこちらの通りです
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 の設定ファイルのドキュメントはこちらにあります。
再起動を促されるダイアログが出るので「OK」をクリックします。
Blue Prism サーバーを停止して、再度起動します。
Kibana での確認
コントロールから適当な公開されているプロセスをランタイムリソース上にドラッグ&ドロップしてセッションを作成し、実行します。
しばらくすると、Kibana からセッションログが確認できます。
セッションログの分析など、捗りそうですね。