Skip to content

Commit

Permalink
Merge pull request #12 from kube-logging/subscription-labels
Browse files Browse the repository at this point in the history
add e2e tests: label based routing works
  • Loading branch information
OverOrion authored Jan 24, 2024
2 parents 5a48603 + 6595583 commit 842e672
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 18 deletions.
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -186,3 +186,7 @@ run-delve: generate fmt vet manifests
.PHONY: tidy
tidy: ## Tidy Go modules
find . -iname "go.mod" -not -path "./.devcontainer/*" | xargs -L1 sh -c 'cd $$(dirname $$0); go mod tidy'

.PHONY: e2e-test
e2e-test: ## Run e2e tests, make sure subscription operator is running somewhere
cd e2e && timeout --foreground 15m ./e2e_test.sh || (echo "E2E test failed"; exit 1)
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ spec:
apiVersion: telemetry.kube-logging.dev/v1alpha1
kind: Subscription
metadata:
name: subscription-sample
name: subscription-sample-1
namespace: example-tenant-ns
spec:
ottl: 'route()'
Expand All @@ -48,7 +48,7 @@ spec:
apiVersion: telemetry.kube-logging.dev/v1alpha1
kind: Subscription
metadata:
name: another-subscription-sample
name: subscription-sample-2
namespace: example-tenant-ns
spec:
ottl: 'route()'
Expand Down
File renamed without changes.
74 changes: 74 additions & 0 deletions e2e/e2e_test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/bin/env bash

set -eou pipefail

create_if_does_not_exist() {
local resource_type=$1
local resource_name=$2
kubectl create "${resource_type}" "${resource_name}" --dry-run=client -o yaml | kubectl apply -f-
}

KIND_CLUSTER_NAME=${KIND_CLUSTER_NAME_E2E:-so-e2e}
# Backup current kubernetes context
CURRENT_K8S_CTX=$(kubectl config view | grep "current" | cut -f 2 -d : | xargs)

# Prepare env
kind create cluster --name "${KIND_CLUSTER_NAME}" --wait 5m
kubectl config set-context kind-"${KIND_CLUSTER_NAME}"

# Install prerequisites

helm upgrade \
--install \
--repo https://charts.jetstack.io \
cert-manager cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.13.3 \
--set installCRDs=true \
--wait

kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml --wait
echo "Wait until otel operator pod is in ready state..."
kubectl wait --namespace opentelemetry-operator-system --for=condition=available deployment/opentelemetry-operator-controller-manager --timeout=300s

# Create subscription operator resources
(cd .. && make manifests generate install)

# Use example
kubectl apply -f ../docs/examples/simple-demo


(cd .. && timeout 5m make run &)

# Create log-generator
helm install --wait --create-namespace --namespace example-tenant-ns --generate-name oci://ghcr.io/kube-logging/helm-charts/log-generator


# Check for received messages - subscription-sample
while
echo "Checking for subscription-sample-1 in deployments/receiver-collector logs"
kubectl logs --namespace example-tenant-ns deployments/receiver-collector | grep -q "subscription-sample-1"

[[ $? -ne 0 ]]
do true; done

# Check for received messages - subscription-sample-2
while
echo "Checking for subscription-sample-2 in deployments/receiver-collector logs"
kubectl logs --namespace example-tenant-ns deployments/receiver-collector | grep -q "subscription-sample-2"

[[ $? -ne 0 ]]
do true; done

echo "E2E test: PASSED"


# Check if cluster should be removed, ctx restored
if [[ -z "${NO_KIND_CLEANUP}" ]]; then
kind delete cluster --name "${KIND_CLUSTER_NAME}"
fi

if [[ "${CURRENT_K8S_CTX}" != "" ]]; then
kubectl config get-contexts -o name | grep -q "${CURRENT_K8S_CTX}" && kubectl config set-context "${CURRENT_K8S_CTX}"
fi
23 changes: 7 additions & 16 deletions internal/controller/telemetry/otel_conf_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ type RoutingConnectorTableItem struct {

type RoutingConnector struct {
Name string `yaml:"-"`
DefaultPipelines []string `yaml:"default_pipelines,flow"`
DefaultPipelines []string `yaml:"default_pipelines,flow,omitempty"`
Table []RoutingConnectorTableItem `yaml:"table"`
}

Expand Down Expand Up @@ -84,6 +84,9 @@ type OtelColConfigIR struct {

func (cfgInput *OtelColConfigInput) generateExporters() map[string]any {
exporters := cfgInput.generateOTLPExporters()
exporters["logging/debug"] = map[string]any{
"verbosity": "detailed",
}
return exporters
}

Expand Down Expand Up @@ -353,6 +356,7 @@ func (cfgInput *OtelColConfigInput) generateDefaultKubernetesProcessor() map[str

func (cfgInput *OtelColConfigInput) generateDefaultKubernetesReceiver() map[string]any {

// TODO: fix parser-crio
operators := []map[string]any{
{
"type": "router",
Expand All @@ -362,27 +366,12 @@ func (cfgInput *OtelColConfigInput) generateDefaultKubernetesReceiver() map[stri
"output": "parser-docker",
"expr": `body matches "^\\{"`,
},
{
"output": "parser-crio",
"expr": `body matches "^[^ Z]+ "`,
},
{
"output": "parser-containerd",
"expr": `body matches "^[^ Z]+Z"`,
},
},
},
{
"type": "regex_parser",
"id": "parser-crio",
"regex": `'^(?P<time>[^ Z]+) (?P<stream>stdout|stderr) (?P<logtag>[^ ]*) ?(?P<log>.*)$'`,
"output": "extract_metadata_from_filepath",
"timestamp": map[string]string{
"parse_from": "attributes.time",
"layout_type": "gotime",
"layout": "2006-01-02T15:04:05.999999999Z07:00",
},
},
{
"type": "regex_parser",
"id": "parser-containerd",
Expand Down Expand Up @@ -479,6 +468,8 @@ func (cfgInput *OtelColConfigInput) ToIntermediateRepresentation() *OtelColConfi

result.Services.Pipelines.NamedPipelines = cfgInput.generateNamedPipelines()

result.Services.Telemetry = make(map[string]any)

return &result
}

Expand Down

0 comments on commit 842e672

Please sign in to comment.