graylog-deploy/rules/rule77_dlink_interface_link_state.json
byrsapty 98359c7ca3 Add pipeline rules for BDCOM EPON/GPON, ZTE, and D-Link from provided log-signature report
Closes the parsing gap the README explicitly called out (no D-Link
parsing, no ZTE ONU alarms) plus adds BDCOM GPON and expands Juniper
coverage (DDoS, PSU/memory/ASIC hardware faults, LACP/BGP/SNMP, config
commit). 58 new rules across 5 vendors, wired into Network Equipment
Parsing's stage 0 ahead of the generic_critical_severity fallback.

Where the same real-world event is reported by multiple vendors
(dying_gasp, onu_offline, optical_low_power, cli_login/cli_logout,
config_saved, interface_link_state, lag_state_change), rules share one
event_type value so dashboards can aggregate across vendors, same
normalization approach as accelppp_interface.

Built directly from the user's CSV signature report, not from real
device log samples - each rule's description says so explicitly. `when`
conditions use plain substring/contains matching on the report's own
pattern text to keep classification robust; regex field extraction is
only added where the source format is unambiguous. Passed offline
checks (JSON validity, every pipeline-referenced rule resolves to a
file, all regex patterns compile). Live compilation against a running
Graylog instance - which caught 2 real bugs during the dashboard/stream
fixes earlier this session - could NOT be completed: the test container
went unreachable mid-session. Re-run install-graylog.sh once it's back
up to confirm these compile before relying on them.
2026-07-29 16:32:18 +03:00

5 lines
812 B
JSON

{
"title": "dlink_interface_link_state",
"description": "D-Link: port link up/down - d'link.csv row 4. Shares the 'interface_link_state' event_type with bdcom_epon_interface_link_state for a cross-vendor view. Built from the provided report, not yet verified against real device output.",
"source": "rule \"dlink_interface_link_state\"\nwhen\n contains(to_string($message.message), \"Port\") && (contains(to_string($message.message), \"link down\") || contains(to_string($message.message), \"link up\"))\nthen\n set_field(\"vendor\", \"dlink\");\n set_field(\"event_type\", \"interface_link_state\");\n let m = regex(\"Port (\\\\S+) link (up|down)\", to_string($message.message), [\"port\",\"state\"]);\n set_field(\"link_interface\", m[\"port\"]);\n set_field(\"link_state\", m[\"state\"]);\nend"
}