Skip to content

Commit 9d18d8f

Browse files
refactor(examples): use PostHogSpanProcessor instead of raw OTLP exporter
Adopt the new PostHogSpanProcessor API from #494 across all OTEL examples. Drops the manual SimpleSpanProcessor + OTLPSpanExporter wiring in favor of the higher-level processor that handles batching and AI span filtering. Each example now depends on posthog[otel] via a uv path source so it resolves against the workspace checkout while #494 is unreleased.
1 parent 9367d2b commit 9d18d8f

98 files changed

Lines changed: 3465 additions & 451 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

examples/example-ai-anthropic/chat.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
import urllib.request
66
from opentelemetry import trace
77
from opentelemetry.sdk.trace import TracerProvider
8-
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
98
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
10-
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
9+
from posthog.ai.otel import PostHogSpanProcessor
1110
from opentelemetry.instrumentation.anthropic import AnthropicInstrumentor
1211

1312
resource = Resource(
@@ -18,12 +17,13 @@
1817
"conversation_id": "abc-123",
1918
}
2019
)
21-
exporter = OTLPSpanExporter(
22-
endpoint=f"{os.environ.get('POSTHOG_HOST', 'https://us.i.posthog.com')}/i/v0/ai/otel",
23-
headers={"Authorization": f"Bearer {os.environ['POSTHOG_API_KEY']}"},
24-
)
2520
provider = TracerProvider(resource=resource)
26-
provider.add_span_processor(SimpleSpanProcessor(exporter))
21+
provider.add_span_processor(
22+
PostHogSpanProcessor(
23+
api_key=os.environ["POSTHOG_API_KEY"],
24+
host=os.environ.get("POSTHOG_HOST", "https://us.i.posthog.com"),
25+
)
26+
)
2727
trace.set_tracer_provider(provider)
2828

2929
AnthropicInstrumentor().instrument()

examples/example-ai-anthropic/extended_thinking.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
import os
77
from opentelemetry import trace
88
from opentelemetry.sdk.trace import TracerProvider
9-
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
109
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
11-
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
10+
from posthog.ai.otel import PostHogSpanProcessor
1211
from opentelemetry.instrumentation.anthropic import AnthropicInstrumentor
1312

1413
resource = Resource(
@@ -19,12 +18,13 @@
1918
"conversation_id": "abc-123",
2019
}
2120
)
22-
exporter = OTLPSpanExporter(
23-
endpoint=f"{os.environ.get('POSTHOG_HOST', 'https://us.i.posthog.com')}/i/v0/ai/otel",
24-
headers={"Authorization": f"Bearer {os.environ['POSTHOG_API_KEY']}"},
25-
)
2621
provider = TracerProvider(resource=resource)
27-
provider.add_span_processor(SimpleSpanProcessor(exporter))
22+
provider.add_span_processor(
23+
PostHogSpanProcessor(
24+
api_key=os.environ["POSTHOG_API_KEY"],
25+
host=os.environ.get("POSTHOG_HOST", "https://us.i.posthog.com"),
26+
)
27+
)
2828
trace.set_tracer_provider(provider)
2929

3030
AnthropicInstrumentor().instrument()

examples/example-ai-anthropic/pyproject.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,8 @@ dependencies = [
66
"anthropic>=0.80.0",
77
"opentelemetry-instrumentation-anthropic>=0.24.0",
88
"opentelemetry-sdk>=1.30.0",
9-
"opentelemetry-exporter-otlp-proto-http>=1.30.0",
9+
"posthog[otel]>=7.11.0",
1010
]
11+
12+
[tool.uv.sources]
13+
posthog = { path = "../.." }

examples/example-ai-anthropic/streaming.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
import os
44
from opentelemetry import trace
55
from opentelemetry.sdk.trace import TracerProvider
6-
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
76
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
8-
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
7+
from posthog.ai.otel import PostHogSpanProcessor
98
from opentelemetry.instrumentation.anthropic import AnthropicInstrumentor
109

1110
resource = Resource(
@@ -16,12 +15,13 @@
1615
"conversation_id": "abc-123",
1716
}
1817
)
19-
exporter = OTLPSpanExporter(
20-
endpoint=f"{os.environ.get('POSTHOG_HOST', 'https://us.i.posthog.com')}/i/v0/ai/otel",
21-
headers={"Authorization": f"Bearer {os.environ['POSTHOG_API_KEY']}"},
22-
)
2318
provider = TracerProvider(resource=resource)
24-
provider.add_span_processor(SimpleSpanProcessor(exporter))
19+
provider.add_span_processor(
20+
PostHogSpanProcessor(
21+
api_key=os.environ["POSTHOG_API_KEY"],
22+
host=os.environ.get("POSTHOG_HOST", "https://us.i.posthog.com"),
23+
)
24+
)
2525
trace.set_tracer_provider(provider)
2626

2727
AnthropicInstrumentor().instrument()

examples/example-ai-anthropic/uv.lock

Lines changed: 109 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/example-ai-autogen/agent.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
import asyncio
55
from opentelemetry import trace
66
from opentelemetry.sdk.trace import TracerProvider
7-
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
87
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
9-
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
8+
from posthog.ai.otel import PostHogSpanProcessor
109
from opentelemetry.instrumentation.openai_v2 import OpenAIInstrumentor
1110

1211
resource = Resource(
@@ -17,12 +16,13 @@
1716
"conversation_id": "abc-123",
1817
}
1918
)
20-
exporter = OTLPSpanExporter(
21-
endpoint=f"{os.environ.get('POSTHOG_HOST', 'https://us.i.posthog.com')}/i/v0/ai/otel",
22-
headers={"Authorization": f"Bearer {os.environ['POSTHOG_API_KEY']}"},
23-
)
2419
provider = TracerProvider(resource=resource)
25-
provider.add_span_processor(SimpleSpanProcessor(exporter))
20+
provider.add_span_processor(
21+
PostHogSpanProcessor(
22+
api_key=os.environ["POSTHOG_API_KEY"],
23+
host=os.environ.get("POSTHOG_HOST", "https://us.i.posthog.com"),
24+
)
25+
)
2626
trace.set_tracer_provider(provider)
2727

2828
OpenAIInstrumentor().instrument()

examples/example-ai-autogen/pyproject.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,8 @@ dependencies = [
88
"openai>=1.0.0",
99
"opentelemetry-instrumentation-openai-v2>=2.0b0",
1010
"opentelemetry-sdk>=1.30.0",
11-
"opentelemetry-exporter-otlp-proto-http>=1.30.0",
11+
"posthog[otel]>=7.11.0",
1212
]
13+
14+
[tool.uv.sources]
15+
posthog = { path = "../.." }

0 commit comments

Comments
 (0)