Skip to content

Commit

Permalink
feat: add experimental OT event collection
Browse files Browse the repository at this point in the history
  • Loading branch information
Mikołaj Świątek committed Jun 20, 2022
1 parent 62827c3 commit fe8ccfe
Show file tree
Hide file tree
Showing 23 changed files with 966 additions and 10 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added

- feat(metrics): add service metrics [#2367]
- feat(events): add experimental OT event collection [#2379]

### Changed

Expand All @@ -27,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
[#2376]: https://github.com/SumoLogic/sumologic-kubernetes-collection/pull/2376
[#2377]: https://github.com/SumoLogic/sumologic-kubernetes-collection/pull/2377
[#2338]: https://github.com/SumoLogic/sumologic-kubernetes-collection/pull/2338
[#2379]: https://github.com/SumoLogic/sumologic-kubernetes-collection/pull/2379
[Unreleased]: https://github.com/SumoLogic/sumologic-kubernetes-collection/compare/v2.10.0...main

## [v2.10.0]
Expand Down
59 changes: 59 additions & 0 deletions deploy/helm/sumologic/conf/events/otelcol/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
receivers:
raw_k8s_events: {}
extensions:
health_check: {}
file_storage:
directory: /var/lib/storage/otc
timeout: 10s
pprof: {}
exporters:
sumologic:
log_format: json
json_logs:
add_timestamp: true
timestamp_key: timestamp
endpoint: ${SUMO_ENDPOINT_DEFAULT_EVENTS_SOURCE}
source_name: "%{_sourceName}"
source_category: "%{_sourceCategory}"
sending_queue:
enabled: true
persistent_storage_enabled: {{ .Values.otelevents.persistence.enabled }}
processors:
memory_limiter:
check_interval: 1s
limit_percentage: 70
spike_limit_percentage: 20
batch:
send_batch_size: 1024
send_batch_max_size: 2_048
timeout: 1s
resource/add_cluster:
attributes:
- key: cluster
value: {{ .Values.sumologic.clusterName | quote }}
action: upsert
source:
collector: {{ .Values.sumologic.collectorName | default .Values.sumologic.clusterName | quote }}
source_name: {{ .Values.fluentd.events.sourceName | quote}}
source_category: {{ .Values.fluentd.events.sourceCategory | default (printf "%s/%s" (include "sumologic.clusterNameReplaceSpaceWithDash" .) (.Values.fluentd.events.sourceName )) | quote}}
source_category_prefix: ""

service:
telemetry:
logs:
level: {{ .Values.otelevents.logLevel }}
extensions:
- health_check
- file_storage
- pprof
pipelines:
logs/events:
receivers:
- raw_k8s_events
processors:
- memory_limiter
- resource/add_cluster
- source
- batch
exporters:
- sumologic
48 changes: 47 additions & 1 deletion deploy/helm/sumologic/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,11 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this
{{- end -}}

{{- define "sumologic.labels.app.events" -}}
{{- template "sumologic.labels.app.fluentd" . }}-events
{{- if eq (include "events.fluentd.enabled" .) "true" -}}
{{ template "sumologic.labels.app.fluentd" . }}-events
{{- else if eq (include "events.otelcol.enabled" .) "true" -}}
{{ template "sumologic.labels.app.otelcol" . }}-events
{{- end -}}
{{- end -}}

{{- define "sumologic.labels.app.events.pod" -}}
Expand Down Expand Up @@ -472,7 +476,11 @@ helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
{{- end -}}

{{- define "sumologic.metadata.name.events" -}}
{{- if eq (include "events.fluentd.enabled" .) "true" -}}
{{ template "sumologic.metadata.name.fluentd" . }}-events
{{- else if eq (include "events.otelcol.enabled" .) "true" -}}
{{ template "sumologic.metadata.name.otelcol" . }}-events
{{- end -}}
{{- end -}}

{{- define "sumologic.metadata.name.events.service" -}}
Expand Down Expand Up @@ -1339,6 +1347,44 @@ Example Usage:
{{ $enabled }}
{{- end -}}

{{/*
Check if any metrics provider is enabled
Example Usage:
{{- if eq (include "metrics.enabled" .) "true" }}

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


{{/*
Check if otelcol events provider is enabled
Example Usage:
{{- if eq (include "metrics.otelcol.enabled" .) "true" }}

*/}}
{{- define "events.otelcol.enabled" -}}
{{- eq .Values.otelevents.enabled true -}}
{{- end -}}


{{/*
Check if fluentd events provider is enabled
Example Usage:
{{- if eq (include "metrics.fluentd.enabled" .) "true" }}

*/}}
{{- define "events.fluentd.enabled" -}}
{{- eq .Values.fluentd.events.enabled true -}}
{{- end -}}

{{/*
Add service labels
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if eq .Values.fluentd.events.enabled true }}
{{- if eq (include "events.enabled" .) "true" }}
apiVersion: v1
kind: Service
metadata:
Expand All @@ -18,4 +18,8 @@ spec:
port: 24231
targetPort: 24231
protocol: TCP
{{- end }}
- name: otelcol-metrics
port: 8888
targetPort: 8888
protocol: TCP
{{- end }}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if eq .Values.fluentd.events.enabled true }}
{{- if eq (include "events.enabled" .) "true" }}
apiVersion: v1
kind: Service
metadata:
Expand All @@ -18,4 +18,8 @@ spec:
port: 24231
targetPort: 24231
protocol: TCP
{{- end }}
- name: otelcol-metrics
port: 8888
targetPort: 8888
protocol: TCP
{{- end }}
6 changes: 3 additions & 3 deletions deploy/helm/sumologic/templates/events/fluentd/configmap.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if eq .Values.fluentd.events.enabled true }}
{{- if eq (include "events.fluentd.enabled" .) "true" }}
apiVersion: v1
kind: ConfigMap
metadata:
Expand All @@ -9,6 +9,6 @@ metadata:
data:
fluent.conf: |-
@include events.conf
{{- (tpl (.Files.Glob "conf/events/*.conf").AsConfig .) | nindent 2 }}
{{- (tpl (.Files.Glob "conf/events/fluentd/*.conf").AsConfig .) | nindent 2 }}
{{- (tpl (.Files.Glob "conf/fluentd/buffer.output.conf").AsConfig .) | nindent 2 }}
{{- end }}
{{- end }}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if eq .Values.fluentd.events.enabled true }}
{{- if eq (include "events.fluentd.enabled" .) "true" }}
apiVersion: apps/v1
kind: StatefulSet
metadata:
Expand Down Expand Up @@ -125,4 +125,4 @@ spec:
requests:
storage: {{ .Values.fluentd.persistence.size }}
{{- end }}
{{- end }}
{{- end }}
15 changes: 15 additions & 0 deletions deploy/helm/sumologic/templates/events/otelcol/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{{- if eq (include "events.otelcol.enabled" .) "true" }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "sumologic.metadata.name.events.configmap" . }}
labels:
app: {{ template "sumologic.labels.app.events.configmap" . }}
{{- include "sumologic.labels.common" . | nindent 4 }}
data:
{{- $baseConfig := (tpl (.Files.Get "conf/events/otelcol/config.yaml") .) | fromYaml -}}
{{- $overrideConfig := .Values.otelevents.config.override -}}
{{- $finalConfig := mergeOverwrite $baseConfig $overrideConfig }}
config.yaml: |
{{- $finalConfig | toYaml | nindent 4 }}
{{- end }}
166 changes: 166 additions & 0 deletions deploy/helm/sumologic/templates/events/otelcol/statefulset.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
{{- if eq (include "events.otelcol.enabled" .) "true" }}
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ template "sumologic.metadata.name.events.statefulset" . }}
labels:
app: {{ template "sumologic.labels.app.events.statefulset" . }}
{{- include "sumologic.labels.common" . | nindent 4 }}
spec:
selector:
matchLabels:
app: {{ template "sumologic.labels.app.events.pod" . }}
serviceName: {{ template "sumologic.metadata.name.events.service-headless" . }}
podManagementPolicy: "Parallel"
replicas: 1
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/events/otelcol/configmap.yaml") . | sha256sum }}
{{- if .Values.sumologic.podAnnotations }}
{{ toYaml .Values.sumologic.podAnnotations | indent 8 }}
{{- end }}
{{- if .Values.otelevents.statefulset.podAnnotations }}
{{ toYaml .Values.otelevents.statefulset.podAnnotations | indent 8 }}
{{- end }}
labels:
app: {{ template "sumologic.labels.app.events.pod" . }}
{{- include "sumologic.labels.common" . | nindent 8 }}
{{- if .Values.sumologic.podLabels }}
{{ toYaml .Values.sumologic.podLabels | indent 8 }}
{{- end }}
{{- if .Values.otelevents.statefulset.podLabels }}
{{ toYaml .Values.otelevents.statefulset.podLabels | indent 8 }}
{{- end }}
spec:
serviceAccountName: {{ template "sumologic.metadata.name.roles.serviceaccount" . }}
{{- if .Values.otelevents.statefulset.nodeSelector }}
nodeSelector:
{{ toYaml .Values.otelevents.statefulset.nodeSelector | indent 8 }}
{{- end }}
{{- if .Values.otelevents.statefulset.tolerations }}
tolerations:
{{ toYaml .Values.otelevents.statefulset.tolerations | indent 8 }}
{{- end }}
{{- if or .Values.otelevents.statefulset.affinity .Values.otelevents.statefulset.podAntiAffinity }}
affinity:
{{- if .Values.otelevents.statefulset.affinity }}
{{ toYaml .Values.otelevents.statefulset.affinity | indent 8 }}
{{- end }}
{{- if eq .Values.otelevents.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.otelevents.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.events.pod" . }}
- key: app
operator: In
values:
- prometheus-operator-prometheus
topologyKey: "kubernetes.io/hostname"
{{- end }}
{{- end }}
{{- if .Values.otelevents.statefulset.topologySpreadConstraints }}
topologySpreadConstraints:
{{ toYaml .Values.otelevents.statefulset.topologySpreadConstraints | indent 6 }}
{{- end }}
volumes:
- name: config-volume
configMap:
name: {{ template "sumologic.metadata.name.events.configmap" . }}
{{- if .Values.otelevents.statefulset.extraVolumes }}
{{ toYaml .Values.otelevents.statefulset.extraVolumes | indent 6 }}
{{- end }}
securityContext:
{{- toYaml .Values.otelevents.statefulset.securityContext | nindent 8 }}
{{- if .Values.otelevents.statefulset.priorityClassName }}
priorityClassName: {{ .Values.otelevents.statefulset.priorityClassName | quote }}
{{- end }}
containers:
- name: otelcol
image: {{ .Values.otelevents.image.repository }}:{{ .Values.otelevents.image.tag }}
imagePullPolicy: {{ .Values.otelevents.image.pullPolicy }}
args:
- --config=/etc/otel/config.yaml
resources:
{{- toYaml .Values.otelevents.statefulset.resources | nindent 10 }}
{{- if .Values.otelevents.statefulset.containers.otelcol.securityContext }}
securityContext:
{{- toYaml .Values.otelevents.statefulset.containers.otelcol.securityContext | nindent 10 }}
{{- end }}
ports:
- name: metrics
containerPort: 8888
protocol: TCP
- name: pprof
containerPort: 1777
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 13133 # Health Check extension default port.
{{- toYaml .Values.otelevents.statefulset.containers.otelcol.livenessProbe | nindent 10 }}
readinessProbe:
httpGet:
path: /
port: 13133 # Health Check extension default port.
{{- toYaml .Values.otelevents.statefulset.containers.otelcol.readinessProbe | nindent 10 }}
startupProbe:
httpGet:
path: /
port: 13133 # Health Check extension default port.
{{- toYaml .Values.otelevents.statefulset.containers.otelcol.startupProbe | nindent 10 }}
volumeMounts:
- name: config-volume
mountPath: /etc/otel/config.yaml
subPath: config.yaml
{{- if .Values.otelevents.persistence.enabled }}
- name: file-storage
mountPath: /var/lib/storage/otc
{{- end}}
{{- if .Values.otelevents.statefulset.extraVolumeMounts }}
{{ toYaml .Values.otelevents.statefulset.extraVolumeMounts | indent 8 }}
{{- end }}
env:
{{- $ctx := .Values -}}
{{- include "kubernetes.sources.envs" (dict "Context" $ctx "Type" "events") -}}
{{- if .Values.otelevents.statefulset.extraEnvVars }}
{{ toYaml .Values.otelevents.statefulset.extraEnvVars | nindent 8 }}
{{- end }}
{{- if .Values.otelevents.persistence.enabled }}
volumeClaimTemplates:
- metadata:
name: file-storage
{{- if .Values.otelevents.persistence.pvcLabels }}
labels:
{{ toYaml .Values.otelevents.persistence.pvcLabels | indent 8 }}
{{- end }}
spec:
accessModes: [{{ .Values.otelevents.persistence.accessMode }}]
storageClassName: {{ .Values.otelevents.persistence.storageClass }}
resources:
requests:
storage: {{ .Values.otelevents.persistence.size }}
{{- end }}
{{- end }}
Loading

0 comments on commit fe8ccfe

Please sign in to comment.