Skip to content

Commit 69e9446

Browse files
authored
feat: pktvisor opentelemetry setup (#67)
1 parent 71c3633 commit 69e9446

File tree

4 files changed

+24
-52
lines changed

4 files changed

+24
-52
lines changed

agent/backend/otel/utils.go

+12-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"time"
99

1010
"go.uber.org/zap"
11+
"gopkg.in/yaml.v3"
1112

1213
"github.com/netboxlabs/orb-agent/agent/backend"
1314
)
@@ -89,11 +90,20 @@ func (d *openTelemetryBackend) request(url string, payload interface{}, method s
8990
}
9091
}
9192

93+
// Read and decode response body
9294
if res.Body != nil {
93-
err = json.NewDecoder(res.Body).Decode(&payload)
95+
body, err := io.ReadAll(res.Body)
9496
if err != nil {
95-
return err
97+
return fmt.Errorf("failed to read response body: %w", err)
98+
}
99+
if err = json.Unmarshal(body, &payload); err == nil {
100+
return nil
101+
}
102+
var yamlErr error
103+
if yamlErr = yaml.Unmarshal(body, &payload); yamlErr == nil {
104+
return nil
96105
}
106+
return fmt.Errorf("failed to decode response as JSON: %w and YAML: %w", err, yamlErr)
97107
}
98108
return nil
99109
}

agent/backend/pktvisor/pktvisor.go

+8-37
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
"net"
87
"net/http"
98
"os/exec"
109
"strconv"
@@ -72,23 +71,6 @@ type pktvisorBackend struct {
7271
otelReceiverPort int
7372
}
7473

75-
func (p *pktvisorBackend) getFreePort() (int, error) {
76-
addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
77-
if err != nil {
78-
return 0, err
79-
}
80-
l, err := net.ListenTCP("tcp", addr)
81-
if err != nil {
82-
return 0, err
83-
}
84-
defer func() {
85-
if err := l.Close(); err != nil {
86-
p.logger.Error("failed to close socket", zap.Error(err))
87-
}
88-
}()
89-
return l.Addr().(*net.TCPAddr).Port, nil
90-
}
91-
9274
func (p *pktvisorBackend) GetStartTime() time.Time {
9375
return p.startTime
9476
}
@@ -154,16 +136,11 @@ func (p *pktvisorBackend) Start(ctx context.Context, cancelFunc context.CancelFu
154136
pvOptions = append(pvOptions, "--config", p.configFile)
155137
}
156138

157-
pvOptions = append(pvOptions, "--otel")
158-
pvOptions = append(pvOptions, "--otel-host", p.otelReceiverHost)
159-
if p.otelReceiverPort == 0 {
160-
p.otelReceiverPort, err = p.getFreePort()
161-
if err != nil {
162-
p.logger.Error("pktvisor otlp startup error", zap.Error(err))
163-
return err
164-
}
139+
if p.otelReceiverHost != "" && p.otelReceiverPort != 0 {
140+
pvOptions = append(pvOptions, "--otel")
141+
pvOptions = append(pvOptions, "--otel-host", p.otelReceiverHost)
142+
pvOptions = append(pvOptions, "--otel-port", strconv.Itoa(p.otelReceiverPort))
165143
}
166-
pvOptions = append(pvOptions, "--otel-port", strconv.Itoa(p.otelReceiverPort))
167144

168145
// the macros should be properly configured to enable crashpad
169146
// pvOptions = append(pvOptions, "--cp-token", PKTVISOR_CP_TOKEN)
@@ -288,18 +265,12 @@ func (p *pktvisorBackend) Configure(logger *zap.Logger, repo policies.PolicyRepo
288265
}
289266
p.agentLabels = common.Otel.AgentLabels
290267

291-
p.otelReceiverHost = common.Otel.Host
292-
p.otelReceiverPort = common.Otel.Port
293-
if p.otelReceiverPort == 0 {
294-
var err error
295-
if p.otelReceiverPort, err = p.getFreePort(); err != nil {
296-
p.logger.Error("pktvisor otlp startup error", zap.Error(err))
297-
return err
298-
}
268+
if common.Otel.Host != "" && common.Otel.Port != 0 {
269+
p.otelReceiverHost = common.Otel.Host
270+
p.otelReceiverPort = common.Otel.Port
271+
p.logger.Info("configured otel receiver host", zap.String("host", p.otelReceiverHost), zap.Int("port", p.otelReceiverPort))
299272
}
300273

301-
p.logger.Info("configured otel receiver host", zap.String("host", p.otelReceiverHost), zap.Int("port", p.otelReceiverPort))
302-
303274
return nil
304275
}
305276

agent/backend/pktvisor/vars.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66

77
// RegisterBackendSpecificVariables registers the backend specific variables for the pktvisor backend
88
func RegisterBackendSpecificVariables(v *viper.Viper) {
9-
v.SetDefault("orb.backends.pktvisor.binary", "/usr/local/sbin/pktvisord")
9+
v.SetDefault("orb.backends.pktvisor.binary", "/usr/local/bin/pktvisord")
1010
v.SetDefault("orb.backends.pktvisor.config_file", "/opt/orb/agent.yaml")
1111
v.SetDefault("orb.backends.pktvisor.api_host", "localhost")
1212
v.SetDefault("orb.backends.pktvisor.api_port", "10853")

agent/docker/Dockerfile

+3-12
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,18 @@ RUN \
3232
apt install --yes --force-yes --no-install-recommends nmap openssh-client && \
3333
rm -rf /var/lib/apt
3434

35-
RUN addgroup --system netdev && useradd -m --shell /bin/bash -G netdev appuser && echo "appuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
36-
37-
# Create necessary directories and set ownership to appuser
38-
RUN mkdir -p /opt/orb && chown appuser:appuser /opt/orb \
39-
&& chown appuser:appuser /usr/local/bin \
40-
&& chown appuser:appuser /var/run
35+
RUN mkdir -p /opt/orb
4136

4237
COPY --from=builder /build/orb-agent /usr/local/bin/orb-agent
4338
COPY --from=builder /src/orb-agent/agent/docker/agent_default.yaml /opt/orb/agent_default.yaml
4439
COPY --from=builder /src/orb-agent/agent/docker/orb-agent-entry.sh /usr/local/bin/orb-agent-entry.sh
4540
COPY --from=builder /src/orb-agent/agent/docker/run-agent.sh /run-agent.sh
4641

47-
COPY --from=pktvisor /usr/local/sbin/pktvisord /usr/local/sbin/pktvisord
48-
COPY --from=pktvisor /usr/local/sbin/crashpad_handler /usr/local/sbin/crashpad_handler
42+
COPY --from=pktvisor /usr/local/sbin/pktvisord /usr/local/bin/pktvisord
43+
COPY --from=pktvisor /usr/local/sbin/crashpad_handler /usr/local/bin/crashpad_handler
4944
COPY --from=pktvisor /geo-db /geo-db
5045
COPY --from=pktvisor /iana /iana
5146

52-
RUN chown appuser:appuser /geo-db
53-
5447
COPY --from=otlpinf /exe /usr/local/bin/otlpinf
5548

5649
COPY --from=network-discovery /usr/local/bin/network-discovery /usr/local/bin/network-discovery
@@ -59,6 +52,4 @@ RUN pip3 install netboxlabs-device-discovery netboxlabs-orb-worker
5952

6053
RUN chmod a+x /run-agent.sh
6154

62-
USER appuser
63-
6455
ENTRYPOINT [ "/usr/local/bin/orb-agent-entry.sh" ]

0 commit comments

Comments
 (0)