[{"data":1,"prerenderedAt":2915},["ShallowReactive",2],{"navigation_docs":3,"-integrate-adapters-hybrid-loki":576,"-integrate-adapters-hybrid-loki-surround":2910},[4,35,85,138,318,453,512,551],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":104,"path":105,"stem":106,"icon":107},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":109,"path":110,"stem":111,"icon":112},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":114,"path":115,"stem":116,"icon":117},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":119,"path":120,"stem":121,"icon":122},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":124,"path":125,"stem":126,"icon":127},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":129,"path":130,"stem":131,"icon":132},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":134,"path":135,"stem":136,"icon":137},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":139,"path":140,"stem":141,"children":142,"page":34},"Integrate","\u002Fintegrate","4.integrate",[143,147,230],{"title":41,"path":144,"stem":145,"icon":146},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":148,"path":149,"stem":150,"children":151,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[152,155,185,210],{"title":41,"path":153,"stem":154,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":156,"path":157,"stem":158,"children":159,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[160,165,170,175,180],{"title":161,"path":162,"stem":163,"icon":164},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":166,"path":167,"stem":168,"icon":169},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":171,"path":172,"stem":173,"icon":174},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":176,"path":177,"stem":178,"icon":179},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":181,"path":182,"stem":183,"icon":184},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":186,"path":187,"stem":188,"children":189,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[190,195,200,205],{"title":191,"path":192,"stem":193,"icon":194},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":196,"path":197,"stem":198,"icon":199},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":201,"path":202,"stem":203,"icon":204},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":206,"path":207,"stem":208,"icon":209},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":211,"path":212,"stem":213,"children":214,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[215,220,225],{"title":216,"path":217,"stem":218,"icon":219},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":221,"path":222,"stem":223,"icon":224},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":226,"path":227,"stem":228,"icon":229},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":231,"path":232,"stem":233,"children":234,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[235,239,244,249,254,259,264,269,274,279,284,289,294,299,303,308,313],{"title":41,"path":236,"stem":237,"icon":238},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":240,"path":241,"stem":242,"icon":243},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":245,"path":246,"stem":247,"icon":248},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":250,"path":251,"stem":252,"icon":253},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":255,"path":256,"stem":257,"icon":258},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":260,"path":261,"stem":262,"icon":263},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":265,"path":266,"stem":267,"icon":268},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":270,"path":271,"stem":272,"icon":273},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":275,"path":276,"stem":277,"icon":278},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":280,"path":281,"stem":282,"icon":283},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":285,"path":286,"stem":287,"icon":288},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":290,"path":291,"stem":292,"icon":293},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":295,"path":296,"stem":297,"icon":298},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":300,"path":301,"stem":302,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":304,"path":305,"stem":306,"icon":307},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":309,"path":310,"stem":311,"icon":312},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":314,"path":315,"stem":316,"icon":317},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[323,326,331,359,386,418,439,444,449],{"title":41,"path":324,"stem":325,"icon":107},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":327,"path":328,"stem":329,"icon":330},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":332,"icon":333,"path":334,"stem":335,"children":336,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[337,340,345,350,355],{"title":41,"path":338,"stem":339,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":341,"path":342,"stem":343,"icon":344},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":346,"path":347,"stem":348,"icon":349},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":351,"path":352,"stem":353,"icon":354},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":356,"path":357,"stem":358,"icon":137},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":360,"icon":361,"path":362,"stem":363,"children":364,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[365,368,373,378,382],{"title":41,"path":366,"stem":367,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":369,"path":370,"stem":371,"icon":372},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":374,"path":375,"stem":376,"icon":377},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":379,"path":380,"stem":381,"icon":330},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":383,"path":384,"stem":385,"icon":112},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":387,"icon":388,"path":389,"stem":390,"children":391,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[392,395,400,405,410,414],{"title":41,"path":393,"stem":394,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":396,"path":397,"stem":398,"icon":399},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":401,"path":402,"stem":403,"icon":404},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":406,"path":407,"stem":408,"icon":409},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":411,"path":412,"stem":413,"icon":388},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":415,"path":416,"stem":417,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":356,"icon":112,"path":419,"stem":420,"children":421,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[422,425,430,435],{"title":41,"path":423,"stem":424,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":426,"path":427,"stem":428,"icon":429},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":431,"path":432,"stem":433,"icon":434},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":436,"path":437,"stem":438,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":440,"path":441,"stem":442,"icon":443},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":445,"path":446,"stem":447,"icon":448},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":450,"path":451,"stem":452,"icon":434},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":454,"path":455,"stem":456,"children":457,"page":34},"Extend","\u002Fextend","6.extend",[458,462,467,472,476,481,485,489,493,497,502,507],{"title":41,"path":459,"stem":460,"icon":461},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":463,"path":464,"stem":465,"icon":466},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":468,"path":469,"stem":470,"icon":471},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":473,"path":474,"stem":475,"icon":466},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":477,"path":478,"stem":479,"icon":480},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":415,"path":482,"stem":483,"icon":484},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":486,"path":487,"stem":488,"icon":461},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":490,"path":491,"stem":492,"icon":443},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":494,"path":495,"stem":496,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":498,"path":499,"stem":500,"icon":501},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":503,"path":504,"stem":505,"icon":506},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":508,"path":509,"stem":510,"icon":511},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":436,"path":513,"stem":514,"children":515,"page":34},"\u002Freference","7.reference",[516,520,525,528,533,537,542,546],{"title":41,"path":517,"stem":518,"icon":519},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":521,"path":522,"stem":523,"icon":524},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":383,"path":526,"stem":527,"icon":112},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":529,"path":530,"stem":531,"icon":532},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":534,"path":535,"stem":536,"icon":388},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":538,"path":539,"stem":540,"icon":541},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":543,"path":544,"stem":545,"icon":443},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":547,"path":548,"stem":549,"icon":550},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":552,"path":553,"stem":554,"children":555,"page":34},"Compare","\u002Fcompare","8.compare",[556,560,564,568,572],{"title":557,"path":558,"stem":559,"icon":541},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":561,"path":562,"stem":563,"icon":204},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":565,"path":566,"stem":567,"icon":541},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":569,"path":570,"stem":571,"icon":541},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":573,"path":574,"stem":575,"icon":541},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":577,"title":578,"body":579,"description":2893,"extension":2894,"links":2895,"meta":2906,"navigation":2907,"path":192,"seo":2908,"stem":193,"__hash__":2909},"docs\u002F4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki.md","Grafana Loki Adapter",{"type":580,"value":581,"toc":2872},"minimark",[582,593,628,678,682,685,728,731,738,1528,1531,1536,1624,1628,1631,1652,1655,1820,1824,1827,1831,1834,1864,1881,1890,1941,1964,1973,1977,1984,2055,2087,2106,2110,2184,2189,2193,2205,2208,2306,2309,2313,2318,2340,2355,2370,2385,2389,2392,2586,2589,2593,2596,2655,2665,2674,2678,2696,2710,2723,2733,2737,2740,2828,2840,2844,2868],[583,584,585,586,592],"p",{},"The Loki adapter pushes wide events to ",[587,588,191],"a",{"href":589,"rel":590},"https:\u002F\u002Fgrafana.com\u002Fdocs\u002Floki\u002Flatest\u002F",[591],"nofollow"," via its push API. It works with a self-hosted single-tenant instance, a multi-tenant deployment, and Grafana Cloud.",[583,594,595,596,600,601,605,606,609,610,613,614,605,617,605,620,623,624,627],{},"Each event is pushed as a ",[597,598,599],"strong",{},"JSON log line"," under a small, low-cardinality label set. That distinction matters in Loki: labels are indexed and billed by cardinality, while the log line is searched at query time. evlog labels only ",[602,603,604],"code",{},"service",", ",[602,607,608],{},"environment",", and ",[602,611,612],{},"level"," by default, and leaves everything else (",[602,615,616],{},"requestId",[602,618,619],{},"path",[602,621,622],{},"user",", your custom fields) in the line, queryable with ",[602,625,626],{},"| json",".",[629,630,633,636,666],"prompt",{":actions":631,"description":632,"icon":194},"[\"copy\",\"cursor\",\"claude\"]","Add the Grafana Loki drain adapter",[583,634,635],{},"Add the Grafana Loki drain adapter to send evlog wide events to Loki.",[637,638,639,643,646,649,652,660,663],"ol",{},[640,641,642],"li",{},"Identify which framework I'm using and follow its evlog integration pattern",[640,644,645],{},"Install evlog if not already installed",[640,647,648],{},"Import createLokiDrain from 'evlog\u002Floki'",[640,650,651],{},"Wire createLokiDrain() into my framework's drain configuration",[640,653,654,655,659],{},"Set LOKI_ENDPOINT (e.g. ",[587,656,657],{"href":657,"rel":658},"http:\u002F\u002Flocalhost:3100",[591],"). For Grafana Cloud also set LOKI_USER (instance ID) and LOKI_API_KEY",[640,661,662],{},"For multi-tenant self-hosted Loki, set LOKI_TENANT_ID instead",[640,664,665],{},"Test by triggering a request and querying {service=\"my-app\"} in Grafana",[583,667,668,669,673,674],{},"Adapter docs: ",[587,670,671],{"href":671,"rel":672},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki",[591],"\nFramework setup: ",[587,675,676],{"href":676,"rel":677},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Foverview",[591],[679,680,20],"h2",{"id":681},"installation",[583,683,684],{},"The Loki adapter comes bundled with evlog:",[686,687,693],"pre",{"className":688,"code":689,"filename":690,"language":691,"meta":692,"style":692},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createLokiDrain } from 'evlog\u002Floki'\n","src\u002Findex.ts","typescript","",[602,694,695],{"__ignoreMap":692},[696,697,700,704,708,712,715,718,721,725],"span",{"class":698,"line":699},"line",1,[696,701,703],{"class":702},"s7zQu","import",[696,705,707],{"class":706},"sMK4o"," {",[696,709,711],{"class":710},"sTEyZ"," createLokiDrain",[696,713,714],{"class":706}," }",[696,716,717],{"class":702}," from",[696,719,720],{"class":706}," '",[696,722,724],{"class":723},"sfazB","evlog\u002Floki",[696,726,727],{"class":706},"'\n",[679,729,25],{"id":730},"quick-start",[583,732,733,734,737],{},"Set ",[602,735,736],{},"LOKI_ENDPOINT"," and wire the drain into your framework.",[739,740,741,855,977,1081,1188,1293,1430],"code-group",{},[686,742,745],{"className":688,"code":743,"filename":744,"language":691,"meta":692,"style":692},"\u002F\u002F server\u002Fplugins\u002Fevlog.ts\nimport { createLokiDrain } from 'evlog\u002Floki'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createLokiDrain())\n})\n","Nuxt \u002F Nitro",[602,746,747,753,772,779,811,846],{"__ignoreMap":692},[696,748,749],{"class":698,"line":699},[696,750,752],{"class":751},"sHwdD","\u002F\u002F server\u002Fplugins\u002Fevlog.ts\n",[696,754,756,758,760,762,764,766,768,770],{"class":698,"line":755},2,[696,757,703],{"class":702},[696,759,707],{"class":706},[696,761,711],{"class":710},[696,763,714],{"class":706},[696,765,717],{"class":702},[696,767,720],{"class":706},[696,769,724],{"class":723},[696,771,727],{"class":706},[696,773,775],{"class":698,"line":774},3,[696,776,778],{"emptyLinePlaceholder":777},true,"\n",[696,780,782,785,788,792,795,797,801,804,808],{"class":698,"line":781},4,[696,783,784],{"class":702},"export",[696,786,787],{"class":702}," default",[696,789,791],{"class":790},"s2Zo4"," defineNitroPlugin",[696,793,794],{"class":710},"(",[696,796,794],{"class":706},[696,798,800],{"class":799},"sHdIc","nitroApp",[696,802,803],{"class":706},")",[696,805,807],{"class":806},"spNyl"," =>",[696,809,810],{"class":706}," {\n",[696,812,814,817,819,822,824,827,830,833,836,838,841,843],{"class":698,"line":813},5,[696,815,816],{"class":710},"  nitroApp",[696,818,627],{"class":706},[696,820,821],{"class":710},"hooks",[696,823,627],{"class":706},[696,825,826],{"class":790},"hook",[696,828,794],{"class":829},"swJcz",[696,831,832],{"class":706},"'",[696,834,835],{"class":723},"evlog:drain",[696,837,832],{"class":706},[696,839,840],{"class":706},",",[696,842,711],{"class":790},[696,844,845],{"class":829},"())\n",[696,847,849,852],{"class":698,"line":848},6,[696,850,851],{"class":706},"}",[696,853,854],{"class":710},")\n",[686,856,858],{"className":688,"code":857,"filename":275,"language":691,"meta":692,"style":692},"import { Hono } from 'hono'\nimport { evlog } from 'evlog\u002Fhono'\nimport { createLokiDrain } from 'evlog\u002Floki'\n\nconst app = new Hono()\napp.use(evlog({ drain: createLokiDrain() }))\n",[602,859,860,880,900,918,922,941],{"__ignoreMap":692},[696,861,862,864,866,869,871,873,875,878],{"class":698,"line":699},[696,863,703],{"class":702},[696,865,707],{"class":706},[696,867,868],{"class":710}," Hono",[696,870,714],{"class":706},[696,872,717],{"class":702},[696,874,720],{"class":706},[696,876,877],{"class":723},"hono",[696,879,727],{"class":706},[696,881,882,884,886,889,891,893,895,898],{"class":698,"line":755},[696,883,703],{"class":702},[696,885,707],{"class":706},[696,887,888],{"class":710}," evlog",[696,890,714],{"class":706},[696,892,717],{"class":702},[696,894,720],{"class":706},[696,896,897],{"class":723},"evlog\u002Fhono",[696,899,727],{"class":706},[696,901,902,904,906,908,910,912,914,916],{"class":698,"line":774},[696,903,703],{"class":702},[696,905,707],{"class":706},[696,907,711],{"class":710},[696,909,714],{"class":706},[696,911,717],{"class":702},[696,913,720],{"class":706},[696,915,724],{"class":723},[696,917,727],{"class":706},[696,919,920],{"class":698,"line":781},[696,921,778],{"emptyLinePlaceholder":777},[696,923,924,927,930,933,936,938],{"class":698,"line":813},[696,925,926],{"class":806},"const",[696,928,929],{"class":710}," app ",[696,931,932],{"class":706},"=",[696,934,935],{"class":706}," new",[696,937,868],{"class":790},[696,939,940],{"class":710},"()\n",[696,942,943,946,948,951,953,956,958,961,964,967,969,972,974],{"class":698,"line":848},[696,944,945],{"class":710},"app",[696,947,627],{"class":706},[696,949,950],{"class":790},"use",[696,952,794],{"class":710},[696,954,955],{"class":790},"evlog",[696,957,794],{"class":710},[696,959,960],{"class":706},"{",[696,962,963],{"class":829}," drain",[696,965,966],{"class":706},":",[696,968,711],{"class":790},[696,970,971],{"class":710},"() ",[696,973,851],{"class":706},[696,975,976],{"class":710},"))\n",[686,978,980],{"className":688,"code":979,"filename":270,"language":691,"meta":692,"style":692},"import express from 'express'\nimport { evlog } from 'evlog\u002Fexpress'\nimport { createLokiDrain } from 'evlog\u002Floki'\n\nconst app = express()\napp.use(evlog({ drain: createLokiDrain() }))\n",[602,981,982,999,1018,1036,1040,1053],{"__ignoreMap":692},[696,983,984,986,989,992,994,997],{"class":698,"line":699},[696,985,703],{"class":702},[696,987,988],{"class":710}," express ",[696,990,991],{"class":702},"from",[696,993,720],{"class":706},[696,995,996],{"class":723},"express",[696,998,727],{"class":706},[696,1000,1001,1003,1005,1007,1009,1011,1013,1016],{"class":698,"line":755},[696,1002,703],{"class":702},[696,1004,707],{"class":706},[696,1006,888],{"class":710},[696,1008,714],{"class":706},[696,1010,717],{"class":702},[696,1012,720],{"class":706},[696,1014,1015],{"class":723},"evlog\u002Fexpress",[696,1017,727],{"class":706},[696,1019,1020,1022,1024,1026,1028,1030,1032,1034],{"class":698,"line":774},[696,1021,703],{"class":702},[696,1023,707],{"class":706},[696,1025,711],{"class":710},[696,1027,714],{"class":706},[696,1029,717],{"class":702},[696,1031,720],{"class":706},[696,1033,724],{"class":723},[696,1035,727],{"class":706},[696,1037,1038],{"class":698,"line":781},[696,1039,778],{"emptyLinePlaceholder":777},[696,1041,1042,1044,1046,1048,1051],{"class":698,"line":813},[696,1043,926],{"class":806},[696,1045,929],{"class":710},[696,1047,932],{"class":706},[696,1049,1050],{"class":790}," express",[696,1052,940],{"class":710},[696,1054,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077,1079],{"class":698,"line":848},[696,1056,945],{"class":710},[696,1058,627],{"class":706},[696,1060,950],{"class":790},[696,1062,794],{"class":710},[696,1064,955],{"class":790},[696,1066,794],{"class":710},[696,1068,960],{"class":706},[696,1070,963],{"class":829},[696,1072,966],{"class":706},[696,1074,711],{"class":790},[696,1076,971],{"class":710},[696,1078,851],{"class":706},[696,1080,976],{"class":710},[686,1082,1084],{"className":688,"code":1083,"filename":280,"language":691,"meta":692,"style":692},"import Fastify from 'fastify'\nimport { evlog } from 'evlog\u002Ffastify'\nimport { createLokiDrain } from 'evlog\u002Floki'\n\nconst app = Fastify()\nawait app.register(evlog, { drain: createLokiDrain() })\n",[602,1085,1086,1102,1121,1139,1143,1156],{"__ignoreMap":692},[696,1087,1088,1090,1093,1095,1097,1100],{"class":698,"line":699},[696,1089,703],{"class":702},[696,1091,1092],{"class":710}," Fastify ",[696,1094,991],{"class":702},[696,1096,720],{"class":706},[696,1098,1099],{"class":723},"fastify",[696,1101,727],{"class":706},[696,1103,1104,1106,1108,1110,1112,1114,1116,1119],{"class":698,"line":755},[696,1105,703],{"class":702},[696,1107,707],{"class":706},[696,1109,888],{"class":710},[696,1111,714],{"class":706},[696,1113,717],{"class":702},[696,1115,720],{"class":706},[696,1117,1118],{"class":723},"evlog\u002Ffastify",[696,1120,727],{"class":706},[696,1122,1123,1125,1127,1129,1131,1133,1135,1137],{"class":698,"line":774},[696,1124,703],{"class":702},[696,1126,707],{"class":706},[696,1128,711],{"class":710},[696,1130,714],{"class":706},[696,1132,717],{"class":702},[696,1134,720],{"class":706},[696,1136,724],{"class":723},[696,1138,727],{"class":706},[696,1140,1141],{"class":698,"line":781},[696,1142,778],{"emptyLinePlaceholder":777},[696,1144,1145,1147,1149,1151,1154],{"class":698,"line":813},[696,1146,926],{"class":806},[696,1148,929],{"class":710},[696,1150,932],{"class":706},[696,1152,1153],{"class":790}," Fastify",[696,1155,940],{"class":710},[696,1157,1158,1161,1164,1166,1169,1172,1174,1176,1178,1180,1182,1184,1186],{"class":698,"line":848},[696,1159,1160],{"class":702},"await",[696,1162,1163],{"class":710}," app",[696,1165,627],{"class":706},[696,1167,1168],{"class":790},"register",[696,1170,1171],{"class":710},"(evlog",[696,1173,840],{"class":706},[696,1175,707],{"class":706},[696,1177,963],{"class":829},[696,1179,966],{"class":706},[696,1181,711],{"class":790},[696,1183,971],{"class":710},[696,1185,851],{"class":706},[696,1187,854],{"class":710},[686,1189,1191],{"className":688,"code":1190,"filename":285,"language":691,"meta":692,"style":692},"import { Elysia } from 'elysia'\nimport { evlog } from 'evlog\u002Felysia'\nimport { createLokiDrain } from 'evlog\u002Floki'\n\nconst app = new Elysia().use(evlog({ drain: createLokiDrain() }))\n",[602,1192,1193,1213,1232,1250,1254],{"__ignoreMap":692},[696,1194,1195,1197,1199,1202,1204,1206,1208,1211],{"class":698,"line":699},[696,1196,703],{"class":702},[696,1198,707],{"class":706},[696,1200,1201],{"class":710}," Elysia",[696,1203,714],{"class":706},[696,1205,717],{"class":702},[696,1207,720],{"class":706},[696,1209,1210],{"class":723},"elysia",[696,1212,727],{"class":706},[696,1214,1215,1217,1219,1221,1223,1225,1227,1230],{"class":698,"line":755},[696,1216,703],{"class":702},[696,1218,707],{"class":706},[696,1220,888],{"class":710},[696,1222,714],{"class":706},[696,1224,717],{"class":702},[696,1226,720],{"class":706},[696,1228,1229],{"class":723},"evlog\u002Felysia",[696,1231,727],{"class":706},[696,1233,1234,1236,1238,1240,1242,1244,1246,1248],{"class":698,"line":774},[696,1235,703],{"class":702},[696,1237,707],{"class":706},[696,1239,711],{"class":710},[696,1241,714],{"class":706},[696,1243,717],{"class":702},[696,1245,720],{"class":706},[696,1247,724],{"class":723},[696,1249,727],{"class":706},[696,1251,1252],{"class":698,"line":781},[696,1253,778],{"emptyLinePlaceholder":777},[696,1255,1256,1258,1260,1262,1264,1266,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291],{"class":698,"line":813},[696,1257,926],{"class":806},[696,1259,929],{"class":710},[696,1261,932],{"class":706},[696,1263,935],{"class":706},[696,1265,1201],{"class":790},[696,1267,1268],{"class":710},"()",[696,1270,627],{"class":706},[696,1272,950],{"class":790},[696,1274,794],{"class":710},[696,1276,955],{"class":790},[696,1278,794],{"class":710},[696,1280,960],{"class":706},[696,1282,963],{"class":829},[696,1284,966],{"class":706},[696,1286,711],{"class":790},[696,1288,971],{"class":710},[696,1290,851],{"class":706},[696,1292,976],{"class":710},[686,1294,1296],{"className":688,"code":1295,"filename":265,"language":691,"meta":692,"style":692},"import { Module } from '@nestjs\u002Fcommon'\nimport { EvlogModule } from 'evlog\u002Fnestjs'\nimport { createLokiDrain } from 'evlog\u002Floki'\n\n@Module({\n  imports: [EvlogModule.forRoot({ drain: createLokiDrain() })],\n})\nexport class AppModule {}\n",[602,1297,1298,1318,1338,1356,1360,1373,1408,1415],{"__ignoreMap":692},[696,1299,1300,1302,1304,1307,1309,1311,1313,1316],{"class":698,"line":699},[696,1301,703],{"class":702},[696,1303,707],{"class":706},[696,1305,1306],{"class":710}," Module",[696,1308,714],{"class":706},[696,1310,717],{"class":702},[696,1312,720],{"class":706},[696,1314,1315],{"class":723},"@nestjs\u002Fcommon",[696,1317,727],{"class":706},[696,1319,1320,1322,1324,1327,1329,1331,1333,1336],{"class":698,"line":755},[696,1321,703],{"class":702},[696,1323,707],{"class":706},[696,1325,1326],{"class":710}," EvlogModule",[696,1328,714],{"class":706},[696,1330,717],{"class":702},[696,1332,720],{"class":706},[696,1334,1335],{"class":723},"evlog\u002Fnestjs",[696,1337,727],{"class":706},[696,1339,1340,1342,1344,1346,1348,1350,1352,1354],{"class":698,"line":774},[696,1341,703],{"class":702},[696,1343,707],{"class":706},[696,1345,711],{"class":710},[696,1347,714],{"class":706},[696,1349,717],{"class":702},[696,1351,720],{"class":706},[696,1353,724],{"class":723},[696,1355,727],{"class":706},[696,1357,1358],{"class":698,"line":781},[696,1359,778],{"emptyLinePlaceholder":777},[696,1361,1362,1365,1368,1370],{"class":698,"line":813},[696,1363,1364],{"class":706},"@",[696,1366,1367],{"class":790},"Module",[696,1369,794],{"class":710},[696,1371,1372],{"class":706},"{\n",[696,1374,1375,1378,1380,1383,1385,1388,1390,1392,1394,1396,1398,1400,1402,1405],{"class":698,"line":848},[696,1376,1377],{"class":829},"  imports",[696,1379,966],{"class":706},[696,1381,1382],{"class":710}," [EvlogModule",[696,1384,627],{"class":706},[696,1386,1387],{"class":790},"forRoot",[696,1389,794],{"class":710},[696,1391,960],{"class":706},[696,1393,963],{"class":829},[696,1395,966],{"class":706},[696,1397,711],{"class":790},[696,1399,971],{"class":710},[696,1401,851],{"class":706},[696,1403,1404],{"class":710},")]",[696,1406,1407],{"class":706},",\n",[696,1409,1411,1413],{"class":698,"line":1410},7,[696,1412,851],{"class":706},[696,1414,854],{"class":710},[696,1416,1418,1420,1423,1427],{"class":698,"line":1417},8,[696,1419,784],{"class":702},[696,1421,1422],{"class":806}," class",[696,1424,1426],{"class":1425},"sBMFI"," AppModule",[696,1428,1429],{"class":706}," {}\n",[686,1431,1433],{"className":688,"code":1432,"filename":300,"language":691,"meta":692,"style":692},"import { initLogger } from 'evlog'\nimport { createLokiDrain } from 'evlog\u002Floki'\n\ninitLogger({\n  env: { service: 'my-app' },\n  drain: createLokiDrain(),\n})\n",[602,1434,1435,1454,1472,1476,1485,1509,1522],{"__ignoreMap":692},[696,1436,1437,1439,1441,1444,1446,1448,1450,1452],{"class":698,"line":699},[696,1438,703],{"class":702},[696,1440,707],{"class":706},[696,1442,1443],{"class":710}," initLogger",[696,1445,714],{"class":706},[696,1447,717],{"class":702},[696,1449,720],{"class":706},[696,1451,955],{"class":723},[696,1453,727],{"class":706},[696,1455,1456,1458,1460,1462,1464,1466,1468,1470],{"class":698,"line":755},[696,1457,703],{"class":702},[696,1459,707],{"class":706},[696,1461,711],{"class":710},[696,1463,714],{"class":706},[696,1465,717],{"class":702},[696,1467,720],{"class":706},[696,1469,724],{"class":723},[696,1471,727],{"class":706},[696,1473,1474],{"class":698,"line":774},[696,1475,778],{"emptyLinePlaceholder":777},[696,1477,1478,1481,1483],{"class":698,"line":781},[696,1479,1480],{"class":790},"initLogger",[696,1482,794],{"class":710},[696,1484,1372],{"class":706},[696,1486,1487,1490,1492,1494,1497,1499,1501,1504,1506],{"class":698,"line":813},[696,1488,1489],{"class":829},"  env",[696,1491,966],{"class":706},[696,1493,707],{"class":706},[696,1495,1496],{"class":829}," service",[696,1498,966],{"class":706},[696,1500,720],{"class":706},[696,1502,1503],{"class":723},"my-app",[696,1505,832],{"class":706},[696,1507,1508],{"class":706}," },\n",[696,1510,1511,1514,1516,1518,1520],{"class":698,"line":848},[696,1512,1513],{"class":829},"  drain",[696,1515,966],{"class":706},[696,1517,711],{"class":790},[696,1519,1268],{"class":710},[696,1521,1407],{"class":706},[696,1523,1524,1526],{"class":698,"line":1410},[696,1525,851],{"class":706},[696,1527,854],{"class":710},[679,1529,521],{"id":1530},"configuration",[1532,1533,1535],"h3",{"id":1534},"environment-variables","Environment variables",[1537,1538,1539,1555],"table",{},[1540,1541,1542],"thead",{},[1543,1544,1545,1549,1552],"tr",{},[1546,1547,1548],"th",{},"Variable",[1546,1550,1551],{},"Required",[1546,1553,1554],{},"Description",[1556,1557,1558,1575,1595,1609],"tbody",{},[1543,1559,1560,1565,1568],{},[1561,1562,1563],"td",{},[602,1564,736],{},[1561,1566,1567],{},"Yes",[1561,1569,1570,1571,1574],{},"Base URL of the Loki instance, without the push path (",[602,1572,1573],{},"LOKI_URL"," also accepted)",[1543,1576,1577,1582,1585],{},[1561,1578,1579],{},[602,1580,1581],{},"LOKI_API_KEY",[1561,1583,1584],{},"No",[1561,1586,1587,1588,1591,1592,1574],{},"API token. Sent as Basic with ",[602,1589,1590],{},"LOKI_USER",", otherwise as Bearer (",[602,1593,1594],{},"GRAFANA_API_KEY",[1543,1596,1597,1601,1603],{},[1561,1598,1599],{},[602,1600,1590],{},[1561,1602,1584],{},[1561,1604,1605,1606,1574],{},"Grafana Cloud instance ID. Switches auth to Basic (",[602,1607,1608],{},"GRAFANA_USER",[1543,1610,1611,1616,1618],{},[1561,1612,1613],{},[602,1614,1615],{},"LOKI_TENANT_ID",[1561,1617,1584],{},[1561,1619,1620,1621],{},"Tenant for multi-tenant self-hosted Loki, sent as ",[602,1622,1623],{},"X-Scope-OrgID",[1532,1625,1627],{"id":1626},"priority","Priority",[583,1629,1630],{},"Configuration is resolved highest to lowest:",[637,1632,1633,1639,1645,1650],{},[640,1634,1635,1636],{},"Overrides passed to ",[602,1637,1638],{},"createLokiDrain()",[640,1640,1641,1644],{},[602,1642,1643],{},"runtimeConfig.evlog.loki"," (Nitro)",[640,1646,1647,1644],{},[602,1648,1649],{},"runtimeConfig.loki",[640,1651,1535],{},[1532,1653,346],{"id":1654},"options",[1537,1656,1657,1672],{},[1540,1658,1659],{},[1543,1660,1661,1664,1667,1670],{},[1546,1662,1663],{},"Option",[1546,1665,1666],{},"Type",[1546,1668,1669],{},"Default",[1546,1671,1554],{},[1556,1673,1674,1695,1711,1726,1744,1764,1781,1801],{},[1543,1675,1676,1681,1686,1689],{},[1561,1677,1678],{},[602,1679,1680],{},"endpoint",[1561,1682,1683],{},[602,1684,1685],{},"string",[1561,1687,1688],{},"—",[1561,1690,1691,1692],{},"Base URL, without ",[602,1693,1694],{},"\u002Floki\u002Fapi\u002Fv1\u002Fpush",[1543,1696,1697,1702,1706,1708],{},[1561,1698,1699],{},[602,1700,1701],{},"apiKey",[1561,1703,1704],{},[602,1705,1685],{},[1561,1707,1688],{},[1561,1709,1710],{},"API token",[1543,1712,1713,1717,1721,1723],{},[1561,1714,1715],{},[602,1716,622],{},[1561,1718,1719],{},[602,1720,1685],{},[1561,1722,1688],{},[1561,1724,1725],{},"Grafana Cloud instance ID (enables Basic auth)",[1543,1727,1728,1733,1737,1739],{},[1561,1729,1730],{},[602,1731,1732],{},"tenantId",[1561,1734,1735],{},[602,1736,1685],{},[1561,1738,1688],{},[1561,1740,1741,1743],{},[602,1742,1623],{}," for multi-tenant Loki",[1543,1745,1746,1751,1756,1761],{},[1561,1747,1748],{},[602,1749,1750],{},"labelFields",[1561,1752,1753],{},[602,1754,1755],{},"string[]",[1561,1757,1758],{},[602,1759,1760],{},"['service', 'environment', 'level']",[1561,1762,1763],{},"Event fields promoted to Loki labels",[1543,1765,1766,1771,1776,1778],{},[1561,1767,1768],{},[602,1769,1770],{},"labels",[1561,1772,1773],{},[602,1774,1775],{},"Record\u003Cstring, string>",[1561,1777,1688],{},[1561,1779,1780],{},"Static labels merged into every stream",[1543,1782,1783,1788,1793,1798],{},[1561,1784,1785],{},[602,1786,1787],{},"timeout",[1561,1789,1790],{},[602,1791,1792],{},"number",[1561,1794,1795],{},[602,1796,1797],{},"5000",[1561,1799,1800],{},"Request timeout in ms",[1543,1802,1803,1808,1812,1817],{},[1561,1804,1805],{},[602,1806,1807],{},"retries",[1561,1809,1810],{},[602,1811,1792],{},[1561,1813,1814],{},[602,1815,1816],{},"2",[1561,1818,1819],{},"Retry attempts on transient failures",[679,1821,1823],{"id":1822},"deployment","Deployment",[583,1825,1826],{},"Loki runs either way, and the adapter is the same in both cases. Only\nauthentication differs.",[1532,1828,1830],{"id":1829},"self-hosted","Self-hosted",[583,1832,1833],{},"A single-tenant instance needs nothing but the endpoint:",[686,1835,1838],{"className":688,"code":1836,"filename":1837,"language":691,"meta":692,"style":692},"createLokiDrain({ endpoint: 'http:\u002F\u002Flocalhost:3100' })\n","server\u002Fplugins\u002Fevlog.ts",[602,1839,1840],{"__ignoreMap":692},[696,1841,1842,1845,1847,1849,1852,1854,1856,1858,1860,1862],{"class":698,"line":699},[696,1843,1844],{"class":790},"createLokiDrain",[696,1846,794],{"class":710},[696,1848,960],{"class":706},[696,1850,1851],{"class":829}," endpoint",[696,1853,966],{"class":706},[696,1855,720],{"class":706},[696,1857,657],{"class":723},[696,1859,832],{"class":706},[696,1861,714],{"class":706},[696,1863,854],{"class":710},[686,1865,1870],{"className":1866,"code":1867,"filename":1868,"language":1869,"meta":692,"style":692},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","LOKI_ENDPOINT=http:\u002F\u002Flocalhost:3100\n",".env","bash",[602,1871,1872],{"__ignoreMap":692},[696,1873,1874,1876,1878],{"class":698,"line":699},[696,1875,736],{"class":710},[696,1877,932],{"class":706},[696,1879,1880],{"class":723},"http:\u002F\u002Flocalhost:3100\n",[583,1882,1883,1884,1887,1888,966],{},"For a ",[597,1885,1886],{},"multi-tenant"," deployment, name the tenant, and it is sent as ",[602,1889,1623],{},[686,1891,1893],{"className":688,"code":1892,"filename":1837,"language":691,"meta":692,"style":692},"createLokiDrain({\n  endpoint: 'http:\u002F\u002Floki.internal:3100',\n  tenantId: 'team-checkout',\n})\n",[602,1894,1895,1903,1919,1935],{"__ignoreMap":692},[696,1896,1897,1899,1901],{"class":698,"line":699},[696,1898,1844],{"class":790},[696,1900,794],{"class":710},[696,1902,1372],{"class":706},[696,1904,1905,1908,1910,1912,1915,1917],{"class":698,"line":755},[696,1906,1907],{"class":829},"  endpoint",[696,1909,966],{"class":706},[696,1911,720],{"class":706},[696,1913,1914],{"class":723},"http:\u002F\u002Floki.internal:3100",[696,1916,832],{"class":706},[696,1918,1407],{"class":706},[696,1920,1921,1924,1926,1928,1931,1933],{"class":698,"line":774},[696,1922,1923],{"class":829},"  tenantId",[696,1925,966],{"class":706},[696,1927,720],{"class":706},[696,1929,1930],{"class":723},"team-checkout",[696,1932,832],{"class":706},[696,1934,1407],{"class":706},[696,1936,1937,1939],{"class":698,"line":781},[696,1938,851],{"class":706},[696,1940,854],{"class":710},[686,1942,1944],{"className":1866,"code":1943,"filename":1868,"language":1869,"meta":692,"style":692},"LOKI_ENDPOINT=http:\u002F\u002Floki.internal:3100\nLOKI_TENANT_ID=team-checkout\n",[602,1945,1946,1955],{"__ignoreMap":692},[696,1947,1948,1950,1952],{"class":698,"line":699},[696,1949,736],{"class":710},[696,1951,932],{"class":706},[696,1953,1954],{"class":723},"http:\u002F\u002Floki.internal:3100\n",[696,1956,1957,1959,1961],{"class":698,"line":755},[696,1958,1615],{"class":710},[696,1960,932],{"class":706},[696,1962,1963],{"class":723},"team-checkout\n",[583,1965,1966,1967,1969,1970,627],{},"If your instance sits behind an authenticating proxy, ",[602,1968,1701],{}," alone is sent as\n",[602,1971,1972],{},"Authorization: Bearer",[1532,1974,1976],{"id":1975},"grafana-cloud","Grafana Cloud",[583,1978,1979,1980,1983],{},"Grafana Cloud authenticates with your ",[597,1981,1982],{},"instance ID"," plus an access policy\ntoken, sent together as HTTP Basic:",[686,1985,1987],{"className":688,"code":1986,"filename":1837,"language":691,"meta":692,"style":692},"createLokiDrain({\n  endpoint: 'https:\u002F\u002Flogs-prod-eu-west-0.grafana.net',\n  user: '123456',\n  apiKey: process.env.GRAFANA_API_KEY,\n})\n",[602,1988,1989,1997,2012,2028,2049],{"__ignoreMap":692},[696,1990,1991,1993,1995],{"class":698,"line":699},[696,1992,1844],{"class":790},[696,1994,794],{"class":710},[696,1996,1372],{"class":706},[696,1998,1999,2001,2003,2005,2008,2010],{"class":698,"line":755},[696,2000,1907],{"class":829},[696,2002,966],{"class":706},[696,2004,720],{"class":706},[696,2006,2007],{"class":723},"https:\u002F\u002Flogs-prod-eu-west-0.grafana.net",[696,2009,832],{"class":706},[696,2011,1407],{"class":706},[696,2013,2014,2017,2019,2021,2024,2026],{"class":698,"line":774},[696,2015,2016],{"class":829},"  user",[696,2018,966],{"class":706},[696,2020,720],{"class":706},[696,2022,2023],{"class":723},"123456",[696,2025,832],{"class":706},[696,2027,1407],{"class":706},[696,2029,2030,2033,2035,2038,2040,2043,2045,2047],{"class":698,"line":781},[696,2031,2032],{"class":829},"  apiKey",[696,2034,966],{"class":706},[696,2036,2037],{"class":710}," process",[696,2039,627],{"class":706},[696,2041,2042],{"class":710},"env",[696,2044,627],{"class":706},[696,2046,1594],{"class":710},[696,2048,1407],{"class":706},[696,2050,2051,2053],{"class":698,"line":813},[696,2052,851],{"class":706},[696,2054,854],{"class":710},[686,2056,2058],{"className":1866,"code":2057,"filename":1868,"language":1869,"meta":692,"style":692},"LOKI_ENDPOINT=https:\u002F\u002Flogs-prod-eu-west-0.grafana.net\nLOKI_USER=123456\nLOKI_API_KEY=glc_xxx\n",[602,2059,2060,2069,2078],{"__ignoreMap":692},[696,2061,2062,2064,2066],{"class":698,"line":699},[696,2063,736],{"class":710},[696,2065,932],{"class":706},[696,2067,2068],{"class":723},"https:\u002F\u002Flogs-prod-eu-west-0.grafana.net\n",[696,2070,2071,2073,2075],{"class":698,"line":755},[696,2072,1590],{"class":710},[696,2074,932],{"class":706},[696,2076,2077],{"class":723},"123456\n",[696,2079,2080,2082,2084],{"class":698,"line":774},[696,2081,1581],{"class":710},[696,2083,932],{"class":706},[696,2085,2086],{"class":723},"glc_xxx\n",[2088,2089,2091,2093,2094,2097,2098,2102,2103,627],"callout",{"color":2090,"icon":13},"info",[602,2092,622],{}," is the ",[597,2095,2096],{},"numeric instance ID"," of the Loki datasource. Find it under\n",[2099,2100,2101],"em",{},"Connections → Data sources → Loki"," in your Grafana Cloud stack. It is not your\naccount email. Using the wrong value is the usual cause of a ",[602,2104,2105],{},"401",[1532,2107,2109],{"id":2108},"which-auth-applies","Which auth applies",[1537,2111,2112,2131],{},[1540,2113,2114],{},[1543,2115,2116,2120,2124,2128],{},[1546,2117,2118],{},[602,2119,622],{},[1546,2121,2122],{},[602,2123,1701],{},[1546,2125,2126],{},[602,2127,1732],{},[1546,2129,2130],{},"Header sent",[1556,2132,2133,2147,2160,2173],{},[1543,2134,2135,2138,2140,2142],{},[1561,2136,2137],{},"✓",[1561,2139,2137],{},[1561,2141],{},[1561,2143,2144],{},[602,2145,2146],{},"Authorization: Basic base64(user:apiKey)",[1543,2148,2149,2151,2153,2155],{},[1561,2150],{},[1561,2152,2137],{},[1561,2154],{},[1561,2156,2157],{},[602,2158,2159],{},"Authorization: Bearer \u003CapiKey>",[1543,2161,2162,2164,2166,2168],{},[1561,2163],{},[1561,2165],{},[1561,2167,2137],{},[1561,2169,2170],{},[602,2171,2172],{},"X-Scope-OrgID: \u003CtenantId>",[1543,2174,2175,2177,2179,2181],{},[1561,2176],{},[1561,2178],{},[1561,2180],{},[1561,2182,2183],{},"none — unauthenticated instance",[583,2185,2186,2188],{},[602,2187,1732],{}," is independent and can be combined with either auth mode.",[679,2190,2192],{"id":2191},"labels-and-cardinality","Labels and cardinality",[2088,2194,2197,2198,2200,2201,2204],{"color":2195,"icon":2196},"warning","i-lucide-triangle-alert","Never promote a high-cardinality field to a label. Loki creates one stream per unique label combination, so labelling ",[602,2199,616],{}," or ",[602,2202,2203],{},"userId"," will create millions of streams and degrade or break your instance.",[583,2206,2207],{},"Add a label only for values you filter on and that have a bounded set:",[686,2209,2211],{"className":688,"code":2210,"filename":1837,"language":691,"meta":692,"style":692},"createLokiDrain({\n  \u002F\u002F `region` has a handful of values — safe\n  labelFields: ['service', 'environment', 'level', 'region'],\n  \u002F\u002F Static labels for everything in this deployment\n  labels: { cluster: 'prod-eu' },\n})\n",[602,2212,2213,2221,2226,2272,2277,2300],{"__ignoreMap":692},[696,2214,2215,2217,2219],{"class":698,"line":699},[696,2216,1844],{"class":790},[696,2218,794],{"class":710},[696,2220,1372],{"class":706},[696,2222,2223],{"class":698,"line":755},[696,2224,2225],{"class":751},"  \u002F\u002F `region` has a handful of values — safe\n",[696,2227,2228,2231,2233,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2265,2267,2270],{"class":698,"line":774},[696,2229,2230],{"class":829},"  labelFields",[696,2232,966],{"class":706},[696,2234,2235],{"class":710}," [",[696,2237,832],{"class":706},[696,2239,604],{"class":723},[696,2241,832],{"class":706},[696,2243,840],{"class":706},[696,2245,720],{"class":706},[696,2247,608],{"class":723},[696,2249,832],{"class":706},[696,2251,840],{"class":706},[696,2253,720],{"class":706},[696,2255,612],{"class":723},[696,2257,832],{"class":706},[696,2259,840],{"class":706},[696,2261,720],{"class":706},[696,2263,2264],{"class":723},"region",[696,2266,832],{"class":706},[696,2268,2269],{"class":710},"]",[696,2271,1407],{"class":706},[696,2273,2274],{"class":698,"line":781},[696,2275,2276],{"class":751},"  \u002F\u002F Static labels for everything in this deployment\n",[696,2278,2279,2282,2284,2286,2289,2291,2293,2296,2298],{"class":698,"line":813},[696,2280,2281],{"class":829},"  labels",[696,2283,966],{"class":706},[696,2285,707],{"class":706},[696,2287,2288],{"class":829}," cluster",[696,2290,966],{"class":706},[696,2292,720],{"class":706},[696,2294,2295],{"class":723},"prod-eu",[696,2297,832],{"class":706},[696,2299,1508],{"class":706},[696,2301,2302,2304],{"class":698,"line":848},[696,2303,851],{"class":706},[696,2305,854],{"class":710},[583,2307,2308],{},"Everything else stays in the JSON line and is fully queryable. See below.",[679,2310,2312],{"id":2311},"querying-in-grafana","Querying in Grafana",[583,2314,2315,2316,966],{},"Filter by label, then reach into the wide event with ",[602,2317,626],{},[686,2319,2323],{"className":2320,"code":2321,"language":2322,"meta":692,"style":692},"language-logql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{service=\"checkout\", environment=\"production\"}\n  | json\n  | status >= 500\n","logql",[602,2324,2325,2330,2335],{"__ignoreMap":692},[696,2326,2327],{"class":698,"line":699},[696,2328,2329],{},"{service=\"checkout\", environment=\"production\"}\n",[696,2331,2332],{"class":698,"line":755},[696,2333,2334],{},"  | json\n",[696,2336,2337],{"class":698,"line":774},[696,2338,2339],{},"  | status >= 500\n",[686,2341,2343],{"className":2320,"code":2342,"language":2322,"meta":692,"style":692},"# Slow requests on one route\n{service=\"checkout\"} | json | path=\"\u002Fapi\u002Forders\" | durationMs > 1000\n",[602,2344,2345,2350],{"__ignoreMap":692},[696,2346,2347],{"class":698,"line":699},[696,2348,2349],{},"# Slow requests on one route\n",[696,2351,2352],{"class":698,"line":755},[696,2353,2354],{},"{service=\"checkout\"} | json | path=\"\u002Fapi\u002Forders\" | durationMs > 1000\n",[686,2356,2358],{"className":2320,"code":2357,"language":2322,"meta":692,"style":692},"# One request end to end\n{service=\"checkout\"} | json | requestId=\"4a8ff3a8-...\"\n",[602,2359,2360,2365],{"__ignoreMap":692},[696,2361,2362],{"class":698,"line":699},[696,2363,2364],{},"# One request end to end\n",[696,2366,2367],{"class":698,"line":755},[696,2368,2369],{},"{service=\"checkout\"} | json | requestId=\"4a8ff3a8-...\"\n",[686,2371,2373],{"className":2320,"code":2372,"language":2322,"meta":692,"style":692},"# Error rate per service\nsum by (service) (rate({environment=\"production\", level=\"error\"}[5m]))\n",[602,2374,2375,2380],{"__ignoreMap":692},[696,2376,2377],{"class":698,"line":699},[696,2378,2379],{},"# Error rate per service\n",[696,2381,2382],{"class":698,"line":755},[696,2383,2384],{},"sum by (service) (rate({environment=\"production\", level=\"error\"}[5m]))\n",[679,2386,2388],{"id":2387},"batching","Batching",[583,2390,2391],{},"Pair the drain with a pipeline to push in batches rather than per request:",[686,2393,2395],{"className":688,"code":2394,"filename":1837,"language":691,"meta":692,"style":692},"import { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createLokiDrain } from 'evlog\u002Floki'\nimport type { DrainContext } from 'evlog'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 100, intervalMs: 5000 },\n})\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', pipeline(createLokiDrain()))\n})\n",[602,2396,2397,2417,2435,2457,2461,2485,2515,2521,2525,2546,2579],{"__ignoreMap":692},[696,2398,2399,2401,2403,2406,2408,2410,2412,2415],{"class":698,"line":699},[696,2400,703],{"class":702},[696,2402,707],{"class":706},[696,2404,2405],{"class":710}," createDrainPipeline",[696,2407,714],{"class":706},[696,2409,717],{"class":702},[696,2411,720],{"class":706},[696,2413,2414],{"class":723},"evlog\u002Fpipeline",[696,2416,727],{"class":706},[696,2418,2419,2421,2423,2425,2427,2429,2431,2433],{"class":698,"line":755},[696,2420,703],{"class":702},[696,2422,707],{"class":706},[696,2424,711],{"class":710},[696,2426,714],{"class":706},[696,2428,717],{"class":702},[696,2430,720],{"class":706},[696,2432,724],{"class":723},[696,2434,727],{"class":706},[696,2436,2437,2439,2442,2444,2447,2449,2451,2453,2455],{"class":698,"line":774},[696,2438,703],{"class":702},[696,2440,2441],{"class":702}," type",[696,2443,707],{"class":706},[696,2445,2446],{"class":710}," DrainContext",[696,2448,714],{"class":706},[696,2450,717],{"class":702},[696,2452,720],{"class":706},[696,2454,955],{"class":723},[696,2456,727],{"class":706},[696,2458,2459],{"class":698,"line":781},[696,2460,778],{"emptyLinePlaceholder":777},[696,2462,2463,2465,2468,2470,2472,2475,2478,2481,2483],{"class":698,"line":813},[696,2464,926],{"class":806},[696,2466,2467],{"class":710}," pipeline ",[696,2469,932],{"class":706},[696,2471,2405],{"class":790},[696,2473,2474],{"class":706},"\u003C",[696,2476,2477],{"class":1425},"DrainContext",[696,2479,2480],{"class":706},">",[696,2482,794],{"class":710},[696,2484,1372],{"class":706},[696,2486,2487,2490,2492,2494,2497,2499,2503,2505,2508,2510,2513],{"class":698,"line":848},[696,2488,2489],{"class":829},"  batch",[696,2491,966],{"class":706},[696,2493,707],{"class":706},[696,2495,2496],{"class":829}," size",[696,2498,966],{"class":706},[696,2500,2502],{"class":2501},"sbssI"," 100",[696,2504,840],{"class":706},[696,2506,2507],{"class":829}," intervalMs",[696,2509,966],{"class":706},[696,2511,2512],{"class":2501}," 5000",[696,2514,1508],{"class":706},[696,2516,2517,2519],{"class":698,"line":1410},[696,2518,851],{"class":706},[696,2520,854],{"class":710},[696,2522,2523],{"class":698,"line":1417},[696,2524,778],{"emptyLinePlaceholder":777},[696,2526,2528,2530,2532,2534,2536,2538,2540,2542,2544],{"class":698,"line":2527},9,[696,2529,784],{"class":702},[696,2531,787],{"class":702},[696,2533,791],{"class":790},[696,2535,794],{"class":710},[696,2537,794],{"class":706},[696,2539,800],{"class":799},[696,2541,803],{"class":706},[696,2543,807],{"class":806},[696,2545,810],{"class":706},[696,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2572,2574,2576],{"class":698,"line":2548},10,[696,2550,816],{"class":710},[696,2552,627],{"class":706},[696,2554,821],{"class":710},[696,2556,627],{"class":706},[696,2558,826],{"class":790},[696,2560,794],{"class":829},[696,2562,832],{"class":706},[696,2564,835],{"class":723},[696,2566,832],{"class":706},[696,2568,840],{"class":706},[696,2570,2571],{"class":790}," pipeline",[696,2573,794],{"class":829},[696,2575,1844],{"class":790},[696,2577,2578],{"class":829},"()))\n",[696,2580,2582,2584],{"class":698,"line":2581},11,[696,2583,851],{"class":706},[696,2585,854],{"class":710},[583,2587,2588],{},"Events sharing a label set are grouped into a single Loki stream, and entries are sorted by timestamp, because Loki rejects out-of-order pushes within a stream.",[679,2590,2592],{"id":2591},"verify-it-locally","Verify it locally",[583,2594,2595],{},"Spin up Loki in Docker and push a real event, with no cloud account needed:",[686,2597,2600],{"className":1866,"code":2598,"filename":2599,"language":1869,"meta":692,"style":692},"docker compose -f packages\u002Fevlog\u002Ftest\u002Fe2e\u002Fdocker-compose.yml up -d\nLOKI_ENDPOINT=http:\u002F\u002Flocalhost:3100 pnpm run test:e2e\ndocker compose -f packages\u002Fevlog\u002Ftest\u002Fe2e\u002Fdocker-compose.yml down -v\n","Terminal",[602,2601,2602,2622,2639],{"__ignoreMap":692},[696,2603,2604,2607,2610,2613,2616,2619],{"class":698,"line":699},[696,2605,2606],{"class":1425},"docker",[696,2608,2609],{"class":723}," compose",[696,2611,2612],{"class":723}," -f",[696,2614,2615],{"class":723}," packages\u002Fevlog\u002Ftest\u002Fe2e\u002Fdocker-compose.yml",[696,2617,2618],{"class":723}," up",[696,2620,2621],{"class":723}," -d\n",[696,2623,2624,2626,2628,2630,2633,2636],{"class":698,"line":755},[696,2625,736],{"class":710},[696,2627,932],{"class":706},[696,2629,657],{"class":723},[696,2631,2632],{"class":1425}," pnpm",[696,2634,2635],{"class":723}," run",[696,2637,2638],{"class":723}," test:e2e\n",[696,2640,2641,2643,2645,2647,2649,2652],{"class":698,"line":774},[696,2642,2606],{"class":1425},[696,2644,2609],{"class":723},[696,2646,2612],{"class":723},[696,2648,2615],{"class":723},[696,2650,2651],{"class":723}," down",[696,2653,2654],{"class":723}," -v\n",[583,2656,2657,2658,2661,2662,2664],{},"The suite is a ",[597,2659,2660],{},"round-trip",": it pushes events, queries them back through\nLoki's range API, and asserts the label set, the JSON log line and the\ntimestamp survived. Without ",[602,2663,736],{}," it skips itself with a visible\nlabel rather than passing silently.",[583,2666,2667,2668,2670,2671,627],{},"To eyeball the result instead, point any Grafana at ",[602,2669,657],{},"\nand run ",[602,2672,2673],{},"{service=\"evlog-e2e\"}",[679,2675,2677],{"id":2676},"troubleshooting","Troubleshooting",[583,2679,2680,2685,2686,2688,2689,2691,2692,2695],{},[597,2681,2682,627],{},[602,2683,2684],{},"Missing endpoint"," ",[602,2687,736],{}," is unset and no ",[602,2690,1680],{}," was passed. The drain logs ",[602,2693,2694],{},"[evlog\u002Floki] Missing endpoint"," once and then does nothing, so requests are never blocked or failed.",[583,2697,2698,2703,2704,2706,2707,2709],{},[597,2699,2700,627],{},[602,2701,2702],{},"Loki API error: 401"," On Grafana Cloud, check that ",[602,2705,622],{}," is the numeric ",[597,2708,1982],{}," of the Loki datasource, not your account email.",[583,2711,2712,2718,2719,2722],{},[597,2713,2714,2717],{},[602,2715,2716],{},"Loki API error: 400"," mentioning out-of-order entries."," Older Loki versions reject entries older than the most recent one in a stream. evlog sorts within each push; if you still hit this, enable ",[602,2720,2721],{},"unordered_writes"," in Loki or reduce the batch interval.",[583,2724,2725,2728,2729,2732],{},[597,2726,2727],{},"Nothing appears in Grafana."," Confirm the label set you are querying. Run ",[602,2730,2731],{},"{service=~\".+\"}"," first to see which streams arrived.",[679,2734,2736],{"id":2735},"direct-api-usage","Direct API usage",[583,2738,2739],{},"Bypass the drain to push events yourself:",[686,2741,2744],{"className":688,"code":2742,"filename":2743,"language":691,"meta":692,"style":692},"import { sendBatchToLoki, sendToLoki } from 'evlog\u002Floki'\n\nawait sendToLoki(event, { endpoint: 'http:\u002F\u002Flocalhost:3100' })\nawait sendBatchToLoki(events, { endpoint: 'http:\u002F\u002Flocalhost:3100' })\n","scripts\u002Fbackfill.ts",[602,2745,2746,2770,2774,2801],{"__ignoreMap":692},[696,2747,2748,2750,2752,2755,2757,2760,2762,2764,2766,2768],{"class":698,"line":699},[696,2749,703],{"class":702},[696,2751,707],{"class":706},[696,2753,2754],{"class":710}," sendBatchToLoki",[696,2756,840],{"class":706},[696,2758,2759],{"class":710}," sendToLoki",[696,2761,714],{"class":706},[696,2763,717],{"class":702},[696,2765,720],{"class":706},[696,2767,724],{"class":723},[696,2769,727],{"class":706},[696,2771,2772],{"class":698,"line":755},[696,2773,778],{"emptyLinePlaceholder":777},[696,2775,2776,2778,2780,2783,2785,2787,2789,2791,2793,2795,2797,2799],{"class":698,"line":774},[696,2777,1160],{"class":702},[696,2779,2759],{"class":790},[696,2781,2782],{"class":710},"(event",[696,2784,840],{"class":706},[696,2786,707],{"class":706},[696,2788,1851],{"class":829},[696,2790,966],{"class":706},[696,2792,720],{"class":706},[696,2794,657],{"class":723},[696,2796,832],{"class":706},[696,2798,714],{"class":706},[696,2800,854],{"class":710},[696,2802,2803,2805,2807,2810,2812,2814,2816,2818,2820,2822,2824,2826],{"class":698,"line":781},[696,2804,1160],{"class":702},[696,2806,2754],{"class":790},[696,2808,2809],{"class":710},"(events",[696,2811,840],{"class":706},[696,2813,707],{"class":706},[696,2815,1851],{"class":829},[696,2817,966],{"class":706},[696,2819,720],{"class":706},[696,2821,657],{"class":723},[696,2823,832],{"class":706},[696,2825,714],{"class":706},[696,2827,854],{"class":710},[583,2829,2830,605,2833,609,2836,2839],{},[602,2831,2832],{},"buildLokiPayload()",[602,2834,2835],{},"toLokiLabels()",[602,2837,2838],{},"resolveLokiPushUrl()"," are also exported for custom transports.",[679,2841,2843],{"id":2842},"next-steps","Next steps",[2845,2846,2847,2852,2857,2862],"ul",{},[640,2848,2849,2851],{},[587,2850,66],{"href":67},": control log volume before it reaches Loki",[640,2853,2854,2856],{},[587,2855,440],{"href":441},": add derived fields to every event",[640,2858,2859,2861],{},[587,2860,508],{"href":509},": batching, retries, and fan-out",[640,2863,2864,2867],{},[587,2865,2866],{"href":153},"Adapters Overview",": all available destinations",[2869,2870,2871],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":692,"searchDepth":755,"depth":755,"links":2873},[2874,2875,2876,2881,2886,2887,2888,2889,2890,2891,2892],{"id":681,"depth":755,"text":20},{"id":730,"depth":755,"text":25},{"id":1530,"depth":755,"text":521,"children":2877},[2878,2879,2880],{"id":1534,"depth":774,"text":1535},{"id":1626,"depth":774,"text":1627},{"id":1654,"depth":774,"text":346},{"id":1822,"depth":755,"text":1823,"children":2882},[2883,2884,2885],{"id":1829,"depth":774,"text":1830},{"id":1975,"depth":774,"text":1976},{"id":2108,"depth":774,"text":2109},{"id":2191,"depth":755,"text":2192},{"id":2311,"depth":755,"text":2312},{"id":2387,"depth":755,"text":2388},{"id":2591,"depth":755,"text":2592},{"id":2676,"depth":755,"text":2677},{"id":2735,"depth":755,"text":2736},{"id":2842,"depth":755,"text":2843},"Push wide events to Grafana Loki — self-hosted, multi-tenant, or Grafana Cloud — with low-cardinality labels and full JSON querying.","md",[2896,2903],{"label":2897,"icon":2898,"to":2899,"target":2900,"color":2901,"variant":2902},"Loki HTTP API","i-lucide-external-link","https:\u002F\u002Fgrafana.com\u002Fdocs\u002Floki\u002Flatest\u002Freference\u002Floki-http-api\u002F","_blank","neutral","subtle",{"label":2904,"icon":2898,"to":2905,"target":2900,"color":2901,"variant":2902},"LogQL","https:\u002F\u002Fgrafana.com\u002Fdocs\u002Floki\u002Flatest\u002Fquery\u002F",{},{"title":191,"icon":194},{"title":578,"description":2893},"3ojNapfXdoP0ukimUFES-lT5m0GMw5mDjlzlQ4F9Dtc",[2911,2913],{"title":181,"path":182,"stem":183,"description":2912,"icon":184,"children":-1},"Send wide events to Datadog Logs via the native HTTP intake API. Supports all Datadog sites and DD_* environment variables.",{"title":196,"path":197,"stem":198,"description":2914,"icon":199,"children":-1},"Insert wide events into ClickHouse over the HTTP interface — typed columns for what you aggregate, full JSON for everything else.",1789915920654]