Agen yang bekerja pukul tiga pagi tanpa ada yang mengawasi hanya seberharga kemampuan Anda untuk merekonstruksi apa yang dilakukannya. „Menghabiskan token senilai 38 $ semalam” adalah pagi yang buruk. „Menghabiskan 38 $ karena tool pencarian mengembalikan halaman kosong dan planner mencoba ulang 400 kali” adalah bug yang Anda perbaiki sebelum makan siang. Kalimat kedua butuh trace.
Langfuse mencatat setiap panggilan LLM, prompt, langkah tool, jumlah token, dan latensi sebagai pohon yang bisa Anda telusuri dengan klik. Jika Anda meng-host-nya sendiri, prompt dan jawaban itu — yang sering berisi data pelanggan, output API, dan sesekali rahasia yang nyasar — tetap di server yang Anda kendalikan, bukan di dasbor orang lain.
Biaya menjalankannya
Langfuse v4 bukan satu biner kecil, melainkan enam kontainer: aplikasi web, worker latar belakang, Postgres, ClickHouse untuk event, Redis, dan MinIO untuk file. Kami memasangnya di server uji dan mengukur sekitar 3,5 GB RAM terpakai dengan proyek kosong. Yang membesar adalah ClickHouse, karena setiap span yang Anda kirim berakhir di sana.
| Beban | Paket |
|---|---|
| Beberapa agen, trace berminggu-minggu | Medium-IP: 6 vCPU, 6 GB, 45 GB ($20/bln) |
| Armada agen, riwayat berbulan-bulan | Paket Pro, mulai 32 GB RAM — atas permintaan |
Di paket yang lebih kecil ia bisa terpasang, tapi kemudian kewalahan begitu ClickHouse dan worker sama-sama butuh memori. Saya tidak akan memakai kurang dari 6 GB.
Di mana agen tinggal? Jika berjalan di mesin lain, pilih paket dengan IPv4 sendiri: mereka butuh endpoint HTTPS, sedangkan di paket NAT alamat keluarnya bukan milik Anda dan dari luar hanya port SSH yang bisa dijangkau. Jika agen berjalan di server ini juga, Langfuse tidak perlu menghadap internet sama sekali: untuk uji coba cukup Medium dengan NAT ($12/bln). Ada dua lokasi, Jerman dan Finlandia; ketersediaannya terlihat saat memesan. Pilih yang paling dekat dengan agen, bukan dengan Anda. Server dibayar dengan kripto, tanpa KYC.
Instalasi
Di server Ubuntu 24.04 atau Debian 12 yang baru, sebagai root. Pertama Docker:
curl -fsSL https://get.docker.com | sh
Lalu Langfuse, dengan rahasia sungguhan menggantikan nilai bawaan file 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
Dua dari kata sandi itu berpasangan: kata sandi Postgres juga ada di dalam DATABASE_URL, dan kata sandi MinIO harus sama dengan tiga baris S3_..._SECRET_ACCESS_KEY. Karena itu masing-masing diambil dari satu variabel.
Sekarang jebakannya. File compose memublikasikan aplikasi web di port 3000 dan MinIO di 9090 pada semua antarmuka, dan port yang dipublikasikan Docker melewati ufw. Ikat keduanya ke localhost agar reverse proxy menjadi satu-satunya pintu masuk:
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
Perintah terakhir seharusnya menampilkan {"status":"OK", ...}. Start pertama menjalankan migrasi database; dalam uji kami, health check lolos sekitar 15 detik setelah kontainer menyala.
HTTPS di depan
Arahkan langfuse.example.com ke IP server, lalu:
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 mengambil sertifikat sendiri. Buka situsnya, buat akun Anda (itu menjadi organisasi pertama), tambahkan proyek, dan salin kunci publik dan rahasianya.
Setelah itu, tutup pintunya. Langfuse memahami AUTH_DISABLE_SIGNUP, tetapi file compose bawaan tidak meneruskannya ke kontainer web, jadi perlu satu baris lagi di bawah 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
Mulai sekarang, upaya pendaftaran mendapat «Sign up is disabled». Rekan kerja ditambahkan dari dalam proyek.
Mengirim trace dari agen
SDK Python membungkus fungsi Anda, dan panggilan bersarang menjadi span bersarang:
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() # membaca variabel 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() # skrip pendek selesai sebelum pengiriman di latar belakang rampung
Jangan lewatkan LANGFUSE_BASE_URL. Tanpanya, SDK diam-diam mengirim semuanya ke cloud Langfuse, kunci Anda tidak ada di sana, dan Anda hanya menatap dasbor kosong.
Untuk memeriksa dari terminal bahwa span sudah masuk:
curl -s -u "$LANGFUSE_PUBLIC_KEY:$LANGFUSE_SECRET_KEY" \
"$LANGFUSE_BASE_URL/api/public/v2/observations?limit=5"
Di v4, endpoint lama /api/public/traces membalas dengan error tentang mode events-only. Itu memang diharapkan, bukan instalasi yang rusak. Di agen sungguhan Anda membungkus panggilan LLM dan setiap tool dengan cara yang sama; selain itu Langfuse punya integrasi untuk SDK LLM dan framework agen yang umum, jadi sering kali cukup mengganti satu import alih-alih menaburkan decorator di mana-mana.
Yang perlu diawasi
- Disk. ClickHouse dan MinIO menyimpan semua yang Anda kirim.
docker system df -vmenunjukkan ke mana ruangnya pergi. Jika Anda melacak prompt dan jawaban panjang, 45 GB milik Medium-IP penuh dalam hitungan minggu, bukan tahun. Periksa sebulan sekali; saat mulai sempit, paket Pro dengan 400 GB atau lebih tersedia atas permintaan. - Pembaruan. File compose mengunci versi mayor (
:4).docker compose pull && docker compose up -dmembawa perbaikan di dalamnya. Baca changelog sebelum pindah versi mayor: justru di v4 endpoint trace menghilang. - Cadangan. Yang penting ada di volume Docker: Postgres menyimpan pengguna, proyek, dan kunci; ClickHouse dan MinIO menyimpan trace-nya. Salin keluar dari server secara terjadwal.
Apakah sepadan dengan $20 per bulan? Jika agen Anda menghabiskan lebih dari itu untuk token — dan sebagian besar agen tanpa pengawasan memang begitu — mengetahui ke mana token pergi akan balik modal saat pertama kali sebuah loop lepas kendali. Satu agen kecil yang berjalan sekali sehari tidak butuh semua ini: file log dan penghitung token sudah cukup.
Terkait
- VPS untuk agen AI: tempat agen itu sendiri berjalan
- VPS untuk sistem multi-agen: menghitung kebutuhan satu armada penuh
- VPS untuk proxy LiteLLM: satu gateway untuk semua kunci model, dengan batas pengeluaran
- Paket Pro atas permintaan: RAM 32 hingga 80 GB untuk armada agen
- Cara mengonfigurasi firewall ufw
Komentar
Belum ada komentar. Jadilah yang pertama.