Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add support for otel/kafka driver and export #62

Merged
merged 55 commits into from
Jul 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
57fc9a5
feat: adding otel drivers
Dec 20, 2023
a24d0b9
chore: removing empty types file
Dec 20, 2023
2761249
feat: added the otel core
Dec 20, 2023
63e6a88
feat: added makefile with backend choice variable
Jan 2, 2024
43f21fc
feat: added otel types
Jan 2, 2024
0028da2
feat: first pass at otel policy engine adapter (broken)
Jan 2, 2024
d813505
feat: updated otel operations with constructor and RegExp Evaluation
Jan 2, 2024
e5190c3
fix: quick fix to the operator
Jan 2, 2024
eb269be
chore: updating references to correct packages
Jan 2, 2024
53c3059
chore: add otel dependecies
Jan 2, 2024
f42376f
feat: updated channel type
Jan 2, 2024
09b4711
chore: fixed typo (backend compiles)
Jan 2, 2024
1faf116
feat: adding skeleton kafka driver
Jan 4, 2024
0dcfff4
fix: push events to the channel after parsing
Jan 9, 2024
768301c
feat: added otel kafka driver
Jan 9, 2024
e5a1630
chore: quick change to naming for neatness
Jan 9, 2024
1b326f6
chore: added confluent dependency
Jan 9, 2024
007542e
fix: changes to fix compilation errors
Jan 9, 2024
55329b3
chore: wip commit
Jan 18, 2024
9abb092
fix: working driver
Jan 23, 2024
ecd287a
feat: added encoding option
Jan 25, 2024
935d7f1
docs: adding sources.md and sf-processor image
Feb 27, 2024
05250da
docs: adding docs for datasources
Feb 28, 2024
1d8c813
feat: adding kafka support to otelexporter
Apr 9, 2024
ec79d0c
fix: cleaning bug in otel event parsing
Apr 9, 2024
b4af188
fix: cleaning up protobuf serialization in driver
Apr 9, 2024
41c0aa1
fix: linter updates
Apr 11, 2024
b1fd698
fix: modifying go.mod
Apr 16, 2024
e27c695
fix: adding confluent to go.mods
Apr 16, 2024
3883e35
fix: adding stretchr testify to go.mod
Apr 16, 2024
98142a9
fix: removing unused main and adding error logging to otelexporter
Apr 16, 2024
0e369d0
fix(build): made BACKEND_TAG parameterizable from the image and makefile
terylpt Apr 16, 2024
3556ba4
format: minor efficiency issues
terylpt Apr 19, 2024
82ff363
chore: update sysflow api version
araujof Apr 19, 2024
bfadf8c
fix(core, driver): fix otel/flatrecord compilation, remove cyclic dep…
araujof Apr 19, 2024
273e612
refactor: move otel exporter to exporter package
araujof Apr 19, 2024
38fddbb
feat: add producer cleanup to OTEL exporter
araujof Apr 22, 2024
9ba055f
feat(core,driver)!: refactor core/exporter and driver/otel packages t…
araujof Apr 22, 2024
517d74d
chore: go mod tidy dependencies
araujof Apr 22, 2024
dfce043
fix: parsing of kafka configuration
araujof Apr 23, 2024
d12f89b
chore: update manifest
araujof Apr 24, 2024
f775204
feat(core): add rules and tagging to otel logs
terylpt Apr 24, 2024
0555a64
feat(core): remove printfs
terylpt Apr 24, 2024
e7a55dc
feat(core): fixed variable name bug
terylpt Apr 24, 2024
e8bd7f1
feat: add example otel pipeline configuration
araujof Apr 24, 2024
c670ace
feat: split docker processor target from plugin builder target
araujof Apr 24, 2024
1264182
chore: update changelog and readme for release candidate
araujof Apr 24, 2024
980464e
fix(kafka): added better error messaging to kafka driver
terylpt Apr 26, 2024
c1cfb4d
chore: remove cache-from from processor docker build target
araujof Apr 26, 2024
f50648f
refactor: include error object in error logs
araujof Apr 26, 2024
dea45f5
fix: update transport enum to include kafka transport
araujof Apr 26, 2024
4b7facd
chore: update manifest
araujof Apr 26, 2024
bafae37
chore: resolve merge conflict
araujof Apr 26, 2024
ae1903a
refactor: move otel processor tags to its own scope logs
araujof Apr 30, 2024
eef0d11
chore: remove fmt printfs added previously
araujof Apr 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).

## [Unreleased]

## [0.7.0] - 2024-04-30

### Added

- Kafka driver and exporter for Otel record logs
- Policy engine backend for Otel record logs

## [0.6.3] - 2024-04-22

### Changed
Expand Down Expand Up @@ -223,7 +230,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).

- First release of SysFlow Processor.

[Unreleased]: https://github.com/sysflow-telemetry/sf-processor/compare/0.6.3...HEAD
[Unreleased]: https://github.com/sysflow-telemetry/sf-processor/compare/0.7.0...HEAD
[0.7.0]: https://github.com/sysflow-telemetry/sf-processor/compare/0.6.3...0.7.0
[0.6.3]: https://github.com/sysflow-telemetry/sf-processor/compare/0.6.2...0.6.3
[0.6.2]: https://github.com/sysflow-telemetry/sf-processor/compare/0.6.1...0.6.2
[0.6.1]: https://github.com/sysflow-telemetry/sf-processor/compare/0.6.0...0.6.1
Expand Down
9 changes: 6 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ ENV GOPATH=/go/

ENV SRC_ROOT=/go/src/github.com/sysflow-telemetry/sf-processor/

ARG BACKEND_TAG=flatrecord

# Install dependencies
RUN dnf update -y --disableplugin=subscription-manager && \
dnf install -y --disableplugin=subscription-manager wget gcc make git device-mapper-devel
Expand All @@ -51,9 +53,10 @@ COPY makefile.manifest.inc ${SRC_ROOT}

# Build
RUN cd ${SRC_ROOT} && \
make SYSFLOW_VERSION=$VERSION \
SYSFLOW_BUILD_NUMBER=$BUILD_NUMBER \
install
make BACKEND_TAG=${BACKEND_TAG} \
SYSFLOW_VERSION=${VERSION} \
SYSFLOW_BUILD_NUMBER=${BUILD_NUMBER} \
install

#-----------------------
# Stage: runtime
Expand Down
32 changes: 18 additions & 14 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,18 @@
include ./makefile.manifest.inc

# Basic go commands
PATH=$(shell printenv PATH):/usr/local/go/bin
GOCMD=go
GOBUILD=$(GOCMD) build -trimpath -tags "exclude_graphdriver_btrfs flatrecord"
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test -tags "exclude_graphdriver_btrfs flatrecord"
GOGET=$(GOCMD) get -tags "exclude_graphdriver_btrfs flatrecord"
BIN=sfprocessor
OUTPUT=$(BIN)
SRC=./driver
PACKDIR=./scripts/cpack
INSTALL_PATH=/usr/local/sysflow
PATH = $(shell printenv PATH):/usr/local/go/bin
BACKEND_TAG ?= flatrecord
GOCMD = go
GOBUILD = $(GOCMD) build -trimpath -tags "exclude_graphdriver_btrfs ${BACKEND_TAG}"
GOCLEAN = $(GOCMD) clean
GOTEST = $(GOCMD) test -tags "exclude_graphdriver_btrfs ${BACKEND_TAG}"
GOGET = $(GOCMD) get -tags "exclude_graphdriver_btrfs ${BACKEND_TAG}"
BIN = sfprocessor
OUTPUT = $(BIN)
SRC = ./driver
PACKDIR = ./scripts/cpack
INSTALL_PATH = /usr/local/sysflow

.PHONY: build
build: version deps
Expand Down Expand Up @@ -65,12 +66,15 @@ install: build
cp ./resources/policies/distribution/* /usr/local/sysflow/resources/policies/

.PHONY: docker-build
docker-build: docker-plugin-builder
( DOCKER_BUILDKIT=1 docker build --cache-from=sysflowtelemetry/plugin-builder:${SYSFLOW_VERSION} -t sysflowtelemetry/sf-processor:${SYSFLOW_VERSION} --build-arg UBI_VER=$(UBI_VERSION) --target=runtime -f Dockerfile . )
docker-build: docker-plugin-builder docker-processor

.PHONY: docker-processor
docker-processor:
( DOCKER_BUILDKIT=1 docker build -t sysflowtelemetry/sf-processor:${SYSFLOW_VERSION} --build-arg BACKEND_TAG=$(BACKEND_TAG) --build-arg UBI_VER=$(UBI_VERSION) --target=runtime -f Dockerfile . )

.PHONY: docker-plugin-builder
docker-plugin-builder:
( DOCKER_BUILDKIT=1 docker build -t sysflowtelemetry/plugin-builder:${SYSFLOW_VERSION} --build-arg UBI_VER=$(UBI_VERSION) --target=base -f Dockerfile . )
( DOCKER_BUILDKIT=1 docker build -t sysflowtelemetry/plugin-builder:${SYSFLOW_VERSION} --build-arg BACKEND_TAG=$(BACKEND_TAG) --build-arg UBI_VER=$(UBI_VERSION) --target=base -f Dockerfile . )

.PHONY: pull
pull:
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

# Supported tags and respective `Dockerfile` links

- [`0.6.3`, `latest`](https://github.com/sysflow-telemetry/sf-processor/blob/0.6.3/Dockerfile), [`edge`](https://github.com/sysflow-telemetry/sf-processor/blob/master/Dockerfile), [`dev`](https://github.com/sysflow-telemetry/sf-processor/blob/dev/Dockerfile)
- [`0.7.0-rc3`, `latest`](https://github.com/sysflow-telemetry/sf-processor/blob/0.7.0-rc3/Dockerfile), [`edge`](https://github.com/sysflow-telemetry/sf-processor/blob/master/Dockerfile), [`dev`](https://github.com/sysflow-telemetry/sf-processor/blob/dev/Dockerfile)

# Quick reference

Expand All @@ -26,7 +26,7 @@
[docker hub](https://hub.docker.com/u/sysflowtelemetry) | [GHCR](https://github.com/orgs/sysflow-telemetry/packages)

- **Binary packages**:
[deb](https://github.com/sysflow-telemetry/sf-processor/releases/tag/0.6.3/sfprocessor-0.6.3-x86_64.deb) | [rpm](https://github.com/sysflow-telemetry/sf-processor/releases/tag/0.6.3/sfprocessor-0.6.3-x86_64.rpm) | [tgz](https://github.com/sysflow-telemetry/sf-processor/releases/tag/0.6.3/sfprocessor-0.6.3-x86_64.tar.gz)
[deb](https://github.com/sysflow-telemetry/sf-processor/releases/tag/0.7.0-rc3/sfprocessor-0.7.0-rc3-x86_64.deb) | [rpm](https://github.com/sysflow-telemetry/sf-processor/releases/tag/0.7.0-rc3/sfprocessor-0.7.0-rc3-x86_64.rpm) | [tgz](https://github.com/sysflow-telemetry/sf-processor/releases/tag/0.7.0-rc3/sfprocessor-0.7.0-rc3-x86_64.tar.gz)

# What is SysFlow?

Expand Down
24 changes: 12 additions & 12 deletions core/exporter/commons/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ type Config struct {
FileConfig
SyslogConfig
ESConfig
FindingsConfig
KafkaConfig
}

// CreateConfig creates a new config object from config dictionary.
Expand Down Expand Up @@ -125,7 +125,7 @@ func CreateConfig(conf map[string]interface{}) (c Config, err error) {
if err != nil {
return
}
c.FindingsConfig, err = CreateFindingsConfig(c, conf)
c.KafkaConfig, err = CreateKafkaConfig(c, conf)

return
}
Expand All @@ -139,12 +139,12 @@ const (
FileTransport
SyslogTransport
ESTransport
FindingsTransport
KafkaTransport
NullTransport
)

func (s Transport) String() string {
return [...]string{"terminal", "file", "syslog", "es", "findings", "null"}[s]
return [...]string{"terminal", "file", "syslog", "es", "kafka", "null"}[s]
}

func parseTransportConfig(s string) Transport {
Expand All @@ -157,8 +157,8 @@ func parseTransportConfig(s string) Transport {
if ESTransport.String() == s {
return ESTransport
}
if FindingsTransport.String() == s {
return FindingsTransport
if KafkaTransport.String() == s {
return KafkaTransport
}
if NullTransport.String() == s {
return NullTransport
Expand All @@ -171,13 +171,13 @@ type Format int

// Format config options.
const (
JSONFormat Format = iota // JSON schema
ECSFormat // Elastic Common Schema
OccurrenceFormat // IBM Findings Occurrence
JSONFormat Format = iota // JSON schema
ECSFormat // Elastic Common Schema
OtelFormat // Open Telemetry schema
)

func (s Format) String() string {
return [...]string{"json", "ecs", "occurrence"}[s]
return [...]string{"json", "ecs", "otel"}[s]
}

func parseFormatConfig(s string) Format {
Expand All @@ -186,8 +186,8 @@ func parseFormatConfig(s string) Format {
return JSONFormat
case ECSFormat.String():
return ECSFormat
case OccurrenceFormat.String():
return OccurrenceFormat
case OtelFormat.String():
return OtelFormat
}
return JSONFormat
}
Expand Down
126 changes: 0 additions & 126 deletions core/exporter/commons/findingsconfig.go

This file was deleted.

Loading
Loading