IBM Cloud Activity TrackerでWatson Discoveryの操作ログ取得を試してみた


# はじめに
IBM Cloudでは [Activity Tracker](https://cloud.ibm.com/docs/activity-tracker?topic=activity-tracker-about)というサービスでユーザーの操作やAPIの使用状況を記録することができます。サービスからのイベントをキャプチャして「いつ誰がどこで何をしたか」を記録し、検索、アーカイブ保存、アラート通知、グラフ描画などの機能により監査、セキュリティ監視、運用トラブルシューティングに利用できます。
[Activity Trackerに対応したサービス](https://cloud.ibm.com/docs/activity-tracker?topic=activity-tracker-cloud_services_locations)には[Watson Discovery](https://cloud.ibm.com/catalog/services/watson-discovery#about)や[Watson Assistant](https://cloud.ibm.com/catalog/services/watson-assistant#about)などのWatson APIも含まれています。既存のWatson Discoveryのインスタンスを対象としてどんなことができるのか試してみました。

# 目次
[Activity Trackerイベントを生成するWatson Discovery関連のアクティビティ](#Chapter0)
[Activity Trackerインスタンスをデプロイする](#Chapter1)
[Activity Trackerを使ってみる](#Chapter2)
[Watson Discoveryのイベントに絞り込んで表示する](##Chapter3)
[ログをエクスポートする](##Chapter4)
[参考リンク](#reference)

<!-- 各チャプター -->
<a id="#Chapter0"></a>
# Activity Trackerイベントを生成するWatson Discovery関連のアクティビティ
ユーザーによる成果物の作成、変更、削除などの操作やAPIの使用についてイベントが生成されます。対象アクティビティの一覧は[こちら](https://cloud.ibm.com/docs/discovery-data?topic=discovery-data-at_events)。

<a id="#Chapter1"></a>
# Activity Trackerインスタンスをデプロイする
IBM Cloudコンソールにログインし、ダッシュボード左上角のメニューアイコン をクリックし、線グラフのアイコン「プログラム識別情報」 > 「Activity Tracker」を選択します。
<img width="300" alt="図1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/6a3fbcee-6e46-b9bc-2b23-48869474911a.png">


:::note info
 日本語のUIで「プログラム識別情報」となっていますが、マニュアル原文と英語UIでは"Observability"です（同じものと分からずちょっと迷いました...)。
:::
右上の「作成」をクリックします。
<img width="500" alt="図0a.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/109e640b-445f-a09a-d42a-b002ac95768b.png">

リージョンには今回対象とするWatson Discoveryのインスタンスと同じリージョンを、プランは有料プランから7日間を選択し、同意のチェックボックスをチェックして「作成」をクリックします。

<img width="500" alt="図0-1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/293b1f4f-2f14-6dee-f2ca-9238c7f18381.png">

:::note info
 リアルタイムにユーザの操作イベントを受信できるかどうか動作確認するなら無料のLite Planでも可能です。イベントログの保存・検索やアラート通知など本格的に利用するための機能は有料プランで提供されています。プランについては詳しくは[こちら](https://cloud.ibm.com/docs/activity-tracker?topic=activity-tracker-service_plan#service_plan)。
:::

デプロイが完了するとリソース一覧にも表示されます。Activity Trackerが開始すると、追加の設定などをすることなく、同じリージョン内の全ての対応サービスインスタンスからのイベントがキャプチャされ記録されていきます。


<a id="#Chapter2"></a>
# Activity Trackerを使ってみる
IBM Cloudコンソールにログインし、ダッシュボード左上角のメニューアイコン をクリックし、「プログラム識別情報」 > 「Activity Tracker」で表示されるインスタンスの「ダッシュボードを開く」をクリックします。
<img width="500" alt="図2−1a.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/5c9d86d5-2720-b8a0-a45d-24aaa54c67cf.png">

ダッシュボードを開くと記録されたイベントが1イベント1行ずつメインのペインに表示されています。データ項目によっては色分けされています。各イベントにマウスオーバーし左に表示される右向きの三角▶をクリックすると、イベント詳細が表示されます。またデフォルトでは直近60分に記録されたイベントが表示されていますが、期間は右上のToggle timelineをクリックしてウィンドウ右にTimelineペインを開き変更できました。
<img width="500" alt="図2-1-1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/4578aed9-ddc7-020a-13a4-612b58969e60.png">

Timelineペインではイベント数の棒グラフも表示されます。スパイク的な傾向があるなど気になる期間をクリックし「Jump to」と進むと、メインペインの表示をその期間にジャンプし、ガイドとして使える区切り線を追加表示してくれます。
<img width="500" alt="図2-1-2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/04870152-a06f-b05f-0601-69d9f56b0bce.png">

イベントが記録されることを確認する目的で、Watson Discoveryでダミーの分析プロジェクトを削除してみました。Criticalなアクティビティとして記録され、日時、ユーザー名、削除したプロジェクトのIDなどが確認できました。
<img width="500" alt="図2-2a.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/b722a39b-8f94-e3c8-ac51-b1b1486ab141.png">


<a id="##Chapter3"></a>
## イベントを絞り込んで表示する
同じリージョンにある全てのActivity Tracker対応サービスインスタンスのアクティビティがキャプチャされているので、Watson Discovery関連のみ表示するよう絞り込んでみます。
Appsで表示される検索窓に「discovery」と入力するとWatson Discoveryインスタンスがリストされました。「SELECT ALL」、「APPLY」をクリックしてWatson Discoveryインスタンスからのイベントのみを表示させるようにしました。
<img width="400" alt="図3-1a.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/13e0179b-2371-bb39-f3f4-34e618d8be75.png">


この絞り込み設定を次回以降もすぐに利用できるように、viewとして保存してみます。左のペインでViewsをクリックし、Unsaved Viewのドロップダウンから「Save as a new view」をクリックしviewの名前を入力して保存しました。
<img width="400" alt="図3−2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/5020a386-eaf2-3a0c-381a-11cd1741c0c7.png">

<a id="##Chapter4"></a>
## ログをエクスポートする
Viewで絞り込んだ状態で、View名 > 「Export lines」でエクスポートしてみました。
<img width="400" alt="図4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/dee6eba7-d272-43d9-451a-61ae1d810adb.png">

:::note info
 アーカイブ目的の場合IBM Cloud Object Storageへの[アーカイブ機能](https://cloud.ibm.com/docs/activity-tracker?topic=activity-tracker-archiving-ov)を使うのが良さそうです。アーカイブしたログを検索するにはIBM Cloud Data Engine serviceを別途デプロイして使います。
:::

これ以降の手順はブラウザ上で直接ダウンロードする方法ではなく、よりセキュリティを考慮した方法となっていました。
指定したイベントのJSONLファイルが圧縮されてIBM Cloud Object Storage上に保存され、ダウンロードのためのURLがエクスポートを実行したユーザーのEメールアドレス宛てに送付されてきます。
Eメール内のリンクをクリックしてダウンロードすることでエクスポートしたログを取得できました。ダウンロードリンクは12時間の期限付きでした。
<img width="500" alt="図3a.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772444/6bd2a8ed-4712-b50d-8476-832a47f45512.png">

:::note info
 [JSONL(JSON Lines)](https://jsonlines.org/)は改行区切りで1行にJSONの1レコードを記述することで複数のJSON レコードを構造化して格納できるファイル形式です。JSONLファイルは、たとえば[JQコマンド](https://stedolan.github.io/jq)で絞り込みや整形、JSON、CSVへの変換などが可能です。
:::
<a id="#reference"></a>
# 参考リンク
- [IBM Cloud Activity Trackerマニュアル](https://cloud.ibm.com/docs/activity-tracker)