イベントモニタリングとは
ユーザアクティビティを追跡するログ機能です。
SalesforceのセキュリティアドオンであるSalesforce Shieldの製品の一つです。
取得できるイベントは「ログイン」「レポートのエクスポート」など49種(v48.0)あります。
取得できるイベントの詳細は公式ドキュメントを参照ください。
ユーザのアクティビティログをSalesforce組織内で30日間1取得・保持します。
期間を超えて保持するためにはログデータの出力が必要です。
EventLogFileオブジェクトについて
イベントモニタリングのログはEventLogFileオブジェクトに格納されます。
イベント種別、対象日ごとに1件のレコードが作成され、ログCSVがBase64に符号化されてLogFile列に格納されています。
ログが1件もないイベント種別ではEventLogFileレコード自体作成されません。
このオブジェクトには下記の項目があります。
項目 | 説明 |
---|---|
EventType | API、ログイン、レポート、URI などのイベントタイプ。各自の組織に生成されたファイルを判別するために使用します。 |
Interval | Daily または Hourly。 |
LogDate | ログファイル作成日時。 |
LogFile | ★Logの本体。CSV形式のデータがBase64で符号化された値が格納されています。 |
LogFileFieldNames | LogFileのCSVデータのヘッダー。 |
LogFileFieldTypes | LogFileの各列のデータ型。 |
LogFileLength | LogFileのデータサイズ。 |
Sequence | Hourlyのログファイルのイベントログファイルデータの部分の番号。 |
CreatedDate | EventLogFileレコードの作成時刻 |
「1 時間ごとのイベントログファイルの場合、(LogDateではなく)CreatedDate を使用して、EventLogFile オブジェクトが作成された日時を照会することをお勧めします。」(SOAP API 開発者ガイド)とのこと。
ログデータのダウンロード
Salesforceには30日間しかログが保持されないので、過去のログを使用するためにはダウンロードして別途保管する必要があります。
ログを保存する方法は、外部システムからREST APIを使用してダウンロードする方法とブラウザからダウンロードする方法があります。
① ブラウザからイベントログをダウンロードする
手順の詳細はこちらを参照。
- シークレットウインドウでSalesforce Event Log File Browserにアクセスする。
- [Production Login]をクリックします。
- ユーザ名とパスワードを入力してログインします。
- 検索する日付範囲を入力します。
- 検索するイベントタイプを入力します。
- 間隔 (毎日または毎時) を入力します。
- [Apply] をクリックします。
留意点
- ログインの際、「アクセスを許可しますか?」と表示された場合は[許可]をクリックします。
- IP制限をかけている場合、ログインエラーになることがあります。その場合は下記の手順でIP制限を緩和します。
IP制限をかけているユーザでEvent Log File Browserを使用する
- [設定]-[アプリケーション]-[接続アプリケーション]-[接続アプリケーションの OAuth の利用状況]をクリックします。
- 接続アプリケーション「elfbrowser」の[インストール]をクリックします。
- 「接続アプリケーションをインストールしますか?」と問われるので、アプリケーション名を確認して[インストール]をクリックします。
- 接続アプリケーションの詳細画面が開かれます。
- [ポリシーを編集]をクリックしてIP制限の緩和に「IP制限の緩和」を設定します。
- Salesforce Event Log File Browser でログインを試みます。
② データローダを使用してイベントログをダウンロードする
この方法では、ログデータがbase64にエンコードされて出力されるため、そのまま使用することができません。
③のElfPyを使用する方法がおすすめです。
- データローダを実行します。
- [Export]をクリックします。
- Step2で[Show all Salesforce objects]にチェックを入れ、[Event Log File(EventLogFile)]を選択します。
- Step3でクエリを記述して[Finish]をクリックします。ファイルサイズが大きいため、LogDateでフィルターを掛けることをおすすめします。
- ログが出力されます。ログは「LogFile」の列にBase64に符号化されています。
③ ElfPyを使用してイベントログをダウンロードする
ElfPyはAdam TormanがGitHubで公開しているEventLogFileのダウンロードするためのPythonでかかれたスクリプトです。
データローダではLogFileはBase64に符号化されてCSVの1つの列に格納されていましたが、ElfPyを使用すると、LogFile自体をCSVで出力することが可能です。
https://github.com/atorman/elfPy
事前準備
- Python3.x.xをインストールします。
- Salesforce組織で接続アプリケーションを作成し、コンシューマ鍵とコンシューマの秘密を取得します(接続アプリケーションの作成方法はこちらにまとめました)。
- ElfPyをダウンロードします。
- ダウンロードした elf.py をエディタで開き、
FILL_ME_IN
を書き換えます。CLIENT_ID
にはコンシューマ鍵を、CLIENT_SECRET
にはコンシューマの秘密を入力します。なお、elf2.pyはPython2.x.x用です。
##########################################################################################
# Connected App information: fill it in by creating a connected app
# https://help.salesforce.com/articleView?id=connected_app_create.htm&language=en_US&type=0
CLIENT_ID = 'FILL_ME_IN'
CLIENT_SECRET = 'FILL_ME_IN'
##########################################################################################
- sandboxのイベントログを取得したい場合は、ログインURLを
https://login.salesforce.com/services/oauth2/token
からhttps://test.salesforce.com/services/oauth2/token
に書き換える必要があります。
# create a new salesforce REST API OAuth request
url = 'https://login.salesforce.com/services/oauth2/token'
data = { 'grant_type': 'password', 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'username': username, 'password': password}
headers = {'X-PrettyPrint' : '1'}
使用方法
コンソールまたはコマンドプロンプトを開き、elf.pyのあるディレクトリに移動します。
こちらからダウンロードできます。
下記コマンドからelf.pyを実行します。
python elf.py
Username:
Password:
Salesforceのユーザ名とパスワードが求められるので入力します。
なお、会社の信頼できる IP 範囲外の IP アドレスから Salesforce にアクセスするときはセキュリティトークンが必要になります。セキュリティトークンについてはこちら。Passwordの入力の際にパスワードとセキュリティトークンを続けて入力して下さい。
Date range (e.g. Last_n_Days:2, Today, Tomorrow):
Date range はイベントログの対象日を指定します。日時形式または日付リテラルで入力し、エンターを押します。
日付を指定する場合はGMTで0時0分を指定します。例:2020-05-19T00:00:00Z
何も入力されない場合はLast_n_Days:2
が使用されます。
Output directory:
出力したログファイルを格納するディレクトリを指定します。
何も入力しない場合、elf
フォルダが作成されます。
Use compression (y/n)
最後に、レスポンスボディを圧縮するかどうか聞かれます。
通常、y
で問題ありません。何も入力しない場合、圧縮が行われます。
詳細は公式ドキュメントを参照してください。
********************************
Downloading: 2020-05-19-Report.csv to C:\Users\username\Desktop\elfPy-master/elf
Total download time: 0.172285 seconds
Using gzip compression
ダウンロードが実行されます。
データローダを使用したときとは異なり、LogFileがCSV形式で直接出力できます。
④ その他
ElfBashを使用してイベントログをダウンロードする
ElfPyと同じ作者がBash Shell Script版を公開しています。
こちらを使用することでもイベントログを出力できます。
https://github.com/atorman/elfBash
任意の言語でダウンロードツールを作成する
SalesforceのREST APIを使用して、ElfPyと同様のものを任意の言語2で作成することが可能です。
EventLogFileの出力には2つのRESTリソースを使用します。
外部システムからSalesforceのREST APIを使用する方法についてはこちらの記事で取り扱いました。参考にしてください。
-
「Query」を使用してEventLogFileレコードを取得する
/services/data/{APIversion}/query?q=SELECT+Id,+EventType,+Logdate+FROM+EventLogFile
-
「sObject Blob Retrieve」を使用してblob項目を取得する
/services/data/{APIversion}/sobjects/EventLogFile/{eventlogfileのsfid}/LogFile
参照
- EventLogFile | SOAP API 開発者ガイド
- イベントログファイルのダウンロードと視覚化 | Trailhead
- Salesforce Event Log File Browser
- ElfPy - a Tasty Little Script for Downloading Event Log Files on Multiple Platforms
- elfPy | GitHub