diff --git a/examples/fastapi/Dockerfile b/examples/fastapi/Dockerfile new file mode 100644 index 00000000..7172587d --- /dev/null +++ b/examples/fastapi/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.12-slim + +WORKDIR /app + +COPY . /app + +RUN pip install fastapi uvicorn elastic-opentelemetry + +# Install all the instrumentations available for the installed packages +RUN edot-bootstrap -a install + +EXPOSE 5000 + +# Set some resource attributes to make our service recognizable +ENV OTEL_RESOURCE_ATTRIBUTES="service.name=FastAPIService,service.version=0.0.1,deployment.environment=development" + +CMD ["opentelemetry-instrument", "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "5000"] diff --git a/examples/fastapi/README.md b/examples/fastapi/README.md new file mode 100644 index 00000000..8d07d00a --- /dev/null +++ b/examples/fastapi/README.md @@ -0,0 +1,21 @@ +# FastAPI autoinstrumented application + +This is a barebone FastAPI app used for demonstrating autoinstrumentation with EDOT. + +You can build the application image it with: + +``` +docker build --load -t edot-fastapi:latest . +``` + +You can run the application with: + +``` +export OTEL_EXPORTER_OTLP_ENDPOINT=https://my-deployment.apm.us-west1.gcp.cloud.es.io +export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer P....l" +docker run -e OTEL_EXPORTER_OTLP_ENDPOINT="$OTEL_EXPORTER_OTLP_ENDPOINT" \ + -e OTEL_EXPORTER_OTLP_HEADERS="$OTEL_EXPORTER_OTLP_HEADERS" \ + -p 5000:5000 -it --rm edot-fastapi:latest +``` + +You can access the application from [http://127.0.0.1:5000](http://127.0.0.1:5000). diff --git a/examples/fastapi/app.py b/examples/fastapi/app.py new file mode 100644 index 00000000..59080656 --- /dev/null +++ b/examples/fastapi/app.py @@ -0,0 +1,24 @@ +# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +# or more contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright +# ownership. Elasticsearch B.V. licenses this file to you under +# the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/") +async def root(): + return {"message": "Hello, world!"}