[{"data":1,"prerenderedAt":508},["ShallowReactive",2],{"navigation_docs":3,"-guide-server-composables":61,"-guide-server-composables-surround":503},[4,21,42,52],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":20},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",false,{"title":22,"icon":23,"path":24,"stem":25,"children":26,"page":20},"Guide","i-lucide-book-open","\u002Fguide","2.guide",[27,32,37],{"title":28,"path":29,"stem":30,"icon":31},"Configuration","\u002Fguide\u002Fconfiguration","2.guide\u002F1.configuration","i-lucide-settings",{"title":33,"path":34,"stem":35,"icon":36},"Server Composables","\u002Fguide\u002Fserver-composables","2.guide\u002F2.server-composables","i-lucide-code",{"title":38,"path":39,"stem":40,"icon":41},"MCP Server","\u002Fguide\u002Fmcp-server","2.guide\u002F3.mcp-server","i-lucide-brain",{"title":43,"icon":44,"path":45,"stem":46,"children":47,"page":20},"DevTools","i-lucide-monitor","\u002Fdevtools","3.devtools",[48],{"title":49,"path":50,"stem":51,"icon":44},"DevTools UI","\u002Fdevtools\u002Fui","3.devtools\u002F1.ui",{"title":53,"icon":54,"path":55,"stem":56,"children":57,"page":20},"Traced Events","i-lucide-activity","\u002Ftraced-events","4.traced-events",[58],{"title":53,"path":59,"stem":60,"icon":54},"\u002Ftraced-events\u002Fchannels","4.traced-events\u002F1.channels",{"id":62,"title":33,"body":63,"description":496,"extension":497,"links":498,"meta":499,"navigation":500,"path":34,"seo":501,"stem":35,"__hash__":502},"docs\u002F2.guide\u002F2.server-composables.md",{"type":64,"value":65,"toc":491},"minimark",[66,70,75,82,298,302,308,464,467,471,487],[67,68,69],"p",{},"The module provides two composables for manual instrumentation in your server routes.",[71,72,74],"h2",{"id":73},"use-the-tracer-composable","Use the tracer composable",[67,76,77,81],{},[78,79,80],"code",{},"useOtelTracer(namespace)"," creates a tracer that wraps async operations in OpenTelemetry spans:",[83,84,89],"pre",{"className":85,"code":86,"language":87,"meta":88,"style":88},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineEventHandler } from 'h3'\n\nexport default defineEventHandler(async () => {\n  const { trace } = useOtelTracer('checkout')\n\n  const result = await trace('process-payment', async () => {\n    \u002F\u002F This runs inside an OpenTelemetry span named \"checkout.process-payment\"\n    const payment = await processPayment()\n    return payment\n  })\n\n  return result\n})\n","ts","",[78,90,91,124,131,159,192,197,233,240,259,268,276,281,290],{"__ignoreMap":88},[92,93,96,100,104,108,111,114,117,121],"span",{"class":94,"line":95},"line",1,[92,97,99],{"class":98},"s7zQu","import",[92,101,103],{"class":102},"sMK4o"," {",[92,105,107],{"class":106},"sTEyZ"," defineEventHandler",[92,109,110],{"class":102}," }",[92,112,113],{"class":98}," from",[92,115,116],{"class":102}," '",[92,118,120],{"class":119},"sfazB","h3",[92,122,123],{"class":102},"'\n",[92,125,127],{"class":94,"line":126},2,[92,128,130],{"emptyLinePlaceholder":129},true,"\n",[92,132,134,137,140,143,146,150,153,156],{"class":94,"line":133},3,[92,135,136],{"class":98},"export",[92,138,139],{"class":98}," default",[92,141,107],{"class":142},"s2Zo4",[92,144,145],{"class":106},"(",[92,147,149],{"class":148},"spNyl","async",[92,151,152],{"class":102}," ()",[92,154,155],{"class":148}," =>",[92,157,158],{"class":102}," {\n",[92,160,162,165,167,170,172,175,178,181,184,187,189],{"class":94,"line":161},4,[92,163,164],{"class":148},"  const",[92,166,103],{"class":102},[92,168,169],{"class":106}," trace",[92,171,110],{"class":102},[92,173,174],{"class":102}," =",[92,176,177],{"class":142}," useOtelTracer",[92,179,145],{"class":180},"swJcz",[92,182,183],{"class":102},"'",[92,185,186],{"class":119},"checkout",[92,188,183],{"class":102},[92,190,191],{"class":180},")\n",[92,193,195],{"class":94,"line":194},5,[92,196,130],{"emptyLinePlaceholder":129},[92,198,200,202,205,207,210,212,214,216,219,221,224,227,229,231],{"class":94,"line":199},6,[92,201,164],{"class":148},[92,203,204],{"class":106}," result",[92,206,174],{"class":102},[92,208,209],{"class":98}," await",[92,211,169],{"class":142},[92,213,145],{"class":180},[92,215,183],{"class":102},[92,217,218],{"class":119},"process-payment",[92,220,183],{"class":102},[92,222,223],{"class":102},",",[92,225,226],{"class":148}," async",[92,228,152],{"class":102},[92,230,155],{"class":148},[92,232,158],{"class":102},[92,234,236],{"class":94,"line":235},7,[92,237,239],{"class":238},"sHwdD","    \u002F\u002F This runs inside an OpenTelemetry span named \"checkout.process-payment\"\n",[92,241,243,246,249,251,253,256],{"class":94,"line":242},8,[92,244,245],{"class":148},"    const",[92,247,248],{"class":106}," payment",[92,250,174],{"class":102},[92,252,209],{"class":98},[92,254,255],{"class":142}," processPayment",[92,257,258],{"class":180},"()\n",[92,260,262,265],{"class":94,"line":261},9,[92,263,264],{"class":98},"    return",[92,266,267],{"class":106}," payment\n",[92,269,271,274],{"class":94,"line":270},10,[92,272,273],{"class":102},"  }",[92,275,191],{"class":180},[92,277,279],{"class":94,"line":278},11,[92,280,130],{"emptyLinePlaceholder":129},[92,282,284,287],{"class":94,"line":283},12,[92,285,286],{"class":98},"  return",[92,288,289],{"class":106}," result\n",[92,291,293,296],{"class":94,"line":292},13,[92,294,295],{"class":102},"}",[92,297,191],{"class":106},[71,299,301],{"id":300},"use-the-logger-composable","Use the logger composable",[67,303,304,307],{},[78,305,306],{},"useOtelLogger()"," returns an OpenTelemetry logger instance for emitting structured logs:",[83,309,311],{"className":85,"code":310,"language":87,"meta":88,"style":88},"import { defineEventHandler } from 'h3'\n\nexport default defineEventHandler(async () => {\n  const logger = useOtelLogger()\n\n  logger.emit({\n    severityNumber: 9,\n    body: 'Payment processed',\n    attributes: { amount: 42, currency: 'USD' },\n  })\n})\n",[78,312,313,331,335,353,367,371,387,402,418,452,458],{"__ignoreMap":88},[92,314,315,317,319,321,323,325,327,329],{"class":94,"line":95},[92,316,99],{"class":98},[92,318,103],{"class":102},[92,320,107],{"class":106},[92,322,110],{"class":102},[92,324,113],{"class":98},[92,326,116],{"class":102},[92,328,120],{"class":119},[92,330,123],{"class":102},[92,332,333],{"class":94,"line":126},[92,334,130],{"emptyLinePlaceholder":129},[92,336,337,339,341,343,345,347,349,351],{"class":94,"line":133},[92,338,136],{"class":98},[92,340,139],{"class":98},[92,342,107],{"class":142},[92,344,145],{"class":106},[92,346,149],{"class":148},[92,348,152],{"class":102},[92,350,155],{"class":148},[92,352,158],{"class":102},[92,354,355,357,360,362,365],{"class":94,"line":161},[92,356,164],{"class":148},[92,358,359],{"class":106}," logger",[92,361,174],{"class":102},[92,363,364],{"class":142}," useOtelLogger",[92,366,258],{"class":180},[92,368,369],{"class":94,"line":194},[92,370,130],{"emptyLinePlaceholder":129},[92,372,373,376,379,382,384],{"class":94,"line":199},[92,374,375],{"class":106},"  logger",[92,377,378],{"class":102},".",[92,380,381],{"class":142},"emit",[92,383,145],{"class":180},[92,385,386],{"class":102},"{\n",[92,388,389,392,395,399],{"class":94,"line":235},[92,390,391],{"class":180},"    severityNumber",[92,393,394],{"class":102},":",[92,396,398],{"class":397},"sbssI"," 9",[92,400,401],{"class":102},",\n",[92,403,404,407,409,411,414,416],{"class":94,"line":242},[92,405,406],{"class":180},"    body",[92,408,394],{"class":102},[92,410,116],{"class":102},[92,412,413],{"class":119},"Payment processed",[92,415,183],{"class":102},[92,417,401],{"class":102},[92,419,420,423,425,427,430,432,435,437,440,442,444,447,449],{"class":94,"line":261},[92,421,422],{"class":180},"    attributes",[92,424,394],{"class":102},[92,426,103],{"class":102},[92,428,429],{"class":180}," amount",[92,431,394],{"class":102},[92,433,434],{"class":397}," 42",[92,436,223],{"class":102},[92,438,439],{"class":180}," currency",[92,441,394],{"class":102},[92,443,116],{"class":102},[92,445,446],{"class":119},"USD",[92,448,183],{"class":102},[92,450,451],{"class":102}," },\n",[92,453,454,456],{"class":94,"line":270},[92,455,273],{"class":102},[92,457,191],{"class":180},[92,459,460,462],{"class":94,"line":278},[92,461,295],{"class":102},[92,463,191],{"class":106},[67,465,466],{},"Logs and spans created with these composables automatically appear in the DevTools UI when devtools are enabled.",[71,468,470],{"id":469},"next-steps","Next steps",[472,473,474,482],"ul",{},[475,476,477],"li",{},[478,479,481],"a",{"href":480},"\u002Fguide\u002Fconfiguration#tracing-channels","Configure tracing channels",[475,483,484],{},[478,485,486],{"href":50},"Browse traces in the DevTools UI",[488,489,490],"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 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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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}",{"title":88,"searchDepth":126,"depth":126,"links":492},[493,494,495],{"id":73,"depth":126,"text":74},{"id":300,"depth":126,"text":301},{"id":469,"depth":126,"text":470},"Instrument your server routes manually with useOtelTracer and useOtelLogger","md",null,{},{"icon":36},{"title":33,"description":496},"2BIxdRY-BjEp9MA6hGSMC1QrGtL8Edd-cKS6puS_5Vo",[504,506],{"title":28,"path":29,"stem":30,"description":505,"icon":31,"children":-1},"Configure the module options and tracing channels",{"title":38,"path":39,"stem":40,"description":507,"icon":41,"children":-1},"Query telemetry data from AI agents via the Model Context Protocol",1787688356248]