En agent, der arbejder klokken tre om natten uden at nogen kigger med, er præcis så meget værd som din evne til bagefter at stykke sammen, hvad den lavede. „Brændte tokens af for 38 $ i nat” er en dårlig morgen. „Brændte 38 $ af, fordi et søgeværktøj returnerede en tom side, og planlæggeren prøvede igen 400 gange” er en fejl, du retter før frokost. Den anden sætning kræver traces.
Langfuse gemmer hvert LLM-kald med prompt, værktøjstrin, antal tokens og latenstid som et træ, du kan klikke dig igennem. Kører du det selv, bliver de prompts og svar — der tit indeholder kundedata, API-output og en enkelt forvildet hemmelighed — på en server, du styrer, og ikke i en andens panel.
Hvad det koster at holde kørende
Langfuse v4 er ikke en lille binær fil, men seks containere: webappen, en baggrundsworker, Postgres, ClickHouse til hændelser, Redis og MinIO til filer. Vi installerede det på en testserver og målte omkring 3,5 GB brugt RAM med et tomt projekt. Det, der vokser, er ClickHouse, for dér ender hvert span, du sender.
| Belastning | Plan |
|---|---|
| En håndfuld agenter, ugers traces | Medium-IP: 6 vCPU, 6 GB, 45 GB ($20/md.) |
| En flåde af agenter, måneders historik | Pro-planer, fra 32 GB RAM — på forespørgsel |
På mindre planer kan det installeres, men så kæmper det, så snart ClickHouse og workeren vil have hukommelse på samme tid. Jeg ville ikke gå under 6 GB.
Hvor bor agenterne? Kører de på andre maskiner, så vælg en plan med egen IPv4: de skal bruge et HTTPS-endpoint, og på en NAT-plan er den udgående adresse ikke din egen, og udefra kan man kun nå SSH-porten. Kører agenterne på selve serveren, behøver Langfuse aldrig at vende ud mod internettet: til en test rækker Medium med NAT ($12/md.). Der er to placeringer, Tyskland og Finland; tilgængeligheden ses ved bestilling. Vælg den, der ligger tættest på agenterne, ikke på dig. Serverne betales med krypto, uden KYC.
Installation
På en frisk Ubuntu 24.04- eller Debian 12-server, som root. Først Docker:
curl -fsSL https://get.docker.com | sh
Derefter Langfuse, med rigtige hemmeligheder i stedet for compose-filens standardværdier:
git clone --depth 1 https://github.com/langfuse/langfuse.git
cd langfuse
PG=$(openssl rand -hex 16); MINIO=$(openssl rand -hex 16)
cat > .env <<EOF
NEXTAUTH_URL=https://langfuse.example.com
NEXTAUTH_SECRET=$(openssl rand -hex 32)
SALT=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
POSTGRES_PASSWORD=$PG
DATABASE_URL=postgresql://postgres:$PG@postgres:5432/postgres
CLICKHOUSE_PASSWORD=$(openssl rand -hex 16)
MINIO_ROOT_PASSWORD=$MINIO
LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY=$MINIO
LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY=$MINIO
LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY=$MINIO
REDIS_AUTH=$(openssl rand -hex 16)
TELEMETRY_ENABLED=false
EOF
chmod 600 .env
To af adgangskoderne hænger sammen: Postgres-koden står også inde i DATABASE_URL, og MinIO-koden skal passe med de tre linjer S3_..._SECRET_ACCESS_KEY. Derfor kommer hver af dem fra én variabel.
Nu fælden. Compose-filen udgiver webappen på port 3000 og MinIO på 9090 på alle interfaces, og porte, som Docker udgiver, går uden om ufw. Bind begge til localhost, så reverse proxyen er den eneste vej ind:
sed -i 's/- 3000:3000/- 127.0.0.1:3000:3000/; s/- 9090:9000/- 127.0.0.1:9090:9000/' docker-compose.yml
docker compose up -d
curl -s http://127.0.0.1:3000/api/public/health
Den sidste kommando skal udskrive {"status":"OK", ...}. Første opstart kører databasemigreringerne; i vores test gik health checket igennem omkring 15 sekunder efter, at containerne var kommet op.
HTTPS foran
Peg langfuse.example.com på serverens IP og derefter:
apt install -y caddy
cat > /etc/caddy/Caddyfile <<'EOF'
langfuse.example.com {
reverse_proxy 127.0.0.1:3000
}
EOF
systemctl reload caddy
ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp && ufw enable
Caddy henter selv certifikatet. Åbn sitet, opret din konto (den bliver den første organisation), tilføj et projekt, og kopiér dets offentlige og hemmelige nøgle.
Luk så døren efter dig. Langfuse forstår AUTH_DISABLE_SIGNUP, men standardfilen for compose sender den ikke videre til webcontaineren, så der skal én linje mere ind under langfuse-web:
sed -i 's|^ NEXTAUTH_SECRET: \(.*\)$| NEXTAUTH_SECRET: \1\n AUTH_DISABLE_SIGNUP: ${AUTH_DISABLE_SIGNUP:-false}|' docker-compose.yml
echo "AUTH_DISABLE_SIGNUP=true" >> .env
docker compose up -d
Fra nu af får et tilmeldingsforsøg «Sign up is disabled». Kolleger tilføjer du inde fra projektet.
Send traces fra en agent
Python-SDK'et pakker dine funktioner ind, og indlejrede kald bliver til indlejrede spans:
python3 -m venv venv && . venv/bin/activate
pip install langfuse
export LANGFUSE_PUBLIC_KEY=pk-lf-...
export LANGFUSE_SECRET_KEY=sk-lf-...
export LANGFUSE_BASE_URL=https://langfuse.example.com
from langfuse import get_client, observe
langfuse = get_client() # læser LANGFUSE_*-variablerne
@observe(name="fetch-prices")
def fetch_prices(pair: str) -> dict:
return {"pair": pair, "bid": 64210.5}
@observe(name="nightly-agent-run")
def run() -> str:
data = fetch_prices("BTC/USDT")
return f"done: {data['pair']}"
print(run())
langfuse.flush() # korte scripts slutter, før afsendelsen i baggrunden er færdig
Spring ikke LANGFUSE_BASE_URL over. Uden den sender SDK'et stille og roligt alt til Langfuses sky, dine nøgler findes ikke der, og du sidder og kigger på et tomt panel.
Sådan tjekker du fra terminalen, at dine spans er kommet frem:
curl -s -u "$LANGFUSE_PUBLIC_KEY:$LANGFUSE_SECRET_KEY" \
"$LANGFUSE_BASE_URL/api/public/v2/observations?limit=5"
I v4 svarer det gamle endpoint /api/public/traces med en fejl om events-only-tilstanden. Det er forventet og ikke en ødelagt installation. I en rigtig agent pakker du LLM-kaldet og hvert værktøj ind på samme måde; desuden har Langfuse integrationer til de udbredte LLM-SDK'er og agent-frameworks, så tit er det nok at skifte en import i stedet for at strø dekoratorer ud over det hele.
Hold øje med
- Disk. ClickHouse og MinIO gemmer alt, hvad du sender.
docker system df -vviser, hvor pladsen er blevet af. Sporer du lange prompts og svar, er Medium-IP's 45 GB fyldt på uger, ikke år. Tjek én gang om måneden; når der bliver trangt, fås en Pro-plan med 400 GB eller mere på forespørgsel. - Opdateringer. Compose-filen låser hovedversionen (
:4).docker compose pull && docker compose up -dhenter rettelser inden for den. Læs changeloggen, før du skifter hovedversion: det var netop i v4, at traces-endpointet forsvandt. - Backup. Det vigtige ligger i Docker-volumener: Postgres holder brugere, projekter og nøgler, ClickHouse og MinIO selve sporene. Kopiér dem væk fra serveren efter en fast plan.
Er det $20 om måneden værd? Hvis dine agenter bruger mere end det på tokens — og det gør de fleste agenter uden opsyn — så tjener det sig hjem at vide, hvor de blev af, første gang en løkke løber løbsk. En lille agent, der kører én gang om dagen, har ikke brug for noget af det her: en logfil og en tokentæller er nok.
Relateret
- VPS til AI-agenter: hvor selve agenterne kører
- VPS til multiagent-systemer: dimensionér en hel flåde
- VPS til en LiteLLM-proxy: én gateway til alle modelnøgler, med forbrugsgrænser
- Pro-planer på forespørgsel: 32 til 80 GB RAM til en flåde af agenter
- Sådan sætter du en ufw-firewall op
Kommentarer
Ingen kommentarer endnu. Vær den første.