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