Skip to content

Commit

Permalink
Resolving trap OIDs to readable names
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorianVeaux committed Feb 15, 2022
1 parent 2cb70d5 commit dcc8084
Show file tree
Hide file tree
Showing 11 changed files with 798 additions and 383 deletions.
1 change: 1 addition & 0 deletions pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -627,6 +627,7 @@ func InitConfig(config Config) {
config.BindEnv("snmp_traps_config.namespace")
config.BindEnvAndSetDefault("snmp_traps_config.bind_host", "localhost")
config.BindEnvAndSetDefault("snmp_traps_config.stop_timeout", 5) // in seconds
config.SetKnown("snmp_traps_config.users")

// Kube ApiServer
config.BindEnvAndSetDefault("kubernetes_kubeconfig_path", "")
Expand Down
4 changes: 2 additions & 2 deletions pkg/logs/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ func SNMPTrapsSource() *LogSource {
// source to forward SNMP traps as logs.
return NewLogSource(SnmpTraps, &LogsConfig{
Type: SnmpTrapsType,
Service: "snmp",
Source: "snmp",
Service: "snmp-traps",
Source: "snmp-traps",
})
}
return nil
Expand Down
19 changes: 10 additions & 9 deletions pkg/logs/internal/tailers/traps/tailer.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
package traps

import (
"encoding/json"
"time"

"github.com/DataDog/datadog-agent/pkg/logs/config"
Expand All @@ -18,17 +17,24 @@ import (
// Tailer consumes and processes a stream of trap packets, and sends them to a stream of log messages.
type Tailer struct {
source *config.LogSource
formatter traps.Formatter
inputChan traps.PacketsChannel
outputChan chan *message.Message
done chan interface{}
}

// NewTailer returns a new Tailer
func NewTailer(source *config.LogSource, inputChan traps.PacketsChannel, outputChan chan *message.Message) *Tailer {
var oidResolver traps.OidResolver
oidResolver, err := traps.NewMultiFilesOidResolver()
if err != nil {
log.Errorf("unable to load traps database: %w", err)
}
return &Tailer{
source: source,
inputChan: inputChan,
outputChan: outputChan,
formatter: traps.NewJSONFormatter(oidResolver),
done: make(chan interface{}, 1),
}
}
Expand All @@ -50,19 +56,14 @@ func (t *Tailer) run() {

// Loop terminates when the channel is closed.
for packet := range t.inputChan {
data, err := traps.FormatPacketToJSON(packet)
data, err := t.formatter.FormatPacket(packet)
if err != nil {
log.Errorf("failed to format packet: %s", err)
continue
}
t.source.BytesRead.Add(int64(len(data)))
content, err := json.Marshal(data)
if err != nil {
log.Errorf("failed to serialize packet data to JSON: %s", err)
continue
}
origin := message.NewOrigin(t.source)
origin.SetTags(traps.GetTags(packet))
t.outputChan <- message.NewMessage(content, origin, message.StatusInfo, time.Now().UnixNano())
origin.SetTags(t.formatter.GetTags(packet))
t.outputChan <- message.NewMessage(data, origin, message.StatusInfo, time.Now().UnixNano())
}
}
17 changes: 11 additions & 6 deletions pkg/logs/internal/tailers/traps/tailer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
package traps

import (
"encoding/json"
"net"
"testing"
"time"
Expand Down Expand Up @@ -46,18 +45,24 @@ func TestTrapsShouldReceiveMessages(t *testing.T) {
return
}

formattedPacket := format(t, p)
assert.Equal(t, message.StatusInfo, msg.GetStatus())
assert.Equal(t, format(t, p), msg.Content)
assert.Equal(t, traps.GetTags(p), msg.Origin.Tags())
assert.Equal(t, formattedPacket, msg.Content)
assert.Equal(t, []string{
"snmp_version:2",
"device_namespace:default",
"snmp_device:127.0.0.1",
}, msg.Origin.Tags())

close(inputChan)
tailer.WaitFlush()
}

func format(t *testing.T, p *traps.SnmpPacket) []byte {
data, err := traps.FormatPacketToJSON(p)
oidResolver, err := traps.NewMultiFilesOidResolver()
assert.NoError(t, err)
content, err := json.Marshal(data)
formatter := traps.NewJSONFormatter(oidResolver)
formattedPacket, err := formatter.FormatPacket(p)
assert.NoError(t, err)
return content
return formattedPacket
}
182 changes: 0 additions & 182 deletions pkg/snmp/traps/format.go

This file was deleted.

Loading

0 comments on commit dcc8084

Please sign in to comment.