{
    "componentChunkName": "component---node-modules-shenhh-smooth-doc-src-templates-doc-js",
    "path": "/docs/languages/golang/",
    "result": {"data":{"mdx":{"fields":{"pageType":"doc","title":"Go 语言接入指南","editLink":"https://gitlab.corp.youdao.com/DevOPS/apm/docs/edit/master/pages/docs/languages/golang.mdx"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Go 语言接入指南\",\n  \"section\": \"语言接入指南\",\n  \"slug\": \"/docs/languages/golang/\",\n  \"order\": 1\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"go-语言-opentelemetry-接入指南\"\n  }, mdx(\"a\", {\n    parentName: \"h1\",\n    \"href\": \"#go-%E8%AF%AD%E8%A8%80-opentelemetry-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Go \\u8BED\\u8A00 OpenTelemetry \\u63A5\\u5165\\u6307\\u5357\"), mdx(\"p\", null, \"\\u672C\\u6587\\u6863\\u63D0\\u4F9B Go \\u8BED\\u8A00\\u5E94\\u7528\\u63A5\\u5165 OpenTelemetry \\u7684\\u5B8C\\u6574\\u6307\\u5357\\uFF0C\\u5305\\u62EC\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\\u548C SDK \\u624B\\u52A8\\u63A5\\u5165\\u4E24\\u79CD\\u65B9\\u5F0F\\u3002\"), mdx(\"h2\", {\n    \"id\": \"目录\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E7%9B%AE%E5%BD%95\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u76EE\\u5F55\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E6%A6%82%E8%BF%B0\"\n  }, \"\\u6982\\u8FF0\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E9%9B%B6%E4%BB%A3%E7%A0%81%E6%8E%A5%E5%85%A5%E6%8E%A8%E8%8D%90\"\n  }, \"\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\\uFF08\\u63A8\\u8350\\uFF09\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#sdk-%E6%89%8B%E5%8A%A8%E6%8E%A5%E5%85%A5\"\n  }, \"SDK \\u624B\\u52A8\\u63A5\\u5165\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E6%A1%86%E6%9E%B6%E9%9B%86%E6%88%90%E7%A4%BA%E4%BE%8B\"\n  }, \"\\u6846\\u67B6\\u96C6\\u6210\\u793A\\u4F8B\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E9%AB%98%E7%BA%A7%E9%85%8D%E7%BD%AE\"\n  }, \"\\u9AD8\\u7EA7\\u914D\\u7F6E\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5\"\n  }, \"\\u6700\\u4F73\\u5B9E\\u8DF5\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5\"\n  }, \"\\u6545\\u969C\\u6392\\u67E5\"))), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"概述\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E6%A6%82%E8%BF%B0\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6982\\u8FF0\"), mdx(\"h3\", {\n    \"id\": \"go-语言特性\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#go-%E8%AF%AD%E8%A8%80%E7%89%B9%E6%80%A7\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Go \\u8BED\\u8A00\\u7279\\u6027\"), mdx(\"p\", null, \"Go \\u8BED\\u8A00\\u7684 OpenTelemetry \\u652F\\u6301\\u5177\\u6709\\u4EE5\\u4E0B\\u7279\\u70B9:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u6210\\u719F\\u7A33\\u5B9A\"), \": API \\u548C SDK \\u5DF2\\u8FBE\\u5230 1.0 \\u7A33\\u5B9A\\u7248\\u672C\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u9AD8\\u6027\\u80FD\"), \": \\u6781\\u4F4E\\u7684\\u6027\\u80FD\\u5F00\\u9500\\uFF08< 5% CPU, 10-20MB \\u5185\\u5B58\\uFF09\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u4E30\\u5BCC\\u7684\\u57CB\\u70B9\\u5E93\"), \": \\u652F\\u6301 50+ \\u4E3B\\u6D41\\u6846\\u67B6\\u548C\\u5E93\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Context \\u4F20\\u64AD\"), \": \\u5B8C\\u7F8E\\u5951\\u5408 Go \\u7684 context.Context \\u673A\\u5236\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u5E76\\u53D1\\u5B89\\u5168\"), \": \\u6240\\u6709 API \\u90FD\\u662F\\u7EBF\\u7A0B\\u5B89\\u5168\\u7684\")), mdx(\"h3\", {\n    \"id\": \"版本要求\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E7%89%88%E6%9C%AC%E8%A6%81%E6%B1%82\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u7248\\u672C\\u8981\\u6C42\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Go \\u7248\\u672C\"), \": 1.20+ (\\u63A8\\u8350 1.21+)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"OpenTelemetry Go\"), \": v1.20.0+\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u652F\\u6301\\u67B6\\u6784\"), \": amd64, arm64, 386, arm\")), mdx(\"h3\", {\n    \"id\": \"支持的信号\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%94%AF%E6%8C%81%E7%9A%84%E4%BF%A1%E5%8F%B7\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u652F\\u6301\\u7684\\u4FE1\\u53F7\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u2705 \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Traces\"), \": \\u5B8C\\u5168\\u652F\\u6301\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u2705 \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Metrics\"), \": \\u5B8C\\u5168\\u652F\\u6301\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u2705 \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Logs\"), \": \\u652F\\u6301\\uFF08\\u901A\\u8FC7\\u65E5\\u5FD7\\u5E93\\u96C6\\u6210\\uFF09\")), mdx(\"h3\", {\n    \"id\": \"适用场景\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E9%80%82%E7%94%A8%E5%9C%BA%E6%99%AF\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u9002\\u7528\\u573A\\u666F\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Web \\u670D\\u52A1\\uFF08HTTP/gRPC\\uFF09\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u5FAE\\u670D\\u52A1\\u67B6\\u6784\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u6570\\u636E\\u5E93\\u5E94\\u7528\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u6D88\\u606F\\u961F\\u5217\\u5E94\\u7528\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u6279\\u5904\\u7406\\u4F5C\\u4E1A\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"零代码接入推荐\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E9%9B%B6%E4%BB%A3%E7%A0%81%E6%8E%A5%E5%85%A5%E6%8E%A8%E8%8D%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\\uFF08\\u63A8\\u8350\\uFF09\"), mdx(\"p\", null, \"\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\\u65E0\\u9700\\u4FEE\\u6539\\u5E94\\u7528\\u4EE3\\u7801\\uFF0C\\u901A\\u8FC7\\u73AF\\u5883\\u53D8\\u91CF\\u914D\\u7F6E\\u5373\\u53EF\\u81EA\\u52A8\\u5B8C\\u6210\\u57CB\\u70B9\\u3002\"), mdx(\"h3\", {\n    \"id\": \"方式-1-使用官方-auto-instrumentation实验性\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%96%B9%E5%BC%8F-1-%E4%BD%BF%E7%94%A8%E5%AE%98%E6%96%B9-auto-instrumentation%E5%AE%9E%E9%AA%8C%E6%80%A7\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u65B9\\u5F0F 1: \\u4F7F\\u7528\\u5B98\\u65B9 Auto-Instrumentation\\uFF08\\u5B9E\\u9A8C\\u6027\\uFF09\"), mdx(\"p\", null, \"Go \\u5B98\\u65B9\\u7684\\u81EA\\u52A8\\u57CB\\u70B9\\u76EE\\u524D\\u5904\\u4E8E\\u5B9E\\u9A8C\\u9636\\u6BB5\\uFF0C\\u652F\\u6301\\u6709\\u9650\\u3002\\u5BF9\\u4E8E\\u751F\\u4EA7\\u73AF\\u5883\\uFF0C\\u5EFA\\u8BAE\\u4F7F\\u7528 \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/docs/languages/golang-loongsuite/\"\n  }, \"loongsuite-go-agent\"), \" \\u6216 SDK \\u624B\\u52A8\\u63A5\\u5165\\u3002\"), mdx(\"h4\", {\n    \"id\": \"安装\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E5%AE%89%E8%A3%85\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5B89\\u88C5\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"go install go.opentelemetry.io/auto@latest\\n\")), mdx(\"h4\", {\n    \"id\": \"配置环境变量\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E9%85%8D%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u914D\\u7F6E\\u73AF\\u5883\\u53D8\\u91CF\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u670D\\u52A1\\u4FE1\\u606F\\nexport OTEL_SERVICE_NAME=my-go-service\\nexport OTEL_RESOURCE_ATTRIBUTES=service.version=1.0.0,deployment.environment=production\\n\\n# OTLP Exporter\\nexport OTEL_EXPORTER_OTLP_ENDPOINT=uptrace-grpc.yodao.cn:4317\\nexport OTEL_EXPORTER_OTLP_PROTOCOL=grpc\\nexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project\\n\\n# Traces \\u914D\\u7F6E\\nexport OTEL_TRACES_EXPORTER=otlp\\nexport OTEL_TRACES_SAMPLER=parentbased_traceidratio\\nexport OTEL_TRACES_SAMPLER_ARG=0.1\\n\\n# Metrics \\u914D\\u7F6E\\nexport OTEL_METRICS_EXPORTER=otlp\\nexport OTEL_METRIC_EXPORT_INTERVAL=60000\\n\\n# Logs \\u914D\\u7F6E\\nexport OTEL_LOGS_EXPORTER=otlp\\n\")), mdx(\"h4\", {\n    \"id\": \"启动应用\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E5%90%AF%E5%8A%A8%E5%BA%94%E7%94%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u542F\\u52A8\\u5E94\\u7528\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u4F7F\\u7528 auto-instrumentation \\u542F\\u52A8\\ngo run go.opentelemetry.io/auto -service.name=my-service ./main.go\\n\\n# \\u6216\\u7F16\\u8BD1\\u540E\\u8FD0\\u884C\\ngo build -o myapp\\ngo run go.opentelemetry.io/auto -service.name=my-service ./myapp\\n\")), mdx(\"h3\", {\n    \"id\": \"方式-2-使用-loongsuite-go-agent推荐\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%96%B9%E5%BC%8F-2-%E4%BD%BF%E7%94%A8-loongsuite-go-agent%E6%8E%A8%E8%8D%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u65B9\\u5F0F 2: \\u4F7F\\u7528 loongsuite-go-agent\\uFF08\\u63A8\\u8350\\uFF09\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/alibaba/loongsuite-go-agent\"\n  }, \"loongsuite-go-agent\"), \" \\u662F\\u963F\\u91CC\\u5DF4\\u5DF4\\u5F00\\u6E90\\u7684 Go \\u81EA\\u52A8\\u57CB\\u70B9\\u5DE5\\u5177\\uFF0C\\u652F\\u6301\\u7F16\\u8BD1\\u65F6\\u6CE8\\u5165\\uFF0C\\u529F\\u80FD\\u66F4\\u5F3A\\u5927\\u3002\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u8BE6\\u7EC6\\u6587\\u6863\"), \": \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/docs/languages/golang-loongsuite/\"\n  }, \"Go loongsuite-go-agent \\u63A5\\u5165\\u6307\\u5357\")), mdx(\"h4\", {\n    \"id\": \"快速开始\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5FEB\\u901F\\u5F00\\u59CB\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# 1. \\u5B89\\u88C5 otel \\u5DE5\\u5177\\ncurl -sSf https://raw.githubusercontent.com/alibaba/loongsuite-go-agent/main/install.sh | sh\\n\\n# 2. \\u521D\\u59CB\\u5316\\u9879\\u76EE\\ncd your-project\\notel init\\n\\n# 3. \\u914D\\u7F6E\\u73AF\\u5883\\u53D8\\u91CF\\nexport OTEL_SERVICE_NAME=my-service\\nexport OTEL_EXPORTER_OTLP_ENDPOINT=uptrace-grpc.yodao.cn:4317\\nexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project\\n\\n# 4. \\u4F7F\\u7528 otel \\u5DE5\\u5177\\u7F16\\u8BD1\\notel build -o myapp\\n\\n# 5. \\u8FD0\\u884C\\n./myapp\\n\")), mdx(\"h4\", {\n    \"id\": \"支持的框架部分\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E6%94%AF%E6%8C%81%E7%9A%84%E6%A1%86%E6%9E%B6%E9%83%A8%E5%88%86\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u652F\\u6301\\u7684\\u6846\\u67B6\\uFF08\\u90E8\\u5206\\uFF09\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Web\"), \": Gin, Echo, Fiber, Chi, Gorilla Mux, Hertz, Kratos\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u6570\\u636E\\u5E93\"), \": database/sql, GORM, MongoDB, Redis, Elasticsearch\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"RPC\"), \": gRPC, Kitex, Dubbo-go, RPCX\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u6D88\\u606F\\u961F\\u5217\"), \": Kafka, RabbitMQ, RocketMQ, NATS\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"HTTP \\u5BA2\\u6237\\u7AEF\"), \": net/http, fasthttp\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u65E5\\u5FD7\"), \": zap, logrus, zerolog, slog\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u5B8C\\u6574\\u5217\\u8868\"), \": \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/alibaba/loongsuite-go-agent#supported-libraries\"\n  }, \"https://github.com/alibaba/loongsuite-go-agent#supported-libraries\")), mdx(\"h3\", {\n    \"id\": \"方式-3-使用-kubernetes-operator\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%96%B9%E5%BC%8F-3-%E4%BD%BF%E7%94%A8-kubernetes-operator\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u65B9\\u5F0F 3: \\u4F7F\\u7528 Kubernetes Operator\"), mdx(\"p\", null, \"\\u5982\\u679C\\u60A8\\u7684\\u5E94\\u7528\\u8FD0\\u884C\\u5728 Kubernetes \\u4E2D\\uFF0C\\u53EF\\u4EE5\\u4F7F\\u7528 OpenTelemetry Operator \\u81EA\\u52A8\\u6CE8\\u5165\\u3002\"), mdx(\"h4\", {\n    \"id\": \"安装-operator\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E5%AE%89%E8%A3%85-operator\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5B89\\u88C5 Operator\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml\\n\")), mdx(\"h4\", {\n    \"id\": \"创建-instrumentation-资源\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E5%88%9B%E5%BB%BA-instrumentation-%E8%B5%84%E6%BA%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u521B\\u5EFA Instrumentation \\u8D44\\u6E90\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"apiVersion: opentelemetry.io/v1alpha1\\nkind: Instrumentation\\nmetadata:\\n  name: my-instrumentation\\n  namespace: default\\nspec:\\n  exporter:\\n    endpoint: uptrace-grpc.yodao.cn:4317\\n  env:\\n    - name: OTEL_EXPORTER_OTLP_HEADERS\\n      value: uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project\\n  propagators:\\n    - tracecontext\\n    - baggage\\n  sampler:\\n    type: parentbased_traceidratio\\n    argument: \\\"0.1\\\"\\n\")), mdx(\"h4\", {\n    \"id\": \"部署应用\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E9%83%A8%E7%BD%B2%E5%BA%94%E7%94%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u90E8\\u7F72\\u5E94\\u7528\"), mdx(\"p\", null, \"\\u5728 Pod \\u4E0A\\u6DFB\\u52A0 annotation:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"apiVersion: apps/v1\\nkind: Deployment\\nmetadata:\\n  name: my-app\\nspec:\\n  template:\\n    metadata:\\n      annotations:\\n        instrumentation.opentelemetry.io/inject-go: \\\"true\\\"\\n    spec:\\n      containers:\\n      - name: app\\n        image: my-go-app:latest\\n\")), mdx(\"h3\", {\n    \"id\": \"验证零代码接入\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E9%AA%8C%E8%AF%81%E9%9B%B6%E4%BB%A3%E7%A0%81%E6%8E%A5%E5%85%A5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u9A8C\\u8BC1\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\"), mdx(\"p\", null, \"\\u542F\\u52A8\\u5E94\\u7528\\u540E\\uFF0C\\u8BBF\\u95EE\\u60A8\\u7684\\u670D\\u52A1\\u7AEF\\u70B9\\uFF0C\\u7136\\u540E\\u5728 APM \\u5E73\\u53F0\\u67E5\\u770B\\u6570\\u636E:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Traces\"), \": \\u67E5\\u770B\\u8C03\\u7528\\u94FE\\u8DEF\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Metrics\"), \": \\u67E5\\u770B\\u8BF7\\u6C42\\u91CF\\u3001\\u5EF6\\u8FDF\\u7B49\\u6307\\u6807\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Service Map\"), \": \\u67E5\\u770B\\u670D\\u52A1\\u62D3\\u6251\\u56FE\")), mdx(\"h4\", {\n    \"id\": \"快速验证脚本\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E5%BF%AB%E9%80%9F%E9%AA%8C%E8%AF%81%E8%84%9A%E6%9C%AC\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5FEB\\u901F\\u9A8C\\u8BC1\\u811A\\u672C\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"#!/bin/bash\\n# verify-instrumentation.sh\\n\\necho \\\"Checking service...\\\"\\ncurl -s http://localhost:8080/health > /dev/null\\n\\necho \\\"Waiting for traces to be exported...\\\"\\nsleep 5\\n\\necho \\\"Check your APM platform for service: $OTEL_SERVICE_NAME\\\"\\necho \\\"Endpoint: $OTEL_EXPORTER_OTLP_ENDPOINT\\\"\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"sdk-手动接入\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#sdk-%E6%89%8B%E5%8A%A8%E6%8E%A5%E5%85%A5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"SDK \\u624B\\u52A8\\u63A5\\u5165\"), mdx(\"p\", null, \"SDK \\u624B\\u52A8\\u63A5\\u5165\\u63D0\\u4F9B\\u66F4\\u7CBE\\u7EC6\\u7684\\u63A7\\u5236\\u548C\\u81EA\\u5B9A\\u4E49\\u80FD\\u529B\\u3002\"), mdx(\"h3\", {\n    \"id\": \"安装依赖\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5B89\\u88C5\\u4F9D\\u8D56\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u6838\\u5FC3 SDK\\ngo get go.opentelemetry.io/otel@latest\\ngo get go.opentelemetry.io/otel/sdk@latest\\n\\n# OTLP Exporter\\ngo get go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@latest\\ngo get go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc@latest\\n\\n# \\u57CB\\u70B9\\u5E93\\uFF08\\u53EF\\u9009\\uFF09\\ngo get go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@latest\\ngo get go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc@latest\\n\")), mdx(\"h3\", {\n    \"id\": \"基础初始化\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%9F%BA%E7%A1%80%E5%88%9D%E5%A7%8B%E5%8C%96\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u57FA\\u7840\\u521D\\u59CB\\u5316\"), mdx(\"h4\", {\n    \"id\": \"1-创建-opentelemetry-初始化函数\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#1-%E5%88%9B%E5%BB%BA-opentelemetry-%E5%88%9D%E5%A7%8B%E5%8C%96%E5%87%BD%E6%95%B0\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"1. \\u521B\\u5EFA OpenTelemetry \\u521D\\u59CB\\u5316\\u51FD\\u6570\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// otel.go\\npackage main\\n\\nimport (\\n    \\\"context\\\"\\n    \\\"fmt\\\"\\n    \\\"time\\\"\\n\\n    \\\"go.opentelemetry.io/otel\\\"\\n    \\\"go.opentelemetry.io/otel/attribute\\\"\\n    \\\"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\\\"\\n    \\\"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc\\\"\\n    \\\"go.opentelemetry.io/otel/propagation\\\"\\n    \\\"go.opentelemetry.io/otel/sdk/metric\\\"\\n    \\\"go.opentelemetry.io/otel/sdk/resource\\\"\\n    sdktrace \\\"go.opentelemetry.io/otel/sdk/trace\\\"\\n    semconv \\\"go.opentelemetry.io/otel/semconv/v1.24.0\\\"\\n    \\\"google.golang.org/grpc\\\"\\n    \\\"google.golang.org/grpc/credentials\\\"\\n)\\n\\n// InitOpenTelemetry \\u521D\\u59CB\\u5316 OpenTelemetry\\nfunc InitOpenTelemetry(ctx context.Context) (func(context.Context) error, error) {\\n    // 1. \\u521B\\u5EFA Resource\\n    res, err := resource.New(ctx,\\n        resource.WithAttributes(\\n            semconv.ServiceName(\\\"my-go-service\\\"),\\n            semconv.ServiceVersion(\\\"1.0.0\\\"),\\n            attribute.String(\\\"deployment.environment\\\", \\\"production\\\"),\\n        ),\\n        resource.WithProcess(),\\n        resource.WithOS(),\\n        resource.WithContainer(),\\n        resource.WithHost(),\\n    )\\n    if err != nil {\\n        return nil, fmt.Errorf(\\\"failed to create resource: %w\\\", err)\\n    }\\n\\n    // 2. \\u521B\\u5EFA Trace Exporter\\n    traceExporter, err := otlptracegrpc.New(ctx,\\n        otlptracegrpc.WithEndpoint(\\\"api.uptrace.dev:4317\\\"),\\n        otlptracegrpc.WithTLSCredentials(credentials.NewClientTLSFromCert(nil, \\\"\\\")),\\n        otlptracegrpc.WithHeaders(map[string]string{\\n            \\\"uptrace-dsn\\\": \\\"http://token@uptrace-grpc.yodao.cn/project\\\",\\n        }),\\n    )\\n    if err != nil {\\n        return nil, fmt.Errorf(\\\"failed to create trace exporter: %w\\\", err)\\n    }\\n\\n    // 3. \\u521B\\u5EFA Trace Provider\\n    tracerProvider := sdktrace.NewTracerProvider(\\n        sdktrace.WithResource(res),\\n        sdktrace.WithBatcher(traceExporter,\\n            sdktrace.WithBatchTimeout(5*time.Second),\\n            sdktrace.WithMaxExportBatchSize(512),\\n        ),\\n        sdktrace.WithSampler(sdktrace.ParentBased(\\n            sdktrace.TraceIDRatioBased(0.1), // 10% \\u91C7\\u6837\\n        )),\\n    )\\n    otel.SetTracerProvider(tracerProvider)\\n\\n    // 4. \\u521B\\u5EFA Metric Exporter\\n    metricExporter, err := otlpmetricgrpc.New(ctx,\\n        otlpmetricgrpc.WithEndpoint(\\\"api.uptrace.dev:4317\\\"),\\n        otlpmetricgrpc.WithTLSCredentials(credentials.NewClientTLSFromCert(nil, \\\"\\\")),\\n        otlpmetricgrpc.WithHeaders(map[string]string{\\n            \\\"uptrace-dsn\\\": \\\"http://token@uptrace-grpc.yodao.cn/project\\\",\\n        }),\\n    )\\n    if err != nil {\\n        return nil, fmt.Errorf(\\\"failed to create metric exporter: %w\\\", err)\\n    }\\n\\n    // 5. \\u521B\\u5EFA Metric Provider\\n    meterProvider := metric.NewMeterProvider(\\n        metric.WithResource(res),\\n        metric.WithReader(\\n            metric.NewPeriodicReader(metricExporter,\\n                metric.WithInterval(60*time.Second),\\n            ),\\n        ),\\n    )\\n    otel.SetMeterProvider(meterProvider)\\n\\n    // 6. \\u8BBE\\u7F6E Propagator\\n    otel.SetTextMapPropagator(\\n        propagation.NewCompositeTextMapPropagator(\\n            propagation.TraceContext{},\\n            propagation.Baggage{},\\n        ),\\n    )\\n\\n    // 7. \\u8FD4\\u56DE Shutdown \\u51FD\\u6570\\n    return func(ctx context.Context) error {\\n        var err error\\n        if e := tracerProvider.Shutdown(ctx); e != nil {\\n            err = e\\n        }\\n        if e := meterProvider.Shutdown(ctx); e != nil {\\n            if err != nil {\\n                err = fmt.Errorf(\\\"%v; %w\\\", err, e)\\n            } else {\\n                err = e\\n            }\\n        }\\n        return err\\n    }, nil\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"2-在-main-函数中初始化\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#2-%E5%9C%A8-main-%E5%87%BD%E6%95%B0%E4%B8%AD%E5%88%9D%E5%A7%8B%E5%8C%96\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"2. \\u5728 main \\u51FD\\u6570\\u4E2D\\u521D\\u59CB\\u5316\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// main.go\\npackage main\\n\\nimport (\\n    \\\"context\\\"\\n    \\\"log\\\"\\n    \\\"os\\\"\\n    \\\"os/signal\\\"\\n    \\\"syscall\\\"\\n    \\\"time\\\"\\n)\\n\\nfunc main() {\\n    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)\\n    defer cancel()\\n\\n    // \\u521D\\u59CB\\u5316 OpenTelemetry\\n    shutdown, err := InitOpenTelemetry(ctx)\\n    if err != nil {\\n        log.Fatalf(\\\"Failed to initialize OpenTelemetry: %v\\\", err)\\n    }\\n\\n    // \\u786E\\u4FDD\\u5728\\u7A0B\\u5E8F\\u9000\\u51FA\\u65F6\\u8C03\\u7528 shutdown\\n    defer func() {\\n        ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)\\n        defer cancel()\\n        if err := shutdown(ctx); err != nil {\\n            log.Printf(\\\"Error shutting down OpenTelemetry: %v\\\", err)\\n        }\\n    }()\\n\\n    // \\u4F18\\u96C5\\u5173\\u95ED\\n    sigCh := make(chan os.Signal, 1)\\n    signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)\\n\\n    // \\u542F\\u52A8\\u5E94\\u7528\\n    go startServer()\\n\\n    <-sigCh\\n    log.Println(\\\"Shutting down gracefully...\\\")\\n}\\n\\nfunc startServer() {\\n    // \\u5E94\\u7528\\u903B\\u8F91\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"traces---手动埋点\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#traces---%E6%89%8B%E5%8A%A8%E5%9F%8B%E7%82%B9\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Traces - \\u624B\\u52A8\\u57CB\\u70B9\"), mdx(\"h4\", {\n    \"id\": \"创建和使用-span\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E5%88%9B%E5%BB%BA%E5%92%8C%E4%BD%BF%E7%94%A8-span\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u521B\\u5EFA\\u548C\\u4F7F\\u7528 Span\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"context\\\"\\n    \\\"go.opentelemetry.io/otel\\\"\\n    \\\"go.opentelemetry.io/otel/attribute\\\"\\n    \\\"go.opentelemetry.io/otel/codes\\\"\\n    \\\"go.opentelemetry.io/otel/trace\\\"\\n)\\n\\nvar tracer = otel.Tracer(\\\"my-service\\\")\\n\\n// ProcessOrder \\u5904\\u7406\\u8BA2\\u5355\\nfunc ProcessOrder(ctx context.Context, orderID string) error {\\n    // \\u521B\\u5EFA Span\\n    ctx, span := tracer.Start(ctx, \\\"process_order\\\",\\n        trace.WithAttributes(\\n            attribute.String(\\\"order.id\\\", orderID),\\n            attribute.String(\\\"operation\\\", \\\"process\\\"),\\n        ),\\n        trace.WithSpanKind(trace.SpanKindInternal),\\n    )\\n    defer span.End()\\n\\n    // \\u6DFB\\u52A0\\u4E8B\\u4EF6\\n    span.AddEvent(\\\"order_validation_started\\\")\\n\\n    // \\u9A8C\\u8BC1\\u8BA2\\u5355\\n    if err := validateOrder(ctx, orderID); err != nil {\\n        // \\u8BB0\\u5F55\\u9519\\u8BEF\\n        span.RecordError(err)\\n        span.SetStatus(codes.Error, err.Error())\\n        return err\\n    }\\n\\n    span.AddEvent(\\\"order_validated\\\")\\n\\n    // \\u5904\\u7406\\u652F\\u4ED8\\n    if err := processPayment(ctx, orderID); err != nil {\\n        span.RecordError(err)\\n        span.SetStatus(codes.Error, \\\"payment failed\\\")\\n        return err\\n    }\\n\\n    span.AddEvent(\\\"payment_processed\\\")\\n\\n    // \\u8BBE\\u7F6E\\u6210\\u529F\\u72B6\\u6001\\n    span.SetStatus(codes.Ok, \\\"order processed successfully\\\")\\n    span.SetAttributes(attribute.Bool(\\\"order.success\\\", true))\\n\\n    return nil\\n}\\n\\nfunc validateOrder(ctx context.Context, orderID string) error {\\n    ctx, span := tracer.Start(ctx, \\\"validate_order\\\")\\n    defer span.End()\\n\\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    span.SetAttributes(attribute.String(\\\"order.id\\\", orderID))\\n\\n    return nil\\n}\\n\\nfunc processPayment(ctx context.Context, orderID string) error {\\n    ctx, span := tracer.Start(ctx, \\\"process_payment\\\",\\n        trace.WithAttributes(\\n            attribute.String(\\\"order.id\\\", orderID),\\n            attribute.String(\\\"payment.method\\\", \\\"credit_card\\\"),\\n        ),\\n    )\\n    defer span.End()\\n\\n    // \\u652F\\u4ED8\\u903B\\u8F91\\n    return nil\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"span-属性和事件\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#span-%E5%B1%9E%E6%80%A7%E5%92%8C%E4%BA%8B%E4%BB%B6\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Span \\u5C5E\\u6027\\u548C\\u4E8B\\u4EF6\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"func ExampleSpanAttributes(ctx context.Context) {\\n    ctx, span := tracer.Start(ctx, \\\"example_operation\\\")\\n    defer span.End()\\n\\n    // \\u8BBE\\u7F6E\\u5C5E\\u6027\\n    span.SetAttributes(\\n        attribute.String(\\\"user.id\\\", \\\"12345\\\"),\\n        attribute.String(\\\"user.email\\\", \\\"user@example.com\\\"),\\n        attribute.Int(\\\"user.age\\\", 30),\\n        attribute.Bool(\\\"user.premium\\\", true),\\n        attribute.StringSlice(\\\"user.roles\\\", []string{\\\"admin\\\", \\\"user\\\"}),\\n    )\\n\\n    // \\u6DFB\\u52A0\\u4E8B\\u4EF6\\n    span.AddEvent(\\\"cache_miss\\\",\\n        trace.WithAttributes(\\n            attribute.String(\\\"cache.key\\\", \\\"user:12345\\\"),\\n            attribute.String(\\\"cache.type\\\", \\\"redis\\\"),\\n        ),\\n    )\\n\\n    // \\u6DFB\\u52A0\\u5E26\\u65F6\\u95F4\\u6233\\u7684\\u4E8B\\u4EF6\\n    span.AddEvent(\\\"retry_attempt\\\",\\n        trace.WithTimestamp(time.Now()),\\n        trace.WithAttributes(\\n            attribute.Int(\\\"retry.count\\\", 2),\\n            attribute.String(\\\"retry.reason\\\", \\\"timeout\\\"),\\n        ),\\n    )\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"context-传播\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#context-%E4%BC%A0%E6%92%AD\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Context \\u4F20\\u64AD\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// HTTP \\u5BA2\\u6237\\u7AEF\\u4F20\\u64AD\\nfunc MakeHTTPRequest(ctx context.Context, url string) (*http.Response, error) {\\n    ctx, span := tracer.Start(ctx, \\\"http_request\\\",\\n        trace.WithAttributes(\\n            attribute.String(\\\"http.url\\\", url),\\n            attribute.String(\\\"http.method\\\", \\\"GET\\\"),\\n        ),\\n    )\\n    defer span.End()\\n\\n    req, err := http.NewRequestWithContext(ctx, \\\"GET\\\", url, nil)\\n    if err != nil {\\n        return nil, err\\n    }\\n\\n    // \\u6CE8\\u5165 trace context \\u5230 HTTP headers\\n    otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(req.Header))\\n\\n    resp, err := http.DefaultClient.Do(req)\\n    if err != nil {\\n        span.RecordError(err)\\n        return nil, err\\n    }\\n\\n    span.SetAttributes(attribute.Int(\\\"http.status_code\\\", resp.StatusCode))\\n    return resp, nil\\n}\\n\\n// HTTP \\u670D\\u52A1\\u7AEF\\u63D0\\u53D6\\nfunc ExtractContext(r *http.Request) context.Context {\\n    // \\u4ECE HTTP headers \\u63D0\\u53D6 trace context\\n    ctx := otel.GetTextMapPropagator().Extract(\\n        r.Context(),\\n        propagation.HeaderCarrier(r.Header),\\n    )\\n    return ctx\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"metrics---指标采集\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#metrics---%E6%8C%87%E6%A0%87%E9%87%87%E9%9B%86\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Metrics - \\u6307\\u6807\\u91C7\\u96C6\"), mdx(\"h4\", {\n    \"id\": \"counter计数器\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#counter%E8%AE%A1%E6%95%B0%E5%99%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Counter\\uFF08\\u8BA1\\u6570\\u5668\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"context\\\"\\n    \\\"go.opentelemetry.io/otel\\\"\\n    \\\"go.opentelemetry.io/otel/attribute\\\"\\n    \\\"go.opentelemetry.io/otel/metric\\\"\\n)\\n\\nvar meter = otel.Meter(\\\"my-service\\\")\\n\\n// \\u521B\\u5EFA Counter\\nvar (\\n    requestCounter metric.Int64Counter\\n)\\n\\nfunc init() {\\n    var err error\\n    requestCounter, err = meter.Int64Counter(\\n        \\\"http.server.requests\\\",\\n        metric.WithDescription(\\\"Total number of HTTP requests\\\"),\\n        metric.WithUnit(\\\"1\\\"),\\n    )\\n    if err != nil {\\n        panic(err)\\n    }\\n}\\n\\nfunc HandleRequest(ctx context.Context, method, route string, statusCode int) {\\n    // \\u589E\\u52A0\\u8BA1\\u6570\\n    requestCounter.Add(ctx, 1,\\n        metric.WithAttributes(\\n            attribute.String(\\\"http.method\\\", method),\\n            attribute.String(\\\"http.route\\\", route),\\n            attribute.Int(\\\"http.status_code\\\", statusCode),\\n        ),\\n    )\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"histogram直方图\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#histogram%E7%9B%B4%E6%96%B9%E5%9B%BE\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Histogram\\uFF08\\u76F4\\u65B9\\u56FE\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"var (\\n    requestDuration metric.Float64Histogram\\n)\\n\\nfunc init() {\\n    var err error\\n    requestDuration, err = meter.Float64Histogram(\\n        \\\"http.server.duration\\\",\\n        metric.WithDescription(\\\"HTTP request duration\\\"),\\n        metric.WithUnit(\\\"ms\\\"),\\n        metric.WithExplicitBucketBoundaries(\\n            5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000,\\n        ),\\n    )\\n    if err != nil {\\n        panic(err)\\n    }\\n}\\n\\nfunc RecordDuration(ctx context.Context, duration float64, method, route string) {\\n    requestDuration.Record(ctx, duration,\\n        metric.WithAttributes(\\n            attribute.String(\\\"http.method\\\", method),\\n            attribute.String(\\\"http.route\\\", route),\\n        ),\\n    )\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"updowncounter升降计数器\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#updowncounter%E5%8D%87%E9%99%8D%E8%AE%A1%E6%95%B0%E5%99%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"UpDownCounter\\uFF08\\u5347\\u964D\\u8BA1\\u6570\\u5668\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"var (\\n    activeConnections metric.Int64UpDownCounter\\n)\\n\\nfunc init() {\\n    var err error\\n    activeConnections, err = meter.Int64UpDownCounter(\\n        \\\"http.server.active_connections\\\",\\n        metric.WithDescription(\\\"Number of active HTTP connections\\\"),\\n        metric.WithUnit(\\\"1\\\"),\\n    )\\n    if err != nil {\\n        panic(err)\\n    }\\n}\\n\\nfunc ConnectionOpened(ctx context.Context) {\\n    activeConnections.Add(ctx, 1)\\n}\\n\\nfunc ConnectionClosed(ctx context.Context) {\\n    activeConnections.Add(ctx, -1)\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"gauge仪表\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#gauge%E4%BB%AA%E8%A1%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Gauge\\uFF08\\u4EEA\\u8868\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"var (\\n    memoryUsage metric.Int64ObservableGauge\\n)\\n\\nfunc init() {\\n    var err error\\n    memoryUsage, err = meter.Int64ObservableGauge(\\n        \\\"runtime.memory.heap_alloc\\\",\\n        metric.WithDescription(\\\"Heap memory allocated\\\"),\\n        metric.WithUnit(\\\"bytes\\\"),\\n    )\\n    if err != nil {\\n        panic(err)\\n    }\\n\\n    // \\u6CE8\\u518C\\u56DE\\u8C03\\u51FD\\u6570\\n    _, err = meter.RegisterCallback(\\n        func(_ context.Context, o metric.Observer) error {\\n            var m runtime.MemStats\\n            runtime.ReadMemStats(&m)\\n            o.ObserveInt64(memoryUsage, int64(m.HeapAlloc))\\n            return nil\\n        },\\n        memoryUsage,\\n    )\\n    if err != nil {\\n        panic(err)\\n    }\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"logs---日志集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#logs---%E6%97%A5%E5%BF%97%E9%9B%86%E6%88%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Logs - \\u65E5\\u5FD7\\u96C6\\u6210\"), mdx(\"h4\", {\n    \"id\": \"集成-zap\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E9%9B%86%E6%88%90-zap\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u96C6\\u6210 Zap\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"go.opentelemetry.io/otel/trace\\\"\\n    \\\"go.uber.org/zap\\\"\\n    \\\"go.uber.org/zap/zapcore\\\"\\n)\\n\\n// NewLogger \\u521B\\u5EFA\\u5E26 trace \\u4FE1\\u606F\\u7684 logger\\nfunc NewLogger() *zap.Logger {\\n    config := zap.NewProductionConfig()\\n    config.EncoderConfig.TimeKey = \\\"timestamp\\\"\\n    config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder\\n\\n    logger, _ := config.Build(\\n        zap.AddCallerSkip(1),\\n        zap.AddStacktrace(zapcore.ErrorLevel),\\n    )\\n\\n    return logger\\n}\\n\\n// LogWithTrace \\u8BB0\\u5F55\\u5E26 trace \\u4FE1\\u606F\\u7684\\u65E5\\u5FD7\\nfunc LogWithTrace(ctx context.Context, logger *zap.Logger, msg string, fields ...zap.Field) {\\n    span := trace.SpanFromContext(ctx)\\n    if span.SpanContext().IsValid() {\\n        fields = append(fields,\\n            zap.String(\\\"trace_id\\\", span.SpanContext().TraceID().String()),\\n            zap.String(\\\"span_id\\\", span.SpanContext().SpanID().String()),\\n        )\\n    }\\n    logger.Info(msg, fields...)\\n}\\n\\n// \\u4F7F\\u7528\\u793A\\u4F8B\\nfunc Example(ctx context.Context) {\\n    logger := NewLogger()\\n    defer logger.Sync()\\n\\n    ctx, span := tracer.Start(ctx, \\\"example_operation\\\")\\n    defer span.End()\\n\\n    LogWithTrace(ctx, logger, \\\"Processing request\\\",\\n        zap.String(\\\"user_id\\\", \\\"12345\\\"),\\n        zap.String(\\\"action\\\", \\\"create\\\"),\\n    )\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"集成-logrus\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E9%9B%86%E6%88%90-logrus\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u96C6\\u6210 Logrus\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"context\\\"\\n    \\\"github.com/sirupsen/logrus\\\"\\n    \\\"go.opentelemetry.io/otel/trace\\\"\\n)\\n\\n// TraceHook \\u6DFB\\u52A0 trace \\u4FE1\\u606F\\u5230\\u65E5\\u5FD7\\ntype TraceHook struct{}\\n\\nfunc (hook *TraceHook) Levels() []logrus.Level {\\n    return logrus.AllLevels\\n}\\n\\nfunc (hook *TraceHook) Fire(entry *logrus.Entry) error {\\n    if ctx, ok := entry.Data[\\\"ctx\\\"].(context.Context); ok {\\n        span := trace.SpanFromContext(ctx)\\n        if span.SpanContext().IsValid() {\\n            entry.Data[\\\"trace_id\\\"] = span.SpanContext().TraceID().String()\\n            entry.Data[\\\"span_id\\\"] = span.SpanContext().SpanID().String()\\n        }\\n        delete(entry.Data, \\\"ctx\\\")\\n    }\\n    return nil\\n}\\n\\n// NewLogrusLogger \\u521B\\u5EFA logger\\nfunc NewLogrusLogger() *logrus.Logger {\\n    logger := logrus.New()\\n    logger.SetFormatter(&logrus.JSONFormatter{\\n        TimestampFormat: \\\"2006-01-02T15:04:05.000Z07:00\\\",\\n    })\\n    logger.AddHook(&TraceHook{})\\n    return logger\\n}\\n\\n// \\u4F7F\\u7528\\u793A\\u4F8B\\nfunc ExampleLogrus(ctx context.Context) {\\n    logger := NewLogrusLogger()\\n\\n    ctx, span := tracer.Start(ctx, \\\"example_operation\\\")\\n    defer span.End()\\n\\n    logger.WithFields(logrus.Fields{\\n        \\\"ctx\\\":     ctx,\\n        \\\"user_id\\\": \\\"12345\\\",\\n        \\\"action\\\":  \\\"create\\\",\\n    }).Info(\\\"Processing request\\\")\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"集成-slog-go-121\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E9%9B%86%E6%88%90-slog-go-121\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u96C6\\u6210 slog (Go 1.21+)\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"context\\\"\\n    \\\"log/slog\\\"\\n    \\\"os\\\"\\n\\n    \\\"go.opentelemetry.io/otel/trace\\\"\\n)\\n\\n// TraceHandler \\u5305\\u88C5 slog.Handler \\u6DFB\\u52A0 trace \\u4FE1\\u606F\\ntype TraceHandler struct {\\n    slog.Handler\\n}\\n\\nfunc (h *TraceHandler) Handle(ctx context.Context, r slog.Record) error {\\n    span := trace.SpanFromContext(ctx)\\n    if span.SpanContext().IsValid() {\\n        r.AddAttrs(\\n            slog.String(\\\"trace_id\\\", span.SpanContext().TraceID().String()),\\n            slog.String(\\\"span_id\\\", span.SpanContext().SpanID().String()),\\n        )\\n    }\\n    return h.Handler.Handle(ctx, r)\\n}\\n\\n// NewSlogLogger \\u521B\\u5EFA logger\\nfunc NewSlogLogger() *slog.Logger {\\n    handler := &TraceHandler{\\n        Handler: slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{\\n            Level: slog.LevelInfo,\\n        }),\\n    }\\n    return slog.New(handler)\\n}\\n\\n// \\u4F7F\\u7528\\u793A\\u4F8B\\nfunc ExampleSlog(ctx context.Context) {\\n    logger := NewSlogLogger()\\n\\n    ctx, span := tracer.Start(ctx, \\\"example_operation\\\")\\n    defer span.End()\\n\\n    logger.InfoContext(ctx, \\\"Processing request\\\",\\n        slog.String(\\\"user_id\\\", \\\"12345\\\"),\\n        slog.String(\\\"action\\\", \\\"create\\\"),\\n    )\\n}\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"框架集成示例\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E6%A1%86%E6%9E%B6%E9%9B%86%E6%88%90%E7%A4%BA%E4%BE%8B\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6846\\u67B6\\u96C6\\u6210\\u793A\\u4F8B\"), mdx(\"h3\", {\n    \"id\": \"gin-framework\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#gin-framework\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Gin Framework\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"github.com/gin-gonic/gin\\\"\\n    \\\"go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin\\\"\\n    \\\"go.opentelemetry.io/otel\\\"\\n    \\\"go.opentelemetry.io/otel/attribute\\\"\\n)\\n\\nfunc main() {\\n    // \\u521D\\u59CB\\u5316 OpenTelemetry\\n    shutdown, err := InitOpenTelemetry(context.Background())\\n    if err != nil {\\n        log.Fatal(err)\\n    }\\n    defer shutdown(context.Background())\\n\\n    // \\u521B\\u5EFA Gin \\u5F15\\u64CE\\n    r := gin.Default()\\n\\n    // \\u6DFB\\u52A0 OpenTelemetry \\u4E2D\\u95F4\\u4EF6\\n    r.Use(otelgin.Middleware(\\\"my-service\\\"))\\n\\n    // \\u5B9A\\u4E49\\u8DEF\\u7531\\n    r.GET(\\\"/users/:id\\\", GetUser)\\n    r.POST(\\\"/users\\\", CreateUser)\\n\\n    // \\u542F\\u52A8\\u670D\\u52A1\\u5668\\n    r.Run(\\\":8080\\\")\\n}\\n\\nvar tracer = otel.Tracer(\\\"my-service\\\")\\n\\nfunc GetUser(c *gin.Context) {\\n    ctx := c.Request.Context()\\n\\n    // \\u624B\\u52A8\\u521B\\u5EFA\\u5B50 Span\\n    ctx, span := tracer.Start(ctx, \\\"get_user_handler\\\")\\n    defer span.End()\\n\\n    userID := c.Param(\\\"id\\\")\\n    span.SetAttributes(attribute.String(\\\"user.id\\\", userID))\\n\\n    // \\u67E5\\u8BE2\\u7528\\u6237\\n    user, err := queryUser(ctx, userID)\\n    if err != nil {\\n        span.RecordError(err)\\n        c.JSON(500, gin.H{\\\"error\\\": err.Error()})\\n        return\\n    }\\n\\n    c.JSON(200, user)\\n}\\n\\nfunc CreateUser(c *gin.Context) {\\n    ctx := c.Request.Context()\\n    ctx, span := tracer.Start(ctx, \\\"create_user_handler\\\")\\n    defer span.End()\\n\\n    var user User\\n    if err := c.ShouldBindJSON(&user); err != nil {\\n        span.RecordError(err)\\n        c.JSON(400, gin.H{\\\"error\\\": err.Error()})\\n        return\\n    }\\n\\n    if err := saveUser(ctx, &user); err != nil {\\n        span.RecordError(err)\\n        c.JSON(500, gin.H{\\\"error\\\": err.Error()})\\n        return\\n    }\\n\\n    c.JSON(201, user)\\n}\\n\\ntype User struct {\\n    ID    string `json:\\\"id\\\"`\\n    Name  string `json:\\\"name\\\"`\\n    Email string `json:\\\"email\\\"`\\n}\\n\\nfunc queryUser(ctx context.Context, id string) (*User, error) {\\n    ctx, span := tracer.Start(ctx, \\\"query_user\\\",\\n        trace.WithAttributes(attribute.String(\\\"db.operation\\\", \\\"SELECT\\\")),\\n    )\\n    defer span.End()\\n\\n    // \\u6570\\u636E\\u5E93\\u67E5\\u8BE2\\u903B\\u8F91\\n    return &User{ID: id, Name: \\\"John Doe\\\"}, nil\\n}\\n\\nfunc saveUser(ctx context.Context, user *User) error {\\n    ctx, span := tracer.Start(ctx, \\\"save_user\\\",\\n        trace.WithAttributes(attribute.String(\\\"db.operation\\\", \\\"INSERT\\\")),\\n    )\\n    defer span.End()\\n\\n    // \\u6570\\u636E\\u5E93\\u63D2\\u5165\\u903B\\u8F91\\n    return nil\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"echo-framework\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#echo-framework\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Echo Framework\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"github.com/labstack/echo/v4\\\"\\n    \\\"go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho\\\"\\n)\\n\\nfunc main() {\\n    // \\u521D\\u59CB\\u5316 OpenTelemetry\\n    shutdown, err := InitOpenTelemetry(context.Background())\\n    if err != nil {\\n        log.Fatal(err)\\n    }\\n    defer shutdown(context.Background())\\n\\n    // \\u521B\\u5EFA Echo \\u5B9E\\u4F8B\\n    e := echo.New()\\n\\n    // \\u6DFB\\u52A0 OpenTelemetry \\u4E2D\\u95F4\\u4EF6\\n    e.Use(otelecho.Middleware(\\\"my-service\\\"))\\n\\n    // \\u5B9A\\u4E49\\u8DEF\\u7531\\n    e.GET(\\\"/users/:id\\\", func(c echo.Context) error {\\n        ctx := c.Request().Context()\\n        ctx, span := tracer.Start(ctx, \\\"get_user\\\")\\n        defer span.End()\\n\\n        userID := c.Param(\\\"id\\\")\\n        span.SetAttributes(attribute.String(\\\"user.id\\\", userID))\\n\\n        return c.JSON(200, map[string]string{\\\"id\\\": userID})\\n    })\\n\\n    // \\u542F\\u52A8\\u670D\\u52A1\\u5668\\n    e.Start(\\\":8080\\\")\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"grpc-server\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#grpc-server\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"gRPC Server\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"context\\\"\\n    \\\"log\\\"\\n    \\\"net\\\"\\n\\n    \\\"google.golang.org/grpc\\\"\\n    \\\"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc\\\"\\n    pb \\\"your-package/proto\\\"\\n)\\n\\ntype server struct {\\n    pb.UnimplementedUserServiceServer\\n}\\n\\nfunc (s *server) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.GetUserResponse, error) {\\n    // ctx \\u5DF2\\u7ECF\\u5305\\u542B\\u4E86 trace \\u4FE1\\u606F\\n    ctx, span := tracer.Start(ctx, \\\"GetUser\\\")\\n    defer span.End()\\n\\n    span.SetAttributes(attribute.String(\\\"user.id\\\", req.GetId()))\\n\\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    return &pb.GetUserResponse{\\n        Id:   req.GetId(),\\n        Name: \\\"John Doe\\\",\\n    }, nil\\n}\\n\\nfunc main() {\\n    // \\u521D\\u59CB\\u5316 OpenTelemetry\\n    shutdown, err := InitOpenTelemetry(context.Background())\\n    if err != nil {\\n        log.Fatal(err)\\n    }\\n    defer shutdown(context.Background())\\n\\n    // \\u521B\\u5EFA gRPC \\u670D\\u52A1\\u5668\\n    s := grpc.NewServer(\\n        grpc.StatsHandler(otelgrpc.NewServerHandler()),\\n    )\\n\\n    pb.RegisterUserServiceServer(s, &server{})\\n\\n    lis, err := net.Listen(\\\"tcp\\\", \\\":50051\\\")\\n    if err != nil {\\n        log.Fatal(err)\\n    }\\n\\n    log.Println(\\\"gRPC server listening on :50051\\\")\\n    if err := s.Serve(lis); err != nil {\\n        log.Fatal(err)\\n    }\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"grpc-client\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#grpc-client\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"gRPC Client\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"context\\\"\\n    \\\"google.golang.org/grpc\\\"\\n    \\\"google.golang.org/grpc/credentials/insecure\\\"\\n    \\\"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc\\\"\\n    pb \\\"your-package/proto\\\"\\n)\\n\\nfunc main() {\\n    // \\u521B\\u5EFA gRPC \\u8FDE\\u63A5\\n    conn, err := grpc.NewClient(\\n        \\\"localhost:50051\\\",\\n        grpc.WithTransportCredentials(insecure.NewCredentials()),\\n        grpc.WithStatsHandler(otelgrpc.NewClientHandler()),\\n    )\\n    if err != nil {\\n        log.Fatal(err)\\n    }\\n    defer conn.Close()\\n\\n    client := pb.NewUserServiceClient(conn)\\n\\n    // \\u8C03\\u7528\\u670D\\u52A1\\n    ctx, span := tracer.Start(context.Background(), \\\"call_get_user\\\")\\n    defer span.End()\\n\\n    resp, err := client.GetUser(ctx, &pb.GetUserRequest{Id: \\\"123\\\"})\\n    if err != nil {\\n        span.RecordError(err)\\n        log.Fatal(err)\\n    }\\n\\n    log.Printf(\\\"User: %+v\\\", resp)\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"database---databasesql\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#database---databasesql\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Database - database/sql\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"context\\\"\\n    \\\"database/sql\\\"\\n\\n    _ \\\"github.com/go-sql-driver/mysql\\\"\\n    \\\"go.opentelemetry.io/contrib/instrumentation/database/sql/otelsql\\\"\\n    semconv \\\"go.opentelemetry.io/otel/semconv/v1.24.0\\\"\\n)\\n\\nfunc main() {\\n    // \\u6CE8\\u518C\\u5E26\\u57CB\\u70B9\\u7684\\u9A71\\u52A8\\n    driverName, err := otelsql.Register(\\\"mysql\\\",\\n        otelsql.WithAttributes(\\n            semconv.DBSystemMySQL,\\n        ),\\n    )\\n    if err != nil {\\n        log.Fatal(err)\\n    }\\n\\n    // \\u6253\\u5F00\\u6570\\u636E\\u5E93\\u8FDE\\u63A5\\n    db, err := sql.Open(driverName, \\\"user:password@tcp(localhost:3306)/dbname\\\")\\n    if err != nil {\\n        log.Fatal(err)\\n    }\\n    defer db.Close()\\n\\n    // \\u8BB0\\u5F55\\u7EDF\\u8BA1\\u4FE1\\u606F\\n    if err := otelsql.RecordStats(db); err != nil {\\n        log.Fatal(err)\\n    }\\n\\n    // \\u4F7F\\u7528\\u6570\\u636E\\u5E93\\n    ctx, span := tracer.Start(context.Background(), \\\"database_query\\\")\\n    defer span.End()\\n\\n    rows, err := db.QueryContext(ctx, \\\"SELECT id, name FROM users WHERE id = ?\\\", 123)\\n    if err != nil {\\n        span.RecordError(err)\\n        log.Fatal(err)\\n    }\\n    defer rows.Close()\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"database---gorm\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#database---gorm\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Database - GORM\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"gorm.io/driver/mysql\\\"\\n    \\\"gorm.io/gorm\\\"\\n    \\\"go.opentelemetry.io/contrib/instrumentation/gorm.io/gorm/otelgorm\\\"\\n)\\n\\nfunc main() {\\n    dsn := \\\"user:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True\\\"\\n    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})\\n    if err != nil {\\n        log.Fatal(err)\\n    }\\n\\n    // \\u6DFB\\u52A0 OpenTelemetry \\u63D2\\u4EF6\\n    if err := db.Use(otelgorm.NewPlugin()); err != nil {\\n        log.Fatal(err)\\n    }\\n\\n    // \\u4F7F\\u7528 GORM\\n    ctx, span := tracer.Start(context.Background(), \\\"gorm_query\\\")\\n    defer span.End()\\n\\n    var users []User\\n    result := db.WithContext(ctx).Find(&users)\\n    if result.Error != nil {\\n        span.RecordError(result.Error)\\n    }\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"redis---go-redis\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#redis---go-redis\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Redis - go-redis\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"context\\\"\\n    \\\"github.com/redis/go-redis/v9\\\"\\n    \\\"go.opentelemetry.io/contrib/instrumentation/github.com/redis/go-redis/v9/otelredis\\\"\\n)\\n\\nfunc main() {\\n    // \\u521B\\u5EFA Redis \\u5BA2\\u6237\\u7AEF\\n    rdb := redis.NewClient(&redis.Options{\\n        Addr: \\\"localhost:6379\\\",\\n    })\\n\\n    // \\u6DFB\\u52A0 OpenTelemetry Hook\\n    if err := otelredis.InstrumentTracing(rdb); err != nil {\\n        log.Fatal(err)\\n    }\\n    if err := otelredis.InstrumentMetrics(rdb); err != nil {\\n        log.Fatal(err)\\n    }\\n\\n    // \\u4F7F\\u7528 Redis\\n    ctx, span := tracer.Start(context.Background(), \\\"redis_operation\\\")\\n    defer span.End()\\n\\n    err := rdb.Set(ctx, \\\"key\\\", \\\"value\\\", 0).Err()\\n    if err != nil {\\n        span.RecordError(err)\\n    }\\n\\n    val, err := rdb.Get(ctx, \\\"key\\\").Result()\\n    if err != nil {\\n        span.RecordError(err)\\n    }\\n    log.Println(val)\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"kafka---sarama\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#kafka---sarama\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Kafka - sarama\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"github.com/IBM/sarama\\\"\\n    \\\"go.opentelemetry.io/contrib/instrumentation/github.com/IBM/sarama/otelsarama\\\"\\n)\\n\\nfunc main() {\\n    config := sarama.NewConfig()\\n    config.Version = sarama.V2_8_0_0\\n    config.Producer.Return.Successes = true\\n\\n    // \\u521B\\u5EFA\\u751F\\u4EA7\\u8005\\n    producer, err := sarama.NewSyncProducer([]string{\\\"localhost:9092\\\"}, config)\\n    if err != nil {\\n        log.Fatal(err)\\n    }\\n    defer producer.Close()\\n\\n    // \\u5305\\u88C5\\u751F\\u4EA7\\u8005\\n    producer = otelsarama.WrapSyncProducer(config, producer)\\n\\n    // \\u53D1\\u9001\\u6D88\\u606F\\n    ctx, span := tracer.Start(context.Background(), \\\"kafka_produce\\\")\\n    defer span.End()\\n\\n    // \\u6CE8\\u5165 trace context\\n    msg := &sarama.ProducerMessage{\\n        Topic: \\\"test-topic\\\",\\n        Value: sarama.StringEncoder(\\\"test message\\\"),\\n    }\\n\\n    // \\u4F20\\u64AD context\\n    otel.GetTextMapPropagator().Inject(ctx, otelsarama.NewProducerMessageCarrier(msg))\\n\\n    partition, offset, err := producer.SendMessage(msg)\\n    if err != nil {\\n        span.RecordError(err)\\n    }\\n    log.Printf(\\\"Message sent to partition %d at offset %d\\\\n\\\", partition, offset)\\n}\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"高级配置\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E9%AB%98%E7%BA%A7%E9%85%8D%E7%BD%AE\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u9AD8\\u7EA7\\u914D\\u7F6E\"), mdx(\"h3\", {\n    \"id\": \"自定义采样策略\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E8%87%AA%E5%AE%9A%E4%B9%89%E9%87%87%E6%A0%B7%E7%AD%96%E7%95%A5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u81EA\\u5B9A\\u4E49\\u91C7\\u6837\\u7B56\\u7565\"), mdx(\"h4\", {\n    \"id\": \"基于-span-名称的采样\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E5%9F%BA%E4%BA%8E-span-%E5%90%8D%E7%A7%B0%E7%9A%84%E9%87%87%E6%A0%B7\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u57FA\\u4E8E Span \\u540D\\u79F0\\u7684\\u91C7\\u6837\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"package main\\n\\nimport (\\n    \\\"strings\\\"\\n    sdktrace \\\"go.opentelemetry.io/otel/sdk/trace\\\"\\n)\\n\\n// CustomSampler \\u81EA\\u5B9A\\u4E49\\u91C7\\u6837\\u5668\\ntype CustomSampler struct {\\n    defaultSampler sdktrace.Sampler\\n    alwaysSample   []string // \\u59CB\\u7EC8\\u91C7\\u6837\\u7684 Span \\u540D\\u79F0\\n    neverSample    []string // \\u4ECE\\u4E0D\\u91C7\\u6837\\u7684 Span \\u540D\\u79F0\\n}\\n\\nfunc NewCustomSampler(defaultRate float64, alwaysSample, neverSample []string) sdktrace.Sampler {\\n    return &CustomSampler{\\n        defaultSampler: sdktrace.TraceIDRatioBased(defaultRate),\\n        alwaysSample:   alwaysSample,\\n        neverSample:    neverSample,\\n    }\\n}\\n\\nfunc (s *CustomSampler) ShouldSample(p sdktrace.SamplingParameters) sdktrace.SamplingResult {\\n    spanName := p.Name\\n\\n    // \\u68C0\\u67E5\\u662F\\u5426\\u9700\\u8981\\u603B\\u662F\\u91C7\\u6837\\n    for _, name := range s.alwaysSample {\\n        if strings.Contains(spanName, name) {\\n            return sdktrace.SamplingResult{\\n                Decision:   sdktrace.RecordAndSample,\\n                Tracestate: p.ParentContext.TraceState(),\\n            }\\n        }\\n    }\\n\\n    // \\u68C0\\u67E5\\u662F\\u5426\\u4ECE\\u4E0D\\u91C7\\u6837\\n    for _, name := range s.neverSample {\\n        if strings.Contains(spanName, name) {\\n            return sdktrace.SamplingResult{\\n                Decision:   sdktrace.Drop,\\n                Tracestate: p.ParentContext.TraceState(),\\n            }\\n        }\\n    }\\n\\n    // \\u4F7F\\u7528\\u9ED8\\u8BA4\\u91C7\\u6837\\u7B56\\u7565\\n    return s.defaultSampler.ShouldSample(p)\\n}\\n\\nfunc (s *CustomSampler) Description() string {\\n    return \\\"CustomSampler\\\"\\n}\\n\\n// \\u4F7F\\u7528\\u793A\\u4F8B\\nfunc InitWithCustomSampler() *sdktrace.TracerProvider {\\n    sampler := NewCustomSampler(\\n        0.1, // \\u9ED8\\u8BA4 10% \\u91C7\\u6837\\n        []string{\\\"/checkout\\\", \\\"/payment\\\"}, // \\u59CB\\u7EC8\\u91C7\\u6837\\n        []string{\\\"/health\\\", \\\"/metrics\\\"},   // \\u4ECE\\u4E0D\\u91C7\\u6837\\n    )\\n\\n    return sdktrace.NewTracerProvider(\\n        sdktrace.WithSampler(sdktrace.ParentBased(sampler)),\\n    )\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"基于属性的采样\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E5%9F%BA%E4%BA%8E%E5%B1%9E%E6%80%A7%E7%9A%84%E9%87%87%E6%A0%B7\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u57FA\\u4E8E\\u5C5E\\u6027\\u7684\\u91C7\\u6837\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// AttributeBasedSampler \\u57FA\\u4E8E\\u5C5E\\u6027\\u7684\\u91C7\\u6837\\u5668\\ntype AttributeBasedSampler struct {\\n    defaultSampler sdktrace.Sampler\\n}\\n\\nfunc NewAttributeBasedSampler(defaultRate float64) sdktrace.Sampler {\\n    return &AttributeBasedSampler{\\n        defaultSampler: sdktrace.TraceIDRatioBased(defaultRate),\\n    }\\n}\\n\\nfunc (s *AttributeBasedSampler) ShouldSample(p sdktrace.SamplingParameters) sdktrace.SamplingResult {\\n    // \\u68C0\\u67E5\\u7279\\u5B9A\\u5C5E\\u6027\\n    for _, attr := range p.Attributes {\\n        if string(attr.Key) == \\\"important\\\" && attr.Value.AsBool() {\\n            // \\u91CD\\u8981\\u8BF7\\u6C42\\u603B\\u662F\\u91C7\\u6837\\n            return sdktrace.SamplingResult{\\n                Decision:   sdktrace.RecordAndSample,\\n                Tracestate: p.ParentContext.TraceState(),\\n            }\\n        }\\n\\n        // \\u9519\\u8BEF\\u8BF7\\u6C42\\u603B\\u662F\\u91C7\\u6837\\n        if string(attr.Key) == \\\"error\\\" && attr.Value.AsBool() {\\n            return sdktrace.SamplingResult{\\n                Decision:   sdktrace.RecordAndSample,\\n                Tracestate: p.ParentContext.TraceState(),\\n            }\\n        }\\n    }\\n\\n    return s.defaultSampler.ShouldSample(p)\\n}\\n\\nfunc (s *AttributeBasedSampler) Description() string {\\n    return \\\"AttributeBasedSampler\\\"\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"span-processor\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#span-processor\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Span Processor\"), mdx(\"h4\", {\n    \"id\": \"自定义属性添加\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%B1%9E%E6%80%A7%E6%B7%BB%E5%8A%A0\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u81EA\\u5B9A\\u4E49\\u5C5E\\u6027\\u6DFB\\u52A0\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// AttributeAdder \\u6DFB\\u52A0\\u81EA\\u5B9A\\u4E49\\u5C5E\\u6027\\u5230\\u6240\\u6709 Span\\ntype AttributeAdder struct {\\n    sdktrace.SpanProcessor\\n    attributes []attribute.KeyValue\\n}\\n\\nfunc NewAttributeAdder(processor sdktrace.SpanProcessor, attrs []attribute.KeyValue) sdktrace.SpanProcessor {\\n    return &AttributeAdder{\\n        SpanProcessor: processor,\\n        attributes:    attrs,\\n    }\\n}\\n\\nfunc (a *AttributeAdder) OnStart(parent context.Context, s sdktrace.ReadWriteSpan) {\\n    // \\u6DFB\\u52A0\\u81EA\\u5B9A\\u4E49\\u5C5E\\u6027\\n    s.SetAttributes(a.attributes...)\\n    a.SpanProcessor.OnStart(parent, s)\\n}\\n\\nfunc (a *AttributeAdder) OnEnd(s sdktrace.ReadOnlySpan) {\\n    a.SpanProcessor.OnEnd(s)\\n}\\n\\nfunc (a *AttributeAdder) Shutdown(ctx context.Context) error {\\n    return a.SpanProcessor.Shutdown(ctx)\\n}\\n\\nfunc (a *AttributeAdder) ForceFlush(ctx context.Context) error {\\n    return a.SpanProcessor.ForceFlush(ctx)\\n}\\n\\n// \\u4F7F\\u7528\\u793A\\u4F8B\\nfunc InitWithAttributeAdder() *sdktrace.TracerProvider {\\n    exporter, _ := otlptracegrpc.New(context.Background())\\n    \\n    bsp := sdktrace.NewBatchSpanProcessor(exporter)\\n    \\n    // \\u5305\\u88C5\\u5904\\u7406\\u5668\\n    processor := NewAttributeAdder(bsp, []attribute.KeyValue{\\n        attribute.String(\\\"environment\\\", \\\"production\\\"),\\n        attribute.String(\\\"region\\\", \\\"us-east-1\\\"),\\n        attribute.String(\\\"version\\\", \\\"1.0.0\\\"),\\n    })\\n\\n    return sdktrace.NewTracerProvider(\\n        sdktrace.WithSpanProcessor(processor),\\n    )\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"过滤-span\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E8%BF%87%E6%BB%A4-span\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u8FC7\\u6EE4 Span\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// FilteringProcessor \\u8FC7\\u6EE4\\u7279\\u5B9A Span\\ntype FilteringProcessor struct {\\n    sdktrace.SpanProcessor\\n    filter func(sdktrace.ReadOnlySpan) bool\\n}\\n\\nfunc NewFilteringProcessor(processor sdktrace.SpanProcessor, filter func(sdktrace.ReadOnlySpan) bool) sdktrace.SpanProcessor {\\n    return &FilteringProcessor{\\n        SpanProcessor: processor,\\n        filter:        filter,\\n    }\\n}\\n\\nfunc (f *FilteringProcessor) OnEnd(s sdktrace.ReadOnlySpan) {\\n    // \\u53EA\\u5904\\u7406\\u7B26\\u5408\\u6761\\u4EF6\\u7684 Span\\n    if f.filter(s) {\\n        f.SpanProcessor.OnEnd(s)\\n    }\\n}\\n\\n// \\u4F7F\\u7528\\u793A\\u4F8B\\uFF1A\\u8FC7\\u6EE4\\u6389\\u5065\\u5EB7\\u68C0\\u67E5\\u8BF7\\u6C42\\nfunc InitWithFiltering() *sdktrace.TracerProvider {\\n    exporter, _ := otlptracegrpc.New(context.Background())\\n    \\n    bsp := sdktrace.NewBatchSpanProcessor(exporter)\\n    \\n    processor := NewFilteringProcessor(bsp, func(s sdktrace.ReadOnlySpan) bool {\\n        // \\u8FC7\\u6EE4\\u6389\\u5065\\u5EB7\\u68C0\\u67E5\\n        return !strings.Contains(s.Name(), \\\"/health\\\")\\n    })\\n\\n    return sdktrace.NewTracerProvider(\\n        sdktrace.WithSpanProcessor(processor),\\n    )\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"多-exporter-配置\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%A4%9A-exporter-%E9%85%8D%E7%BD%AE\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u591A Exporter \\u914D\\u7F6E\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"func InitWithMultipleExporters(ctx context.Context) (*sdktrace.TracerProvider, error) {\\n    res, _ := resource.New(ctx, resource.WithAttributes(\\n        semconv.ServiceName(\\\"my-service\\\"),\\n    ))\\n\\n    // OTLP Exporter (\\u4E3B\\u8981\\u540E\\u7AEF)\\n    otlpExporter, err := otlptracegrpc.New(ctx,\\n        otlptracegrpc.WithEndpoint(\\\"api.uptrace.dev:4317\\\"),\\n        otlptracegrpc.WithTLSCredentials(credentials.NewClientTLSFromCert(nil, \\\"\\\")),\\n        otlptracegrpc.WithHeaders(map[string]string{\\n            \\\"uptrace-dsn\\\": \\\"http://token@uptrace-grpc.yodao.cn/project\\\",\\n        }),\\n    )\\n    if err != nil {\\n        return nil, err\\n    }\\n\\n    // Jaeger Exporter (\\u5907\\u4EFD)\\n    jaegerExporter, err := jaeger.New(jaeger.WithCollectorEndpoint(\\n        jaeger.WithEndpoint(\\\"http://localhost:14268/api/traces\\\"),\\n    ))\\n    if err != nil {\\n        return nil, err\\n    }\\n\\n    // Console Exporter (\\u672C\\u5730\\u8C03\\u8BD5)\\n    consoleExporter, err := stdouttrace.New(\\n        stdouttrace.WithPrettyPrint(),\\n    )\\n    if err != nil {\\n        return nil, err\\n    }\\n\\n    tp := sdktrace.NewTracerProvider(\\n        sdktrace.WithResource(res),\\n        // \\u6DFB\\u52A0\\u591A\\u4E2A\\u5904\\u7406\\u5668\\n        sdktrace.WithBatcher(otlpExporter),\\n        sdktrace.WithBatcher(jaegerExporter),\\n        sdktrace.WithBatcher(consoleExporter),\\n    )\\n\\n    return tp, nil\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"资源检测\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E8%B5%84%E6%BA%90%E6%A3%80%E6%B5%8B\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u8D44\\u6E90\\u68C0\\u6D4B\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"import (\\n    \\\"go.opentelemetry.io/otel/sdk/resource\\\"\\n    semconv \\\"go.opentelemetry.io/otel/semconv/v1.24.0\\\"\\n)\\n\\nfunc CreateResourceWithDetectors(ctx context.Context) (*resource.Resource, error) {\\n    return resource.New(ctx,\\n        // \\u624B\\u52A8\\u8BBE\\u7F6E\\u7684\\u8D44\\u6E90\\u5C5E\\u6027\\n        resource.WithAttributes(\\n            semconv.ServiceName(\\\"my-service\\\"),\\n            semconv.ServiceVersion(\\\"1.0.0\\\"),\\n        ),\\n        // \\u81EA\\u52A8\\u68C0\\u6D4B\\u8FDB\\u7A0B\\u4FE1\\u606F\\n        resource.WithProcess(),\\n        // \\u81EA\\u52A8\\u68C0\\u6D4B\\u4E3B\\u673A\\u4FE1\\u606F\\n        resource.WithHost(),\\n        // \\u81EA\\u52A8\\u68C0\\u6D4B\\u64CD\\u4F5C\\u7CFB\\u7EDF\\u4FE1\\u606F\\n        resource.WithOS(),\\n        // \\u81EA\\u52A8\\u68C0\\u6D4B\\u5BB9\\u5668\\u4FE1\\u606F\\n        resource.WithContainer(),\\n        // \\u81EA\\u52A8\\u68C0\\u6D4B\\u73AF\\u5883\\u53D8\\u91CF\\u4E2D\\u7684\\u8D44\\u6E90\\u5C5E\\u6027\\n        resource.WithFromEnv(),\\n        // \\u81EA\\u52A8\\u68C0\\u6D4B TelemetrySDK \\u4FE1\\u606F\\n        resource.WithTelemetrySDK(),\\n    )\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"性能优化配置\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E9%85%8D%E7%BD%AE\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6027\\u80FD\\u4F18\\u5316\\u914D\\u7F6E\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"func InitOptimizedProvider(ctx context.Context) (*sdktrace.TracerProvider, error) {\\n    exporter, err := otlptracegrpc.New(ctx,\\n        otlptracegrpc.WithEndpoint(\\\"api.uptrace.dev:4317\\\"),\\n        otlptracegrpc.WithTLSCredentials(credentials.NewClientTLSFromCert(nil, \\\"\\\")),\\n        // \\u542F\\u7528\\u538B\\u7F29\\n        otlptracegrpc.WithCompressor(\\\"gzip\\\"),\\n        // \\u8BBE\\u7F6E\\u8D85\\u65F6\\n        otlptracegrpc.WithTimeout(10*time.Second),\\n        // \\u8BBE\\u7F6E\\u91CD\\u8BD5\\n        otlptracegrpc.WithRetry(otlptracegrpc.RetryConfig{\\n            Enabled:         true,\\n            InitialInterval: 1 * time.Second,\\n            MaxInterval:     30 * time.Second,\\n            MaxElapsedTime:  5 * time.Minute,\\n        }),\\n    )\\n    if err != nil {\\n        return nil, err\\n    }\\n\\n    tp := sdktrace.NewTracerProvider(\\n        sdktrace.WithBatcher(exporter,\\n            // \\u6279\\u91CF\\u5927\\u5C0F\\n            sdktrace.WithMaxExportBatchSize(512),\\n            // \\u6279\\u91CF\\u8D85\\u65F6\\n            sdktrace.WithBatchTimeout(5*time.Second),\\n            // \\u961F\\u5217\\u5927\\u5C0F\\n            sdktrace.WithMaxQueueSize(2048),\\n            // \\u5BFC\\u51FA\\u8D85\\u65F6\\n            sdktrace.WithExportTimeout(30*time.Second),\\n        ),\\n        // \\u91C7\\u6837\\u7387\\n        sdktrace.WithSampler(sdktrace.ParentBased(\\n            sdktrace.TraceIDRatioBased(0.1),\\n        )),\\n        // Span \\u9650\\u5236\\n        sdktrace.WithSpanLimits(sdktrace.SpanLimits{\\n            AttributeValueLengthLimit:   1024,\\n            AttributeCountLimit:         128,\\n            EventCountLimit:             128,\\n            LinkCountLimit:              128,\\n            AttributePerEventCountLimit: 128,\\n            AttributePerLinkCountLimit:  128,\\n        }),\\n    )\\n\\n    return tp, nil\\n}\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"最佳实践\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6700\\u4F73\\u5B9E\\u8DF5\"), mdx(\"h3\", {\n    \"id\": \"1-context-传递\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#1-context-%E4%BC%A0%E9%80%92\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"1. Context \\u4F20\\u9012\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u6B63\\u786E\\u505A\\u6CD5\"), \": \\u59CB\\u7EC8\\u4F20\\u9012 context\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u2705 \\u6B63\\u786E\\nfunc ProcessOrder(ctx context.Context, orderID string) error {\\n    ctx, span := tracer.Start(ctx, \\\"process_order\\\")\\n    defer span.End()\\n\\n    // \\u4F20\\u9012 context \\u7ED9\\u4E0B\\u6E38\\u51FD\\u6570\\n    if err := validateOrder(ctx, orderID); err != nil {\\n        return err\\n    }\\n\\n    if err := chargePayment(ctx, orderID); err != nil {\\n        return err\\n    }\\n\\n    return nil\\n}\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u9519\\u8BEF\\u505A\\u6CD5\"), \": \\u521B\\u5EFA\\u65B0\\u7684 context\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u274C \\u9519\\u8BEF\\nfunc ProcessOrder(ctx context.Context, orderID string) error {\\n    ctx, span := tracer.Start(ctx, \\\"process_order\\\")\\n    defer span.End()\\n\\n    // \\u4E0D\\u8981\\u521B\\u5EFA\\u65B0\\u7684 context.Background()\\n    if err := validateOrder(context.Background(), orderID); err != nil {\\n        return err\\n    }\\n\\n    return nil\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"2-span-命名\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#2-span-%E5%91%BD%E5%90%8D\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"2. Span \\u547D\\u540D\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u6B63\\u786E\\u505A\\u6CD5\"), \": \\u4F7F\\u7528\\u63CF\\u8FF0\\u6027\\u540D\\u79F0\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u2705 \\u6B63\\u786E\\nctx, span := tracer.Start(ctx, \\\"database.query.users.by_id\\\")\\nctx, span := tracer.Start(ctx, \\\"http.client.post.payment_gateway\\\")\\nctx, span := tracer.Start(ctx, \\\"cache.get.user_profile\\\")\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u9519\\u8BEF\\u505A\\u6CD5\"), \": \\u4F7F\\u7528\\u6A21\\u7CCA\\u6216\\u8FC7\\u957F\\u7684\\u540D\\u79F0\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u274C \\u9519\\u8BEF\\nctx, span := tracer.Start(ctx, \\\"do_something\\\")\\nctx, span := tracer.Start(ctx, \\\"query\\\")\\nctx, span := tracer.Start(ctx, fmt.Sprintf(\\\"get_user_%s_from_database_with_params_%v\\\", id, params))\\n\")), mdx(\"h3\", {\n    \"id\": \"3-错误处理\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#3-%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"3. \\u9519\\u8BEF\\u5904\\u7406\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u6B63\\u786E\\u505A\\u6CD5\"), \": \\u8BB0\\u5F55\\u9519\\u8BEF\\u5E76\\u8BBE\\u7F6E\\u72B6\\u6001\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u2705 \\u6B63\\u786E\\nfunc QueryDatabase(ctx context.Context) error {\\n    ctx, span := tracer.Start(ctx, \\\"query_database\\\")\\n    defer span.End()\\n\\n    err := db.Query(ctx, \\\"SELECT * FROM users\\\")\\n    if err != nil {\\n        span.RecordError(err)\\n        span.SetStatus(codes.Error, err.Error())\\n        return err\\n    }\\n\\n    span.SetStatus(codes.Ok, \\\"\\\")\\n    return nil\\n}\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u9519\\u8BEF\\u505A\\u6CD5\"), \": \\u5FFD\\u7565\\u9519\\u8BEF\\u6216\\u4E0D\\u8BBE\\u7F6E\\u72B6\\u6001\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u274C \\u9519\\u8BEF\\nfunc QueryDatabase(ctx context.Context) error {\\n    ctx, span := tracer.Start(ctx, \\\"query_database\\\")\\n    defer span.End()\\n\\n    err := db.Query(ctx, \\\"SELECT * FROM users\\\")\\n    // \\u6CA1\\u6709\\u8BB0\\u5F55\\u9519\\u8BEF\\n    return err\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"4-资源管理\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#4-%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"4. \\u8D44\\u6E90\\u7BA1\\u7406\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u6B63\\u786E\\u505A\\u6CD5\"), \": \\u59CB\\u7EC8\\u8C03\\u7528 defer span.End()\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u2705 \\u6B63\\u786E\\nfunc Operation(ctx context.Context) error {\\n    ctx, span := tracer.Start(ctx, \\\"operation\\\")\\n    defer span.End()\\n\\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    return nil\\n}\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u9519\\u8BEF\\u505A\\u6CD5\"), \": \\u5FD8\\u8BB0\\u8C03\\u7528 span.End()\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u274C \\u9519\\u8BEF\\nfunc Operation(ctx context.Context) error {\\n    ctx, span := tracer.Start(ctx, \\\"operation\\\")\\n    \\n    // \\u5FD8\\u8BB0 defer span.End()\\n    \\n    return nil\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"5-属性使用\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#5-%E5%B1%9E%E6%80%A7%E4%BD%BF%E7%94%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"5. \\u5C5E\\u6027\\u4F7F\\u7528\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u6B63\\u786E\\u505A\\u6CD5\"), \": \\u4F7F\\u7528\\u8BED\\u4E49\\u7EA6\\u5B9A\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u2705 \\u6B63\\u786E\\nspan.SetAttributes(\\n    semconv.HTTPMethod(\\\"GET\\\"),\\n    semconv.HTTPURL(\\\"https://api.example.com/users\\\"),\\n    semconv.HTTPStatusCode(200),\\n    semconv.DBSystem(\\\"mysql\\\"),\\n    semconv.DBName(\\\"users_db\\\"),\\n    semconv.DBStatement(\\\"SELECT * FROM users WHERE id = ?\\\"),\\n)\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u9519\\u8BEF\\u505A\\u6CD5\"), \": \\u4F7F\\u7528\\u81EA\\u5B9A\\u4E49\\u952E\\u540D\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u274C \\u9519\\u8BEF\\uFF08\\u9664\\u975E\\u5FC5\\u8981\\uFF09\\nspan.SetAttributes(\\n    attribute.String(\\\"method\\\", \\\"GET\\\"),\\n    attribute.String(\\\"url\\\", \\\"https://api.example.com/users\\\"),\\n    attribute.Int(\\\"status\\\", 200),\\n)\\n\")), mdx(\"h3\", {\n    \"id\": \"6-避免过度埋点\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#6-%E9%81%BF%E5%85%8D%E8%BF%87%E5%BA%A6%E5%9F%8B%E7%82%B9\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"6. \\u907F\\u514D\\u8FC7\\u5EA6\\u57CB\\u70B9\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u6B63\\u786E\\u505A\\u6CD5\"), \": \\u53EA\\u5728\\u5173\\u952E\\u8DEF\\u5F84\\u57CB\\u70B9\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u2705 \\u6B63\\u786E\\nfunc ProcessOrder(ctx context.Context) error {\\n    ctx, span := tracer.Start(ctx, \\\"process_order\\\")\\n    defer span.End()\\n\\n    // \\u5173\\u952E\\u64CD\\u4F5C\\n    validateOrder(ctx)\\n    chargePayment(ctx)\\n    sendEmail(ctx)\\n\\n    return nil\\n}\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u9519\\u8BEF\\u505A\\u6CD5\"), \": \\u5BF9\\u6BCF\\u4E2A\\u5C0F\\u51FD\\u6570\\u90FD\\u57CB\\u70B9\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u274C \\u9519\\u8BEF\\uFF08\\u8FC7\\u5EA6\\u57CB\\u70B9\\uFF09\\nfunc ProcessOrder(ctx context.Context) error {\\n    ctx, span := tracer.Start(ctx, \\\"process_order\\\")\\n    defer span.End()\\n\\n    validateID(ctx)      // \\u592A\\u7EC6\\u7C92\\u5EA6\\n    checkFormat(ctx)     // \\u592A\\u7EC6\\u7C92\\u5EA6\\n    validateAge(ctx)     // \\u592A\\u7EC6\\u7C92\\u5EA6\\n    validateEmail(ctx)   // \\u592A\\u7EC6\\u7C92\\u5EA6\\n\\n    return nil\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"7-metrics-最佳实践\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#7-metrics-%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"7. Metrics \\u6700\\u4F73\\u5B9E\\u8DF5\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"var (\\n    // \\u2705 \\u6B63\\u786E\\uFF1A\\u5728\\u5305\\u7EA7\\u522B\\u521B\\u5EFA\\u4EEA\\u8868\\n    requestCounter metric.Int64Counter\\n    requestDuration metric.Float64Histogram\\n)\\n\\nfunc init() {\\n    meter := otel.Meter(\\\"my-service\\\")\\n    requestCounter, _ = meter.Int64Counter(\\\"requests\\\")\\n    requestDuration, _ = meter.Float64Histogram(\\\"request_duration\\\")\\n}\\n\\nfunc HandleRequest(ctx context.Context) {\\n    start := time.Now()\\n\\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n\\n    duration := time.Since(start).Milliseconds()\\n    \\n    // \\u8BB0\\u5F55\\u6307\\u6807\\n    requestCounter.Add(ctx, 1)\\n    requestDuration.Record(ctx, float64(duration))\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"8-优雅关闭\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#8-%E4%BC%98%E9%9B%85%E5%85%B3%E9%97%AD\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"8. \\u4F18\\u96C5\\u5173\\u95ED\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"func main() {\\n    ctx := context.Background()\\n\\n    shutdown, err := InitOpenTelemetry(ctx)\\n    if err != nil {\\n        log.Fatal(err)\\n    }\\n\\n    // \\u2705 \\u6B63\\u786E\\uFF1A\\u786E\\u4FDD\\u8C03\\u7528 shutdown\\n    defer func() {\\n        ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)\\n        defer cancel()\\n        \\n        if err := shutdown(ctx); err != nil {\\n            log.Printf(\\\"Error shutting down: %v\\\", err)\\n        }\\n    }()\\n\\n    // \\u5E94\\u7528\\u903B\\u8F91\\n}\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"故障排查\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6545\\u969C\\u6392\\u67E5\"), mdx(\"h3\", {\n    \"id\": \"常见问题\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5E38\\u89C1\\u95EE\\u9898\"), mdx(\"h4\", {\n    \"id\": \"1-数据未发送到后端\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#1-%E6%95%B0%E6%8D%AE%E6%9C%AA%E5%8F%91%E9%80%81%E5%88%B0%E5%90%8E%E7%AB%AF\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"1. \\u6570\\u636E\\u672A\\u53D1\\u9001\\u5230\\u540E\\u7AEF\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u75C7\\u72B6\"), \": APM \\u5E73\\u53F0\\u770B\\u4E0D\\u5230\\u6570\\u636E\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u6392\\u67E5\\u6B65\\u9AA4\"), \":\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u68C0\\u67E5\\u73AF\\u5883\\u53D8\\u91CF\\u914D\\u7F6E:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"echo $OTEL_SERVICE_NAME\\necho $OTEL_EXPORTER_OTLP_ENDPOINT\\necho $OTEL_EXPORTER_OTLP_HEADERS\\n\")), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u68C0\\u67E5\\u7F51\\u7EDC\\u8FDE\\u63A5:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"curl -v uptrace-grpc.yodao.cn:4317\\n\")), mdx(\"ol\", {\n    \"start\": 3\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u542F\\u7528\\u8C03\\u8BD5\\u65E5\\u5FD7:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"import \\\"go.opentelemetry.io/otel\\\"\\nimport \\\"go.opentelemetry.io/otel/exporters/stdout/stdouttrace\\\"\\n\\n// \\u4E34\\u65F6\\u6DFB\\u52A0 console exporter\\nconsoleExporter, _ := stdouttrace.New(stdouttrace.WithPrettyPrint())\\ntp := sdktrace.NewTracerProvider(\\n    sdktrace.WithBatcher(consoleExporter),\\n)\\n\")), mdx(\"ol\", {\n    \"start\": 4\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u68C0\\u67E5\\u91C7\\u6837\\u7387:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"export OTEL_TRACES_SAMPLER_ARG=1.0  # 100% \\u91C7\\u6837\\u7528\\u4E8E\\u8C03\\u8BD5\\n\")), mdx(\"h4\", {\n    \"id\": \"2-span-未关联\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#2-span-%E6%9C%AA%E5%85%B3%E8%81%94\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"2. Span \\u672A\\u5173\\u8054\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u75C7\\u72B6\"), \": Span \\u4E4B\\u95F4\\u6CA1\\u6709\\u7236\\u5B50\\u5173\\u7CFB\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u539F\\u56E0\"), \": Context \\u4F20\\u9012\\u4E0D\\u6B63\\u786E\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u89E3\\u51B3\\u65B9\\u6848\"), \":\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u786E\\u4FDD\\u4F20\\u9012\\u6B63\\u786E\\u7684 context\\nfunc ParentFunction(ctx context.Context) {\\n    ctx, span := tracer.Start(ctx, \\\"parent\\\")\\n    defer span.End()\\n\\n    // \\u2705 \\u4F20\\u9012 ctx\\n    ChildFunction(ctx)\\n}\\n\\nfunc ChildFunction(ctx context.Context) {\\n    // \\u2705 \\u4F7F\\u7528\\u4F20\\u5165\\u7684 ctx\\n    ctx, span := tracer.Start(ctx, \\\"child\\\")\\n    defer span.End()\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"3-内存泄漏\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#3-%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"3. \\u5185\\u5B58\\u6CC4\\u6F0F\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u75C7\\u72B6\"), \": \\u5185\\u5B58\\u6301\\u7EED\\u589E\\u957F\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u539F\\u56E0\"), \": \"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u6CA1\\u6709\\u8C03\\u7528 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"span.End()\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u961F\\u5217\\u79EF\\u538B\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u89E3\\u51B3\\u65B9\\u6848\"), \":\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// 1. \\u59CB\\u7EC8\\u4F7F\\u7528 defer\\nfunc Operation(ctx context.Context) {\\n    ctx, span := tracer.Start(ctx, \\\"operation\\\")\\n    defer span.End()  // \\u2705 \\u4F7F\\u7528 defer\\n}\\n\\n// 2. \\u8C03\\u6574\\u961F\\u5217\\u5927\\u5C0F\\ntp := sdktrace.NewTracerProvider(\\n    sdktrace.WithBatcher(exporter,\\n        sdktrace.WithMaxQueueSize(1024),  // \\u51CF\\u5C0F\\u961F\\u5217\\n        sdktrace.WithBatchTimeout(2*time.Second),  // \\u66F4\\u9891\\u7E41\\u5BFC\\u51FA\\n    ),\\n)\\n\")), mdx(\"h4\", {\n    \"id\": \"4-高-cpu-使用率\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#4-%E9%AB%98-cpu-%E4%BD%BF%E7%94%A8%E7%8E%87\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"4. \\u9AD8 CPU \\u4F7F\\u7528\\u7387\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u539F\\u56E0\"), \": \\u91C7\\u6837\\u7387\\u8FC7\\u9AD8\\u6216\\u6279\\u91CF\\u914D\\u7F6E\\u4E0D\\u5F53\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u89E3\\u51B3\\u65B9\\u6848\"), \":\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u964D\\u4F4E\\u91C7\\u6837\\u7387\\nexport OTEL_TRACES_SAMPLER_ARG=0.01  # 1%\\n\\n# \\u8C03\\u6574\\u6279\\u91CF\\u914D\\u7F6E\\nexport OTEL_BSP_MAX_EXPORT_BATCH_SIZE=256\\nexport OTEL_BSP_SCHEDULE_DELAY=10000  # 10 \\u79D2\\n\")), mdx(\"h3\", {\n    \"id\": \"调试技巧\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E8%B0%83%E8%AF%95%E6%8A%80%E5%B7%A7\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u8C03\\u8BD5\\u6280\\u5DE7\"), mdx(\"h4\", {\n    \"id\": \"1-启用详细日志\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#1-%E5%90%AF%E7%94%A8%E8%AF%A6%E7%BB%86%E6%97%A5%E5%BF%97\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"1. \\u542F\\u7528\\u8BE6\\u7EC6\\u65E5\\u5FD7\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"import (\\n    \\\"go.opentelemetry.io/otel\\\"\\n    \\\"go.opentelemetry.io/otel/sdk/trace\\\"\\n)\\n\\n// \\u8BBE\\u7F6E\\u5168\\u5C40\\u9519\\u8BEF\\u5904\\u7406\\u5668\\notel.SetErrorHandler(otel.ErrorHandlerFunc(func(err error) {\\n    log.Printf(\\\"OpenTelemetry error: %v\\\", err)\\n}))\\n\")), mdx(\"h4\", {\n    \"id\": \"2-使用-console-exporter\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#2-%E4%BD%BF%E7%94%A8-console-exporter\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"2. \\u4F7F\\u7528 Console Exporter\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"import \\\"go.opentelemetry.io/otel/exporters/stdout/stdouttrace\\\"\\n\\nexporter, _ := stdouttrace.New(\\n    stdouttrace.WithPrettyPrint(),\\n    stdouttrace.WithWriter(os.Stderr),\\n)\\n\")), mdx(\"h4\", {\n    \"id\": \"3-检查-span-内容\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#3-%E6%A3%80%E6%9F%A5-span-%E5%86%85%E5%AE%B9\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"3. \\u68C0\\u67E5 Span \\u5185\\u5BB9\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"// \\u81EA\\u5B9A\\u4E49 Processor \\u6253\\u5370 Span\\ntype DebugProcessor struct{}\\n\\nfunc (p *DebugProcessor) OnStart(parent context.Context, s sdktrace.ReadWriteSpan) {\\n    log.Printf(\\\"Span started: %s\\\", s.Name())\\n}\\n\\nfunc (p *DebugProcessor) OnEnd(s sdktrace.ReadOnlySpan) {\\n    log.Printf(\\\"Span ended: %s, Duration: %v\\\", s.Name(), s.EndTime().Sub(s.StartTime()))\\n}\\n\\nfunc (p *DebugProcessor) Shutdown(ctx context.Context) error { return nil }\\nfunc (p *DebugProcessor) ForceFlush(ctx context.Context) error { return nil }\\n\\n// \\u6DFB\\u52A0\\u5230 Provider\\ntp := sdktrace.NewTracerProvider(\\n    sdktrace.WithSpanProcessor(&DebugProcessor{}),\\n)\\n\")), mdx(\"h4\", {\n    \"id\": \"4-性能分析\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#4-%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"4. \\u6027\\u80FD\\u5206\\u6790\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-go\"\n  }, \"import _ \\\"net/http/pprof\\\"\\n\\n// \\u542F\\u52A8 pprof \\u670D\\u52A1\\u5668\\ngo func() {\\n    log.Println(http.ListenAndServe(\\\"localhost:6060\\\", nil))\\n}()\\n\\n// \\u8BBF\\u95EE http://localhost:6060/debug/pprof/\\n// \\u67E5\\u770B\\u5185\\u5B58\\u548C CPU \\u4F7F\\u7528\\u60C5\\u51B5\\n\")), mdx(\"h3\", {\n    \"id\": \"环境变量完整示例\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E5%AE%8C%E6%95%B4%E7%A4%BA%E4%BE%8B\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u73AF\\u5883\\u53D8\\u91CF\\u5B8C\\u6574\\u793A\\u4F8B\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u5F00\\u53D1\\u73AF\\u5883 - \\u5B8C\\u6574\\u8C03\\u8BD5\\nexport OTEL_LOG_LEVEL=debug\\nexport OTEL_SERVICE_NAME=my-service-dev\\nexport OTEL_TRACES_SAMPLER=always_on\\nexport OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317\\nexport OTEL_TRACES_EXPORTER=otlp,console\\n\\n# \\u751F\\u4EA7\\u73AF\\u5883 - \\u4F18\\u5316\\u6027\\u80FD\\nexport OTEL_LOG_LEVEL=warn\\nexport OTEL_SERVICE_NAME=my-service\\nexport OTEL_RESOURCE_ATTRIBUTES=service.version=1.0.0,deployment.environment=production\\nexport OTEL_EXPORTER_OTLP_ENDPOINT=uptrace-grpc.yodao.cn:4317\\nexport OTEL_EXPORTER_OTLP_PROTOCOL=grpc\\nexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project\\nexport OTEL_EXPORTER_OTLP_COMPRESSION=gzip\\nexport OTEL_TRACES_SAMPLER=parentbased_traceidratio\\nexport OTEL_TRACES_SAMPLER_ARG=0.1\\nexport OTEL_BSP_MAX_QUEUE_SIZE=2048\\nexport OTEL_BSP_MAX_EXPORT_BATCH_SIZE=512\\nexport OTEL_BSP_SCHEDULE_DELAY=5000\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"下一步\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E4%B8%8B%E4%B8%80%E6%AD%A5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4E0B\\u4E00\\u6B65\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/languages/golang-loongsuite/\"\n  }, \"Go loongsuite-go-agent \\u63A5\\u5165\"), \" - \\u66F4\\u5F3A\\u5927\\u7684\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/advanced/sampling/\"\n  }, \"\\u91C7\\u6837\\u7B56\\u7565\"), \" - \\u6DF1\\u5165\\u4E86\\u89E3\\u91C7\\u6837\\u914D\\u7F6E\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/advanced/custom-instrumentation/\"\n  }, \"\\u81EA\\u5B9A\\u4E49\\u57CB\\u70B9\"), \" - \\u9AD8\\u7EA7\\u57CB\\u70B9\\u6280\\u5DE7\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/advanced/performance/\"\n  }, \"\\u6027\\u80FD\\u4F18\\u5316\"), \" - \\u964D\\u4F4E\\u76D1\\u63A7\\u5F00\\u9500\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Kubernetes \\u90E8\\u7F72\"), \"\\uFF08\\u5982\\u679C\\u4F7F\\u7528 Kubernetes\\uFF09\\uFF1A\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/kubernetes/operator-overview/\"\n  }, \"OpenTelemetry Operator \\u6982\\u8FF0\"), \" - \\u4E86\\u89E3\\u5982\\u4F55\\u5728 Kubernetes \\u4E2D\\u4F7F\\u7528 Operator\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/kubernetes/operator-auto-instrumentation/\"\n  }, \"\\u81EA\\u52A8\\u6CE8\\u5165\"), \" - \\u96F6\\u4EE3\\u7801\\u81EA\\u52A8\\u6CE8\\u5165 instrumentation\")))), mdx(\"h2\", {\n    \"id\": \"参考资源\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E5%8F%82%E8%80%83%E8%B5%84%E6%BA%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u53C2\\u8003\\u8D44\\u6E90\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://opentelemetry.io/docs/languages/go/\"\n  }, \"OpenTelemetry Go Documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/open-telemetry/opentelemetry-go\"\n  }, \"OpenTelemetry Go SDK\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/open-telemetry/opentelemetry-go-contrib\"\n  }, \"OpenTelemetry Go Contrib\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://opentelemetry.io/docs/specs/semconv/\"\n  }, \"Go Semantic Conventions\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/open-telemetry/opentelemetry-go/tree/main/example\"\n  }, \"Example Applications\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#go-语言-opentelemetry-接入指南","title":"Go 语言 OpenTelemetry 接入指南","items":[{"url":"#目录","title":"目录"},{"url":"#概述","title":"概述","items":[{"url":"#go-语言特性","title":"Go 语言特性"},{"url":"#版本要求","title":"版本要求"},{"url":"#支持的信号","title":"支持的信号"},{"url":"#适用场景","title":"适用场景"}]},{"url":"#零代码接入推荐","title":"零代码接入（推荐）","items":[{"url":"#方式-1-使用官方-auto-instrumentation实验性","title":"方式 1: 使用官方 Auto-Instrumentation（实验性）","items":[{"url":"#安装","title":"安装"},{"url":"#配置环境变量","title":"配置环境变量"},{"url":"#启动应用","title":"启动应用"}]},{"url":"#方式-2-使用-loongsuite-go-agent推荐","title":"方式 2: 使用 loongsuite-go-agent（推荐）","items":[{"url":"#快速开始","title":"快速开始"},{"url":"#支持的框架部分","title":"支持的框架（部分）"}]},{"url":"#方式-3-使用-kubernetes-operator","title":"方式 3: 使用 Kubernetes Operator","items":[{"url":"#安装-operator","title":"安装 Operator"},{"url":"#创建-instrumentation-资源","title":"创建 Instrumentation 资源"},{"url":"#部署应用","title":"部署应用"}]},{"url":"#验证零代码接入","title":"验证零代码接入","items":[{"url":"#快速验证脚本","title":"快速验证脚本"}]}]},{"url":"#sdk-手动接入","title":"SDK 手动接入","items":[{"url":"#安装依赖","title":"安装依赖"},{"url":"#基础初始化","title":"基础初始化","items":[{"url":"#1-创建-opentelemetry-初始化函数","title":"1. 创建 OpenTelemetry 初始化函数"},{"url":"#2-在-main-函数中初始化","title":"2. 在 main 函数中初始化"}]},{"url":"#traces---手动埋点","title":"Traces - 手动埋点","items":[{"url":"#创建和使用-span","title":"创建和使用 Span"},{"url":"#span-属性和事件","title":"Span 属性和事件"},{"url":"#context-传播","title":"Context 传播"}]},{"url":"#metrics---指标采集","title":"Metrics - 指标采集","items":[{"url":"#counter计数器","title":"Counter（计数器）"},{"url":"#histogram直方图","title":"Histogram（直方图）"},{"url":"#updowncounter升降计数器","title":"UpDownCounter（升降计数器）"},{"url":"#gauge仪表","title":"Gauge（仪表）"}]},{"url":"#logs---日志集成","title":"Logs - 日志集成","items":[{"url":"#集成-zap","title":"集成 Zap"},{"url":"#集成-logrus","title":"集成 Logrus"},{"url":"#集成-slog-go-121","title":"集成 slog (Go 1.21+)"}]}]},{"url":"#框架集成示例","title":"框架集成示例","items":[{"url":"#gin-framework","title":"Gin Framework"},{"url":"#echo-framework","title":"Echo Framework"},{"url":"#grpc-server","title":"gRPC Server"},{"url":"#grpc-client","title":"gRPC Client"},{"url":"#database---databasesql","title":"Database - database/sql"},{"url":"#database---gorm","title":"Database - GORM"},{"url":"#redis---go-redis","title":"Redis - go-redis"},{"url":"#kafka---sarama","title":"Kafka - sarama"}]},{"url":"#高级配置","title":"高级配置","items":[{"url":"#自定义采样策略","title":"自定义采样策略","items":[{"url":"#基于-span-名称的采样","title":"基于 Span 名称的采样"},{"url":"#基于属性的采样","title":"基于属性的采样"}]},{"url":"#span-processor","title":"Span Processor","items":[{"url":"#自定义属性添加","title":"自定义属性添加"},{"url":"#过滤-span","title":"过滤 Span"}]},{"url":"#多-exporter-配置","title":"多 Exporter 配置"},{"url":"#资源检测","title":"资源检测"},{"url":"#性能优化配置","title":"性能优化配置"}]},{"url":"#最佳实践","title":"最佳实践","items":[{"url":"#1-context-传递","title":"1. Context 传递"},{"url":"#2-span-命名","title":"2. Span 命名"},{"url":"#3-错误处理","title":"3. 错误处理"},{"url":"#4-资源管理","title":"4. 资源管理"},{"url":"#5-属性使用","title":"5. 属性使用"},{"url":"#6-避免过度埋点","title":"6. 避免过度埋点"},{"url":"#7-metrics-最佳实践","title":"7. Metrics 最佳实践"},{"url":"#8-优雅关闭","title":"8. 优雅关闭"}]},{"url":"#故障排查","title":"故障排查","items":[{"url":"#常见问题","title":"常见问题","items":[{"url":"#1-数据未发送到后端","title":"1. 数据未发送到后端"},{"url":"#2-span-未关联","title":"2. Span 未关联"},{"url":"#3-内存泄漏","title":"3. 内存泄漏"},{"url":"#4-高-cpu-使用率","title":"4. 高 CPU 使用率"}]},{"url":"#调试技巧","title":"调试技巧","items":[{"url":"#1-启用详细日志","title":"1. 启用详细日志"},{"url":"#2-使用-console-exporter","title":"2. 使用 Console Exporter"},{"url":"#3-检查-span-内容","title":"3. 检查 Span 内容"},{"url":"#4-性能分析","title":"4. 性能分析"}]},{"url":"#环境变量完整示例","title":"环境变量完整示例"}]},{"url":"#下一步","title":"下一步"},{"url":"#参考资源","title":"参考资源"}]}]}}},"pageContext":{"id":"7baa46c3-5753-59cc-a196-a262740e36fe"}},
    "staticQueryHashes": ["1122327541","1339625561","148928582","2007862104","2140385554","3442269102","4275725850"]}