Getting started¶
This page takes you from the AWS Marketplace listing to a signed-in Langfuse UI with your first trace: subscribe, launch the instance, connect, open the UI and send traces.
You need: an AWS account with permission to subscribe to AWS Marketplace products, launch EC2 instances and use AWS Systems Manager, and, on your workstation, the AWS CLI with the Session Manager plugin.
1. Subscribe¶
Open the Langfuse LLM Observability listing in AWS Marketplace, choose View purchase options, review the terms and subscribe. When the subscription is confirmed, choose Launch your software.
2. Launch the instance¶
On the EC2 launch page:
- Keep the instance type at t3.large, or choose one with at least 8 GiB of memory.
- Under Configure storage, use an encrypted gp3 root volume of at least 40 GiB.
- Under Network settings, allow no inbound traffic. Every service listens only on the instance itself, and Session Manager does not need an open port. If you also want SSH, allow port 22 from your administrative address range only.
- Under Advanced details, choose an IAM instance profile that includes
the AWS managed policy
AmazonSSMManagedInstanceCore, and require IMDSv2. - Choose Launch instance.
Session Manager needs outbound HTTPS
The instance reaches Systems Manager over outbound HTTPS. Keep the default outbound rule, or provide VPC endpoints for Systems Manager.
3. Connect and wait for first boot¶
In the EC2 console, select the instance, choose Connect, then Session Manager, then Connect. Or, from your workstation:
Switch to the ubuntu user and wait for first boot to finish:
Both services report active once the containers are started. The first
start runs database migrations and can take several minutes before the UI
answers.
4. Run the walkthrough¶
It waits for the stack, checks that the UI listens on loopback and reports
healthy, confirms that ubuntu cannot read the secret files, then runs the
image's self-test, which sends a trace over OpenTelemetry and reads it back.
It ends with SUSHI_CUSTOMER_DEMO_PASSED.
5. Get the admin password¶
The password is stored only on the instance, readable by root:
The sign-in email is admin@localhost.local. Keep the password out of
tickets, chat and screen recordings.
6. Open the UI¶
On your workstation, start a port-forwarding session. Replace
<instance-id> and use the instance's region:
aws ssm start-session \
--target <instance-id> \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["3000"],"localPortNumber":["3000"]}'
Leave it running and open http://127.0.0.1:3000 in your browser. Sign in as
admin@localhost.local with the password from step 5. The project
Sushi Pilot is ready, and the walkthrough's test trace appears under
Tracing.
Send traces¶
You need the project's public and secret keys. Use the keys created on first boot, or create new ones in the project settings in the UI:
Then send traces in one of these ways:
- A Langfuse SDK. Use Python SDK 4.7.0 or later, or JS/TS SDK 5.4.0 or
later, with the host
http://127.0.0.1:3000(through the tunnel, or from an application on the instance) and the project keys. - Any OpenTelemetry exporter. Send OTLP/HTTP to
http://127.0.0.1:3000/api/public/otel/v1/traces, with HTTP Basic authentication (public key as user name, secret key as password) and the headerx-langfuse-ingestion-version: 4. Set the span attributeslangfuse.observation.inputandlangfuse.observation.outputto record input and output.
Older SDKs cannot create traces
Python SDK v2 and older, and JS/TS SDK v3 and older, use the legacy batch
endpoint /api/public/ingestion. On this image it answers HTTP 207 but
rejects every event except scores, so no traces are stored. Upgrade the
SDK.
Read traces through the API¶
Read observations with the Observations API v2. Bound the request by start
time, and ask for the io field group to include input and output:
curl -sS -u '<public-key>:<secret-key>' \
'http://127.0.0.1:3000/api/public/v2/observations?fromStartTime=<start>&toStartTime=<end>&fields=core,basic,io'
Use ISO 8601 UTC times such as 2026-01-01T00:00:00Z. Add traceId=<id> to
select one trace; a trace is its root observation plus its children, so group
rows by traceId. The legacy GET /api/public/traces routes return HTTP 404
on this image.
Next, read Configuration.
Last updated October 13, 2026 · Suggest an improvement