alfresco study29 activitymonitoring
TRANSCRIPT
戸谷
2014©
Alfresco勉強会#29 ユーザのアクティビティを可視化してみる
2015.08.26
2015.08.26 2015©
はじめに
2
●Alfresco上のユーザアクティビティを可視化できたら面白いかもしれない。 ●はやりのElasticsearch + kibanaが使えるかも。
●使用するAlfrescoバージョン ●Community Edition 5.0.d
2015.08.26 2015©
やりたいこと
3
●こんなことが可視化できないか
●一番活発なShareサイトはどれか
●どの文書が一番注目されている?
●どのユーザが一番活動してる?
2015.08.26 2015©
システム構成
4
アクティビティ 取得
アクティビティ プッシュ
こんな感じに連携できたらいいはず
2015.08.26 2015©
各プロダクト紹介とインストール(1)
5
Alfresco●この勉強会の(一応)主役 ●Alfresco社により開発されているオープンソースECM ●今回はCE 5.0.dをインストール: Macだとインストーラを使って簡単にインストールできます。
Elasticsearch●Elastic社により開発されているリアルタムのデータ検索/分析ソフトウェア ●検索用エンジンとしてApache Luceneを使用 ●今回はhomebrewでインストールできる1.5.2を利用
$ brew install elastic search
2015.08.26 2015©
各プロダクト紹介とインストール(2)
6
logstash●ログファイルを主にElasticsearchに送り込むためのクローラー ●Elastic社により開発 ●Elastic社サイトより最新版のzipをダウンロードして展開 ●以下のプラグインを追加
Kibana●Elasticsearchのデータを可視化して分析するためのI/F ●Elastic社によりry) ●Elastic社サイトより最新版のzipをダウンロードして展開
$ cd <LOGSTASH_HOME> $ bin/plugin install logstash-input-http_poller $ bin/plugin install logstash-codec-json_lines
2015.08.26 2015©
デモ!
7
2015.08.26 2015©8
サイトごとの活発度比率
サイトごとのユーザ活動量のランキング
全サイト横断での注目文書のランキング
2015.08.26 2015©
Alfrescoのユーザアクティビティ収集機能
9
監査証跡(Auditing)
監査証跡(Auditing)とActivityServiceの2種類が用意されている。
●Alfresco APIコールの切片でユーザ操作を記録 ●取得のためのREST APIが用意されている
ActivityService●Alfresco Share上の操作を含めたイベントを記録 ●おもにShare Dashletに表示するためのREST APIが用意されている。
→今回はShare上での文書に対するユーザアクションをトラックしたいのでActivityServiceを使ってみる
2015.08.26 2015©
設定およびカスタマイズ(1)
10
Alfresco●ActivityServiceにアクセスし文書関連アクティビティを全て取得するWebScriptを新規に作成
private static final String[] FILTERED_EVENTS = {"org.alfresco.documentlibrary.file-liked","org.alfresco.documentlibrary.file-added","org.alfresco.documentlibrary.file-previewed","org.alfresco.documentlibrary.file-downloaded","org.alfresco.comments.comment-created"
};… List<ActivityFeedEntity> feeds = activityService.getUserFeedEntries("admin", null, false, false, minId);
List<String> feedsData = new ArrayList<String>();for(ActivityFeedEntity feed : feeds) {
try {for(String eventType : FILTERED_EVENTS) {
if ( eventType.equals(feed.getActivityType())) {JSONObject obj = new JSONObject(feed.getActivitySummary());JSONObject feedJSON = new JSONObject(feed.getJSONString());
…feedsData.add(feedJSON.toString());
}}
文書関連アクティビティ - 文書へのLiking - 文書追加 - 文書プレビュー - 文書ダウンロード - コメント追加
2015.08.26 2015©
設定およびカスタマイズ(2)
11
Logstash
以下を行う設定ファイルを作成 • AlfrescoのWebScriptをpolling • 一回のアクセスで複数のjsonを処理 • 結果をElasticsearchに流し込み • アクティビティイベントのIDをElasticsearchのドキュメントIDとして使用
2015.08.26 2015©
設定およびカスタマイズ(3)
12
Logstashつづきinput { http_poller { urls => { alf => { method => get url => "http://localhost:8080/alfresco/service/study/activitylist" headers => { Accept => "application/json" } } } request_timeout => 60 interval => 5 codec => json_lines
# A hash of request metadata info (timing, response headers, etc.) will be sent here metadata_target => "http_poller_metadata" }}output { elasticsearch { host => "localhost" protocol => "http" document_id => "%{id}" } stdout {codec => rubydebug}}
2015.08.26 2015©
システム構成: 追記版
13
アクティビティ 取得
アクティビティ プッシュ
アクティビティ一覧 WebScript
logstash-activity.conf
2015.08.26 2015©
まとめ
14
●Alfresco上のユーザアクティビティをほぼリアルタイムで集計できた。 ●logstashのWebサービスへのpolling方法について情報が少ない!Logstashとの格闘が9割!
●エンハンス余地 ●Alfresco
●今は全件アクティビティを取得しているので取得件数を絞る。 ●監査証跡ログをソースとして利用する。
●その他 ●Kibana上のダッシュボードや各可視化レポートをAlfresco Shareのダッシュボード上に埋め込む。 ●Kibanaだけに頼らずに、もっと気の利いたレポートを作る