Collect Zscaler Email DLP logs
This document describes how you can export Zscaler Email DLP logs by setting up a Google Security Operations feed and how log fields map to Google SecOps Unified Data Model (UDM) fields.
For more information, see Data ingestion to Google SecOps overview.
A typical deployment consists of Zscaler Email DLP and the Google SecOps Webhook feed configured to send logs to Google SecOps. Each customer deployment can differ and might be more complex.
The deployment contains the following components:
Zscaler Email DLP: The platform from which you collect logs.
Google SecOps feed: The Google SecOps feed that fetches logs from Zscaler Email DLP and writes logs to Google SecOps.
Google SecOps: Retains and analyzes the logs.
An ingestion label identifies the parser which normalizes raw log data to structured UDM format. The information in this document applies to the parser with the ZSCALER_EMAIL_DLP ingestion label.
Before you begin
Ensure you have the following prerequisites:
- Access to Zscaler Internet Access console. For more information, see Secure Internet and SaaS Access ZIA Help.
- Zscaler Email DLP 2026 or later
- All systems in the deployment architecture are configured with the UTC time zone.
- The API key which is needed to complete feed setup in Google Security Operations. For more information, see Setting up API keys.
Set up feeds
There are two different entry points to set up feeds in the Google SecOps platform:
- SIEM Settings > Feeds
- Content Hub > Content Packs
Set up feeds from SIEM Settings > Feeds
To configure multiple feeds for different log types within this product family, see Configure feeds by product.
To configure a single feed, follow these steps:
- Go to SIEM Settings > Feeds.
- Click Add New Feed.
- On the next page, click Configure a single feed.
- In the Feed name field, enter a name for the feed; for example, Zscaler Email DLP Logs.
- Select Webhook as the Source Type.
- Select Zscaler Email DLP as the Log Type.
- Click Next.
- Optional: Enter values for the following input parameters:
- Split delimiter: The delimiter that is used to separate the logs lines. Leave blank if a delimiter is not used.
- Asset namespace: The asset namespace.
- Ingestion labels: The label to be applied to the events from this feed.
- Click Next.
- Review your new feed configuration, and then click Submit.
- Click Generate Secret Key to generate a secret key to authenticate this feed.
Set up feeds from the Content Hub
Specify values for the following fields:
- Split delimiter: The delimiter that is used to separate log lines, such as
\n.
Advanced options
- Feed Name: A prepopulated value that identifies the feed.
- Source Type: Method used to collect logs into Google SecOps.
- Asset namespace: The asset namespace.
- Ingestion labels: The label applied to the events from this feed.
- Click Next.
- Review the feed configuration in the Finalize screen, and then click Submit.
- Click Generate Secret Key to generate a secret key to authenticate this feed.
Set up Zscaler Email DLP
- In the Zscaler Internet Access console, click Administration > Nanolog Streaming Service > Cloud NSS Feeds and then click Add Cloud NSS Feed.
- The Add Cloud NSS Feed window appears. In the Add Cloud NSS Feed window, enter the details.
- Enter a name for the feed in the Feed Name field.
- Select NSS for Web in NSS Type.
- Select the status from the Status list to activate or deactivate the NSS feed.
- Keep the value in the SIEM Rate drop-down as Unlimited. To suppress the output stream due to licensing or other constraints, change the value.
- Select Other in the SIEM Type list.
- Select Disabled in the OAuth 2.0 Authentication list.
- Enter a size limit for an individual HTTP request payload in Max Batch Size. Configure this value to 512 KB, as this is the recommended best practice for optimal SIEM ingestion. (Note: Lower batch sizes can sometimes reduce latency at the cost of more frequent HTTP requests).
Enter the HTTPS URL of the Chronicle API endpoint in the API URL in the following format:
https://<CHRONICLE_REGION>-chronicle.googleapis.com/v1alpha/projects/<GOOGLE_PROJECT_NUMBER>/locations/<LOCATION>/instances/<CUSTOMER_ID>/feeds/<FEED_ID>:importPushLogsCHRONICLE_REGION: Region where your Chronicle instance is hosted. For example, US.GOOGLE_PROJECT_NUMBER: BYOP project number. Obtain this from C4.LOCATION: Chronicle region. For example, US.CUSTOMER_ID: Chronicle customer ID. Obtain from C4.FEED_ID: Feed ID shown on Feed UI on the new webhook created- Sample API URL:
https://us-chronicle.googleapis.com/v1alpha/projects/12345678910/locations/US/instances/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/feeds/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:importPushLogsClick Add HTTP Header, and then add HTTP headers in the following format:
Header 1: Key1:X-goog-api-keyand Value1: API Key generated on Google Cloud BYOP's API Credentials.Header 2: Key2:X-Webhook-Access-Keyand Value2: API secret key generated on webhook's "SECRET KEY".
Select Email DLP in the Log Types list.
Select JSON in the Feed Output Type list.
Disable JSON Array Notation.
Set Feed Escape Character to
, \ ".To add a new field to the Feed Output Format, select Custom in the Feed Output Type list.
Copy-paste the Feed Output Format and add new fields. Ensure the key names match the actual field names.
Following is the default Feed Output Format:
\{"sourcetype": "zscalernss-emaildlp", "event": \{"mailsenttime": "%s{mail_sent_time}", "scantime": "%u{scan_time}", "recordid": "%llu{recordid}", "company": "%s{company}", "tenant": "%s{tenant}", "user": "%s{username}", "dept": "%s{departmentname}", "filenames": "%s{ac_names}", "filemd5s": "%s{ac_md5s}", "doctypes": "%s{ac_doctypes}", "filesizes": "%s{ac_sizes}", "filetypes": "%s{ac_filetypes}", "dlpdictnames": "%s{dlpdictnames}", "dlpdictcnts": "%s{dlpdictcnts}", "dlpengnames": "%s{dlpengnames}", "dlpidentifier": "%llu{dlpidentifier}", "triggeredrcpts": "%s{trigg_rcpts}", "severity": "%s{severity}", "action": "%s{action}", "rulename": "%s{rulelabels}", "otherrcpts": "%s{other_rcpts}", "subject": "%s{subject}", "msgid": "%s{msgid}"\}\}Select the timezone for the Time field in the output file in the Timezone list. By default, the timezone is set to your organization's time zone.
Review the configured settings.
Click Save to test connectivity. If the connection is successful, a green tick accompanied by the message Test Connectivity Successful: OK (200) appears.
For more information about Google SecOps feeds, see Google SecOps feeds documentation. For information about requirements for each feed type, see Feed configuration by type.
If you encounter issues when you create feeds, contact Google SecOps support.
Supported Zscaler Email DLP log formats
The Zscaler Email DLP parser supports logs in JSON format.
Supported Zscaler Email DLP Sample Logs
JSON
{ "sourcetype": "zscalernss-emaildlp", "event": { "mailsenttime": "Wed Feb 4 04:11:09 2026", "scantime": "25", "recordid": "7602857773514883073", "company": "Sample Company", "tenant": "sample.com", "user": "dummyuser@sample.com", "dept": "Default Department", "filenames": "test.xlsx", "filemd5s": "0d67b8287a735240724384f293ee364f", "doctypes": "None", "filesizes": "8824", "filetypes": "xlsx", "dlpdictnames": "Credit Cards: Detect leakage of credit card information", "dlpdictcnts": "10", "dlpengnames": "", "dlpidentifier": "7602857773514883076", "triggeredrcpts": "test2@sample.com", "severity": "High Severity", "action": "Block", "rulename": "DLP_Rule_7", "otherrcpts": "None", "subject": "Test Subject", "msgid": "863fcac3-4040-495f-9ec6-b41abd054ca7@sample.com" } }
Field mapping reference
The following table lists common fields of the ZSCALER_EMAIL_DLP log type and their corresponding UDM fields.
| Log field | UDM mapping | Logic |
|---|---|---|
sourcetype |
additional.fields[sourcetype] |
|
|
metadata.event_type |
The metadata.event_type UDM field is set to EMAIL_TRANSACTION, provided principal and metadata objects are populated. |
|
metadata.vendor_name |
The metadata.vendor_name UDM field is set to Zscaler. |
|
metadata.product_name |
The metadata.product_name UDM field is set to Email DLP. |
time |
metadata.collected_timestamp |
|
ss |
additional.fields[ss] |
|
mm |
additional.fields[mm] |
|
hh |
additional.fields[hh] |
|
day |
additional.fields[day] |
|
dd |
additional.fields[dd] |
|
mon |
additional.fields[mon] |
|
mth |
additional.fields[mth] |
|
yyyy |
additional.fields[yyyy] |
|
rtime |
additional.fields[rtime] |
|
rss |
additional.fields[rss] |
|
rmm |
additional.fields[rmm] |
|
rhh |
additional.fields[rhh] |
|
rday |
additional.fields[rday] |
|
rdd |
additional.fields[rdd] |
|
rmon |
additional.fields[rmon] |
|
rmth |
additional.fields[rmth] |
|
ryyyy |
additional.fields[ryyyy] |
|
tz |
additional.fields[tz] |
|
datacenter |
intermediary.location.name |
|
datacentercity |
intermediary.location.city |
|
datacentercountry |
intermediary.location.country_or_region |
|
company |
principal.user.company_name |
|
dept |
principal.user.department |
|
owner |
principal.user.email_addresses |
If the owner log field value is not empty and matches the regular expression pattern (^.@.$) and (^.{0,255}$), then the owner log field is mapped to the principal.user.email_addresses UDM field.
|
sender |
principal.user.email_addresses |
If the sender log field value is not empty and matches the regular expression pattern (^.@.$) and (^.{0,255}$), then the sender log field is mapped to the principal.user.email_addresses UDM field.
|
user |
principal.user.email_addresses |
If the user log field value is not empty and matches the regular expression pattern (^.@.$) and (^.{0,255}$), then the user log field is mapped to the principal.user.email_addresses UDM field.
|
extusername |
principal.user.email_addresses |
If the extusername log field value is not empty and matches the regular expression pattern (^.@.$) and (^.{0,255}$), then the extusername log field is mapped to the principal.user.email_addresses UDM field.
|
owner |
principal.user.userid |
If the owner log field value is not empty and
Else, if the sender log field value is not empty and
Else, if the user log field value is not empty and
Else, if the extusername log field value is not empty and
|
owner |
network.email.from |
If the owner log field value is not empty and the owner log field value matches the regular expression patterns (^.+@.+$) and (^.{0,255}$) then, owner log field is mapped to the network.email.from UDM field.Else, if the sender log field value is not empty and the sender log field value matches the regular expression patterns (^.+@.+$) and (^.{0,255}$) then, sender log field is mapped to the network.email.from UDM field.Else, if the user log field value is not empty and the user log field value matches the regular expression patterns (^.+@.+$) and (^.{0,255}$) then, user log field is mapped to the network.email.from UDM field.Else, if the extusername log field value is not empty and the extusername log field value matches the regular expression patterns (^.+@.+$) and (^.{0,255}$) then, extusername log field is mapped to the network.email.from UDM field. |
mailsenttime |
metadata.event_timestamp |
|
zs_rcv_time |
additional.fields[zs_rcv_time] |
|
zs_sent_time |
additional.fields[zs_sent_time] |
|
epochmail_sent_time |
additional.fields[epochmail_sent_time] |
|
tenant |
principal.administrative_domain |
|
appname |
principal.application |
|
msgid |
network.email.mail_id |
|
subject |
network.email.subject |
|
filemd5s |
security_result.about.file.md5 |
Attachment MD5 hashes separated by pipe delimiters (|) are extracted from the filemd5s log field, then each extracted MD5 hash is mapped to the security_result.about.file.md5 UDM field.
|
filesizes |
security_result.about.file.size |
Email attachment sizes separated by pipe delimiters (|) are extracted from the filesizes log field, then each extracted email attachment size is mapped to the security_result.about.file.size UDM field.
|
filetypes |
security_result.about.file.file_type |
Email attachment filetypes separated by pipe delimiters (|) are extracted from the
filetypes log field, and
|
doctypes |
security_result.detection_fields[doctypes] |
Document-types separated by pipe delimiters (|) are extracted from the doctypes log field, then the UDM field security_result.detection_fields.key is set to doctypes_%{index} and the document-type is mapped to the security_result.detection_fields.value UDM field.
|
filenames |
security_result.about.file.names |
Attachment file-names separated by pipe delimiters (|) are extracted from the filenames log field, then the extracted attachment file-name is mapped to the security_result.about.file.names UDM field.
|
triggeredrcpts |
network.email.to |
Email addresses separated by pipe delimiters (|) are extracted from the triggeredrcpts log field, and if each extracted email address matches the regular expression patterns (^.+@.+$) and (^.{0,255}$), then the extracted email address is mapped to the network.email.to UDM field.
|
triggeredrcpts |
target.user.email_addresses |
Email addresses separated by pipe delimiters (|) are extracted from the triggeredrcpts log field, and if each extracted email address matches the regular expression patterns (^.+@.+$) and (^.{0,255}$), then the extracted email address is mapped to the target.user.email_addresses UDM field.
|
triggeredrcpts |
security_result.about.email |
Email addresses separated by pipe delimiters (|) are extracted from the triggeredrcpts log field and then combined using comma (,), and
|
otherrcpts |
network.email.to |
Email addresses separated by pipe delimiters (|) are extracted from the otherrcpts log field, and if each extracted email address matches the regular expression patterns (^.+@.+$) and (^.{0,255}$), then the extracted email address is mapped to the network.email.to UDM field.
|
otherrcpts |
target.user.email_addresses |
Email addresses separated by pipe delimiters (|) are extracted from the otherrcpts log field, and if each extracted email address matches the regular expression patterns (^.+@.+$) and (^.{0,255}$), then the extracted email address is mapped to the target.user.email_addresses UDM field.
|
trigg_rcpt_doms |
security_result.about.domain.name |
Unique triggered recipient-domains separated by pipe delimiters (|) are extracted from the trigg_rcpt_doms log field and then combined using comma (,), and
|
other_rcpt_doms |
about.domain.name |
Unique recipient-domains separated by pipe delimiters (|) are extracted from the other_rcpt_doms log field and then combined using comma (,), and
|
scantime |
security_result.detection_fields[scantime] |
|
dlpidentifier |
security_result.detection_fields[dlpidentifier] |
|
dlpdictnames |
security_result.category_details |
DLP dict-names separated by pipe delimiters (|) are extracted from the dlpdictnames log field, then each extracted DLP dict-name is mapped to the security_result.category_details UDM field.
|
dlpdictcnts |
security_result.detection_fields[dlpdictcnts] |
DLP dict-counts separated by pipe delimiters (|) are extracted from the dlpdictcnts log field, then the UDM field security_result.detection_fields.key is set to dlpdictcnts_%{index} and the DLP dict-count is mapped to the security_result.detection_fields.value UDM field.
|
dlpengnames |
security_result.detection_fields[dlpengnames] |
DLP engine-names separated by pipe delimiters (|) are extracted from the dlpengnames log field, then the UDM field security_result.detection_fields.key is set to dlpengnames_%{index} and the DLP engine-name is mapped to the security_result.detection_fields.value UDM field.
|
recordid |
metadata.product_log_id |
|
logtype |
metadata.product_event_type |
|
severity |
security_result.severity_details |
|
|
security_result.severity |
If the severity log field value matches the regular expression pattern (^High.*), then the security_result.severity UDM field is set to High.Else, if the severity log field value matches the regular expression pattern (^Info.*), then the security_result.severity UDM field is set to INFORMATIONAL.Else, if the severity log field value matches the regular expression pattern (^Medium.*), then the security_result.severity UDM field is set to MEDIUM.Else, if the severity log field value matches the regular expression pattern (^Low.*), then the security_result.severity UDM field is set to LOW.Else, the security_result.severity UDM field is set to UNKNOWN_SEVERITY.
|
actions |
security_result.action_details |
Actions separated by pipe delimiters (|) are extracted from the actions log field, then combined using comma (,) is mapped to the security_result.action_details UDM field.
|
|
security_result.action |
Actions separated by pipe delimiters (|) are extracted from the action log field and
|
rulename |
security_result.rule_labels |
Rulenames separated by pipe delimiters (|) are extracted from the rulename log field, then the extracted rulename is mapped to the security_result.rule_labels UDM field.
|
Need more help? Get answers from Community members and Google SecOps professionals.