docs/netdata-ai/skills/query-snmp-traps/how-tos/recent-security-traps-from-device.md
Which security-category SNMP traps did one device send recently?
NODE_UUID: node running the snmp_traps collector.SNMP_TRAPS_JOB: trap listener job name. Default examples use local.DEVICE_IP: the expected TRAP_SOURCE_IP.DEVICE_HOSTNAME: the expected _HOSTNAME.Load the token-safe wrappers:
source "$(git rev-parse --show-toplevel)/docs/netdata-ai/skills/query-netdata-agents/scripts/_lib.sh"
agents_load_env
Query by source IP:
NODE_UUID="YOUR_NODE_UUID"
SNMP_TRAPS_JOB="local"
SNMP_TRAPS_FUNCTION="snmp:traps"
DEVICE_IP="[DEVICE_IP]"
BODY="$(jq -n --arg job "$SNMP_TRAPS_JOB" --arg device_ip "$DEVICE_IP" '{
after: -86400,
before: 0,
last: 200,
direction: "backward",
selections: {
__logs_sources: [$job],
TRAP_REPORT_TYPE: ["trap"],
TRAP_CATEGORY: ["security"],
TRAP_SOURCE_IP: [$device_ip]
},
facets: ["TRAP_NAME", "TRAP_SEVERITY", "TRAP_SOURCE_IP", "_HOSTNAME"]
}')"
mkdir -p .local/audits/query-snmp-traps
agents_call_function \
--via cloud \
--node "$NODE_UUID" \
--function "$SNMP_TRAPS_FUNCTION" \
--body "$BODY" \
> .local/audits/query-snmp-traps/security-traps-device.json
If the trap source is known by hostname instead of IP, replace the
TRAP_SOURCE_IP selection with _HOSTNAME:
NODE_UUID="YOUR_NODE_UUID"
SNMP_TRAPS_JOB="local"
SNMP_TRAPS_FUNCTION="snmp:traps"
DEVICE_HOSTNAME="[DEVICE_HOSTNAME]"
BODY="$(jq -n --arg job "$SNMP_TRAPS_JOB" --arg hostname "$DEVICE_HOSTNAME" '{
after: -86400,
before: 0,
last: 200,
direction: "backward",
selections: {
__logs_sources: [$job],
TRAP_REPORT_TYPE: ["trap"],
TRAP_CATEGORY: ["security"],
_HOSTNAME: [$hostname]
},
facets: ["TRAP_NAME", "TRAP_SEVERITY", "TRAP_SOURCE_IP", "_HOSTNAME"]
}')"
agents_call_function \
--via cloud \
--node "$NODE_UUID" \
--function "$SNMP_TRAPS_FUNCTION" \
--body "$BODY" \
> .local/audits/query-snmp-traps/security-traps-device.json
Print a sanitized summary:
jq '.columns as $c
| .data[]? as $row
| $c | to_entries | sort_by(.value.index)
| map({(.key): $row[.value.index]}) | add
| {
host: (._HOSTNAME // ""),
source_ip_present: ((.TRAP_SOURCE_IP // "") | length > 0),
severity: (.TRAP_SEVERITY // ""),
trap: (.TRAP_NAME // .TRAP_OID // ""),
message: (.MESSAGE // "")
}' \
.local/audits/query-snmp-traps/security-traps-device.json
Return counts and sanitized rows: trap name/OID, severity, hostname or source-present flag, and message. Do not paste public IPs, MACs, usernames, or full varbind payloads into durable artifacts.
TRAP_SOURCE_IP when devices do not have stable hostname
identity._HOSTNAME when the SNMP collector/topology identity is
already resolving the device name.