mirror of
https://github.com/unpoller/unpoller.git
synced 2026-03-31 06:24:21 -04:00
Add an ExtraLabels map[string]string field to the Loki Config struct so users can define static key=value labels that are merged into the stream labels of every log line sent to Loki. This allows users to distinguish streams (e.g., by environment or datacenter) without hardcoding values. Built-in dynamic labels (application, site_name, source, etc.) always take precedence over extra labels to preserve existing behavior. Example config (TOML): [loki.extra_labels] environment = "production" datacenter = "us-east-1" Closes #691 Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
36 lines
855 B
Go
36 lines
855 B
Go
package lokiunifi
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
|
|
"github.com/unpoller/unifi/v5"
|
|
)
|
|
|
|
const typeIDs = "IDs"
|
|
|
|
// IDs stores a structured IDS Event for batch sending to Loki.
|
|
// Logs the raw JSON for parsing with Loki's `| json` pipeline.
|
|
func (r *Report) IDs(event *unifi.IDS, logs *Logs) {
|
|
if event.Datetime.Before(r.Oldest) {
|
|
return
|
|
}
|
|
|
|
r.Counts[typeIDs]++ // 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_ids",
|
|
"source": event.SourceName,
|
|
"site_name": event.SiteName,
|
|
}, r.ExtraLabels)),
|
|
})
|
|
}
|