Ένας agent που δουλεύει στις τρεις τα ξημερώματα χωρίς κανείς να τον κοιτάζει αξίζει όσο η ικανότητά σας να ανασυνθέσετε μετά τι έκανε. «Έκαψε 38 $ σε tokens μέσα στη νύχτα» είναι ένα άσχημο πρωινό. «Έκαψε 38 $ επειδή ένα εργαλείο αναζήτησης επέστρεψε κενή σελίδα και ο planner ξαναδοκίμασε 400 φορές» είναι ένα bug που διορθώνετε πριν το μεσημεριανό. Για τη δεύτερη πρόταση χρειάζονται traces.
Το Langfuse καταγράφει κάθε κλήση LLM, κάθε prompt, βήμα εργαλείου, αριθμό tokens και καθυστέρηση ως ένα δέντρο που μπορείτε να εξερευνήσετε με κλικ. Όταν το φιλοξενείτε εσείς, αυτά τα prompts και οι απαντήσεις — που συχνά περιέχουν δεδομένα πελατών, έξοδο API και κάποιο ξεχασμένο μυστικό — μένουν σε server που ελέγχετε, όχι στον πίνακα κάποιου άλλου.
Τι κοστίζει να τρέχει
Το Langfuse v4 δεν είναι ένα μικρό εκτελέσιμο αλλά έξι containers: η web εφαρμογή, ένας worker στο παρασκήνιο, το Postgres, το ClickHouse για τα events, το Redis και το MinIO για τα αρχεία. Το εγκαταστήσαμε σε δοκιμαστικό server και μετρήσαμε περίπου 3,5 GB RAM σε χρήση με άδειο project. Αυτό που μεγαλώνει είναι το ClickHouse, γιατί εκεί καταλήγει κάθε span που στέλνετε.
| Φόρτος | Πακέτο |
|---|---|
| Λίγοι agents, traces εβδομάδων | Medium-IP: 6 vCPU, 6 GB, 45 GB ($20/μήνα) |
| Στόλος agents, ιστορικό μηνών | Πακέτα Pro, από 32 GB RAM και πάνω — κατόπιν αιτήματος |
Σε μικρότερα πακέτα εγκαθίσταται, αλλά μετά δυσκολεύεται μόλις το ClickHouse και ο worker ζητήσουν μνήμη ταυτόχρονα. Εγώ δεν θα πήγαινα κάτω από 6 GB.
Πού ζουν οι agents; Αν τρέχουν σε άλλα μηχανήματα, επιλέξτε πακέτο με δική του IPv4: χρειάζονται endpoint HTTPS, και σε πακέτο NAT η εξερχόμενη διεύθυνση δεν είναι δική σας και απ' έξω φτάνει κανείς μόνο στη θύρα SSH. Αν οι agents τρέχουν στον ίδιο server, το Langfuse δεν χρειάζεται ποτέ να βγει στο internet: για δοκιμή αρκεί το Medium με NAT ($12/μήνα). Υπάρχουν δύο τοποθεσίες, Γερμανία και Φινλανδία· η διαθεσιμότητα φαίνεται κατά την παραγγελία. Διαλέξτε αυτή που είναι πιο κοντά στους agents, όχι σε εσάς. Οι servers πληρώνονται με κρυπτονομίσματα, χωρίς KYC.
Εγκατάσταση
Σε φρέσκο server με Ubuntu 24.04 ή Debian 12, ως root. Πρώτα το Docker:
curl -fsSL https://get.docker.com | sh
Μετά το Langfuse, με πραγματικά μυστικά στη θέση των προεπιλογών του αρχείου compose:
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
Δύο από αυτούς τους κωδικούς πάνε σε ζευγάρι: ο κωδικός του Postgres βρίσκεται και μέσα στο DATABASE_URL, ενώ ο κωδικός του MinIO πρέπει να ταιριάζει με τις τρεις γραμμές S3_..._SECRET_ACCESS_KEY. Γι' αυτό ο καθένας προέρχεται από μία μόνο μεταβλητή.
Τώρα η παγίδα. Το αρχείο compose δημοσιεύει την web εφαρμογή στη θύρα 3000 και το MinIO στη 9090 σε όλα τα interfaces, και οι θύρες που δημοσιεύει το Docker παρακάμπτουν το ufw. Δέστε και τις δύο στο localhost, ώστε η μόνη είσοδος να είναι ο reverse proxy:
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
Η τελευταία εντολή πρέπει να τυπώσει {"status":"OK", ...}. Η πρώτη εκκίνηση τρέχει τα migrations της βάσης· στη δοκιμή μας το health check πέρασε περίπου 15 δευτερόλεπτα αφού σηκώθηκαν τα containers.
HTTPS μπροστά
Στρέψτε το langfuse.example.com στην IP του server και μετά:
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 παίρνει μόνο του το πιστοποιητικό. Ανοίξτε τον ιστότοπο, δημιουργήστε τον λογαριασμό σας (γίνεται ο πρώτος οργανισμός), προσθέστε ένα project και αντιγράψτε το δημόσιο και το μυστικό του κλειδί.
Ύστερα κλείστε την πόρτα πίσω σας. Το Langfuse καταλαβαίνει το AUTH_DISABLE_SIGNUP, αλλά το προεπιλεγμένο αρχείο compose δεν το περνά στο web container, οπότε χρειάζεται μία ακόμη γραμμή κάτω από το 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
Από εδώ και πέρα, μια απόπειρα εγγραφής παίρνει «Sign up is disabled». Τους συναδέλφους τους προσθέτετε μέσα από το project.
Αποστολή traces από έναν agent
Το Python SDK τυλίγει τις συναρτήσεις σας, και οι εμφωλευμένες κλήσεις γίνονται εμφωλευμένα 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() # διαβάζει τις μεταβλητές LANGFUSE_*
@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() # τα σύντομα scripts τελειώνουν πριν ολοκληρωθεί η αποστολή στο παρασκήνιο
Μην παραλείψετε το LANGFUSE_BASE_URL. Χωρίς αυτό, το SDK στέλνει σιωπηλά τα πάντα στο cloud του Langfuse, τα κλειδιά σας δεν υπάρχουν εκεί και κοιτάτε έναν άδειο πίνακα.
Για να ελέγξετε από το τερματικό ότι έφτασαν τα spans:
curl -s -u "$LANGFUSE_PUBLIC_KEY:$LANGFUSE_SECRET_KEY" \
"$LANGFUSE_BASE_URL/api/public/v2/observations?limit=5"
Στο v4 το παλιό endpoint /api/public/traces απαντά με σφάλμα για τη λειτουργία events-only. Αυτό είναι αναμενόμενο, δεν σημαίνει χαλασμένη εγκατάσταση. Σε έναν πραγματικό agent τυλίγετε με τον ίδιο τρόπο την κλήση LLM και κάθε εργαλείο· επιπλέον το Langfuse έχει ενσωματώσεις για τα συνηθισμένα LLM SDK και frameworks agents, οπότε συχνά αρκεί να αλλάξετε ένα import αντί να γεμίσετε τα πάντα decorators.
Τι να παρακολουθείτε
- Δίσκος. Το ClickHouse και το MinIO κρατούν ό,τι στέλνετε. Το
docker system df -vδείχνει πού πήγε ο χώρος. Αν καταγράφετε μεγάλα prompts και απαντήσεις, τα 45 GB του Medium-IP γεμίζουν σε εβδομάδες, όχι σε χρόνια. Ελέγχετε μία φορά τον μήνα· όταν στενέψει, ένα πακέτο Pro με 400 GB ή περισσότερα είναι διαθέσιμο κατόπιν αιτήματος. - Ενημερώσεις. Το αρχείο compose κλειδώνει την κύρια έκδοση (
:4). Τοdocker compose pull && docker compose up -dφέρνει τις διορθώσεις μέσα σε αυτήν. Διαβάστε το changelog πριν αλλάξετε κύρια έκδοση: ακριβώς στο v4 εξαφανίστηκε το endpoint των traces. - Αντίγραφα ασφαλείας. Ό,τι μετράει ζει σε volumes του Docker: το Postgres κρατά χρήστες, projects και κλειδιά· το ClickHouse και το MinIO τα ίδια τα traces. Αντιγράφετέ τα εκτός server με πρόγραμμα.
Αξίζει $20 τον μήνα; Αν οι agents σας ξοδεύουν περισσότερα σε tokens — και οι περισσότεροι agents χωρίς επίβλεψη ξοδεύουν — το να ξέρετε πού πήγαν τα tokens αποσβένεται την πρώτη φορά που ένας βρόχος ξεφύγει. Ένας μικρός agent που τρέχει μία φορά τη μέρα δεν χρειάζεται τίποτα από αυτά: φτάνουν ένα αρχείο log και ένας μετρητής tokens.
Σχετικά
- VPS για AI agents: εκεί όπου τρέχουν οι ίδιοι οι agents
- VPS για συστήματα πολλαπλών agents: διαστασιολόγηση ενός ολόκληρου στόλου
- VPS για proxy LiteLLM: μία πύλη για όλα τα κλειδιά μοντέλων, με όρια δαπανών
- Πακέτα Pro κατόπιν αιτήματος: από 32 έως 80 GB RAM για στόλο agents
- Πώς να ρυθμίσετε τείχος προστασίας ufw
Σχόλια
Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.