Files
logs/internal/ingest/syslog_udp.go
2026-09-09 16:45:01 +08:00

53 lines
1.0 KiB
Go

package ingest
import (
"context"
"fmt"
"log"
"net"
"strings"
"git.apinb.com/ops/logs/internal/config"
)
func StartSyslogUDP(ctx context.Context) error {
addr := strings.TrimSpace(config.Spec.Ingest.SyslogListenAddr)
if addr == "" {
return nil
}
pc, err := net.ListenPacket("udp", addr)
if err != nil {
return fmt.Errorf("syslog UDP 监听 %s 失败: %w", addr, err)
}
startWorker("syslog_udp", func() error {
defer pc.Close()
go func() {
<-ctx.Done()
_ = pc.Close()
}()
log.Printf("logs: syslog listening UDP %s", addr)
buf := make([]byte, 65536)
for {
n, remote, err := pc.ReadFrom(buf)
if err != nil {
if ctx.Err() != nil {
return nil
}
markWorkerError("syslog_udp", err)
log.Printf("logs: syslog read: %v", err)
continue
}
udpAddr, _ := remote.(*net.UDPAddr)
if udpAddr == nil {
continue
}
p := make([]byte, n)
copy(p, buf[:n])
a := *udpAddr
Global.HandleSyslog(&a, p)
markWorkerSucceeded("syslog_udp")
}
})
return nil
}