11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

イベントモニタリングのログデータを出力する

Last updated at Posted at 2020-05-21

イベントモニタリングとは

ユーザアクティビティを追跡するログ機能です。
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を使用してダウンロードする方法とブラウザからダウンロードする方法があります。

① ブラウザからイベントログをダウンロードする

手順の詳細はこちらを参照。

ELF001.png

  1. シークレットウインドウでSalesforce Event Log File Browserにアクセスする。
  2. [Production Login]をクリックします。
  3. ユーザ名とパスワードを入力してログインします。
  4. 検索する日付範囲を入力します。
  5. 検索するイベントタイプを入力します。
  6. 間隔 (毎日または毎時) を入力します。
  7. [Apply] をクリックします。

留意点

  • ログインの際、「アクセスを許可しますか?」と表示された場合は[許可]をクリックします。
  • IP制限をかけている場合、ログインエラーになることがあります。その場合は下記の手順でIP制限を緩和します。

IP制限をかけているユーザでEvent Log File Browserを使用する

  1. [設定]-[アプリケーション]-[接続アプリケーション]-[接続アプリケーションの OAuth の利用状況]をクリックします。
  2. 接続アプリケーション「elfbrowser」の[インストール]をクリックします。
    ELF004.png
  3. 「接続アプリケーションをインストールしますか?」と問われるので、アプリケーション名を確認して[インストール]をクリックします。
  4. 接続アプリケーションの詳細画面が開かれます。
    ELF003.png
  5. [ポリシーを編集]をクリックしてIP制限の緩和に「IP制限の緩和」を設定します。
  6. Salesforce Event Log File Browser でログインを試みます。

② データローダを使用してイベントログをダウンロードする

この方法では、ログデータがbase64にエンコードされて出力されるため、そのまま使用することができません。
③のElfPyを使用する方法がおすすめです。

  1. データローダを実行します。
  2. [Export]をクリックします。
  3. Step2で[Show all Salesforce objects]にチェックを入れ、[Event Log File(EventLogFile)]を選択します。
    ELF005.png
  4. Step3でクエリを記述して[Finish]をクリックします。ファイルサイズが大きいため、LogDateでフィルターを掛けることをおすすめします。
  5. ログが出力されます。ログは「LogFile」の列にBase64に符号化されています。
    ELF006_2.png

③ ElfPyを使用してイベントログをダウンロードする

ElfPyはAdam TormanがGitHubで公開しているEventLogFileのダウンロードするためのPythonでかかれたスクリプトです。
データローダではLogFileはBase64に符号化されてCSVの1つの列に格納されていましたが、ElfPyを使用すると、LogFile自体をCSVで出力することが可能です。
https://github.com/atorman/elfPy

事前準備

  1. Python3.x.xをインストールします。
  2. Salesforce組織で接続アプリケーションを作成し、コンシューマ鍵とコンシューマの秘密を取得します(接続アプリケーションの作成方法はこちらにまとめました)。
  3. ElfPyをダウンロードします。
  4. ダウンロードした elf.py をエディタで開き、FILL_ME_INを書き換えます。CLIENT_IDにはコンシューマ鍵を、CLIENT_SECRETにはコンシューマの秘密を入力します。なお、elf2.pyはPython2.x.x用です。
elf.py
##########################################################################################
# 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'
##########################################################################################
  1. sandboxのイベントログを取得したい場合は、ログインURLをhttps://login.salesforce.com/services/oauth2/tokenからhttps://test.salesforce.com/services/oauth2/tokenに書き換える必要があります。
elf.py
    # 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を使用する方法についてはこちらの記事で取り扱いました。参考にしてください。

  1. Query」を使用してEventLogFileレコードを取得する

    • /services/data/{APIversion}/query?q=SELECT+Id,+EventType,+Logdate+FROM+EventLogFile
  2. sObject Blob Retrieve」を使用してblob項目を取得する

    • /services/data/{APIversion}/sobjects/EventLogFile/{eventlogfileのsfid}/LogFile

参照

  1. 1ヶ月ではありません。

  2. ただし、Apexはヒープサイズの上限が12MB(非同期処理時)のため、現実的ではありません。

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?