REST API を使用して、イベント監視の BLOB データを取得できるので、Postmanを使えば簡単にSalesforceのイベントログが取得できるのではないかと考えています。これまでもApexからREST APIをコールアウトすれば可能だなぁって考えていたのですが、OAuth 2.0 の認証がなぁって気が進みませんでした...
今回は認証は楽ですし、Postmanを使ってみたいと思います。
まずは、Salesforceのイベントログの情報を整理します。
処理の流れを確認します。
このヘルプを読んでいてなんとなく思いつきました。
Salesforce プラットフォーム API バージョン 7.0 ~ 20.0 の廃止
次の手順に従って、Salesforce 組織からの SOAP および REST API アクティビティを報告するイベントログを確認できます。
- Salesforce CLIなどのツールを使用して、EventLogFileオブジェクトに対して SOQL クエリを実行すると、過去 24 時間に組織内で実行されたすべてのアクションのログが提供されます。
sfdx Force:data:soql:query -q "SELECT LogFile, EventType, CreatedDate FROM EventLogFile WHERE EventType IN ('API', 'RestApi', 'ApiTotalUsage')" -u <ユーザー名>
この部分は開発者コンソールでSOQLを流しても取得できますね。
REST APIでQuery リソースを使用すれば可能なので、Postmanでも問題ないです。
curl https://MyDomainName.my.salesforce.com/services/data/v59.0/query?q=SELECT+Id+,+EventType+,+LogFile+
,+LogDate+,+LogFileLength+FROM+EventLogFile+WHERE+
LogDate+>+Yesterday+AND+EventType+=+'API' -H "Authorization: Bearer token"
2. 結果ごとに、エンドポイントを使用して REST リクエストを実行してデータを取得し、.CSV ファイルにコピーします。
例: /services/data/v52.0/sobjects/EventLogFile/0AT3i000005vXpWGAU/LogFile
応答本文を Excel などのアプリケーションに貼り付けると、イベント ログ データを .CSV ファイルとして簡単に表示できます。
ログファイルのIdが分かれば以下のように取得できそうです
REST API を使用して、イベント監視の BLOB データを取得できます。次のような GET 要求を使用します。
curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/EventLogFile/0ATD000000000pyOAA/LogFile -H "Authorization: Bearer token"
バイナリで返ってくるのかな?
実際にやってみます
- EventLogFileオブジェクトに対して SOQL クエリを実行する
コレクションの中からRESTを展開して、Queryを選択します。
パラメータq の値として以下を設定します。
SELECT LogFile, EventType, CreatedDate FROM EventLogFile
以下のように結果が返ってきました。
LogFileのURLをクリックすると新しいタブが開きます。
Idの部分を:LogFileIdに変小すると、パラメータをセットできるようになります。
今回はRESTの下のsObjectにLogFileという名前で保存しました。
保存してから、Sendボタンを押して送信します。
実行結果をみるとcsvファイルが返ってきます。
csvファイルとして結果を保存できます。
おおお、簡単にイベントログを取得できます。
今までは開発者コンソールで検索してからcurlやphython、ブラウザの機能を使ってダウンロードすることしかなかったのですが、Postmanを使った方が簡単ですね。