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

chore(otoperator): update opentelemetry operator, add instrumentation customization #2894

Merged
merged 16 commits into from
Mar 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
27 changes: 27 additions & 0 deletions .changelog/2894.changed.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
chore(otoperator): update opentelemetry operator, add instrumentation customization

Changed [#2894] OpenTelemetry-Operator was updated to [v0.24.0]. New configuration flags were added:

- Flags to control metrics/traces export from specific instrumentation in `Instrumentation` resource.
- `opentelemetry-operator.instrumentation.dotnet.metrics.enabled`
- `opentelemetry-operator.instrumentation.dotnet.traces.enabled`
- `opentelemetry-operator.instrumentation.java.metrics.enabled`
- `opentelemetry-operator.instrumentation.java.traces.enabled`
- `opentelemetry-operator.instrumentation.python.metrics.enabled`
- `opentelemetry-operator.instrumentation.python.traces.enabled`
- Flags to set CPU and Memory requests and limits for OpenTelemetry-Operator
- `opentelemetry-operator.manager.resources.limits.cpu`
- `opentelemetry-operator.manager.resources.limits.memory`
- `opentelemetry-operator.manager.resources.requests.cpu`
- `opentelemetry-operator.manager.resources.requests.memory`

> **Warning** > This action is required only if you have enabled `opentelemetry-operator` with `opentelemetry-operator.enabled: true`. Please delete the following resources before update of the chart:

- `opentelemetry-operator-validating-webhook-configuration` (validatingwebhookconfiguration)
- `opentelemetry-operator-mutating-webhook-configuration` (mutatingwebhookconfiguration)
- `opentelemetry-operator-controller-manager-metrics-service` (service)
- `opentelemetry-operator-webhook-service` (service)
- `opentelemetry-operator-controller-manager` (deployment)

[#2894]: https://github.com/SumoLogic/sumologic-kubernetes-collection/issues/2894
[v0.24.0]: https://github.com/open-telemetry/opentelemetry-helm-charts/releases/tag/opentelemetry-operator-0.24.0
2 changes: 1 addition & 1 deletion deploy/helm/sumologic/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,6 @@ dependencies:
repository: https://sumologic.github.io/tailing-sidecar
condition: tailing-sidecar-operator.enabled
- name: opentelemetry-operator
version: 0.18.3
version: 0.24.0
mat-rumian marked this conversation as resolved.
Show resolved Hide resolved
repository: https://open-telemetry.github.io/opentelemetry-helm-charts
condition: opentelemetry-operator.enabled
10 changes: 10 additions & 0 deletions deploy/helm/sumologic/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,16 @@ The following table lists the configurable parameters of the Sumo Logic chart an
| `telegraf-operator.imagePullSecrets` | Pull secrets for Telegraf Operator images. For more information on using Kubernetes secrets with container registries please refer to [Creating a Secret with a Docker config at kubernetes.io](https://kubernetes.io/docs/concepts/containers/images/#creating-a-secret-with-a-docker-config). | `[]` |
| `opentelemetry-operator.enabled` | Flag to control deploying OpenTelemetry Operator Helm sub-chart. | `false` |
| `opentelemetry-operator.createDefaultInstrumentation` | Flag to control creation of default Instrumentation object | `false` |
| `opentelemetry-operator.instrumentation.dotnet.metrics.enabled` | Flag to control metrics export from DotNet instrumentation in `Instrumentation` resource. | `true` |
| `opentelemetry-operator.instrumentation.dotnet.traces.enabled` | Flag to control traces export from DotNet instrumentation in `Instrumentation` resource. | `true` |
| `opentelemetry-operator.instrumentation.java.metrics.enabled` | Flag to control metrics export from Java instrumentation in `Instrumentation` resource. | `true` |
| `opentelemetry-operator.instrumentation.java.traces.enabled` | Flag to control traces export from Java instrumentation in `Instrumentation` resource. | `true` |
| `opentelemetry-operator.instrumentation.python.metrics.enabled` | Flag to control metrics export from Python instrumentation in `Instrumentation` resource. | `true` |
| `opentelemetry-operator.instrumentation.python.traces.enabled` | Flag to control traces export from Python instrumentation in `Instrumentation` resource. | `true` |
| `opentelemetry-operator.manager.resources.limits.cpu` | Used to set limit CPU for OpenTelemetry-Operator Manager. | `250m` |
| `opentelemetry-operator.manager.resources.limits.memory` | Used to set limit Memory for OpenTelemetry-Operator Manager. | `512Mi` |
| `opentelemetry-operator.manager.resources.requests.cpu` | Used to set requested CPU for OpenTelemetry-Operator Manager. | `150m` |
| `opentelemetry-operator.manager.resources.requests.memory` | Used to set requested Memory for OpenTelemetry-Operator Manager. | `256Mi` |
| `opentelemetry-operator.instrumentationNamespaces` | Used to create `Instrumentation` resources in specified namespaces. | `Nil` |
| `opentelemetry-operator.instrumentationJobImage.image.repository` | Name of the image repository used to apply Instrumentation resource | `sumologic/kubernetes-tools` |
| `opentelemetry-operator.instrumentationJobImage.image.tag` | Name of the image tag used to apply Instrumentation resource | `2.14.0` |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{{- $ctx := . -}}
{{- $instrumentationNamespaces := index .Values "opentelemetry-operator" -}}
{{- if eq ( get $instrumentationNamespaces "instrumentationNamespaces" ) "" -}}
{{- $operator := index .Values "opentelemetry-operator" -}}
{{- if eq ( get $operator "instrumentationNamespaces" ) "" -}}
{{ fail "No value for \"opentelemetry-operator.instrumentationNamespaces\".Value is comma separated namespaces e.g. \"ns1\\,ns2\"" }}
{{- else -}}
{{- range $ns := splitList "," ( index .Values "opentelemetry-operator" "instrumentationNamespaces" ) -}}
Expand All @@ -19,47 +19,49 @@ spec:
- baggage
resource:
addK8sUIDAttributes: false
sampler:
type: always_on
env:
- name: OTEL_APPLICATION_NAMESPACE_NAME
value: {{ $ns }}
- name: OTEL_RESOURCE_ATTRIBUTES
value: application={{ $ns }}
dotnet:
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:0.4.0-beta.1
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:0.5.0
env:
- name: OTEL_METRICS_EXPORTER
value: none
value: {{ include "instrumentation.resource.exporter" (dict "enabled" $operator.instrumentation.dotnet.metrics.enabled) }}
- name: OTEL_LOGS_EXPORTER
value: none
- name: OTEL_TRACES_EXPORTER
value: otlp
value: {{ include "instrumentation.resource.exporter" (dict "enabled" $operator.instrumentation.dotnet.traces.enabled) }}
- name: OTEL_EXPORTER_OTLP_PROTOCOL
value: http/protobuf
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://{{- include "sumologic.opentelemetry.operator.instrumentation.collector.endpoint" $ctx }}:4318
python:
# Force to use older image because of LOGS exporting issue
# https://github.com/open-telemetry/opentelemetry-python/issues/2594
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.28b1
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.36b0
env:
- name: OTEL_METRICS_EXPORTER
value: {{ include "instrumentation.resource.exporter" (dict "enabled" $operator.instrumentation.python.metrics.enabled) }}
- name: OTEL_TRACES_EXPORTER
value: otlp_proto_http
- name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
value: http://{{- include "sumologic.opentelemetry.operator.instrumentation.collector.endpoint" $ctx }}:4318/v1/traces
value: {{ include "instrumentation.resource.exporter" (dict "enabled" $operator.instrumentation.python.traces.enabled) }}
- name: OTEL_EXPORTER_OTLP_PROTOCOL
value: http/protobuf
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://{{- include "sumologic.opentelemetry.operator.instrumentation.collector.endpoint" $ctx }}:4318
nodejs:
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.27.0
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.34.0
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://{{- include "sumologic.opentelemetry.operator.instrumentation.collector.endpoint" $ctx }}:4317
java:
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.16.0
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.23.0
env:
- name: OTEL_METRICS_EXPORTER
value: none
value: {{ include "instrumentation.resource.exporter" (dict "enabled" $operator.instrumentation.java.metrics.enabled) }}
- name: OTEL_TRACES_EXPORTER
value: otlp
value: {{ include "instrumentation.resource.exporter" (dict "enabled" $operator.instrumentation.java.traces.enabled) }}
- name: OTEL_EXPORTER_OTLP_PROTOCOL
value: http/protobuf
- name: OTEL_EXPORTER_OTLP_ENDPOINT
Expand Down
16 changes: 15 additions & 1 deletion deploy/helm/sumologic/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -1561,7 +1561,7 @@ Example Usage:
{{- end -}}

{{- define "opentelemetry-operator.controller.manager.metrics.service.url" -}}
http://opentelemetry-operator-controller-manager-metrics-service.{{ .Release.Namespace }}:8080/metrics
http://{{ .Release.Name }}-opentelemetry-operator.{{ .Release.Namespace }}:8080/metrics
{{- end -}}


Expand Down Expand Up @@ -1625,3 +1625,17 @@ Return the log format for the Sumologic exporter for container logs.
{{- fail "`sumologic.logs.container.format` can only be `json`, `text`, `json_merge` or `fields`" -}}
{{- end -}}
{{- end -}}

{{/*
Return otlp or none for Instrumentation resource exporters configuration.

'{{ include "instrumentation.resource.exporter" (dict "enabled" .Values...) }}'
*/}}
{{- define "instrumentation.resource.exporter" }}
{{- $enabled := .enabled -}}
{{- if $enabled -}}
{{- "otlp" -}}
{{- else -}}
{{- "none" -}}
{{- end -}}
{{- end -}}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{{- $ctx := . }}
{{ $operatorEnabled := index .Values "opentelemetry-operator" "enabled" }}
{{ $tracesEnabled := .Values.sumologic.traces.enabled }}
{{ $createDefaultInstrumentation := index .Values "opentelemetry-operator" "createDefaultInstrumentation" }}
Expand All @@ -10,6 +11,9 @@ metadata:
labels:
app: {{ template "sumologic.labels.app.opentelemetry.operator.instrumentation.job" . }}
{{- include "sumologic.labels.common" . | nindent 4 }}
annotations:
helm.sh/hook: "post-install, post-upgrade"
helm.sh/hook-delete-policy: "before-hook-creation, hook-succeeded"
spec:
template:
spec:
Expand All @@ -24,7 +28,7 @@ spec:
command: ["/bin/bash", "-c"]
args:
- |
max_wait=60
max_wait=180
sleep_interval=5
counter=0
ready=false
Expand All @@ -37,23 +41,24 @@ spec:
ready=true
break
else
echo "Waiting for opentelemetry-operator-controller-manager..."
echo "Waiting for {{ .Release.Name }}-opentelemetry-operator"
sleep $sleep_interval
counter=$(($counter + $sleep_interval))
fi

if [[ "$counter" -gt "$max_wait" ]]
then
echo "Couldn't reach opentelemetry-operator-controller-manager"
echo "Couldn't reach {{ .Release.Name }}-opentelemetry-operator"
echo "Instrumentation resources not applied!"
break
exit 1
fi
done

if [[ $ready == true ]]
then
echo "Applying Instrumentation resources"
kubectl apply -f /tmp/instrumentation-cr.yaml
exit $?
fi
volumes:
- name: instrumentation-cr-configmap
Expand Down
29 changes: 29 additions & 0 deletions deploy/helm/sumologic/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4506,6 +4506,28 @@ opentelemetry-operator:
createDefaultInstrumentation: false
instrumentationNamespaces: ""

instrumentation:
dotnet:
traces:
enabled: true
metrics:
enabled: true
java:
traces:
enabled: true
metrics:
enabled: true
python:
traces:
enabled: true
metrics:
enabled: true
## Current instrumentation doesn't support customization
## for nodejs. Traces are always enabled.
##nodejs:
## traces:
## enabled: true

## Specific for OpenTelemetry Operator chart values
admissionWebhooks:
failurePolicy: Fail
Expand All @@ -4517,6 +4539,13 @@ opentelemetry-operator:

manager:
env:
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 150m
memory: 256Mi
swiatekm marked this conversation as resolved.
Show resolved Hide resolved

pvcCleaner:
metrics:
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ The following table displays the currently used software versions for our Helm c
| Name | Version |
| ----------------------------------------- | ------- |
| OpenTelemetry Collector | 0.69.0 |
| OpenTelemetry Operator | 0.18.3 |
| OpenTelemetry Operator | 0.24.0 |
| kube-prometheus-stack/Prometheus Operator | 40.5.0 |
| Falco | 2.4.2 |
| Telegraf Operator | 1.3.10 |
Expand Down
Loading