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 OtelCol as alternative logs metadata provider #1697

Merged
merged 37 commits into from
Sep 10, 2021
Merged
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
e29edca
introduce sumologic.logs.provider
sumo-drosiek Apr 9, 2021
a9336d3
feat(helm): add otelcol logs provider (statefulset)
sumo-drosiek May 17, 2021
d3f3b91
feat(helm,logs): use fluentds hpa, services, pdb by otelcol
sumo-drosiek Jul 15, 2021
410f1ce
feat(helm,logs): add logs.otelcol.enabled and logs.fluentd.enabled he…
sumo-drosiek Jul 15, 2021
c0fbb58
feat(helm,logs,otelcol): add k8s metadata
sumo-drosiek Jul 16, 2021
501b33c
feat(helm,logs): add common objects for logs pipeline
sumo-drosiek Jul 19, 2021
fa55e27
feat(helm,logs): add source headers to otelcol logs
sumo-drosiek Jul 19, 2021
4d9fd4f
refactor(yamllint): update values.yaml
sumo-drosiek Jul 19, 2021
1cb8e52
refactor(helm,otelcol): converts fluentd-specific values to common fo…
sumo-drosiek Jul 19, 2021
1dff831
refactor(helm,logs,otelcol): add persistance todo
sumo-drosiek Jul 19, 2021
2fe73f4
refactor(helm,logs,otelcol): remove traves envs from logs sts
sumo-drosiek Jul 19, 2021
30cdd3c
refactor(helm,otelcol,logs): remove agent attribute
sumo-drosiek Jul 19, 2021
be26e00
refactor(helm,otelcol,logs): clean up config
sumo-drosiek Jul 19, 2021
691ca80
refactor,docs: update otelcol related comments
sumo-drosiek Jul 19, 2021
a747cb2
feat(helm,logs): add check for provider values
sumo-drosiek Jul 20, 2021
0ca797c
feat(helm,logs,otelcol): add source processor
sumo-drosiek Aug 6, 2021
63d0d2e
feat(helm): add experimental note to provider
sumo-drosiek Aug 9, 2021
25dac5f
fix(helm): revert autoscalling option for fluent hpa
sumo-drosiek Aug 16, 2021
ac2127d
fix(helm): use autoscalling.enabled option for common hpa
sumo-drosiek Aug 16, 2021
6f958bc
fix(helm): fix extracting k8s metadata from fluent.tag
pmalek Sep 8, 2021
96c1ddd
fix: remove `sumologic.open_endpoint` property from values.yaml
andrzej-stencel Sep 8, 2021
20c366a
cleanup: remove commented-out sumologic extension
andrzej-stencel Sep 8, 2021
14a8943
cleanup: remove unused comments
andrzej-stencel Sep 8, 2021
352c3db
fix: use sanitized pod name in _sourceCategory for logs
andrzej-stencel Sep 8, 2021
cb4814f
fix: correct comment indentation
andrzej-stencel Sep 8, 2021
279f46a
cleanup: remove incorrect comment
andrzej-stencel Sep 8, 2021
75bd207
fix: Move `otelcol.logs` to `otelcol.metadata.logs`
andrzej-stencel Sep 8, 2021
60300b5
fix: move `sumologic.logs.provider` to `sumologic.logs.metadata.provi…
andrzej-stencel Sep 8, 2021
fa22248
fix: fix property name in error message
andrzej-stencel Sep 8, 2021
fd3c93b
refactor: simplify service labels logic for OtelCol
andrzej-stencel Sep 8, 2021
353d480
fix: move `logs.*` to `logs.metadata.*`
andrzej-stencel Sep 8, 2021
eda1093
docs: Add otelcol logs configuration properties to README
andrzej-stencel Sep 8, 2021
cd77253
docs: fix markdown formatting
andrzej-stencel Sep 8, 2021
ab0758d
docs: add link to OT distro configuration
andrzej-stencel Sep 8, 2021
0daa72f
docs: remove redundant word
andrzej-stencel Sep 8, 2021
e935ec5
feat(configuration): add logLevel option for logs otelcol
andrzej-stencel Sep 8, 2021
471f869
fix: use pod/namespace name in logs enrichment otelcol
andrzej-stencel Sep 9, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
28 changes: 27 additions & 1 deletion deploy/helm/sumologic/README.md

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions deploy/helm/sumologic/conf/logs/otelcol/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{{ tpl (toYaml .Values.otelcol.metadata.logs.config | replace ": '{{" ": {{" | replace "}}'" "}}") . | nindent 2 }}
58 changes: 58 additions & 0 deletions deploy/helm/sumologic/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,11 @@ helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
{{- end -}}

{{- define "sumologic.metadata.name.logs" -}}
{{- if eq .Values.sumologic.logs.metadata.provider "fluentd" -}}
{{ template "sumologic.metadata.name.fluentd" . }}-logs
{{- else if eq .Values.sumologic.logs.metadata.provider "otelcol" -}}
{{ template "sumologic.metadata.name.otelcol" . }}-logs
{{- end -}}
{{- end -}}

{{- define "sumologic.metadata.name.logs.service" -}}
Expand Down Expand Up @@ -1081,9 +1085,63 @@ Example Usage:
{{ $enabled }}
{{- end -}}

{{/*
Check if any logs provider is enabled

Example Usage:
{{- if eq (include "logs.enabled" .) "true" }}

*/}}
{{- define "logs.enabled" -}}
{{- $enabled := false -}}
{{- if eq (include "logs.otelcol.enabled" .) "true" }}
{{- $enabled = true -}}
{{- end -}}
{{- if eq (include "logs.fluentd.enabled" .) "true" }}
{{- $enabled = true -}}
{{- end -}}
{{ $enabled }}
{{- end -}}


{{/*
Check if otelcol logs provider is enabled

Example Usage:
{{- if eq (include "logs.otelcol.enabled" .) "true" }}

*/}}
{{- define "logs.otelcol.enabled" -}}
{{- $enabled := false -}}
{{- if eq .Values.sumologic.logs.enabled true -}}
{{- if and (eq .Values.sumologic.logs.metadata.provider "otelcol") (eq .Values.otelcol.metadata.logs.enabled true) -}}
{{- $enabled = true -}}
{{- end -}}
{{- end -}}
{{ $enabled }}
{{- end -}}

{{/*
Check if fluentd logs provider is enabled

Example Usage:
{{- if eq (include "logs.fluentd.enabled" .) "true" }}

*/}}
{{- define "logs.fluentd.enabled" -}}
{{- $enabled := false -}}
{{- if eq .Values.sumologic.logs.enabled true -}}
{{- if and (eq .Values.sumologic.logs.metadata.provider "fluentd") (eq .Values.fluentd.logs.enabled true) -}}
{{- $enabled = true -}}
{{- end -}}
{{- end -}}
{{ $enabled }}
{{- end -}}


{{/*
Add service labels

Example Usage:
{{- if eq (include "service.labels" dict("Provider" "fluentd" "Values" .Values)) "true" }}

Expand Down
8 changes: 7 additions & 1 deletion deploy/helm/sumologic/templates/checks.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@
{{- fail "\nAt least k8s 1.16 is required. Please update your k8s version or set sumologic.setup.force to true" -}}
{{- end -}}
{{- end -}}

{{/* Check if metrics provider is set to either fluentd or otelcol */}}
{{- if not (or (eq .Values.sumologic.metrics.metadata.provider "fluentd") (eq .Values.sumologic.metrics.metadata.provider "otelcol")) -}}
{{- fail "\nsumologic.metrics.provider should be set to either fluentd or otelcol" -}}
{{- fail "\nsumologic.metrics.metadata.provider should be set to either fluentd or otelcol" -}}
{{- end -}}

{{/* Check if logs provider is set to either fluentd or otelcol */}}
{{- if not (or (eq .Values.sumologic.logs.metadata.provider "fluentd") (eq .Values.sumologic.logs.metadata.provider "otelcol")) -}}
{{- fail "\nsumologic.logs.metadata.provider should be set to either fluentd or otelcol" -}}
{{- end -}}
31 changes: 31 additions & 0 deletions deploy/helm/sumologic/templates/logs/common/hpa.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{{- if and (eq (include "logs.otelcol.enabled" .) "true") (.Values.logs.metadata.autoscaling.enabled) }}
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: {{ template "sumologic.metadata.name.logs.hpa" . }}
labels:
app: {{ template "sumologic.labels.app.logs.hpa" . }}
{{- include "sumologic.labels.common" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: StatefulSet
name: {{ template "sumologic.metadata.name.logs.statefulset" . }}
minReplicas: {{ .Values.logs.metadata.autoscaling.minReplicas }}
maxReplicas: {{ .Values.logs.metadata.autoscaling.maxReplicas }}
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: {{ .Values.logs.metadata.autoscaling.targetCPUUtilizationPercentage }}
{{- if .Values.logs.metadata.autoscaling.targetMemoryUtilizationPercentage }}
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: {{ .Values.logs.metadata.autoscaling.targetMemoryUtilizationPercentage }}
{{- end -}}
{{- end -}}
13 changes: 13 additions & 0 deletions deploy/helm/sumologic/templates/logs/common/pdb.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{{- if eq (include "logs.otelcol.enabled" .) "true" }}
{{- if .Values.logs.metadata.podDisruptionBudget -}}
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: {{ template "sumologic.metadata.name.logs.pdb" . }}
spec:
selector:
matchLabels:
app: {{ template "sumologic.labels.app.logs.statefulset" . }}
{{ toYaml .Values.logs.metadata.podDisruptionBudget | indent 2 }}
{{- end -}}
{{- end -}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{{- if eq (include "logs.otelcol.enabled" .) "true" }}
apiVersion: v1
kind: Service
metadata:
name: {{ template "sumologic.metadata.name.logs.service-headless" . }}
labels:
app: {{ template "sumologic.labels.app.logs.service-headless" . }}
{{- include "sumologic.labels.logs" . | nindent 4 }}
{{- if .Values.otelcol.serviceLabels }}
{{ toYaml .Values.otelcol.serviceLabels | indent 4 }}
{{- end }}
spec:
selector:
app: {{ template "sumologic.labels.app.logs.pod" . }}
clusterIP: None
ports:
{{- if .Values.sumologic.traces.enabled }}
- name: zipkin-write
port: 9411
targetPort: 9411
protocol: TCP
{{- end }}
- name: fluent-bit
port: 24321
targetPort: 24321
protocol: TCP
- name: metrics
port: 24231
targetPort: 24231
protocol: TCP
{{- end }}
31 changes: 31 additions & 0 deletions deploy/helm/sumologic/templates/logs/common/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{{- if eq (include "logs.otelcol.enabled" .) "true" }}
apiVersion: v1
kind: Service
metadata:
name: {{ template "sumologic.metadata.name.logs.service" . }}
labels:
app: {{ template "sumologic.labels.app.logs.service" . }}
{{- include "sumologic.labels.scrape.logs" . | nindent 4 }}
{{- include "sumologic.labels.common" . | nindent 4 }}
{{- if .Values.otelcol.serviceLabels }}
{{ toYaml .Values.otelcol.serviceLabels | indent 4 }}
{{- end }}
spec:
selector:
app: {{ template "sumologic.labels.app.logs.pod" . }}
ports:
{{- if .Values.sumologic.traces.enabled }}
- name: zipkin-write
port: 9411
targetPort: 9411
protocol: TCP
{{- end }}
- name: fluent-bit
port: 24321
targetPort: 24321
protocol: TCP
- name: metrics
port: 24231
targetPort: 24231
protocol: TCP
{{- end }}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if and (eq .Values.sumologic.logs.enabled true) (eq .Values.fluentd.logs.enabled true) }}
{{- if eq (include "logs.fluentd.enabled" .) "true" }}
apiVersion: v1
kind: ConfigMap
metadata:
Expand Down
2 changes: 1 addition & 1 deletion deploy/helm/sumologic/templates/logs/fluentd/hpa.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if .Values.fluentd.logs.autoscaling.enabled}}
{{- if and (eq (include "logs.fluentd.enabled" .) "true") (.Values.fluentd.logs.autoscaling.enabled) }}
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
Expand Down
2 changes: 1 addition & 1 deletion deploy/helm/sumologic/templates/logs/fluentd/pdb.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if and .Values.sumologic.logs.enabled .Values.fluentd.logs.enabled -}}
{{- if eq (include "logs.fluentd.enabled" .) "true" }}
{{- if .Values.fluentd.logs.podDisruptionBudget -}}
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if and (eq .Values.sumologic.logs.enabled true) (eq .Values.fluentd.logs.enabled true) }}
{{- if eq (include "logs.fluentd.enabled" .) "true" }}
apiVersion: v1
kind: Service
metadata:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if and (eq .Values.sumologic.logs.enabled true) (eq .Values.fluentd.logs.enabled true) }}
{{- if eq (include "logs.fluentd.enabled" .) "true" }}
apiVersion: v1
kind: Service
metadata:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if and (eq .Values.sumologic.logs.enabled true) (eq .Values.fluentd.logs.enabled true) }}
{{- if eq (include "logs.fluentd.enabled" .) "true" }}
apiVersion: apps/v1
kind: StatefulSet
metadata:
Expand Down
11 changes: 11 additions & 0 deletions deploy/helm/sumologic/templates/logs/otelcol/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{{- if eq (include "logs.otelcol.enabled" .) "true" }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "sumologic.metadata.name.logs.configmap" . }}
labels:
app: {{ template "sumologic.labels.app.logs.configmap" . }}
{{- include "sumologic.labels.common" . | nindent 4 }}
data:
{{- (tpl (.Files.Glob "conf/logs/otelcol/config.yaml").AsConfig .) | nindent 2 }}
{{- end }}
144 changes: 144 additions & 0 deletions deploy/helm/sumologic/templates/logs/otelcol/statefulset.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
{{- if eq (include "logs.otelcol.enabled" .) "true" }}
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ template "sumologic.metadata.name.logs.statefulset" . }}
labels:
app: {{ template "sumologic.labels.app.logs.statefulset" . }}
{{- include "sumologic.labels.common" . | nindent 4 }}
spec:
selector:
matchLabels:
app: {{ template "sumologic.labels.app.logs.pod" . }}
serviceName: {{ template "sumologic.metadata.name.logs.service-headless" . }}
podManagementPolicy: "Parallel"
{{- if not .Values.logs.metadata.autoscaling.enabled }}
replicas: {{ .Values.logs.metadata.statefulset.replicaCount }}
{{- end }}
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/logs/otelcol/configmap.yaml") . | sha256sum }}
{{- if .Values.sumologic.podAnnotations }}
{{ toYaml .Values.sumologic.podAnnotations | indent 8 }}
{{- end }}
{{- if .Values.otelcol.podAnnotations }}
{{ toYaml .Values.otelcol.podAnnotations | indent 8 }}
{{- end }}
{{- if .Values.logs.metadata.statefulset.podAnnotations }}
{{ toYaml .Values.logs.metadata.statefulset.podAnnotations | indent 8 }}
{{- end }}
labels:
app: {{ template "sumologic.labels.app.logs.pod" . }}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This also needs to be changed to take into account the provider. As of now I'm seeing

Name:         collection-sumologic-otelcol-logs-0
Namespace:    sumologic
Priority:     0
Node:         sumologic-kubernetes-collection/10.0.2.15
Start Time:   Wed, 08 Sep 2021 12:08:51 +0200
Labels:       app=collection-sumologic-fluentd-logs
              chart=sumologic-2.2.0-dev.0
              controller-revision-hash=collection-sumologic-otelcol-logs-56cf654b8
              heritage=Helm
              release=collection
              statefulset.kubernetes.io/pod-name=collection-sumologic-otelcol-logs-0
...

{{- include "sumologic.labels.common" . | nindent 8 }}
{{- if .Values.sumologic.podLabels }}
{{ toYaml .Values.sumologic.podLabels | indent 8 }}
{{- end }}
{{- if .Values.otelcol.podLabels }}
{{ toYaml .Values.otelcol.podLabels | indent 8 }}
{{- end }}
{{- if .Values.logs.metadata.statefulset.podLabels }}
{{ toYaml .Values.logs.metadata.statefulset.podLabels | indent 8 }}
{{- end }}
spec:
serviceAccountName: {{ template "sumologic.metadata.name.roles.serviceaccount" . }}
{{- if .Values.logs.metadata.statefulset.nodeSelector }}
nodeSelector:
{{ toYaml .Values.logs.metadata.statefulset.nodeSelector | indent 8 }}
{{- end }}
{{- if .Values.logs.metadata.statefulset.tolerations }}
tolerations:
{{ toYaml .Values.logs.metadata.statefulset.tolerations | indent 8 }}
{{- end }}
{{- if or .Values.logs.metadata.statefulset.affinity .Values.fluentd.logs.statefulset.podAntiAffinity }}
affinity:
{{- if .Values.logs.metadata.statefulset.affinity }}
{{ toYaml .Values.logs.metadata.statefulset.affinity | indent 8 }}
{{- end }}
{{- if eq .Values.logs.metadata.statefulset.podAntiAffinity "hard"}}
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- {{ template "sumologic.labels.app.logs" . }}
- {{ template "sumologic.labels.app.metrics" . }}
- key: app
operator: In
values:
- prometheus-operator-prometheus
topologyKey: "kubernetes.io/hostname"
{{else if eq .Values.logs.metadata.statefulset.podAntiAffinity "soft"}}
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- {{ template "sumologic.labels.app.logs.pod" . }}
- {{ template "sumologic.labels.app.metrics.pod" . }}
- key: app
operator: In
values:
- prometheus-operator-prometheus
topologyKey: "kubernetes.io/hostname"
{{- end }}
{{- end }}
volumes:
- name: config-volume
configMap:
name: {{ template "sumologic.metadata.name.logs.configmap" . }}
{{- if .Values.logs.extraVolumes }}
{{ toYaml .Values.logs.extraVolumes | indent 6 }}
{{- end }}
securityContext:
{{- toYaml .Values.otelcol.securityContext | nindent 8 }}
{{- if .Values.logs.metadata.statefulset.priorityClassName }}
priorityClassName: {{ .Values.logs.metadata.statefulset.priorityClassName | quote }}
{{- end }}
containers:
- name: otelcol
image: {{ .Values.otelcol.statefulset.image.repository }}:{{ .Values.otelcol.statefulset.image.tag }}
imagePullPolicy: {{ .Values.otelcol.statefulset.image.pullPolicy }}
resources:
{{- toYaml .Values.logs.metadata.statefulset.resources | nindent 10 }}
{{- if .Values.logs.metadata.statefulset.containers.otelcol.securityContext }}
securityContext:
{{- toYaml .Values.logs.metadata.statefulset.containers.otelcol.securityContext | nindent 10 }}
{{- end }}
ports:
{{- if .Values.sumologic.traces.enabled }}
- name: zipkin-write
containerPort: 9411
protocol: TCP
{{- end }}
- name: fluent-bit
containerPort: 24321
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 13133 # Health Check extension default port.
readinessProbe:
httpGet:
path: /
port: 13133 # Health Check extension default port.
volumeMounts:
- name: config-volume
mountPath: /etc/otel/config.yaml
subPath: config.yaml
{{- if .Values.logs.extraVolumeMounts }}
{{ toYaml .Values.logs.extraVolumeMounts | indent 8 }}
{{- end }}
env:
{{- $ctx := .Values -}}
{{ include "kubernetes.sources.envs" (dict "Context" $ctx "Type" "logs")}}
{{- if .Values.logs.extraEnvVars }}
{{ toYaml .Values.logs.extraEnvVars | nindent 8 }}
{{- end }}
{{- end }}