{
    "componentChunkName": "component---node-modules-shenhh-smooth-doc-src-templates-doc-js",
    "path": "/docs/languages/rust/",
    "result": {"data":{"mdx":{"fields":{"pageType":"doc","title":"Rust 语言接入指南","editLink":"https://gitlab.corp.youdao.com/DevOPS/apm/docs/edit/master/pages/docs/languages/rust.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\": \"Rust 语言接入指南\",\n  \"section\": \"语言接入指南\",\n  \"slug\": \"/docs/languages/rust/\",\n  \"order\": 7\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\": \"rust-语言-opentelemetry-接入指南\"\n  }, mdx(\"a\", {\n    parentName: \"h1\",\n    \"href\": \"#rust-%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  }))), \"Rust \\u8BED\\u8A00 OpenTelemetry \\u63A5\\u5165\\u6307\\u5357\"), mdx(\"p\", null, \"\\u672C\\u6587\\u6863\\u63D0\\u4F9B Rust \\u5E94\\u7528\\u63A5\\u5165 OpenTelemetry \\u7684\\u5B8C\\u6574\\u6307\\u5357\\uFF0C\\u5305\\u62EC SDK \\u624B\\u52A8\\u63A5\\u5165\\u548C\\u6846\\u67B6\\u96C6\\u6210\\u793A\\u4F8B\\uFF0C\\u652F\\u6301\\u9AD8\\u6027\\u80FD\\u5F02\\u6B65\\u8FD0\\u884C\\u65F6\\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\": \"#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B\"\n  }, \"\\u5FEB\\u901F\\u5F00\\u59CB\")), 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\": \"#%E6%95%B0%E6%8D%AE%E5%BA%93%E9%9B%86%E6%88%90\"\n  }, \"\\u6570\\u636E\\u5E93\\u96C6\\u6210\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E5%BC%82%E6%AD%A5%E8%BF%90%E8%A1%8C%E6%97%B6%E9%9B%86%E6%88%90\"\n  }, \"\\u5F02\\u6B65\\u8FD0\\u884C\\u65F6\\u96C6\\u6210\")), 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\": \"rust-语言特性\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#rust-%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  }))), \"Rust \\u8BED\\u8A00\\u7279\\u6027\"), mdx(\"p\", null, \"Rust \\u7684 OpenTelemetry \\u652F\\u6301\\u5177\\u6709\\u4EE5\\u4E0B\\u7279\\u70B9\\uFF1A\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u9AD8\\u6027\\u80FD\"), \": \\u96F6\\u6210\\u672C\\u62BD\\u8C61\\uFF0C\\u6781\\u4F4E\\u7684\\u6027\\u80FD\\u5F00\\u9500\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u5185\\u5B58\\u5B89\\u5168\"), \": \\u7F16\\u8BD1\\u65F6\\u4FDD\\u8BC1\\u5185\\u5B58\\u5B89\\u5168\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u5F02\\u6B65\\u652F\\u6301\"), \": \\u5B8C\\u7F8E\\u652F\\u6301 async/await \\u548C\\u5F02\\u6B65\\u8FD0\\u884C\\u65F6\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u7C7B\\u578B\\u5B89\\u5168\"), \": \\u5F3A\\u7C7B\\u578B\\u7CFB\\u7EDF\\uFF0C\\u7F16\\u8BD1\\u65F6\\u9519\\u8BEF\\u68C0\\u67E5\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u5E76\\u53D1\\u5B89\\u5168\"), \": \\u901A\\u8FC7\\u6240\\u6709\\u6743\\u7CFB\\u7EDF\\u4FDD\\u8BC1\\u5E76\\u53D1\\u5B89\\u5168\")), 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  }, \"Rust \\u7248\\u672C\"), \": 1.70+ (\\u63A8\\u8350 1.75+)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"OpenTelemetry Rust\"), \": v0.22.0+\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u652F\\u6301\\u67B6\\u6784\"), \": x86_64, arm64, aarch64\")), 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\"), \": \\u5B8C\\u5168\\u652F\\u6301\\uFF08\\u901A\\u8FC7 tracing \\u5E93\\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  }, \"\\u9AD8\\u6027\\u80FD Web \\u670D\\u52A1\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u5FAE\\u670D\\u52A1\\u67B6\\u6784\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u7CFB\\u7EDF\\u7F16\\u7A0B\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u5F02\\u6B65\\u5E94\\u7528\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u5B9E\\u65F6\\u7CFB\\u7EDF\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"快速开始\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\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(\"h3\", {\n    \"id\": \"1-添加依赖\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#1-%E6%B7%BB%E5%8A%A0%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  }))), \"1. \\u6DFB\\u52A0\\u4F9D\\u8D56\"), mdx(\"p\", null, \"\\u5728 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Cargo.toml\"), \" \\u4E2D\\u6DFB\\u52A0\\uFF1A\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-toml\"\n  }, \"[dependencies]\\nopentelemetry = \\\"0.22\\\"\\nopentelemetry-sdk = \\\"0.22\\\"\\nopentelemetry-otlp = \\\"0.15\\\"\\nopentelemetry-semantic-conventions = \\\"0.15\\\"\\ntokio = { version = \\\"1\\\", features = [\\\"full\\\"] }\\ntracing = \\\"0.1\\\"\\ntracing-opentelemetry = \\\"0.22\\\"\\ntracing-subscriber = \\\"0.3\\\"\\n\")), mdx(\"h3\", {\n    \"id\": \"2-基础初始化\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#2-%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  }))), \"2. \\u57FA\\u7840\\u521D\\u59CB\\u5316\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"// main.rs\\nuse opentelemetry::global;\\nuse opentelemetry_sdk::trace::TracerProvider;\\nuse opentelemetry_sdk::Resource;\\nuse opentelemetry_sdk::trace::Config;\\nuse opentelemetry_otlp::WithExportConfig;\\nuse opentelemetry_semantic_conventions::resource::SERVICE_NAME;\\n\\nfn init_tracer() -> TracerProvider {\\n    let resource = Resource::new(vec![\\n        SERVICE_NAME.string(\\\"my-rust-service\\\"),\\n    ]);\\n\\n    let exporter = opentelemetry_otlp::new_exporter()\\n        .tonic()\\n        .with_endpoint(\\\"http://uptrace-grpc.yodao.cn:4317\\\")\\n        .with_headers([(\\\"uptrace-dsn\\\".to_string(), \\\"http://token@uptrace-grpc.yodao.cn/project?grpc=4317\\\".to_string())].into());\\n\\n    TracerProvider::builder()\\n        .with_config(Config::default().with_resource(resource))\\n        .with_batch_exporter(exporter, opentelemetry_sdk::runtime::Tokio)\\n        .build()\\n}\\n\\n#[tokio::main]\\nasync fn main() {\\n    let _tracer_provider = init_tracer();\\n    \\n    // \\u60A8\\u7684\\u5E94\\u7528\\u4EE3\\u7801\\n    println!(\\\"Hello, OpenTelemetry!\\\");\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"3-配置环境变量\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#3-%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  }))), \"3. \\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-rust-service\\nexport OTEL_RESOURCE_ATTRIBUTES=service.version=1.0.0,deployment.environment=production\\n\\n# OTLP Exporter\\uFF08\\u5185\\u90E8\\u5E73\\u53F0\\uFF09\\nexport OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:4317\\nexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project?grpc=4317\\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\\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(\"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(\"p\", null, \"\\u5728 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Cargo.toml\"), \" \\u4E2D\\u6DFB\\u52A0\\uFF1A\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-toml\"\n  }, \"[dependencies]\\nopentelemetry = \\\"0.22\\\"\\nopentelemetry-api = \\\"0.22\\\"\\nopentelemetry-sdk = \\\"0.22\\\"\\nopentelemetry-otlp = \\\"0.15\\\"\\nopentelemetry-semantic-conventions = \\\"0.15\\\"\\ntracing = \\\"0.1\\\"\\ntracing-opentelemetry = \\\"0.22\\\"\\ntracing-subscriber = { version = \\\"0.3\\\", features = [\\\"env-filter\\\"] }\\ntokio = { version = \\\"1\\\", features = [\\\"full\\\"] }\\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\": \"创建-opentelemetry-初始化函数\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%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  }))), \"\\u521B\\u5EFA OpenTelemetry \\u521D\\u59CB\\u5316\\u51FD\\u6570\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"// otel.rs\\nuse opentelemetry::global;\\nuse opentelemetry_sdk::trace::TracerProvider;\\nuse opentelemetry_sdk::Resource;\\nuse opentelemetry_sdk::trace::Config;\\nuse opentelemetry_otlp::WithExportConfig;\\nuse opentelemetry_semantic_conventions::resource::SERVICE_NAME;\\nuse std::env;\\n\\npub fn init_opentelemetry() -> TracerProvider {\\n    let service_name = env::var(\\\"OTEL_SERVICE_NAME\\\")\\n        .unwrap_or_else(|_| \\\"my-rust-service\\\".to_string());\\n    \\n    let resource = Resource::new(vec![\\n        SERVICE_NAME.string(service_name.clone()),\\n    ]);\\n\\n    let endpoint = env::var(\\\"OTEL_EXPORTER_OTLP_ENDPOINT\\\")\\n        .unwrap_or_else(|_| \\\"http://uptrace-grpc.yodao.cn:4317\\\".to_string());\\n    \\n    let dsn = env::var(\\\"OTEL_EXPORTER_OTLP_HEADERS\\\")\\n        .unwrap_or_else(|_| \\\"http://token@uptrace-grpc.yodao.cn/project?grpc=4317\\\".to_string());\\n\\n    let exporter = opentelemetry_otlp::new_exporter()\\n        .tonic()\\n        .with_endpoint(endpoint)\\n        .with_headers([(\\\"uptrace-dsn\\\".to_string(), dsn)].into());\\n\\n    let tracer_provider = TracerProvider::builder()\\n        .with_config(Config::default().with_resource(resource))\\n        .with_batch_exporter(exporter, opentelemetry_sdk::runtime::Tokio)\\n        .build();\\n\\n    global::set_tracer_provider(tracer_provider.clone());\\n    \\n    tracer_provider\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"在应用中使用\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E5%9C%A8%E5%BA%94%E7%94%A8%E4%B8%AD%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  }))), \"\\u5728\\u5E94\\u7528\\u4E2D\\u4F7F\\u7528\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"// main.rs\\nmod otel;\\n\\nuse otel::init_opentelemetry;\\nuse opentelemetry::global;\\nuse opentelemetry::trace::Tracer;\\n\\n#[tokio::main]\\nasync fn main() {\\n    let _tracer_provider = init_opentelemetry();\\n    \\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let mut span = tracer.start(\\\"handle_request\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"http.method\\\", \\\"GET\\\"));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"http.url\\\", \\\"/\\\"));\\n    \\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    println!(\\\"Hello, World!\\\");\\n    \\n    span.end();\\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-rust\"\n  }, \"use opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, Status};\\n\\nasync fn process_order(order_id: String) -> Result<(), Box<dyn std::error::Error>> {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let mut span = tracer.start(\\\"process_order\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"order.id\\\", order_id.clone()));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"operation\\\", \\\"process\\\"));\\n    \\n    span.add_event(\\\"order_validation_started\\\", vec![]);\\n    \\n    validate_order(&order_id).await?;\\n    \\n    span.add_event(\\\"order_validated\\\", vec![]);\\n    \\n    charge_payment(&order_id).await?;\\n    \\n    span.add_event(\\\"payment_processed\\\", vec![]);\\n    \\n    span.set_status(Status::Ok);\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"order.success\\\", true));\\n    \\n    span.end();\\n    Ok(())\\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-rust\"\n  }, \"use opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, TraceContextExt};\\nuse opentelemetry::Context;\\nuse opentelemetry::propagation::TextMapPropagator;\\n\\nasync fn make_http_request(url: &str) -> Result<String, Box<dyn std::error::Error>> {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let mut span = tracer.start(\\\"http_request\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"http.url\\\", url));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"http.method\\\", \\\"GET\\\"));\\n    \\n    let cx = Context::current_with_span(span);\\n    \\n    // \\u6CE8\\u5165 Context \\u5230 HTTP headers\\n    let mut headers = reqwest::header::HeaderMap::new();\\n    global::get_text_map_propagator(|propagator| {\\n        propagator.inject_context(&cx, &mut HeaderInjector(&mut headers));\\n    });\\n    \\n    let client = reqwest::Client::new();\\n    let response = client\\n        .get(url)\\n        .headers(headers)\\n        .send()\\n        .await?;\\n    \\n    let status = response.status();\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"http.status_code\\\", status.as_u16()));\\n    \\n    if status.is_success() {\\n        span.set_status(Status::Ok);\\n    } else {\\n        span.set_status(Status::error(\\\"HTTP request failed\\\"));\\n    }\\n    \\n    span.end();\\n    Ok(response.text().await?)\\n}\\n\\nstruct HeaderInjector<'a>(&'a mut reqwest::header::HeaderMap);\\n\\nimpl<'a> opentelemetry::propagation::Injector for HeaderInjector<'a> {\\n    fn set(&mut self, key: &str, value: String) {\\n        if let Ok(key) = reqwest::header::HeaderName::from_bytes(key.as_bytes()) {\\n            self.0.insert(key, value.parse().unwrap());\\n        }\\n    }\\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-rust\"\n  }, \"use opentelemetry::global;\\nuse opentelemetry::metrics::Meter;\\n\\nfn handle_request(meter: &Meter, method: &str, route: &str, status_code: u16) {\\n    let request_counter = meter\\n        .u64_counter(\\\"http.server.requests\\\")\\n        .with_description(\\\"Total number of HTTP requests\\\")\\n        .init();\\n    \\n    request_counter.add(\\n        1,\\n        &[\\n            opentelemetry::KeyValue::new(\\\"http.method\\\", method),\\n            opentelemetry::KeyValue::new(\\\"http.route\\\", route),\\n            opentelemetry::KeyValue::new(\\\"http.status_code\\\", status_code.to_string()),\\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-rust\"\n  }, \"fn record_duration(meter: &Meter, duration: f64, method: &str, route: &str) {\\n    let request_duration = meter\\n        .f64_histogram(\\\"http.server.duration\\\")\\n        .with_description(\\\"HTTP request duration\\\")\\n        .with_unit(opentelemetry::metrics::Unit::new(\\\"ms\\\"))\\n        .init();\\n    \\n    request_duration.record(\\n        duration,\\n        &[\\n            opentelemetry::KeyValue::new(\\\"http.method\\\", method),\\n            opentelemetry::KeyValue::new(\\\"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-rust\"\n  }, \"fn connection_opened(meter: &Meter) {\\n    let active_connections = meter\\n        .i64_up_down_counter(\\\"http.server.active_connections\\\")\\n        .with_description(\\\"Number of active HTTP connections\\\")\\n        .init();\\n    \\n    active_connections.add(1, &[]);\\n}\\n\\nfn connection_closed(meter: &Meter) {\\n    let active_connections = meter\\n        .i64_up_down_counter(\\\"http.server.active_connections\\\")\\n        .with_description(\\\"Number of active HTTP connections\\\")\\n        .init();\\n    \\n    active_connections.add(-1, &[]);\\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\": \"集成-tracing-库\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E9%9B%86%E6%88%90-tracing-%E5%BA%93\",\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 tracing \\u5E93\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use tracing::{info, error};\\nuse tracing_subscriber::layer::SubscriberExt;\\nuse tracing_subscriber::util::SubscriberInitExt;\\nuse tracing_opentelemetry::OpenTelemetryLayer;\\nuse opentelemetry::global;\\n\\nfn init_tracing() {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let telemetry = OpenTelemetryLayer::new(tracer);\\n    \\n    tracing_subscriber::registry()\\n        .with(telemetry)\\n        .with(tracing_subscriber::EnvFilter::from_default_env())\\n        .init();\\n}\\n\\n#[tokio::main]\\nasync fn main() {\\n    init_tracing();\\n    \\n    info!(\\\"Application started\\\");\\n    \\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    match process_order(\\\"12345\\\".to_string()).await {\\n        Ok(_) => info!(\\\"Order processed successfully\\\"),\\n        Err(e) => error!(error = %e, \\\"Failed to process order\\\"),\\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\": \"actix-web-框架集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#actix-web-%E6%A1%86%E6%9E%B6%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  }))), \"Actix Web \\u6846\\u67B6\\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use actix_web::{web, App, HttpServer, HttpResponse};\\nuse opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, Status};\\nuse opentelemetry::trace::TraceContextExt;\\n\\nasync fn get_user(path: web::Path<String>) -> HttpResponse {\\n    let tracer = global::tracer(\\\"actix-web\\\");\\n    let mut span = tracer.start(\\\"get_user\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"user.id\\\", path.into_inner()));\\n    \\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    let user = fetch_user(&span).await;\\n    \\n    span.set_status(Status::Ok);\\n    span.end();\\n    \\n    HttpResponse::Ok().json(user)\\n}\\n\\n#[actix_web::main]\\nasync fn main() -> std::io::Result<()> {\\n    let _tracer_provider = init_opentelemetry();\\n    \\n    HttpServer::new(|| {\\n        App::new()\\n            .route(\\\"/users/{id}\\\", web::get().to(get_user))\\n    })\\n    .bind(\\\"127.0.0.1:8080\\\")?\\n    .run()\\n    .await\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"axum-框架集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#axum-%E6%A1%86%E6%9E%B6%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  }))), \"Axum \\u6846\\u67B6\\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use axum::{extract::Path, response::Json, routing::get, Router};\\nuse opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, Status};\\nuse tower::ServiceBuilder;\\nuse tower_http::trace::TraceLayer;\\n\\nasync fn get_user(Path(id): Path<String>) -> Json<serde_json::Value> {\\n    let tracer = global::tracer(\\\"axum\\\");\\n    let mut span = tracer.start(\\\"get_user\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"user.id\\\", id.clone()));\\n    \\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    let user = fetch_user(&id).await;\\n    \\n    span.set_status(Status::Ok);\\n    span.end();\\n    \\n    Json(user)\\n}\\n\\n#[tokio::main]\\nasync fn main() {\\n    let _tracer_provider = init_opentelemetry();\\n    \\n    let app = Router::new()\\n        .route(\\\"/users/:id\\\", get(get_user))\\n        .layer(\\n            ServiceBuilder::new()\\n                .layer(TraceLayer::new_for_http())\\n        );\\n    \\n    let listener = tokio::net::TcpListener::bind(\\\"0.0.0.0:3000\\\").await.unwrap();\\n    axum::serve(listener, app).await.unwrap();\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"warp-框架集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#warp-%E6%A1%86%E6%9E%B6%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  }))), \"Warp \\u6846\\u67B6\\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use warp::Filter;\\nuse opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, Status};\\n\\nasync fn get_user(id: String) -> Result<impl warp::Reply, warp::Rejection> {\\n    let tracer = global::tracer(\\\"warp\\\");\\n    let mut span = tracer.start(\\\"get_user\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"user.id\\\", id.clone()));\\n    \\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    let user = fetch_user(&id).await;\\n    \\n    span.set_status(Status::Ok);\\n    span.end();\\n    \\n    Ok(warp::reply::json(&user))\\n}\\n\\n#[tokio::main]\\nasync fn main() {\\n    let _tracer_provider = init_opentelemetry();\\n    \\n    let get_user_route = warp::path(\\\"users\\\")\\n        .and(warp::path::param())\\n        .and_then(get_user);\\n    \\n    warp::serve(get_user_route)\\n        .run(([0, 0, 0, 0], 3030))\\n        .await;\\n}\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"数据库集成\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E6%95%B0%E6%8D%AE%E5%BA%93%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  }))), \"\\u6570\\u636E\\u5E93\\u96C6\\u6210\"), mdx(\"h3\", {\n    \"id\": \"sqlx-集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#sqlx-%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  }))), \"SQLx \\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use sqlx::PgPool;\\nuse opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, Status};\\n\\nasync fn query_database(pool: &PgPool, query: &str) -> Result<Vec<serde_json::Value>, sqlx::Error> {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let mut span = tracer.start(\\\"database.query\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"db.system\\\", \\\"postgresql\\\"));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"db.statement\\\", query));\\n    \\n    let result = sqlx::query(query)\\n        .fetch_all(pool)\\n        .await;\\n    \\n    match &result {\\n        Ok(_) => span.set_status(Status::Ok),\\n        Err(e) => {\\n            span.set_status(Status::error(e.to_string()));\\n        }\\n    }\\n    \\n    span.end();\\n    result.map(|rows| {\\n        rows.iter()\\n            .map(|row| serde_json::json!({}))\\n            .collect()\\n    })\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"mongodb-驱动集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#mongodb-%E9%A9%B1%E5%8A%A8%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  }))), \"MongoDB \\u9A71\\u52A8\\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use mongodb::Client;\\nuse opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, Status};\\n\\nasync fn query_mongodb(\\n    client: &Client,\\n    db_name: &str,\\n    collection: &str,\\n    filter: bson::Document,\\n) -> Result<Vec<bson::Document>, mongodb::error::Error> {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let mut span = tracer.start(\\\"mongodb.query\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"db.system\\\", \\\"mongodb\\\"));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"db.name\\\", db_name));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"db.collection\\\", collection));\\n    \\n    let db = client.database(db_name);\\n    let coll = db.collection::<bson::Document>(collection);\\n    \\n    let result = coll.find(filter, None).await;\\n    \\n    match &result {\\n        Ok(_) => span.set_status(Status::Ok),\\n        Err(e) => {\\n            span.set_status(Status::error(e.to_string()));\\n        }\\n    }\\n    \\n    span.end();\\n    result.and_then(|mut cursor| async {\\n        let mut docs = Vec::new();\\n        while let Some(doc) = cursor.next().await.transpose()? {\\n            docs.push(doc);\\n        }\\n        Ok(docs)\\n    })\\n    .await\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"redis-集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#redis-%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  }))), \"Redis \\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use redis::Commands;\\nuse opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, Status};\\n\\nasync fn get_cache(conn: &mut redis::Connection, key: &str) -> Result<String, redis::RedisError> {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let mut span = tracer.start(\\\"redis.get\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"db.system\\\", \\\"redis\\\"));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"db.operation\\\", \\\"GET\\\"));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"db.redis.key\\\", key));\\n    \\n    let result: Result<String, _> = conn.get(key);\\n    \\n    match &result {\\n        Ok(_) => span.set_status(Status::Ok),\\n        Err(e) => {\\n            span.set_status(Status::error(e.to_string()));\\n        }\\n    }\\n    \\n    span.end();\\n    result\\n}\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"异步运行时集成\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E5%BC%82%E6%AD%A5%E8%BF%90%E8%A1%8C%E6%97%B6%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  }))), \"\\u5F02\\u6B65\\u8FD0\\u884C\\u65F6\\u96C6\\u6210\"), mdx(\"h3\", {\n    \"id\": \"tokio-集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#tokio-%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  }))), \"Tokio \\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use tokio::task;\\nuse opentelemetry::global;\\nuse opentelemetry::trace::Tracer;\\n\\n#[tokio::main]\\nasync fn main() {\\n    let _tracer_provider = init_opentelemetry();\\n    \\n    let tracer = global::tracer(\\\"my-service\\\");\\n    \\n    // \\u5728\\u5F02\\u6B65\\u4EFB\\u52A1\\u4E2D\\u521B\\u5EFA span\\n    let handle = task::spawn(async move {\\n        let mut span = tracer.start(\\\"async_task\\\");\\n        span.set_attribute(opentelemetry::KeyValue::new(\\\"task.name\\\", \\\"background_job\\\"));\\n        \\n        // \\u5F02\\u6B65\\u4E1A\\u52A1\\u903B\\u8F91\\n        tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;\\n        \\n        span.end();\\n    });\\n    \\n    handle.await.unwrap();\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"async-std-集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#async-std-%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  }))), \"async-std \\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use async_std::task;\\nuse opentelemetry::global;\\nuse opentelemetry::trace::Tracer;\\n\\n#[async_std::main]\\nasync fn main() {\\n    let _tracer_provider = init_opentelemetry();\\n    \\n    let tracer = global::tracer(\\\"my-service\\\");\\n    \\n    task::spawn(async {\\n        let mut span = tracer.start(\\\"async_task\\\");\\n        \\n        // \\u5F02\\u6B65\\u4E1A\\u52A1\\u903B\\u8F91\\n        async_std::task::sleep(std::time::Duration::from_secs(1)).await;\\n        \\n        span.end();\\n    })\\n    .await;\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"消息队列集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%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  }))), \"\\u6D88\\u606F\\u961F\\u5217\\u96C6\\u6210\"), mdx(\"h4\", {\n    \"id\": \"kafka-集成\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#kafka-%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  }))), \"Kafka \\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use rdkafka::producer::{FutureProducer, FutureRecord};\\nuse opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, Status};\\n\\nasync fn send_kafka_message(\\n    producer: &FutureProducer,\\n    topic: &str,\\n    message: &str,\\n) -> Result<(), Box<dyn std::error::Error>> {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let mut span = tracer.start(\\\"kafka.produce\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"messaging.system\\\", \\\"kafka\\\"));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"messaging.destination\\\", topic));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"messaging.operation\\\", \\\"publish\\\"));\\n    \\n    let record = FutureRecord::to(topic)\\n        .payload(message)\\n        .key(\\\"key\\\");\\n    \\n    match producer.send(record, std::time::Duration::from_secs(0)).await {\\n        Ok(_) => {\\n            span.set_status(Status::Ok);\\n            Ok(())\\n        }\\n        Err((e, _)) => {\\n            span.set_status(Status::error(e.to_string()));\\n            Err(Box::new(e))\\n        }\\n    }\\n}\\n\")), mdx(\"h4\", {\n    \"id\": \"rabbitmq-集成\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#rabbitmq-%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  }))), \"RabbitMQ \\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use lapin::{Connection, ConnectionProperties, Channel};\\nuse opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, Status};\\n\\nasync fn publish_message(\\n    channel: &Channel,\\n    exchange: &str,\\n    routing_key: &str,\\n    message: &[u8],\\n) -> Result<(), Box<dyn std::error::Error>> {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let mut span = tracer.start(\\\"rabbitmq.publish\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"messaging.system\\\", \\\"rabbitmq\\\"));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"messaging.destination\\\", exchange));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"messaging.rabbitmq.routing_key\\\", routing_key));\\n    \\n    let confirm = channel\\n        .basic_publish(exchange, routing_key, Default::default(), message, Default::default())\\n        .await?;\\n    \\n    confirm.await??;\\n    \\n    span.set_status(Status::Ok);\\n    span.end();\\n    Ok(())\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"http-客户端集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#http-%E5%AE%A2%E6%88%B7%E7%AB%AF%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  }))), \"HTTP \\u5BA2\\u6237\\u7AEF\\u96C6\\u6210\"), mdx(\"h4\", {\n    \"id\": \"reqwest-集成\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#reqwest-%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  }))), \"reqwest \\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use reqwest::Client;\\nuse opentelemetry::global;\\nuse opentelemetry::trace::{Tracer, Status};\\nuse opentelemetry::propagation::Injector;\\n\\nstruct HeaderInjector<'a>(&'a mut reqwest::header::HeaderMap);\\n\\nimpl<'a> Injector for HeaderInjector<'a> {\\n    fn set(&mut self, key: &str, value: String) {\\n        if let Ok(key) = reqwest::header::HeaderName::from_bytes(key.as_bytes()) {\\n            self.0.insert(key, value.parse().unwrap());\\n        }\\n    }\\n}\\n\\nasync fn make_http_request(url: &str) -> Result<String, Box<dyn std::error::Error>> {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let mut span = tracer.start(\\\"http_request\\\");\\n    \\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"http.url\\\", url));\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"http.method\\\", \\\"GET\\\"));\\n    \\n    let cx = opentelemetry::Context::current_with_span(span);\\n    \\n    let client = Client::new();\\n    let mut request = client.get(url);\\n    \\n    // \\u6CE8\\u5165 Context \\u5230 HTTP headers\\n    let mut headers = reqwest::header::HeaderMap::new();\\n    global::get_text_map_propagator(|propagator| {\\n        propagator.inject_context(&cx, &mut HeaderInjector(&mut headers));\\n    });\\n    request = request.headers(headers);\\n    \\n    let response = request.send().await?;\\n    let status = response.status();\\n    \\n    let mut span = cx.span();\\n    span.set_attribute(opentelemetry::KeyValue::new(\\\"http.status_code\\\", status.as_u16()));\\n    \\n    if status.is_success() {\\n        span.set_status(Status::Ok);\\n    } else {\\n        span.set_status(Status::error(\\\"HTTP request failed\\\"));\\n    }\\n    \\n    span.end();\\n    Ok(response.text().await?)\\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(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use opentelemetry_sdk::trace::Sampler;\\nuse opentelemetry::trace::SamplingResult;\\nuse opentelemetry::Context;\\n\\nstruct CustomSampler {\\n    always_sample: Vec<String>,\\n    never_sample: Vec<String>,\\n}\\n\\nimpl Sampler for CustomSampler {\\n    fn should_sample(\\n        &self,\\n        _parent_context: &Context,\\n        _trace_id: u128,\\n        span_name: &str,\\n        _span_kind: &opentelemetry::trace::SpanKind,\\n        _attributes: &[opentelemetry::KeyValue],\\n        _links: &[opentelemetry::trace::Link],\\n    ) -> SamplingResult {\\n        // \\u603B\\u662F\\u91C7\\u6837\\n        for pattern in &self.always_sample {\\n            if span_name.contains(pattern) {\\n                return SamplingResult {\\n                    decision: opentelemetry::trace::SamplingDecision::RecordAndSample,\\n                    attributes: vec![],\\n                    trace_state: Default::default(),\\n                };\\n            }\\n        }\\n        \\n        // \\u4ECE\\u4E0D\\u91C7\\u6837\\n        for pattern in &self.never_sample {\\n            if span_name.contains(pattern) {\\n                return SamplingResult {\\n                    decision: opentelemetry::trace::SamplingDecision::Drop,\\n                    attributes: vec![],\\n                    trace_state: Default::default(),\\n                };\\n            }\\n        }\\n        \\n        // \\u9ED8\\u8BA4\\u91C7\\u6837\\u7387 10%\\n        SamplingResult {\\n            decision: opentelemetry::trace::SamplingDecision::RecordAndSample,\\n            attributes: vec![],\\n            trace_state: Default::default(),\\n        }\\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-rust\"\n  }, \"use opentelemetry_sdk::trace::BatchConfig;\\n\\nlet batch_config = BatchConfig::default()\\n    .with_max_export_batch_size(512)\\n    .with_scheduled_delay(std::time::Duration::from_millis(5000))\\n    .with_max_queue_size(2048)\\n    .with_export_timeout(std::time::Duration::from_secs(30));\\n\\nlet tracer_provider = TracerProvider::builder()\\n    .with_config(Config::default().with_resource(resource))\\n    .with_batch_exporter(exporter, opentelemetry_sdk::runtime::Tokio)\\n    .with_batch_config(batch_config)\\n    .build();\\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-rust\"\n  }, \"use opentelemetry_otlp::WithExportConfig;\\nuse opentelemetry_stdout::SpanExporter;\\n\\n// \\u521B\\u5EFA\\u591A\\u4E2A exporter\\nlet otlp_exporter = opentelemetry_otlp::new_exporter()\\n    .tonic()\\n    .with_endpoint(\\\"http://uptrace-grpc.yodao.cn:4317\\\")\\n    .with_headers([(\\\"uptrace-dsn\\\".to_string(), \\\"http://token@uptrace-grpc.yodao.cn/project?grpc=4317\\\".to_string())].into());\\n\\nlet console_exporter = SpanExporter::default();\\n\\n// \\u521B\\u5EFA\\u591A\\u4E2A processor\\nlet otlp_processor = opentelemetry_sdk::trace::BatchSpanProcessor::builder(\\n    otlp_exporter,\\n    opentelemetry_sdk::runtime::Tokio,\\n)\\n.build();\\n\\nlet console_processor = opentelemetry_sdk::trace::SimpleSpanProcessor::new(console_exporter);\\n\\n// \\u521B\\u5EFA TracerProvider\\nlet tracer_provider = TracerProvider::builder()\\n    .with_config(Config::default().with_resource(resource))\\n    .with_span_processor(otlp_processor)\\n    .with_span_processor(console_processor)\\n    .build();\\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%E5%99%A8%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  }))), \"\\u8D44\\u6E90\\u68C0\\u6D4B\\u5668\\u914D\\u7F6E\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use opentelemetry_sdk::resource::ResourceDetector;\\nuse opentelemetry_sdk::Resource;\\n\\n// \\u4F7F\\u7528\\u591A\\u4E2A\\u8D44\\u6E90\\u68C0\\u6D4B\\u5668\\nlet resource = Resource::from_detectors(\\n    std::time::Duration::from_secs(0),\\n    vec![\\n        Box::new(opentelemetry_sdk::resource::EnvResourceDetector::new()),\\n        Box::new(opentelemetry_sdk::resource::OsResourceDetector),\\n        Box::new(opentelemetry_sdk::resource::ProcessResourceDetector),\\n    ],\\n)\\n.merge(&Resource::new(vec![\\n    SERVICE_NAME.string(\\\"my-rust-service\\\"),\\n    SERVICE_VERSION.string(\\\"1.0.0\\\"),\\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%E5%9C%A8%E5%BC%82%E6%AD%A5%E7%8E%AF%E5%A2%83%E4%B8%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  }))), \"1. Context \\u4F20\\u9012\\uFF08\\u5728\\u5F02\\u6B65\\u73AF\\u5883\\u4E2D\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"// \\u2705 \\u6B63\\u786E\\uFF1A\\u5728\\u5F02\\u6B65\\u51FD\\u6570\\u4E2D\\u4F20\\u9012 context\\nasync fn process_order(context: Context, order_id: String) -> Result<(), Box<dyn std::error::Error>> {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let span = tracer.start_with_context(\\\"process_order\\\", &context);\\n    \\n    let new_context = context.with_span(span);\\n    \\n    // \\u4F20\\u9012 context \\u7ED9\\u4E0B\\u6E38\\u51FD\\u6570\\n    validate_order(&new_context, &order_id).await?;\\n    charge_payment(&new_context, &order_id).await?;\\n    \\n    Ok(())\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"2-错误处理\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#2-%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  }))), \"2. \\u9519\\u8BEF\\u5904\\u7406\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"// \\u2705 \\u6B63\\u786E\\uFF1A\\u8BB0\\u5F55\\u9519\\u8BEF\\u5E76\\u8BBE\\u7F6E\\u72B6\\u6001\\nmatch process_order(order_id).await {\\n    Ok(_) => span.set_status(Status::Ok),\\n    Err(e) => {\\n        span.record_error(&e);\\n        span.set_status(Status::error(e.to_string()));\\n    }\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"3-资源管理\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#3-%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  }))), \"3. \\u8D44\\u6E90\\u7BA1\\u7406\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"// \\u2705 \\u6B63\\u786E\\uFF1A\\u4F7F\\u7528 Drop trait \\u786E\\u4FDD span \\u7ED3\\u675F\\nstruct ScopedSpan {\\n    span: opentelemetry::trace::Span,\\n}\\n\\nimpl Drop for ScopedSpan {\\n    fn drop(&mut self) {\\n        self.span.end();\\n    }\\n}\\n\\nfn operation() {\\n    let tracer = global::tracer(\\\"my-service\\\");\\n    let span = tracer.start(\\\"operation\\\");\\n    let _scoped = ScopedSpan { span };\\n    \\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n}\\n\")), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"环境变量配置\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%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  }))), \"\\u73AF\\u5883\\u53D8\\u91CF\\u914D\\u7F6E\"), mdx(\"p\", null, \"OpenTelemetry Rust \\u652F\\u6301\\u901A\\u8FC7\\u73AF\\u5883\\u53D8\\u91CF\\u914D\\u7F6E\\uFF0C\\u65E0\\u9700\\u4FEE\\u6539\\u4EE3\\u7801\\uFF1A\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u670D\\u52A1\\u4FE1\\u606F\\nexport OTEL_SERVICE_NAME=my-rust-service\\nexport OTEL_SERVICE_VERSION=1.0.0\\nexport OTEL_RESOURCE_ATTRIBUTES=deployment.environment=production\\n\\n# OTLP Exporter\\uFF08\\u5185\\u90E8\\u5E73\\u53F0\\uFF09\\nexport OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:4317\\nexport OTEL_EXPORTER_OTLP_PROTOCOL=grpc/protobuf\\nexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project?grpc=4317\\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\\nexport OTEL_LOG_LEVEL=info\\n\")), mdx(\"h3\", {\n    \"id\": \"支持的自动埋点库\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%94%AF%E6%8C%81%E7%9A%84%E8%87%AA%E5%8A%A8%E5%9F%8B%E7%82%B9%E5%BA%93\",\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\\u81EA\\u52A8\\u57CB\\u70B9\\u5E93\"), mdx(\"p\", null, \"\\u867D\\u7136 Rust \\u6CA1\\u6709\\u5B98\\u65B9\\u7684\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\\u65B9\\u5F0F\\uFF0C\\u4F46\\u793E\\u533A\\u63D0\\u4F9B\\u4E86\\u4E00\\u4E9B\\u81EA\\u52A8\\u57CB\\u70B9\\u5E93\\uFF1A\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"tower-http\"), \": HTTP \\u4E2D\\u95F4\\u4EF6\\u81EA\\u52A8\\u57CB\\u70B9\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"tracing-opentelemetry\"), \": tracing \\u5E93\\u96C6\\u6210\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"opentelemetry-instrumentation\"), \": \\u793E\\u533A\\u7EF4\\u62A4\\u7684\\u81EA\\u52A8\\u57CB\\u70B9\\u5E93\")), mdx(\"h4\", {\n    \"id\": \"使用-tracing-opentelemetry\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8-tracing-opentelemetry\",\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  }))), \"\\u4F7F\\u7528 tracing-opentelemetry\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use tracing_subscriber::layer::SubscriberExt;\\nuse tracing_subscriber::util::SubscriberInitExt;\\nuse tracing_opentelemetry::OpenTelemetryLayer;\\n\\nfn init_tracing() {\\n    let tracer = init_opentelemetry();\\n    let telemetry = OpenTelemetryLayer::new(tracer);\\n    \\n    tracing_subscriber::registry()\\n        .with(telemetry)\\n        .with(tracing_subscriber::EnvFilter::from_default_env())\\n        .init();\\n}\\n\\n#[tokio::main]\\nasync fn main() {\\n    init_tracing();\\n    \\n    // \\u4F7F\\u7528 tracing \\u5B8F\\u81EA\\u52A8\\u521B\\u5EFA span\\n    tracing::info!(\\\"Application started\\\");\\n    \\n    #[tracing::instrument]\\n    async fn process_order(order_id: String) {\\n        tracing::info!(order_id = %order_id, \\\"Processing order\\\");\\n        // \\u4E1A\\u52A1\\u903B\\u8F91\\n    }\\n    \\n    process_order(\\\"12345\\\".to_string()).await;\\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  }, \"\\u6392\\u67E5\\u6B65\\u9AA4\"), \":\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u68C0\\u67E5\\u73AF\\u5883\\u53D8\\u91CF:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"echo $OTEL_SERVICE_NAME\\necho $OTEL_EXPORTER_OTLP_ENDPOINT\\n\")), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u68C0\\u67E5 tracer provider \\u662F\\u5426\\u521D\\u59CB\\u5316:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"let tracer = global::tracer(\\\"test\\\");\\n// \\u5982\\u679C tracer provider \\u672A\\u521D\\u59CB\\u5316\\uFF0C\\u4F1A\\u4F7F\\u7528 NoOpTracer\\n\")), mdx(\"ol\", {\n    \"start\": 3\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u68C0\\u67E5\\u7F51\\u7EDC\\u8FDE\\u63A5:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"// \\u6D4B\\u8BD5\\u7AEF\\u70B9\\u662F\\u5426\\u53EF\\u8FBE\\nlet client = reqwest::Client::new();\\nlet response = client\\n    .get(\\\"http://uptrace-grpc.yodao.cn:4317\\\")\\n    .send()\\n    .await?;\\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, \"\\u786E\\u4FDD\\u6B63\\u786E\\u4F20\\u9012 context:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"let new_context = context.with_span(span);\\ndownstream_function(&new_context).await;\\n\")), mdx(\"h4\", {\n    \"id\": \"3-异步-context-丢失\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#3-%E5%BC%82%E6%AD%A5-context-%E4%B8%A2%E5%A4%B1\",\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. \\u5F02\\u6B65 Context \\u4E22\\u5931\"), mdx(\"p\", null, \"\\u5728\\u5F02\\u6B65\\u73AF\\u5883\\u4E2D\\uFF0C\\u786E\\u4FDD\\u4F7F\\u7528\\u6B63\\u786E\\u7684 context \\u4F20\\u64AD:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"let context = Context::current();\\ntokio::spawn(async move {\\n    // \\u5728\\u65B0\\u7684\\u5F02\\u6B65\\u4EFB\\u52A1\\u4E2D\\u4F7F\\u7528 context\\n    let span = tracer.start_with_context(\\\"async_task\\\", &context);\\n    // ...\\n});\\n\")), mdx(\"h4\", {\n    \"id\": \"4-编译错误\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#4-%E7%BC%96%E8%AF%91%E9%94%99%E8%AF%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  }))), \"4. \\u7F16\\u8BD1\\u9519\\u8BEF\"), mdx(\"p\", null, \"\\u786E\\u4FDD\\u5728 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Cargo.toml\"), \" \\u4E2D\\u6B63\\u786E\\u914D\\u7F6E\\u4F9D\\u8D56:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-toml\"\n  }, \"[dependencies]\\nopentelemetry = { version = \\\"0.22\\\", features = [\\\"trace\\\", \\\"metrics\\\"] }\\nopentelemetry-otlp = { version = \\\"0.15\\\", features = [\\\"trace\\\", \\\"metrics\\\", \\\"tonic\\\"] }\\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\": \"启用详细日志\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%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  }))), \"\\u542F\\u7528\\u8BE6\\u7EC6\\u65E5\\u5FD7\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"export RUST_LOG=debug\\nexport OTEL_LOG_LEVEL=debug\\n\")), mdx(\"h4\", {\n    \"id\": \"使用-console-exporter\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%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  }))), \"\\u4F7F\\u7528 Console Exporter\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use opentelemetry_stdout::SpanExporter;\\n\\nlet exporter = SpanExporter::default();\\nlet tracer_provider = TracerProvider::builder()\\n    .with_batch_exporter(exporter, opentelemetry_sdk::runtime::Tokio)\\n    .build();\\n\")), mdx(\"h4\", {\n    \"id\": \"使用-tracing-集成\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8-tracing-%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  }))), \"\\u4F7F\\u7528 tracing \\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"use tracing_subscriber::fmt;\\nuse tracing_opentelemetry::OpenTelemetryLayer;\\n\\ntracing_subscriber::registry()\\n    .with(fmt::layer())\\n    .with(OpenTelemetryLayer::new(tracer))\\n    .init();\\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%E5%BB%BA%E8%AE%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\\u5EFA\\u8BAE\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u4F7F\\u7528\\u6279\\u91CF\\u5BFC\\u51FA\"), \": \\u9ED8\\u8BA4 BatchSpanProcessor \\u5DF2\\u7ECF\\u542F\\u7528\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u8C03\\u6574\\u6279\\u91CF\\u5927\\u5C0F\"), \": \\u6839\\u636E\\u6570\\u636E\\u91CF\\u8C03\\u6574 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"max_export_batch_size\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u5F02\\u6B65\\u5BFC\\u51FA\"), \": \\u4F7F\\u7528 Tokio \\u8FD0\\u884C\\u65F6\\u8FDB\\u884C\\u5F02\\u6B65\\u5BFC\\u51FA\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u91C7\\u6837\"), \": \\u5728\\u751F\\u4EA7\\u73AF\\u5883\\u4F7F\\u7528\\u8F83\\u4F4E\\u7684\\u91C7\\u6837\\u7387\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u8D44\\u6E90\\u68C0\\u6D4B\\u5668\"), \": \\u53EA\\u542F\\u7528\\u9700\\u8981\\u7684\\u8D44\\u6E90\\u68C0\\u6D4B\\u5668\")), 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/getting-started/environment-variables/\"\n  }, \"\\u73AF\\u5883\\u53D8\\u91CF\\u914D\\u7F6E\"), \" - \\u4E86\\u89E3\\u6240\\u6709\\u914D\\u7F6E\\u9009\\u9879\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/advanced/sampling/\"\n  }, \"\\u9AD8\\u7EA7\\u914D\\u7F6E\"), \" - \\u6DF1\\u5165\\u4E86\\u89E3\\u91C7\\u6837\\u548C\\u6027\\u80FD\\u4F18\\u5316\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/uptrace/overview/\"\n  }, \"Uptrace \\u5E73\\u53F0\\u4F7F\\u7528\"), \" - \\u4E86\\u89E3\\u5982\\u4F55\\u4F7F\\u7528 Uptrace \\u5E73\\u53F0\")), 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/rust/\"\n  }, \"OpenTelemetry Rust Documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/open-telemetry/opentelemetry-rust\"\n  }, \"OpenTelemetry Rust GitHub\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://opentelemetry.io/docs/specs/semconv/\"\n  }, \"Rust Semantic Conventions\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#rust-语言-opentelemetry-接入指南","title":"Rust 语言 OpenTelemetry 接入指南","items":[{"url":"#目录","title":"目录"},{"url":"#概述","title":"概述","items":[{"url":"#rust-语言特性","title":"Rust 语言特性"},{"url":"#版本要求","title":"版本要求"},{"url":"#支持的信号","title":"支持的信号"},{"url":"#适用场景","title":"适用场景"}]},{"url":"#快速开始","title":"快速开始","items":[{"url":"#1-添加依赖","title":"1. 添加依赖"},{"url":"#2-基础初始化","title":"2. 基础初始化"},{"url":"#3-配置环境变量","title":"3. 配置环境变量"}]},{"url":"#sdk-手动接入","title":"SDK 手动接入","items":[{"url":"#安装依赖","title":"安装依赖"},{"url":"#基础初始化","title":"基础初始化","items":[{"url":"#创建-opentelemetry-初始化函数","title":"创建 OpenTelemetry 初始化函数"},{"url":"#在应用中使用","title":"在应用中使用"}]},{"url":"#traces---手动埋点","title":"Traces - 手动埋点","items":[{"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":"#logs---日志集成","title":"Logs - 日志集成","items":[{"url":"#集成-tracing-库","title":"集成 tracing 库"}]}]},{"url":"#框架集成示例","title":"框架集成示例","items":[{"url":"#actix-web-框架集成","title":"Actix Web 框架集成"},{"url":"#axum-框架集成","title":"Axum 框架集成"},{"url":"#warp-框架集成","title":"Warp 框架集成"}]},{"url":"#数据库集成","title":"数据库集成","items":[{"url":"#sqlx-集成","title":"SQLx 集成"},{"url":"#mongodb-驱动集成","title":"MongoDB 驱动集成"},{"url":"#redis-集成","title":"Redis 集成"}]},{"url":"#异步运行时集成","title":"异步运行时集成","items":[{"url":"#tokio-集成","title":"Tokio 集成"},{"url":"#async-std-集成","title":"async-std 集成"},{"url":"#消息队列集成","title":"消息队列集成","items":[{"url":"#kafka-集成","title":"Kafka 集成"},{"url":"#rabbitmq-集成","title":"RabbitMQ 集成"}]},{"url":"#http-客户端集成","title":"HTTP 客户端集成","items":[{"url":"#reqwest-集成","title":"reqwest 集成"}]}]},{"url":"#高级配置","title":"高级配置","items":[{"url":"#自定义采样策略","title":"自定义采样策略"},{"url":"#性能优化配置","title":"性能优化配置"},{"url":"#多-exporter-配置","title":"多 Exporter 配置"},{"url":"#资源检测器配置","title":"资源检测器配置"}]},{"url":"#最佳实践","title":"最佳实践","items":[{"url":"#1-context-传递在异步环境中","title":"1. Context 传递（在异步环境中）"},{"url":"#2-错误处理","title":"2. 错误处理"},{"url":"#3-资源管理","title":"3. 资源管理"},{"url":"#环境变量配置","title":"环境变量配置"},{"url":"#支持的自动埋点库","title":"支持的自动埋点库","items":[{"url":"#使用-tracing-opentelemetry","title":"使用 tracing-opentelemetry"}]}]},{"url":"#故障排查","title":"故障排查","items":[{"url":"#常见问题","title":"常见问题","items":[{"url":"#1-数据未发送到后端","title":"1. 数据未发送到后端"},{"url":"#2-span-未关联","title":"2. Span 未关联"},{"url":"#3-异步-context-丢失","title":"3. 异步 Context 丢失"},{"url":"#4-编译错误","title":"4. 编译错误"}]},{"url":"#调试技巧","title":"调试技巧","items":[{"url":"#启用详细日志","title":"启用详细日志"},{"url":"#使用-console-exporter","title":"使用 Console Exporter"},{"url":"#使用-tracing-集成","title":"使用 tracing 集成"}]},{"url":"#性能优化建议","title":"性能优化建议"}]},{"url":"#下一步","title":"下一步"},{"url":"#参考资源","title":"参考资源"}]}]}}},"pageContext":{"id":"2dd6e844-ef79-5e35-9847-98a8ec020a10"}},
    "staticQueryHashes": ["1122327541","1339625561","148928582","2007862104","2140385554","3442269102","4275725850"]}