12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2020-05-21

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

ユーザアクティビティを追跡するログ機能です。
SalesforceのセキュリティアドオンであるSalesforce Shieldの製品の一つです。
取得できるイベントは「ログイン」「レポートのエクスポート」など49種(v48.0)あります。
取得できるイベントの詳細は公式ドキュメントを参照ください。
ユーザのアクティビティログをSalesforce組織内で1年間取得・保持します(Spring'24より前は30日間でした)。
期間を超えて保持するためにはログデータの出力が必要です。

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を使用してダウンロードする方法とブラウザからダウンロードする方法があります。

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

Spring'24から[Setup (設定)] の [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と同様のものを任意の言語1で作成することが可能です。
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. ただし、Apexはヒープサイズの上限が12MB(非同期処理時)のため、現実的ではありません。

12
9
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
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?