Skip to content

Commit b532d78

Browse files
authored
Merge branch 'main' into dependabot/pip/psutil-6.1.0
2 parents 69240c0 + 7aead9c commit b532d78

File tree

12 files changed

+157
-109
lines changed

12 files changed

+157
-109
lines changed

.github/workflows/release.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
- run: python -m build
2626

2727
- name: generate build provenance
28-
uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
28+
uses: actions/attest-build-provenance@ef244123eb79f2f7a7e75d99086184180e6d0018 # v1.4.4
2929
with:
3030
subject-path: "${{ github.workspace }}/dist/*"
3131

@@ -52,7 +52,7 @@ jobs:
5252

5353
- name: Upload pypi.org
5454
if: startsWith(github.ref, 'refs/tags')
55-
uses: pypa/gh-action-pypi-publish@f7600683efdcb7656dec5b29656edb7bc586e597 # v1.10.3
55+
uses: pypa/gh-action-pypi-publish@15c56dba361d8335944d31a2ecd17d700fc7bcbc # v1.12.2
5656
with:
5757
repository-url: https://upload.pypi.org/legacy/
5858

@@ -112,7 +112,7 @@ jobs:
112112
DISTRO_DIR=./dist/
113113
114114
- name: generate build provenance (containers)
115-
uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
115+
uses: actions/attest-build-provenance@ef244123eb79f2f7a7e75d99086184180e6d0018 # v1.4.4
116116
with:
117117
subject-name: "${{ env.DOCKER_IMAGE_NAME }}"
118118
subject-digest: ${{ steps.docker-push.outputs.digest }}

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ opentelemetry-instrument gunicorn main:app
6969

7070
## Configuration
7171

72-
The distribution supports all the configuration variables from OpenTelemetry Python project version 1.27.0.
72+
The distribution supports all the configuration variables from OpenTelemetry Python project version 1.28.1.
7373

7474
### Default configuration variables
7575

@@ -79,6 +79,7 @@ This distribution sets the following defaults:
7979
- `OTEL_METRICS_EXPORTER`: `otlp`
8080
- `OTEL_EXPORTER_OTLP_PROTOCOL`: `grpc`
8181
- `OTEL_EXPERIMENTAL_RESOURCE_DETECTORS`: `process_runtime,os,otel,telemetry_distro`
82+
- `OTEL_METRICS_EXEMPLAR_FILTER`: `always_off`
8283

8384
### Distribution specific configuration variables
8485

dev-requirements.txt

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ googleapis-common-protos==1.65.0
2424
# via
2525
# opentelemetry-exporter-otlp-proto-grpc
2626
# opentelemetry-exporter-otlp-proto-http
27-
grpcio==1.67.0
27+
grpcio==1.67.1
2828
# via
2929
# opentelemetry-exporter-otlp-proto-grpc
3030
# oteltest
@@ -36,7 +36,7 @@ iniconfig==2.0.0
3636
# via pytest
3737
leb128==1.0.8
3838
# via elastic-opentelemetry (pyproject.toml)
39-
opentelemetry-api==1.27.0
39+
opentelemetry-api==1.28.1
4040
# via
4141
# elastic-opentelemetry (pyproject.toml)
4242
# opentelemetry-exporter-otlp-proto-grpc
@@ -46,48 +46,50 @@ opentelemetry-api==1.27.0
4646
# opentelemetry-sdk
4747
# opentelemetry-semantic-conventions
4848
# oteltest
49-
opentelemetry-exporter-otlp==1.27.0
49+
opentelemetry-exporter-otlp==1.28.1
5050
# via elastic-opentelemetry (pyproject.toml)
51-
opentelemetry-exporter-otlp-proto-common==1.27.0
51+
opentelemetry-exporter-otlp-proto-common==1.28.1
5252
# via
5353
# opentelemetry-exporter-otlp-proto-grpc
5454
# opentelemetry-exporter-otlp-proto-http
55-
opentelemetry-exporter-otlp-proto-grpc==1.27.0
55+
opentelemetry-exporter-otlp-proto-grpc==1.28.1
5656
# via opentelemetry-exporter-otlp
57-
opentelemetry-exporter-otlp-proto-http==1.27.0
57+
opentelemetry-exporter-otlp-proto-http==1.28.1
5858
# via opentelemetry-exporter-otlp
59-
opentelemetry-instrumentation==0.48b0
59+
opentelemetry-instrumentation==0.49b1
6060
# via
6161
# elastic-opentelemetry (pyproject.toml)
6262
# opentelemetry-instrumentation-system-metrics
63-
opentelemetry-instrumentation-system-metrics==0.48b0
63+
opentelemetry-instrumentation-system-metrics==0.49b1
6464
# via elastic-opentelemetry (pyproject.toml)
65-
opentelemetry-proto==1.27.0
65+
opentelemetry-proto==1.28.1
6666
# via
6767
# opentelemetry-exporter-otlp-proto-common
6868
# opentelemetry-exporter-otlp-proto-grpc
6969
# opentelemetry-exporter-otlp-proto-http
7070
# oteltest
71-
opentelemetry-sdk==1.27.0
71+
opentelemetry-sdk==1.28.1
7272
# via
7373
# elastic-opentelemetry (pyproject.toml)
7474
# opentelemetry-exporter-otlp-proto-grpc
7575
# opentelemetry-exporter-otlp-proto-http
76-
opentelemetry-semantic-conventions==0.48b0
76+
opentelemetry-semantic-conventions==0.49b1
7777
# via
7878
# elastic-opentelemetry (pyproject.toml)
79+
# opentelemetry-instrumentation
7980
# opentelemetry-sdk
80-
oteltest==0.15.0
81+
oteltest==0.24.0
8182
# via elastic-opentelemetry (pyproject.toml)
82-
packaging==24.1
83+
packaging==24.2
8384
# via
8485
# build
86+
# opentelemetry-instrumentation
8587
# pytest
8688
pip-tools==7.4.1
8789
# via elastic-opentelemetry (pyproject.toml)
8890
pluggy==1.5.0
8991
# via pytest
90-
protobuf==4.25.3
92+
protobuf==5.28.3
9193
# via
9294
# googleapis-common-protos
9395
# opentelemetry-proto

examples/flask/Dockerfile

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
FROM python:3.12-slim
2+
3+
WORKDIR /app
4+
5+
COPY . /app
6+
7+
RUN pip install flask elastic-opentelemetry
8+
9+
# Install all the instrumentations available for the installed packages
10+
RUN opentelemetry-bootstrap -a install
11+
12+
# default flask run port
13+
EXPOSE 5000
14+
15+
# Set some resource attributes to make our service recognizable
16+
ENV OTEL_RESOURCE_ATTRIBUTES="service.name=FlaskService,service.version=0.0.1,deployment.environment=development"
17+
18+
CMD ["opentelemetry-instrument", "flask", "run"]

examples/flask/README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Flask autoinstrumented application
2+
3+
This is a barebone Flask app used for demonstrating autoinstrumentation with EDOT.
4+
5+
You can build the application image it with:
6+
7+
```
8+
docker build --load -t edot-flask:latest .
9+
```
10+
11+
You can run the application with:
12+
13+
```
14+
export OTEL_EXPORTER_OTLP_ENDPOINT=https://my-deployment.apm.us-west1.gcp.cloud.es.io
15+
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer P....l"
16+
docker run -e OTEL_EXPORTER_OTLP_ENDPOINT="$OTEL_EXPORTER_OTLP_ENDPOINT" \
17+
-e OTEL_EXPORTER_OTLP_HEADERS="$OTEL_EXPORTER_OTLP_HEADERS" \
18+
-p 5000:5000 -it --rm edot-flask:latest
19+
```
20+
21+
You can access the application from [http://127.0.0.1:5000](http://127.0.0.1:5000).

examples/flask/app.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
2+
# or more contributor license agreements. See the NOTICE file distributed with
3+
# this work for additional information regarding copyright
4+
# ownership. Elasticsearch B.V. licenses this file to you under
5+
# the Apache License, Version 2.0 (the "License"); you may
6+
# not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
17+
from flask import Flask, jsonify
18+
19+
app = Flask(__name__)
20+
21+
22+
@app.route("/", methods=["GET"])
23+
def home():
24+
return jsonify(message="Hello, world!")

operator/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ ADD operator/requirements.txt .
2828

2929
RUN mkdir workspace
3030

31-
RUN apk add gcc python3-dev musl-dev linux-headers
31+
RUN apk add gcc g++ python3-dev musl-dev linux-headers
3232

3333
RUN pip install --no-cache-dir --target workspace /opt/distro/*.whl -r requirements.txt
3434

operator/requirements.txt

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,56 @@
1-
opentelemetry-exporter-prometheus==0.48b0
1+
opentelemetry-exporter-prometheus==0.49b1
22

33
opentelemetry-propagator-aws-xray==1.0.2
4-
opentelemetry-propagator-b3==1.27.0
5-
opentelemetry-propagator-jaeger==1.27.0
6-
opentelemetry-propagator-ot-trace==0.48b0
4+
opentelemetry-propagator-b3==1.28.1
5+
opentelemetry-propagator-jaeger==1.28.1
6+
opentelemetry-propagator-ot-trace==0.49b1
77

8-
opentelemetry-instrumentation-aio-pika==0.48b0
9-
opentelemetry-instrumentation-aiohttp-client==0.48b0
10-
opentelemetry-instrumentation-aiohttp-server==0.48b0
11-
opentelemetry-instrumentation-aiopg==0.48b0
12-
opentelemetry-instrumentation-asgi==0.48b0
13-
opentelemetry-instrumentation-asyncio==0.48b0
14-
opentelemetry-instrumentation-asyncpg==0.48b0
15-
opentelemetry-instrumentation-aws-lambda==0.48b0
16-
opentelemetry-instrumentation-boto==0.48b0
17-
opentelemetry-instrumentation-boto3sqs==0.48b0
18-
opentelemetry-instrumentation-botocore==0.48b0
19-
opentelemetry-instrumentation-cassandra==0.48b0
20-
opentelemetry-instrumentation-celery==0.48b0
21-
opentelemetry-instrumentation-confluent-kafka==0.48b0
22-
opentelemetry-instrumentation-dbapi==0.48b0
23-
opentelemetry-instrumentation-django==0.48b0
24-
opentelemetry-instrumentation-elasticsearch==0.48b0
25-
opentelemetry-instrumentation-falcon==0.48b0
26-
opentelemetry-instrumentation-fastapi==0.48b0
27-
opentelemetry-instrumentation-flask==0.48b0
28-
opentelemetry-instrumentation-grpc==0.48b0
29-
opentelemetry-instrumentation-httpx==0.48b0
30-
opentelemetry-instrumentation-jinja2==0.48b0
31-
opentelemetry-instrumentation-kafka-python==0.48b0
32-
opentelemetry-instrumentation-logging==0.48b0
33-
opentelemetry-instrumentation-mysql==0.48b0
34-
opentelemetry-instrumentation-mysqlclient==0.48b0
35-
opentelemetry-instrumentation-pika==0.48b0
36-
opentelemetry-instrumentation-psycopg==0.48b0
37-
opentelemetry-instrumentation-psycopg2==0.48b0
38-
opentelemetry-instrumentation-pymemcache==0.48b0
39-
opentelemetry-instrumentation-pymongo==0.48b0
40-
opentelemetry-instrumentation-pymysql==0.48b0
41-
opentelemetry-instrumentation-pyramid==0.48b0
42-
opentelemetry-instrumentation-redis==0.48b0
43-
opentelemetry-instrumentation-remoulade==0.48b0
44-
opentelemetry-instrumentation-requests==0.48b0
45-
opentelemetry-instrumentation-sqlalchemy==0.48b0
46-
opentelemetry-instrumentation-sqlite3==0.48b0
47-
opentelemetry-instrumentation-starlette==0.48b0
48-
opentelemetry-instrumentation-system-metrics==0.48b0
49-
opentelemetry-instrumentation-threading==0.48b0
50-
opentelemetry-instrumentation-tornado==0.48b0
51-
opentelemetry-instrumentation-tortoiseorm==0.48b0
52-
opentelemetry-instrumentation-urllib==0.48b0
53-
opentelemetry-instrumentation-urllib3==0.48b0
54-
opentelemetry-instrumentation-wsgi==0.48b0
8+
opentelemetry-instrumentation-aio-pika==0.49b1
9+
opentelemetry-instrumentation-aiohttp-client==0.49b1
10+
opentelemetry-instrumentation-aiohttp-server==0.49b1
11+
opentelemetry-instrumentation-aiokafka==0.49b1
12+
opentelemetry-instrumentation-aiopg==0.49b1
13+
opentelemetry-instrumentation-asgi==0.49b1
14+
opentelemetry-instrumentation-asyncio==0.49b1
15+
opentelemetry-instrumentation-asyncpg==0.49b1
16+
opentelemetry-instrumentation-boto==0.49b1
17+
opentelemetry-instrumentation-boto3sqs==0.49b1
18+
opentelemetry-instrumentation-botocore==0.49b1
19+
opentelemetry-instrumentation-cassandra==0.49b1
20+
opentelemetry-instrumentation-celery==0.49b1
21+
opentelemetry-instrumentation-confluent-kafka==0.49b1
22+
opentelemetry-instrumentation-dbapi==0.49b1
23+
opentelemetry-instrumentation-django==0.49b1
24+
opentelemetry-instrumentation-elasticsearch==0.49b1
25+
opentelemetry-instrumentation-falcon==0.49b1
26+
opentelemetry-instrumentation-fastapi==0.49b1
27+
opentelemetry-instrumentation-flask==0.49b1
28+
opentelemetry-instrumentation-grpc==0.49b1
29+
opentelemetry-instrumentation-httpx==0.49b1
30+
opentelemetry-instrumentation-jinja2==0.49b1
31+
opentelemetry-instrumentation-kafka-python==0.49b1
32+
opentelemetry-instrumentation-logging==0.49b1
33+
opentelemetry-instrumentation-mysql==0.49b1
34+
opentelemetry-instrumentation-mysqlclient==0.49b1
35+
opentelemetry-instrumentation-pika==0.49b1
36+
opentelemetry-instrumentation-psycopg==0.49b1
37+
opentelemetry-instrumentation-psycopg2==0.49b1
38+
opentelemetry-instrumentation-pymemcache==0.49b1
39+
opentelemetry-instrumentation-pymongo==0.49b1
40+
opentelemetry-instrumentation-pymysql==0.49b1
41+
opentelemetry-instrumentation-pyramid==0.49b1
42+
opentelemetry-instrumentation-redis==0.49b1
43+
opentelemetry-instrumentation-remoulade==0.49b1
44+
opentelemetry-instrumentation-requests==0.49b1
45+
opentelemetry-instrumentation-sqlalchemy==0.49b1
46+
opentelemetry-instrumentation-sqlite3==0.49b1
47+
opentelemetry-instrumentation-starlette==0.49b1
48+
opentelemetry-instrumentation-system-metrics==0.49b1
49+
opentelemetry-instrumentation-threading==0.49b1
50+
opentelemetry-instrumentation-tornado==0.49b1
51+
opentelemetry-instrumentation-tortoiseorm==0.49b1
52+
opentelemetry-instrumentation-urllib==0.49b1
53+
opentelemetry-instrumentation-urllib3==0.49b1
54+
opentelemetry-instrumentation-wsgi==0.49b1
5555

5656
elastic-opentelemetry-instrumentation-openai==0.3.0

pyproject.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@ classifiers = [
2727
]
2828

2929
dependencies = [
30-
"opentelemetry-api == 1.27.0",
31-
"opentelemetry-exporter-otlp == 1.27.0",
32-
"opentelemetry-instrumentation == 0.48b0",
33-
"opentelemetry-instrumentation-system-metrics == 0.48b0",
34-
"opentelemetry-semantic-conventions == 0.48b0",
35-
"opentelemetry-sdk == 1.27.0",
30+
"opentelemetry-api == 1.28.1",
31+
"opentelemetry-exporter-otlp == 1.28.1",
32+
"opentelemetry-instrumentation == 0.49b1",
33+
"opentelemetry-instrumentation-system-metrics == 0.49b1",
34+
"opentelemetry-semantic-conventions == 0.49b1",
35+
"opentelemetry-sdk == 1.28.1",
3636
]
3737

3838
[project.optional-dependencies]
39-
dev = ["pytest", "pip-tools", "oteltest==0.15", "leb128"]
39+
dev = ["pytest", "pip-tools", "oteltest==0.24.0", "leb128"]
4040

4141
[project.entry-points.opentelemetry_configurator]
4242
configurator = "elasticotel.distro:ElasticOpenTelemetryConfigurator"

src/elasticotel/distro/__init__.py

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@
3030
)
3131
from opentelemetry.sdk._configuration import _OTelSDKConfigurator
3232
from opentelemetry.sdk.environment_variables import (
33+
OTEL_METRICS_EXEMPLAR_FILTER,
3334
OTEL_EXPERIMENTAL_RESOURCE_DETECTORS,
3435
OTEL_EXPORTER_OTLP_PROTOCOL,
3536
)
36-
from pkg_resources import EntryPoint
37+
from opentelemetry.util._importlib_metadata import EntryPoint
3738

3839
from elasticotel.distro.environment_variables import ELASTIC_OTEL_SYSTEM_METRICS_ENABLED
3940

@@ -48,17 +49,9 @@ class ElasticOpenTelemetryConfigurator(_OTelSDKConfigurator):
4849
class ElasticOpenTelemetryDistro(BaseDistro):
4950
def load_instrumentor(self, entry_point: EntryPoint, **kwargs):
5051
# When running in the k8s operator loading of an instrumentor may fail because the environment
51-
# in which python extensions are built does not match the one from the running container.
52-
# There are at least two cases:
53-
# - different python version
54-
# - different kind of wheels, e.g. manylinux vs musllinux
55-
# To avoid the distro loading to fail catch ImportError here, that is the kind of exception we see
56-
# when loading shared objects or cython extensions fails.
57-
try:
58-
instrumentor_class: BaseInstrumentor = entry_point.load()
59-
except ImportError:
60-
logger.exception("Instrumenting of %s failed", entry_point.name)
61-
return
52+
# in which python extensions are built does not match the one from the running container but
53+
# ImportErrors raised here are handled by the autoinstrumentation code
54+
instrumentor_class: BaseInstrumentor = entry_point.load()
6255

6356
instrumentor_kwargs = {}
6457
if instrumentor_class == SystemMetricsInstrumentor:
@@ -76,3 +69,5 @@ def _configure(self, **kwargs):
7669
os.environ.setdefault(OTEL_LOGS_EXPORTER, "otlp")
7770
os.environ.setdefault(OTEL_EXPORTER_OTLP_PROTOCOL, "grpc")
7871
os.environ.setdefault(OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, "process_runtime,os,otel,telemetry_distro")
72+
# disable exemplars by default for now
73+
os.environ.setdefault(OTEL_METRICS_EXEMPLAR_FILTER, "always_off")

0 commit comments

Comments
 (0)