[{"data":1,"prerenderedAt":885},["ShallowReactive",2],{"navigation_docs":3,"-guide-configuration":61,"-guide-configuration-surround":880},[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":28,"body":63,"description":873,"extension":874,"links":875,"meta":876,"navigation":877,"path":29,"seo":878,"stem":30,"__hash__":879},"docs\u002F2.guide\u002F1.configuration.md",{"type":64,"value":65,"toc":863},"minimark",[66,70,75,83,192,197,261,265,272,365,375,379,393,470,474,477,523,526,809,815,819,822,830,841,845,859],[67,68,69],"p",{},"Configure which parts of your Nuxt application are traced and how the OpenTelemetry SDK is initialized.",[71,72,74],"h2",{"id":73},"configure-module-options","Configure module options",[67,76,77,78,82],{},"Set module options under the ",[79,80,81],"code",{},"nuxtOtel"," key in your Nuxt configuration:",[84,85,91],"pre",{"className":86,"code":87,"filename":88,"language":89,"meta":90,"style":90},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  nuxtOtel: {\n    \u002F\u002F Enable built-in OpenTelemetry SDK (Node.js only)\n    instrument: true,\n\n    \u002F\u002F Enable DevTools UI at \u002F__nuxt-otel\n    devtools: true,\n  },\n})\n","nuxt.config.ts","ts","",[79,92,93,117,130,137,152,159,165,177,183],{"__ignoreMap":90},[94,95,98,102,105,109,113],"span",{"class":96,"line":97},"line",1,[94,99,101],{"class":100},"s7zQu","export",[94,103,104],{"class":100}," default",[94,106,108],{"class":107},"s2Zo4"," defineNuxtConfig",[94,110,112],{"class":111},"sTEyZ","(",[94,114,116],{"class":115},"sMK4o","{\n",[94,118,120,124,127],{"class":96,"line":119},2,[94,121,123],{"class":122},"swJcz","  nuxtOtel",[94,125,126],{"class":115},":",[94,128,129],{"class":115}," {\n",[94,131,133],{"class":96,"line":132},3,[94,134,136],{"class":135},"sHwdD","    \u002F\u002F Enable built-in OpenTelemetry SDK (Node.js only)\n",[94,138,140,143,145,149],{"class":96,"line":139},4,[94,141,142],{"class":122},"    instrument",[94,144,126],{"class":115},[94,146,148],{"class":147},"sfNiH"," true",[94,150,151],{"class":115},",\n",[94,153,155],{"class":96,"line":154},5,[94,156,158],{"emptyLinePlaceholder":157},true,"\n",[94,160,162],{"class":96,"line":161},6,[94,163,164],{"class":135},"    \u002F\u002F Enable DevTools UI at \u002F__nuxt-otel\n",[94,166,168,171,173,175],{"class":96,"line":167},7,[94,169,170],{"class":122},"    devtools",[94,172,126],{"class":115},[94,174,148],{"class":147},[94,176,151],{"class":115},[94,178,180],{"class":96,"line":179},8,[94,181,182],{"class":115},"  },\n",[94,184,186,189],{"class":96,"line":185},9,[94,187,188],{"class":115},"}",[94,190,191],{"class":111},")\n",[193,194,196],"h3",{"id":195},"options-reference","Options reference",[198,199,200,219],"table",{},[201,202,203],"thead",{},[204,205,206,210,213,216],"tr",{},[207,208,209],"th",{},"Option",[207,211,212],{},"Type",[207,214,215],{},"Default",[207,217,218],{},"Description",[220,221,222,243],"tbody",{},[204,223,224,230,235,240],{},[225,226,227],"td",{},[79,228,229],{},"instrument",[225,231,232],{},[79,233,234],{},"boolean",[225,236,237],{},[79,238,239],{},"false",[225,241,242],{},"Enable the built-in NodeSDK for OTLP export",[204,244,245,250,254,258],{},[225,246,247],{},[79,248,249],{},"devtools",[225,251,252],{},[79,253,234],{},[225,255,256],{},[79,257,239],{},[225,259,260],{},"Enable the DevTools UI",[71,262,264],{"id":263},"configure-tracing-channels","Configure tracing channels",[67,266,267,268,271],{},"Enable or disable specific diagnostic channels via the top-level ",[79,269,270],{},"tracingChannel"," Nuxt option:",[84,273,275],{"className":86,"code":274,"filename":88,"language":89,"meta":90,"style":90},"export default defineNuxtConfig({\n  tracingChannel: {\n    nuxt: true, \u002F\u002F Nuxt render lifecycle\n    h3: true, \u002F\u002F H3 request handling\n    srvx: true, \u002F\u002F Server route requests\n    unstorage: true, \u002F\u002F Storage operations\n  },\n})\n",[79,276,277,289,298,313,327,341,355,359],{"__ignoreMap":90},[94,278,279,281,283,285,287],{"class":96,"line":97},[94,280,101],{"class":100},[94,282,104],{"class":100},[94,284,108],{"class":107},[94,286,112],{"class":111},[94,288,116],{"class":115},[94,290,291,294,296],{"class":96,"line":119},[94,292,293],{"class":122},"  tracingChannel",[94,295,126],{"class":115},[94,297,129],{"class":115},[94,299,300,303,305,307,310],{"class":96,"line":132},[94,301,302],{"class":122},"    nuxt",[94,304,126],{"class":115},[94,306,148],{"class":147},[94,308,309],{"class":115},",",[94,311,312],{"class":135}," \u002F\u002F Nuxt render lifecycle\n",[94,314,315,318,320,322,324],{"class":96,"line":139},[94,316,317],{"class":122},"    h3",[94,319,126],{"class":115},[94,321,148],{"class":147},[94,323,309],{"class":115},[94,325,326],{"class":135}," \u002F\u002F H3 request handling\n",[94,328,329,332,334,336,338],{"class":96,"line":154},[94,330,331],{"class":122},"    srvx",[94,333,126],{"class":115},[94,335,148],{"class":147},[94,337,309],{"class":115},[94,339,340],{"class":135}," \u002F\u002F Server route requests\n",[94,342,343,346,348,350,352],{"class":96,"line":161},[94,344,345],{"class":122},"    unstorage",[94,347,126],{"class":115},[94,349,148],{"class":147},[94,351,309],{"class":115},[94,353,354],{"class":135}," \u002F\u002F Storage operations\n",[94,356,357],{"class":96,"line":167},[94,358,182],{"class":115},[94,360,361,363],{"class":96,"line":179},[94,362,188],{"class":115},[94,364,191],{"class":111},[67,366,367,368,371,372,374],{},"Set ",[79,369,370],{},"tracingChannel: true"," to enable all channels, or ",[79,373,239],{}," to disable all.",[71,376,378],{"id":377},"configure-otel-sdk-exporters","Configure OTel SDK exporters",[67,380,381,382,385,386,126],{},"When ",[79,383,384],{},"instrument: true",", the built-in NodeSDK exports traces via OTLP. Configure it using ",[387,388,392],"a",{"href":389,"rel":390},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fotel\u002Fconfiguration\u002Fsdk-environment-variables\u002F",[391],"nofollow","standard OpenTelemetry environment variables",[198,394,395,407],{},[201,396,397],{},[204,398,399,402,404],{},[207,400,401],{},"Variable",[207,403,218],{},[207,405,406],{},"Values",[220,408,409,431,452],{},[204,410,411,416,419],{},[225,412,413],{},[79,414,415],{},"OTEL_TRACES_EXPORTER",[225,417,418],{},"Trace exporter",[225,420,421,424,425,424,428],{},[79,422,423],{},"otlp",", ",[79,426,427],{},"console",[79,429,430],{},"none",[204,432,433,438,441],{},[225,434,435],{},[79,436,437],{},"OTEL_METRICS_EXPORTER",[225,439,440],{},"Metrics exporter",[225,442,443,424,445,424,447,424,450],{},[79,444,423],{},[79,446,427],{},[79,448,449],{},"prometheus",[79,451,430],{},[204,453,454,459,462],{},[225,455,456],{},[79,457,458],{},"OTEL_LOGS_EXPORTER",[225,460,461],{},"Logs exporter",[225,463,464,424,466,424,468],{},[79,465,423],{},[79,467,427],{},[79,469,430],{},[71,471,473],{"id":472},"use-a-custom-instrumentation-setup","Use a custom instrumentation setup",[67,475,476],{},"When you need full control over the OpenTelemetry SDK, disable the built-in setup and provide your own:",[84,478,480],{"className":86,"code":479,"filename":88,"language":89,"meta":90,"style":90},"export default defineNuxtConfig({\n  nuxtOtel: {\n    instrument: false,\n  },\n})\n",[79,481,482,494,502,513,517],{"__ignoreMap":90},[94,483,484,486,488,490,492],{"class":96,"line":97},[94,485,101],{"class":100},[94,487,104],{"class":100},[94,489,108],{"class":107},[94,491,112],{"class":111},[94,493,116],{"class":115},[94,495,496,498,500],{"class":96,"line":119},[94,497,123],{"class":122},[94,499,126],{"class":115},[94,501,129],{"class":115},[94,503,504,506,508,511],{"class":96,"line":132},[94,505,142],{"class":122},[94,507,126],{"class":115},[94,509,510],{"class":147}," false",[94,512,151],{"class":115},[94,514,515],{"class":96,"line":139},[94,516,182],{"class":115},[94,518,519,521],{"class":96,"line":154},[94,520,188],{"class":115},[94,522,191],{"class":111},[67,524,525],{},"Then create a Nitro plugin:",[84,527,530],{"className":86,"code":528,"filename":529,"language":89,"meta":90,"style":90},"import { defineNitroPlugin } from 'nitropack\u002Fruntime'\nimport { NodeSDK } from '@opentelemetry\u002Fsdk-node'\nimport { OTLPTraceExporter } from '@opentelemetry\u002Fexporter-trace-otlp-http'\nimport { Resource } from '@opentelemetry\u002Fresources'\nimport { SEMRESATTRS_SERVICE_NAME } from '@opentelemetry\u002Fsemantic-conventions'\n\nexport default defineNitroPlugin(() => {\n  const sdk = new NodeSDK({\n    resource: new Resource({\n      [SEMRESATTRS_SERVICE_NAME]: 'my-nuxt-app',\n    }),\n    traceExporter: new OTLPTraceExporter({\n      url: 'http:\u002F\u002Fmy-collector:4318\u002Fv1\u002Ftraces',\n    }),\n  })\n\n  sdk.start()\n})\n","server\u002Fplugins\u002Fotel.ts",[79,531,532,559,579,599,619,639,643,662,682,697,721,732,748,765,774,782,787,802],{"__ignoreMap":90},[94,533,534,537,540,543,546,549,552,556],{"class":96,"line":97},[94,535,536],{"class":100},"import",[94,538,539],{"class":115}," {",[94,541,542],{"class":111}," defineNitroPlugin",[94,544,545],{"class":115}," }",[94,547,548],{"class":100}," from",[94,550,551],{"class":115}," '",[94,553,555],{"class":554},"sfazB","nitropack\u002Fruntime",[94,557,558],{"class":115},"'\n",[94,560,561,563,565,568,570,572,574,577],{"class":96,"line":119},[94,562,536],{"class":100},[94,564,539],{"class":115},[94,566,567],{"class":111}," NodeSDK",[94,569,545],{"class":115},[94,571,548],{"class":100},[94,573,551],{"class":115},[94,575,576],{"class":554},"@opentelemetry\u002Fsdk-node",[94,578,558],{"class":115},[94,580,581,583,585,588,590,592,594,597],{"class":96,"line":132},[94,582,536],{"class":100},[94,584,539],{"class":115},[94,586,587],{"class":111}," OTLPTraceExporter",[94,589,545],{"class":115},[94,591,548],{"class":100},[94,593,551],{"class":115},[94,595,596],{"class":554},"@opentelemetry\u002Fexporter-trace-otlp-http",[94,598,558],{"class":115},[94,600,601,603,605,608,610,612,614,617],{"class":96,"line":139},[94,602,536],{"class":100},[94,604,539],{"class":115},[94,606,607],{"class":111}," Resource",[94,609,545],{"class":115},[94,611,548],{"class":100},[94,613,551],{"class":115},[94,615,616],{"class":554},"@opentelemetry\u002Fresources",[94,618,558],{"class":115},[94,620,621,623,625,628,630,632,634,637],{"class":96,"line":154},[94,622,536],{"class":100},[94,624,539],{"class":115},[94,626,627],{"class":111}," SEMRESATTRS_SERVICE_NAME",[94,629,545],{"class":115},[94,631,548],{"class":100},[94,633,551],{"class":115},[94,635,636],{"class":554},"@opentelemetry\u002Fsemantic-conventions",[94,638,558],{"class":115},[94,640,641],{"class":96,"line":161},[94,642,158],{"emptyLinePlaceholder":157},[94,644,645,647,649,651,653,656,660],{"class":96,"line":167},[94,646,101],{"class":100},[94,648,104],{"class":100},[94,650,542],{"class":107},[94,652,112],{"class":111},[94,654,655],{"class":115},"()",[94,657,659],{"class":658},"spNyl"," =>",[94,661,129],{"class":115},[94,663,664,667,670,673,676,678,680],{"class":96,"line":179},[94,665,666],{"class":658},"  const",[94,668,669],{"class":111}," sdk",[94,671,672],{"class":115}," =",[94,674,675],{"class":115}," new",[94,677,567],{"class":107},[94,679,112],{"class":122},[94,681,116],{"class":115},[94,683,684,687,689,691,693,695],{"class":96,"line":185},[94,685,686],{"class":122},"    resource",[94,688,126],{"class":115},[94,690,675],{"class":115},[94,692,607],{"class":107},[94,694,112],{"class":122},[94,696,116],{"class":115},[94,698,700,703,706,709,711,713,716,719],{"class":96,"line":699},10,[94,701,702],{"class":122},"      [",[94,704,705],{"class":111},"SEMRESATTRS_SERVICE_NAME",[94,707,708],{"class":122},"]",[94,710,126],{"class":115},[94,712,551],{"class":115},[94,714,715],{"class":554},"my-nuxt-app",[94,717,718],{"class":115},"'",[94,720,151],{"class":115},[94,722,724,727,730],{"class":96,"line":723},11,[94,725,726],{"class":115},"    }",[94,728,729],{"class":122},")",[94,731,151],{"class":115},[94,733,735,738,740,742,744,746],{"class":96,"line":734},12,[94,736,737],{"class":122},"    traceExporter",[94,739,126],{"class":115},[94,741,675],{"class":115},[94,743,587],{"class":107},[94,745,112],{"class":122},[94,747,116],{"class":115},[94,749,751,754,756,758,761,763],{"class":96,"line":750},13,[94,752,753],{"class":122},"      url",[94,755,126],{"class":115},[94,757,551],{"class":115},[94,759,760],{"class":554},"http:\u002F\u002Fmy-collector:4318\u002Fv1\u002Ftraces",[94,762,718],{"class":115},[94,764,151],{"class":115},[94,766,768,770,772],{"class":96,"line":767},14,[94,769,726],{"class":115},[94,771,729],{"class":122},[94,773,151],{"class":115},[94,775,777,780],{"class":96,"line":776},15,[94,778,779],{"class":115},"  }",[94,781,191],{"class":122},[94,783,785],{"class":96,"line":784},16,[94,786,158],{"emptyLinePlaceholder":157},[94,788,790,793,796,799],{"class":96,"line":789},17,[94,791,792],{"class":111},"  sdk",[94,794,795],{"class":115},".",[94,797,798],{"class":107},"start",[94,800,801],{"class":122},"()\n",[94,803,805,807],{"class":96,"line":804},18,[94,806,188],{"class":115},[94,808,191],{"class":111},[67,810,811,812,795],{},"You can use any exporter (Console, Jaeger, Zipkin) or add auto-instrumentations like ",[79,813,814],{},"@opentelemetry\u002Finstrumentation-http",[71,816,818],{"id":817},"forward-data-to-the-devtools-ui","Forward data to the DevTools UI",[67,820,821],{},"When using a custom instrumentation setup, you can still forward spans and logs to the DevTools UI by exporting them to the OTLP HTTP endpoint:",[84,823,828],{"className":824,"code":826,"language":827},[825],"language-text","{devServerUrl}\u002F__nuxt-otel-ingest\n","text",[79,829,826],{"__ignoreMap":90},[67,831,832,833,836,837,840],{},"The endpoint accepts both trace and log OTLP JSON payloads (",[79,834,835],{},"\u002Fv1\u002Ftraces"," and ",[79,838,839],{},"\u002Fv1\u002Flogs","). This lets you use any OTel SDK or collector to push data into the DevTools UI without relying on the built-in NodeSDK.",[71,842,844],{"id":843},"next-steps","Next steps",[846,847,848,854],"ul",{},[849,850,851],"li",{},[387,852,853],{"href":34},"Use server composables for manual instrumentation",[849,855,856],{},[387,857,858],{"href":39},"Connect AI agents via the MCP server",[860,861,862],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":90,"searchDepth":119,"depth":119,"links":864},[865,868,869,870,871,872],{"id":73,"depth":119,"text":74,"children":866},[867],{"id":195,"depth":132,"text":196},{"id":263,"depth":119,"text":264},{"id":377,"depth":119,"text":378},{"id":472,"depth":119,"text":473},{"id":817,"depth":119,"text":818},{"id":843,"depth":119,"text":844},"Configure the module options and tracing channels","md",null,{},{"icon":31},{"title":28,"description":873},"AMnvn8FyWU-B71lbpmgjT0-YGOWGa48Y5jdjZ5sguxI",[881,883],{"title":16,"path":17,"stem":18,"description":882,"icon":19,"children":-1},"How to install @lutejka\u002Fnuxt-otel in your Nuxt application",{"title":33,"path":34,"stem":35,"description":884,"icon":36,"children":-1},"Instrument your server routes manually with useOtelTracer and useOtelLogger",1787688356248]