langfuse-prod-checklist
Langfuse production readiness checklist and verification. Use when preparing to deploy Langfuse to production, validating production configuration, or auditing existing setup. Trigger with phrases like "langfuse production", "langfuse prod ready", "deploy langfuse", "langfuse checklist", "langfuse go live".
Install
mkdir -p .claude/skills/langfuse-prod-checklist && curl -L -o skill.zip "https://mcp.directory/api/skills/download/6308" && unzip -o skill.zip -d .claude/skills/langfuse-prod-checklist && rm skill.zipInstalls to .claude/skills/langfuse-prod-checklist
About this skill
Langfuse Production Checklist
Overview
Comprehensive checklist for deploying Langfuse observability to production with verified configuration, error handling, graceful shutdown, monitoring, and a pre-deployment verification script.
Prerequisites
- Development and staging testing completed
- Production Langfuse project created with separate API keys
- Secret management solution in place
Production Configuration
Recommended SDK Settings
// v4+ Production Config
import { LangfuseSpanProcessor } from "@langfuse/otel";
import { NodeSDK } from "@opentelemetry/sdk-node";
const processor = new LangfuseSpanProcessor({
exportIntervalMillis: 5000, // Flush every 5s
maxExportBatchSize: 50, // Batch size
maxQueueSize: 2048, // Buffer limit
});
const sdk = new NodeSDK({ spanProcessors: [processor] });
sdk.start();
// Graceful shutdown on all signals
for (const signal of ["SIGTERM", "SIGINT", "SIGUSR2"]) {
process.on(signal, async () => {
await sdk.shutdown();
process.exit(0);
});
}
// v3 Legacy Production Config
import { Langfuse } from "langfuse";
const langfuse = new Langfuse({
flushAt: 25, // Balance between latency and efficiency
flushInterval: 5000, // 5 second flush interval
requestTimeout: 15000, // 15s timeout
enabled: true, // Explicitly enable
});
process.on("beforeExit", () => langfuse.shutdownAsync());
process.on("SIGTERM", () => langfuse.shutdownAsync().then(() => process.exit(0)));
Production Error Handling
import { observe, updateActiveObservation, startActiveObservation } from "@langfuse/tracing";
// Wrap all traced operations with error safety
const tracedEndpoint = observe({ name: "api-endpoint" }, async (req: Request) => {
try {
updateActiveObservation({
input: { path: req.url, method: req.method },
metadata: { userId: req.userId },
});
const result = await processRequest(req);
updateActiveObservation({ output: { status: 200 } });
return result;
} catch (error) {
// Log error to trace -- don't let tracing error mask app error
try {
updateActiveObservation({
output: { error: String(error) },
metadata: { level: "ERROR" },
});
} catch {
// Tracing failure must never break the app
}
throw error;
}
});
Pre-Deployment Verification Script
// scripts/verify-langfuse-prod.ts
import { LangfuseClient } from "@langfuse/client";
import { startActiveObservation, updateActiveObservation } from "@langfuse/tracing";
async function verify() {
const checks: Array<{ name: string; pass: boolean; detail: string }> = [];
// 1. Environment variables
const requiredVars = ["LANGFUSE_PUBLIC_KEY", "LANGFUSE_SECRET_KEY"];
for (const v of requiredVars) {
checks.push({
name: `Env: ${v}`,
pass: !!process.env[v],
detail: process.env[v] ? `SET (${process.env[v]!.slice(0, 10)}...)` : "MISSING",
});
}
// 2. Key validation
const pk = process.env.LANGFUSE_PUBLIC_KEY || "";
const sk = process.env.LANGFUSE_SECRET_KEY || "";
checks.push({
name: "Key format",
pass: pk.startsWith("pk-lf-") && sk.startsWith("sk-lf-"),
detail: `Public: ${pk.startsWith("pk-lf-")}, Secret: ${sk.startsWith("sk-lf-")}`,
});
// 3. API connectivity
try {
const langfuse = new LangfuseClient();
// Try fetching prompts as a connectivity test
await langfuse.prompt.get("__health-check__").catch(() => {});
checks.push({ name: "API connectivity", pass: true, detail: "Connected" });
} catch (error) {
checks.push({ name: "API connectivity", pass: false, detail: String(error) });
}
// 4. Trace creation
try {
await startActiveObservation("prod-verify", async () => {
updateActiveObservation({
input: { test: true },
output: { verified: true },
metadata: { verification: "pre-deploy" },
});
});
checks.push({ name: "Trace creation", pass: true, detail: "Trace created" });
} catch (error) {
checks.push({ name: "Trace creation", pass: false, detail: String(error) });
}
// Report
console.log("\n=== Langfuse Production Verification ===\n");
let allPassed = true;
for (const check of checks) {
const icon = check.pass ? "PASS" : "FAIL";
console.log(` [${icon}] ${check.name}: ${check.detail}`);
if (!check.pass) allPassed = false;
}
console.log(`\n${allPassed ? "All checks passed." : "SOME CHECKS FAILED."}\n`);
if (!allPassed) process.exit(1);
}
verify();
Production Checklist
Authentication & Security
- Production API keys created (separate from dev/staging)
- Keys stored in secret manager (not env files or code)
- Key prefix validated at startup (
pk-lf-/sk-lf-) - PII scrubbing enabled on trace inputs/outputs
- Secret scanning in CI/CD pipeline
SDK Configuration
- Singleton client pattern (no per-request instantiation)
- Batch size tuned (
flushAt: 25-50) - Flush interval set (
flushInterval: 5000) - Request timeout configured (
requestTimeout: 15000)
Reliability
- Graceful shutdown on SIGTERM/SIGINT
- All spans end in
try/finally(v3) or useobserve/startActiveObservation(v4+) - Tracing errors caught -- never crash the app
- Circuit breaker for sustained failures
Monitoring
- Trace creation success/failure logged
- Flush latency tracked
- Rate limit errors monitored
- Dashboard alerts for quality score regression
Operations
- Runbook documented for Langfuse outages
- Fallback behavior defined (app works without Langfuse)
- Data retention policy configured
- Log rotation includes redaction of API keys
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Missing traces in prod | No flush on exit | Add shutdown handler for SIGTERM |
| Memory growth | Client created per request | Use singleton pattern |
| High latency | Small batches | Increase flushAt to 25-50 |
| Lost traces on deploy | No graceful shutdown | Add SIGTERM handler with sdk.shutdown() |
Resources
More by jeremylongshore
View all skills by jeremylongshore →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
Related MCP Servers
Browse all serversControl Ableton Live for advanced music production—track creation, MIDI editing, playback, and sound design. Perfect for
Boost Postgres performance with Postgres MCP Pro—AI-driven index tuning, health checks, and safe, intelligent SQL optimi
Sync Trello with Google Calendar easily. Fast, automated Trello workflows, card management & seamless Google Calendar in
Generate lyrics, songs, and tracks instantly with Mureka.ai Music Generation, an AI music generator. No production skill
Boost your Ableton Live music production with an AI assistant designed for seamless Ableton integration and enhanced cre
AppSignal: real-time monitoring with incident tracking, anomaly detection, performance metrics and log analysis for fast
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.