Collect NetApp ONTAP logs
This document explains how to ingest NetApp ONTAP logs to Google Security Operations using the Bindplane agent.
NetApp ONTAP is a storage operating system that generates syslog messages for authentication events, system status, network activity, and security-related operations. The parser extracts fields from syslog messages using regular expressions and maps them to the Unified Data Model (UDM).
Before you begin
Make sure you have the following prerequisites:
- A Google SecOps instance
- Windows Server 2016 or later, or Linux host with
systemd - Network connectivity between the Bindplane agent and the NetApp ONTAP cluster
- If running behind a proxy, ensure firewall ports are open per the Bindplane agent requirements
- Administrative access to the NetApp ONTAP cluster via SSH
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 the Bindplane agent 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 ID from the Organization Details section.
Install the Bindplane agent
Install the Bindplane agent on your Windows or Linux operating system according to the following instructions.
Windows installation
- Open Command Prompt or PowerShell as an administrator.
Run the following command:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietWait for the installation to complete.
Verify the installation by running:
sc query observiq-otel-collectorThe service should show as RUNNING.
Linux installation
- Open a terminal with root or sudo privileges.
Run the following command:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shWait for the installation to complete.
Verify the installation by running:
sudo systemctl status observiq-otel-collectorThe service should show as active (running).
Additional installation resources
For additional installation options and troubleshooting, see the Bindplane agent installation guide.
Configure the Bindplane agent to ingest syslog and send to Google SecOps
Locate the configuration file
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edit the configuration file
Replace the entire contents of
config.yamlwith the following configuration:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/netapp_ontap: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: NETAPP_ONTAP raw_log_field: body service: pipelines: logs/netapp_ontap_to_chronicle: receivers: - udplog exporters: - chronicle/netapp_ontap
Configuration parameters
Replace the following placeholders:
Receiver configuration:
listen_address: IP address and port to listen on:0.0.0.0to listen on all interfaces (recommended)- Port
514is the standard syslog port (requires root on Linux; use1514for non-root)
Exporter configuration:
creds_file_path: Full path to ingestion authentication file:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: Customer ID copied from the Google SecOps consoleendpoint: 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:
Save the configuration file
- After editing, save the file:
- Linux: Press
Ctrl+O, thenEnter, thenCtrl+X - Windows: Click File > Save
- Linux: Press
Restart the Bindplane agent to apply the changes
To restart the Bindplane agent in Linux, run the following command:
sudo systemctl restart observiq-otel-collectorVerify the service is running:
sudo systemctl status observiq-otel-collectorCheck logs for errors:
sudo journalctl -u observiq-otel-collector -f
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-collectorServices console:
- Press
Win+R, typeservices.msc, and press Enter. - Locate observIQ OpenTelemetry Collector.
- Right-click and select Restart.
Verify the service is running:
sc query observiq-otel-collectorCheck logs for errors:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Press
Configure a syslog destination in ONTAP
Access the ONTAP cluster using SSH:
ssh admin@<ontap-cluster-ip>- Replace
<ontap-cluster-ip>with the management IP of your ONTAP cluster.
- Replace
Check existing event filters and notifications:
event filter show event notification showCreate a syslog destination. Replace
<syslog-server-ip>and<syslog-server-port>with your Bindplane details:event notification destination create -name syslog-ems -syslog <syslog-server-ip> -syslog-port <syslog-server-port> -syslog-transport udp-unencryptedOther options for
-syslog-transport:udp-unencrypted(default)tcp-unencryptedtcp-encrypted(for TLS)
Verify the syslog destination:
event notification destination show
Configure existing event filters
Link default filters to the syslog destination:
event notification create -filter-name no-info-debug-events -destinations syslog-ems event notification create -filter-name default-trap-events -destinations syslog-ems
Optional: Create and configure custom filters
Authentication events filter (logins/logouts):
event filter create -filter-name auth_events event filter rule add -filter-name auth_events -type include -message-name *login* -severity info event filter rule add -filter-name auth_events -type include -message-name *logout* -severity infoSecurity detection fields filter:
event filter create -filter-name security_fields event filter rule add -filter-name security_fields -type include -message-name *nmsdk_language* -severity infoApply each filter to the syslog destination:
event notification create -filter-name auth_events -destinations syslog-ems event notification create -filter-name security_fields -destinations syslog-emsVerify notifications:
event notification show
UDM mapping table
| Log Field | UDM Mapping | Logic |
|---|---|---|
code |
Not Mapped | |
description |
metadata.description |
Extracted from the log message using a grok pattern. Present only when the description is "Logging out" or "Logging in". |
intermediary_host |
intermediary.hostname |
Extracted from the log message using a grok pattern. |
nmsdk_language |
security_result.detection_fields.value |
Extracted from the log message using a grok pattern. This value is added as a "value" to a detection_fields object with "key" = "nmsdk_language". |
nmsdk_platform |
security_result.detection_fields.value |
Extracted from the log message using a grok pattern. This value is added as a "value" to a detection_fields object with "key" = "nmsdk_platform". |
nmsdk_version |
security_result.detection_fields.value |
Extracted from the log message using a grok pattern. This value is added as a "value" to a detection_fields object with "key" = "nmsdk_version". |
netapp_version |
security_result.detection_fields.value |
Extracted from the log message using a grok pattern. This value is added as a "value" to a detection_fields object with "key" = "netapp_version". |
product_event_type |
metadata.product_event_type |
Extracted from the log message using a grok pattern. |
security_result.summary |
security_result.summary |
Extracted from the log message using a grok pattern. |
severity |
security_result.severity |
Set to "INFORMATIONAL" if severity is "info" (case-insensitive). |
src_ip |
principal.ip |
Extracted from the log message using a grok pattern. |
src_port |
principal.port |
Extracted from the log message using a grok pattern. |
status |
security_result.summary |
Extracted from the log message using a grok pattern. |
ts |
metadata.event_timestamp.seconds |
Extracted from the log message using a grok pattern and converted to a timestamp. |
url |
target.url |
Extracted from the log message using a grok pattern. |
user |
target.user.userid |
Extracted from the log message using a grok pattern. |
extensions.auth.type |
Set to "AUTHTYPE_UNSPECIFIED" if description is "Logging out" or "Logging in". | |
metadata.event_type |
Set to "USER_LOGIN" if description is "Logging in". | |
metadata.event_type |
Set to "USER_LOGOUT" if description is "Logging out". | |
metadata.event_type |
Set to "SCAN_UNCATEGORIZED" if description is not "Logging in" or "Logging out". | |
metadata.log_type |
Set to "NETAPP_ONTAP". | |
metadata.product_name |
Set to "NETAPP_ONTAP". | |
metadata.vendor_name |
Set to "NETAPP_ONTAP". | |
target.platform |
Set to "WINDOWS" if nmsdk_platform contains "windows" (case-insensitive). |
Need more help? Get answers from Community members and Google SecOps professionals.