mirror of
https://github.com/unpoller/unpoller.git
synced 2026-03-31 06:24:21 -04:00
- Add job=unpoller to every Loki stream (alarm, anomaly, event, ids,
system_log, protect_log, protect_thumbnail) for standard Grafana/Loki
source filtering with {job="unpoller"}
- Add event_type and inner_alert_action labels to IDS streams using
EventType and InnerAlertAction fields
- Add event_type and inner_alert_action labels to Alarm streams using
Key and InnerAlertAction fields
- Skip severity/category on Anomaly: the unifi.Anomaly struct has no
such fields
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package lokiunifi
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
|
|
"github.com/unpoller/unifi/v5"
|
|
)
|
|
|
|
const typeEvent = "Event"
|
|
const typeSystemLog = "SystemLog"
|
|
|
|
// Event stores a structured UniFi Event for batch sending to Loki.
|
|
// Logs the raw JSON for parsing with Loki's `| json` pipeline.
|
|
func (r *Report) Event(event *unifi.Event, logs *Logs) {
|
|
if event.Datetime.Before(r.Oldest) {
|
|
return
|
|
}
|
|
|
|
r.Counts[typeEvent]++ // increase counter and append new log line.
|
|
|
|
// Marshal event to JSON for the log line
|
|
msg, err := json.Marshal(event)
|
|
if err != nil {
|
|
msg = []byte(event.Msg)
|
|
}
|
|
|
|
logs.Streams = append(logs.Streams, LogStream{
|
|
Entries: [][]string{{strconv.FormatInt(event.Datetime.UnixNano(), 10), string(msg)}},
|
|
Labels: CleanLabels(MergeLabels(map[string]string{
|
|
"application": "unifi_event",
|
|
"job": "unpoller",
|
|
"site_name": event.SiteName,
|
|
"source": event.SourceName,
|
|
}, r.ExtraLabels)),
|
|
})
|
|
}
|
|
|
|
// SystemLogEvent stores a structured UniFi v2 System Log Entry for batch sending to Loki.
|
|
// Logs the raw JSON for parsing with Loki's `| json` pipeline.
|
|
func (r *Report) SystemLogEvent(event *unifi.SystemLogEntry, logs *Logs) {
|
|
if event.Datetime().Before(r.Oldest) {
|
|
return
|
|
}
|
|
|
|
r.Counts[typeSystemLog]++ // increase counter and append new log line.
|
|
|
|
// Marshal event to JSON for the log line
|
|
msg, err := json.Marshal(event)
|
|
if err != nil {
|
|
msg = []byte(event.TitleRaw)
|
|
}
|
|
|
|
logs.Streams = append(logs.Streams, LogStream{
|
|
Entries: [][]string{{strconv.FormatInt(event.Datetime().UnixNano(), 10), string(msg)}},
|
|
Labels: CleanLabels(MergeLabels(map[string]string{
|
|
"application": "unifi_system_log",
|
|
"job": "unpoller",
|
|
"site_name": event.SiteName,
|
|
"source": event.SourceName,
|
|
"category": event.Category,
|
|
"severity": event.Severity,
|
|
}, r.ExtraLabels)),
|
|
})
|
|
}
|