戸谷
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だけに頼らずに、もっと気の利いたレポートを作る
Alfresco study29 activitymonitoring

Alfresco study29 activitymonitoring