Collect Windows Defender Antivirus logs
This document explains how to ingest Windows Defender Antivirus logs to Google Security Operations using Bindplane.
Windows Defender Antivirus is the built-in antimalware engine in Microsoft Windows that provides real-time threat detection, scan results, and protection event logs. The Bindplane agent collects exported Windows Defender event log files directly from the local file system.
Before you begin
Make sure you have the following prerequisites:
- A Google SecOps instance
- Windows Server 2016 or later with
observiq-otel-collectorservice support - If running behind a proxy, ensure firewall ports are open per the Bindplane agent requirements
- Administrator access to Windows endpoints running Windows Defender Antivirus
Get Google SecOps ingestion authentication file
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Collection Agents.
-
Download the Ingestion Authentication File. Save the file securely on the system where Bindplane will be installed.
Get Google SecOps customer ID
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Profile.
-
Copy and save the Customer IDfrom the Organization Detailssection.
Install the Bindplane agent
Install the Bindplane agent on your Windows operating system according to the following instructions.
Windows installation
- Open Command Promptor PowerShellas an administrator.
-
Run the following command:
msiexec / i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" / quiet -
Wait for the installation to complete.
-
Verify the installation by running:
sc query observiq-otel-collector
The service should show as RUNNING.
Additional installation resources
For additional installation options and troubleshooting, see Bindplane agent installation guide .
Configure Bindplane agent to ingest logs and send to Google SecOps
Locate the configuration file
-
Windows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edit the configuration file
-
Replace the entire contents of
config.yamlwith the following configuration:receivers : filelog : include : - C:\Logs\defender-av\*.evtx start_at : beginning exporters : chronicle/windows_defender_av : compression : gzip creds_file_path : 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json' customer_id : '<customer_id>' endpoint : malachiteingestion-pa.googleapis.com log_type : WINDOWS_DEFENDER_AV raw_log_field : body ingestion_labels : env : production service : pipelines : logs/defender_av_to_chronicle : receivers : - filelog exporters : - chronicle/windows_defender_av
Configuration parameters
Replace the following placeholders:
-
Receiver configuration:
-
filelog: The receiver type for collecting log files from disk -
include: List of file paths to monitor. Set this to the location where you export Windows Defender event logs (for example,C:\Logs\defender-av\*.evtx) -
start_at: Set tobeginningto read existing logs orendto only read new entries
-
-
Exporter configuration:
-
windows_defender_av: Descriptive name for the exporter -
creds_file_path: Full path to ingestion authentication file:- Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Windows:
-
<customer_id>: Customer ID from the previous step -
endpoint: Regional endpoint URL:- US:
malachiteingestion-pa.googleapis.com - Europe:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - See Regional Endpoints for complete list
- US:
-
WINDOWS_DEFENDER_AV: Log type exactly as it appears in Chronicle -
ingestion_labels: Optional labels in YAML format (for example,env: production)
-
-
Pipeline configuration:
-
defender_av_to_chronicle: Descriptive name for the pipeline
-
Save the configuration file
- After editing, save the file:
- Windows: Click File > Save
Restart the Bindplane agent to apply the changes
To restart the Bindplane agent in Windows:
-
Choose one of the following options:
- Command Prompt or PowerShell as administrator:
net stop observiq-otel-collector && net start observiq-otel-collector- Services console:
- Press
Win+R, typeservices.msc, and press Enter. - Locate observIQ OpenTelemetry Collector.
- Right-click and select Restart.
- Press
-
Verify the service is running:
sc query observiq-otel-collector -
Check logs for errors:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configure Windows Defender Antivirus log export
Windows Defender Antivirus logs are stored in the Windows Event Log under Microsoft-Windows-Windows Defender/Operational
. You need to export these logs to files on disk so the Bindplane agent can collect them.
-
Create a directory to store the exported log files:
mkdir C:\Logs\defender-av -
Export Windows Defender Antivirus event logs using
wevtutil:wevtutil epl "Microsoft-Windows-Windows Defender/Operational" C:\Logs\defender-av\defender-av.evtx -
(Optional) Schedule regular exports using Windows Task Scheduler:
$action = New-ScheduledTaskAction -Execute "wevtutil" -Argument 'epl "Microsoft-Windows-Windows Defender/Operational" C:\Logs\defender-av\defender-av.evtx /ow:true' $trigger = New-ScheduledTaskTrigger -RepetitionInterval ( New-TimeSpan -Hours 1 ) -Once -At ( Get-Date ) Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "ExportDefenderLogs" -Description "Export Windows Defender AV logs for Bindplane agent" -
Verify that the exported log file is being created at `C:\Logs\defender-av`.
-
Ensure the Bindplane agent
includepath inconfig.yamlmatches the export directory.
UDM mapping table
| Log Field | UDM Mapping | Logic |
|---|---|---|
|
OpcodeValue, ThreadID, Channel, engine_version, security_intelligence_version, network_realtime_inspection_engine_version, network_realtime_inspection_security_intelligence_version, rtp_state, oa_state, ioav_state, bm_state, antivirus_security_intelligence_age, antispyware_security_intelligence_age, last_quick_scan_age, last_full_scan_age, antivirus_security_intelligence_creation_time, antispyware_security_intelligence_creation_time, last_quick_scan_start_time, last_quick_scan_end_time, last_quick_scan_source, last_full_scan_start_time, last_full_scan_end_time, last_full_scan_source, product_status
|
additional.fields | Merged with label maps {key: field name, value: {string_value: field value}} if not empty |
| |
metadata.description | Set to event-specific description string based on EventID |
| |
metadata.event_type | Set to "SCAN_HOST" if has_principal true, else "GENERIC_EVENT"; "SCAN_FILE" for EventID 1011,1116,1117 |
|
ProviderGuid
|
metadata.product_deployment_id | Value from ProviderGuid after removing {} |
| |
metadata.product_event_type | Set to event-specific product event type string based on EventID |
|
RecordNumber
|
metadata.product_log_id | Value copied directly as string |
|
platform_version
|
metadata.product_version | Value copied directly |
|
FWLink
|
metadata.url_back_to_product | Value copied directly |
| |
metadata.vendor_name | Set to "Microsoft" |
| |
metadata.product_name | Set to "Windows Defender AV" |
|
SourceModuleType
|
observer.application | Value copied directly |
|
Domain, _domain
|
principal.administrative_domain | Value from Domain, or _domain extracted from Detection User using grok for EventID 1116,1117 |
|
Hostname
|
principal.hostname | Value copied directly |
|
Process Name
|
principal.process.file.full_path | Value copied directly for EventID 1116,1117 |
|
ProcessID
|
principal.process.pid | Value copied directly |
|
SourceModuleName
|
principal.resource.name | Value copied directly |
|
AccountType
|
principal.user.role_description | Value copied directly |
|
AccountName
|
principal.user.user_display_name | Value copied directly |
|
User, UserID, _account
|
principal.user.userid | Value from User, or UserID if not empty, or _account extracted from Detection User using grok for EventID 1116,1117 |
|
SourceName
|
security_result.about.resource.attribute.labels | Merged with label map {key: "SourceName", value: SourceName} if not empty |
| |
security_result.action | Set to "ALLOW" by default; "BLOCK" for EventID 1116; "QUARANTINE" for EventID 1117 |
| |
security_result.category | Set to "SOFTWARE_MALICIOUS" for EventID 1011,1116,1117 |
|
ActivityID
|
security_result.detection_fields | Merged with detection_fields {key: "Activity ID", value: ActivityID} if ActivityID not empty and not "-" |
|
EventID
|
security_result.description | Set to "EventID: %{EventID}" |
|
Threat Name
|
security_result.rule_name | Value copied directly for EventID 1011,1116,1117 |
|
Severity, Level, EventType
|
security_result.severity | Set to LOW if Severity matches verbose|information|info, MEDIUM if warning|error, HIGH if critical; Severity set from Level (5|4 -> information, 2|3 -> warning, 1 -> critical); or from EventType (ERROR -> %{severity}, INFO -> "INFORMATIONAL", else severity_details) |
|
Severity Name, severity
|
security_result.severity_details | Value from Severity Name for EventID 1011,1116,1117; or from severity for EventType not ERROR or INFO |
|
Threat Name
|
security_result.summary | Value copied directly for EventID 1011,1116,1117 |
|
Category Name
|
security_result.threat_name | Value copied directly for EventID 1011,1116,1117 |
|
FWLink
|
security_result.url_back_to_product | Value copied directly for EventID 1011,1116,1117 |
|
Path
|
target.file.full_path | Value copied directly for EventID 1116,1117 |
| |
target.hostname | Set to "" for EventID 1117 |
|
Path
|
target.registry.registry_key | Value copied directly for EventID 1011 |
Need more help? Get answers from Community members and Google SecOps professionals.

