{
    "componentChunkName": "component---node-modules-shenhh-smooth-doc-src-templates-doc-js",
    "path": "/docs/languages/cpp/",
    "result": {"data":{"mdx":{"fields":{"pageType":"doc","title":"C++ 语言接入指南","editLink":"https://gitlab.corp.youdao.com/DevOPS/apm/docs/edit/master/pages/docs/languages/cpp.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\": \"C++ 语言接入指南\",\n  \"section\": \"语言接入指南\",\n  \"slug\": \"/docs/languages/cpp/\",\n  \"order\": 8\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\": \"c-语言-opentelemetry-接入指南\"\n  }, mdx(\"a\", {\n    parentName: \"h1\",\n    \"href\": \"#c-%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  }))), \"C++ \\u8BED\\u8A00 OpenTelemetry \\u63A5\\u5165\\u6307\\u5357\"), mdx(\"p\", null, \"\\u672C\\u6587\\u6863\\u63D0\\u4F9B C++ \\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\\u7CFB\\u7EDF\\u7EA7\\u7F16\\u7A0B\\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\": \"#%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\": \"c-语言特性\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#c-%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  }))), \"C++ \\u8BED\\u8A00\\u7279\\u6027\"), mdx(\"p\", null, \"C++ \\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  }, \"\\u7CFB\\u7EDF\\u7EA7\\u7F16\\u7A0B\"), \": \\u9002\\u5408\\u5E95\\u5C42\\u7CFB\\u7EDF\\u7F16\\u7A0B\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u8DE8\\u5E73\\u53F0\"), \": \\u652F\\u6301 Linux\\u3001Windows\\u3001macOS\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u7EBF\\u7A0B\\u5B89\\u5168\"), \": \\u652F\\u6301\\u591A\\u7EBF\\u7A0B\\u73AF\\u5883\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u5185\\u5B58\\u63A7\\u5236\"), \": \\u7CBE\\u786E\\u7684\\u5185\\u5B58\\u7BA1\\u7406\")), 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  }, \"C++ \\u6807\\u51C6\"), \": C++14+ (\\u63A8\\u8350 C++17+)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"OpenTelemetry C++\"), \": v1.10.0+\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u652F\\u6301\\u67B6\\u6784\"), \": x86_64, arm64, aarch64\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u7F16\\u8BD1\\u5668\"), \": GCC 7+, Clang 8+, MSVC 2019+\")), 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\")), 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  }, \"\\u7CFB\\u7EDF\\u7F16\\u7A0B\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u6E38\\u620F\\u5F15\\u64CE\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u5D4C\\u5165\\u5F0F\\u7CFB\\u7EDF\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u5B9E\\u65F6\\u7CFB\\u7EDF\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"gRPC \\u670D\\u52A1\")), 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-%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  }))), \"1. \\u5B89\\u88C5\\u4F9D\\u8D56\"), mdx(\"h4\", {\n    \"id\": \"使用-vcpkg推荐\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8-vcpkg%E6%8E%A8%E8%8D%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4F7F\\u7528 vcpkg\\uFF08\\u63A8\\u8350\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u5B89\\u88C5 vcpkg\\ngit clone https://github.com/Microsoft/vcpkg.git\\ncd vcpkg\\n./bootstrap-vcpkg.sh  # Linux/macOS\\n# \\u6216\\n.\\\\bootstrap-vcpkg.bat  # Windows\\n\\n# \\u5B89\\u88C5 OpenTelemetry C++\\n./vcpkg install opentelemetry-cpp[otlp]\\n\")), mdx(\"h4\", {\n    \"id\": \"使用-conan\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8-conan\",\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 Conan\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u5B89\\u88C5 Conan\\npip install conan\\n\\n# \\u5728 conanfile.txt \\u4E2D\\u6DFB\\u52A0\\n[requires]\\nopentelemetry-cpp/1.10.0\\n\\n[options]\\nopentelemetry-cpp:with_otlp=True\\n\\n# \\u5B89\\u88C5\\u4F9D\\u8D56\\nconan install . --build=missing\\n\")), mdx(\"h4\", {\n    \"id\": \"从源码编译\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E4%BB%8E%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91\",\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  }))), \"\\u4ECE\\u6E90\\u7801\\u7F16\\u8BD1\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"git clone https://github.com/open-telemetry/opentelemetry-cpp.git\\ncd opentelemetry-cpp\\nmkdir build && cd build\\ncmake .. -DCMAKE_BUILD_TYPE=Release -DWITH_OTLP=ON\\nmake -j$(nproc)\\nsudo make install\\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-cpp\"\n  }, \"// main.cpp\\n#include <opentelemetry/trace/provider.h>\\n#include <opentelemetry/exporters/otlp/otlp_http_exporter.h>\\n#include <opentelemetry/sdk/trace/simple_processor.h>\\n#include <opentelemetry/sdk/trace/tracer_provider.h>\\n#include <opentelemetry/sdk/resource/resource.h>\\n#include <opentelemetry/nostd/shared_ptr.h>\\n\\nnamespace trace_api = opentelemetry::trace;\\nnamespace trace_sdk = opentelemetry::sdk::trace;\\nnamespace otlp = opentelemetry::exporter::otlp;\\n\\nvoid initTracer() {\\n    auto exporter = std::unique_ptr<trace_sdk::SpanExporter>(\\n        new otlp::OtlpHttpExporter(\\n            otlp::OtlpHttpExporterOptions{\\n                .url = \\\"http://uptrace-grpc.yodao.cn:80/v1/traces\\\",\\n                .headers = {{\\\"uptrace-dsn\\\", \\\"http://token@uptrace-grpc.yodao.cn/project?grpc=4317\\\"}}\\n            }\\n        )\\n    );\\n\\n    auto processor = std::unique_ptr<trace_sdk::SpanProcessor>(\\n        new trace_sdk::SimpleSpanProcessor(std::move(exporter))\\n    );\\n\\n    auto resource = opentelemetry::sdk::resource::Resource::Create({\\n        {\\\"service.name\\\", \\\"my-cpp-service\\\"},\\n        {\\\"service.version\\\", \\\"1.0.0\\\"}\\n    });\\n\\n    auto provider = opentelemetry::nostd::shared_ptr<trace_api::TracerProvider>(\\n        new trace_sdk::TracerProvider(std::move(processor), resource)\\n    );\\n\\n    trace_api::Provider::SetTracerProvider(provider);\\n}\\n\\nint main() {\\n    initTracer();\\n    \\n    auto tracer = trace_api::Provider::GetTracerProvider()->GetTracer(\\\"my-service\\\");\\n    auto span = tracer->StartSpan(\\\"handle_request\\\");\\n    \\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    std::cout << \\\"Hello, OpenTelemetry!\\\" << std::endl;\\n    \\n    span->End();\\n    return 0;\\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-cpp-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:80\\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(\"h3\", {\n    \"id\": \"4-编译和运行\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#4-%E7%BC%96%E8%AF%91%E5%92%8C%E8%BF%90%E8%A1%8C\",\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\\u548C\\u8FD0\\u884C\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u4F7F\\u7528 CMake\\nmkdir build && cd build\\ncmake ..\\nmake\\n./my-app\\n\\n# \\u6216\\u4F7F\\u7528 g++\\ng++ -std=c++17 main.cpp -lopentelemetry_trace -lopentelemetry_exporter_otlp_http -o my-app\\n./my-app\\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(\"h4\", {\n    \"id\": \"cmakeliststxt-配置\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#cmakeliststxt-%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  }))), \"CMakeLists.txt \\u914D\\u7F6E\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cmake\"\n  }, \"cmake_minimum_required(VERSION 3.15)\\nproject(my-app)\\n\\nset(CMAKE_CXX_STANDARD 17)\\n\\n# \\u67E5\\u627E OpenTelemetry\\nfind_package(opentelemetry-cpp REQUIRED)\\n\\n# \\u6DFB\\u52A0\\u53EF\\u6267\\u884C\\u6587\\u4EF6\\nadd_executable(my-app main.cpp)\\n\\n# \\u94FE\\u63A5\\u5E93\\ntarget_link_libraries(my-app\\n    opentelemetry::trace\\n    opentelemetry::exporter_otlp_http\\n    opentelemetry::sdk::trace\\n    opentelemetry::sdk::resource\\n)\\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-cpp\"\n  }, \"// otel.h\\n#pragma once\\n\\n#include <opentelemetry/trace/provider.h>\\n#include <opentelemetry/exporters/otlp/otlp_http_exporter.h>\\n#include <opentelemetry/sdk/trace/simple_processor.h>\\n#include <opentelemetry/sdk/trace/tracer_provider.h>\\n#include <opentelemetry/sdk/resource/resource.h>\\n\\nvoid initOpenTelemetry();\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"// otel.cpp\\n#include \\\"otel.h\\\"\\n#include <cstdlib>\\n#include <string>\\n\\nvoid initOpenTelemetry() {\\n    namespace trace_api = opentelemetry::trace;\\n    namespace trace_sdk = opentelemetry::sdk::trace;\\n    namespace otlp = opentelemetry::exporter::otlp;\\n    \\n    // \\u4ECE\\u73AF\\u5883\\u53D8\\u91CF\\u8BFB\\u53D6\\u914D\\u7F6E\\n    std::string endpoint = std::getenv(\\\"OTEL_EXPORTER_OTLP_ENDPOINT\\\") \\n        ? std::getenv(\\\"OTEL_EXPORTER_OTLP_ENDPOINT\\\") \\n        : \\\"http://uptrace-grpc.yodao.cn:80/v1/traces\\\";\\n    \\n    std::string dsn = std::getenv(\\\"OTEL_EXPORTER_OTLP_HEADERS\\\")\\n        ? std::getenv(\\\"OTEL_EXPORTER_OTLP_HEADERS\\\")\\n        : \\\"http://token@uptrace-grpc.yodao.cn/project?grpc=4317\\\";\\n    \\n    std::string service_name = std::getenv(\\\"OTEL_SERVICE_NAME\\\")\\n        ? std::getenv(\\\"OTEL_SERVICE_NAME\\\")\\n        : \\\"my-cpp-service\\\";\\n    \\n    // \\u521B\\u5EFA OTLP Exporter\\n    otlp::OtlpHttpExporterOptions exporter_options;\\n    exporter_options.url = endpoint;\\n    exporter_options.headers = {{\\\"uptrace-dsn\\\", dsn}};\\n    \\n    auto exporter = std::unique_ptr<trace_sdk::SpanExporter>(\\n        new otlp::OtlpHttpExporter(exporter_options)\\n    );\\n    \\n    // \\u521B\\u5EFA Span Processor\\n    auto processor = std::unique_ptr<trace_sdk::SpanProcessor>(\\n        new trace_sdk::SimpleSpanProcessor(std::move(exporter))\\n    );\\n    \\n    // \\u521B\\u5EFA Resource\\n    auto resource = opentelemetry::sdk::resource::Resource::Create({\\n        {\\\"service.name\\\", service_name},\\n        {\\\"service.version\\\", \\\"1.0.0\\\"}\\n    });\\n    \\n    // \\u521B\\u5EFA TracerProvider\\n    auto provider = opentelemetry::nostd::shared_ptr<trace_api::TracerProvider>(\\n        new trace_sdk::TracerProvider(std::move(processor), resource)\\n    );\\n    \\n    // \\u6CE8\\u518C\\u5168\\u5C40 TracerProvider\\n    trace_api::Provider::SetTracerProvider(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-cpp\"\n  }, \"// main.cpp\\n#include \\\"otel.h\\\"\\n#include <opentelemetry/trace/provider.h>\\n#include <iostream>\\n\\nint main() {\\n    initOpenTelemetry();\\n    \\n    auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n        ->GetTracer(\\\"my-service\\\");\\n    \\n    auto span = tracer->StartSpan(\\\"handle_request\\\");\\n    \\n    span->SetAttribute(\\\"http.method\\\", \\\"GET\\\");\\n    span->SetAttribute(\\\"http.url\\\", \\\"/\\\");\\n    \\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    std::cout << \\\"Hello, World!\\\" << std::endl;\\n    \\n    span->End();\\n    return 0;\\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-cpp\"\n  }, \"#include <opentelemetry/trace/provider.h>\\n#include <opentelemetry/trace/span_metadata.h>\\n\\nvoid processOrder(const std::string& orderId) {\\n    auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n        ->GetTracer(\\\"my-service\\\");\\n    \\n    auto span = tracer->StartSpan(\\\"process_order\\\");\\n    \\n    span->SetAttribute(\\\"order.id\\\", orderId);\\n    span->SetAttribute(\\\"operation\\\", \\\"process\\\");\\n    \\n    span->AddEvent(\\\"order_validation_started\\\");\\n    \\n    try {\\n        validateOrder(orderId);\\n        \\n        span->AddEvent(\\\"order_validated\\\");\\n        \\n        chargePayment(orderId);\\n        \\n        span->AddEvent(\\\"payment_processed\\\");\\n        \\n        span->SetStatus(opentelemetry::trace::StatusCode::kOk);\\n        span->SetAttribute(\\\"order.success\\\", true);\\n    } catch (const std::exception& e) {\\n        span->RecordException(e);\\n        span->SetStatus(opentelemetry::trace::StatusCode::kError, e.what());\\n        throw;\\n    }\\n    \\n    span->End();\\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-cpp\"\n  }, \"#include <opentelemetry/trace/propagation/http_trace_context.h>\\n#include <opentelemetry/context/propagation/text_map_propagator.h>\\n\\nstd::string makeHttpRequest(const std::string& url) {\\n    auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n        ->GetTracer(\\\"my-service\\\");\\n    \\n    auto span = tracer->StartSpan(\\\"http_request\\\");\\n    \\n    span->SetAttribute(\\\"http.url\\\", url);\\n    span->SetAttribute(\\\"http.method\\\", \\\"GET\\\");\\n    \\n    // \\u6CE8\\u5165 Context \\u5230 HTTP headers\\n    std::map<std::string, std::string> headers;\\n    auto propagator = opentelemetry::trace::propagation::HttpTraceContext();\\n    auto context = opentelemetry::context::RuntimeContext::GetCurrent();\\n    propagator.Inject(headers, context);\\n    \\n    // \\u4F7F\\u7528 HTTP \\u5BA2\\u6237\\u7AEF\\u53D1\\u9001\\u8BF7\\u6C42\\n    // ... HTTP \\u8BF7\\u6C42\\u4EE3\\u7801 ...\\n    \\n    span->SetAttribute(\\\"http.status_code\\\", statusCode);\\n    span->SetStatus(statusCode >= 400 \\n        ? opentelemetry::trace::StatusCode::kError \\n        : opentelemetry::trace::StatusCode::kOk);\\n    \\n    span->End();\\n    return response;\\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-cpp\"\n  }, \"#include <opentelemetry/metrics/provider.h>\\n#include <opentelemetry/metrics/meter.h>\\n\\nvoid handleRequest(\\n    const std::string& method,\\n    const std::string& route,\\n    int statusCode\\n) {\\n    auto meter_provider = opentelemetry::metrics::Provider::GetMeterProvider();\\n    auto meter = meter_provider->GetMeter(\\\"my-service\\\");\\n    \\n    auto request_counter = meter->CreateUInt64Counter(\\n        \\\"http.server.requests\\\",\\n        \\\"total\\\",\\n        \\\"Total number of HTTP requests\\\"\\n    );\\n    \\n    std::map<std::string, std::string> attributes = {\\n        {\\\"http.method\\\", method},\\n        {\\\"http.route\\\", route},\\n        {\\\"http.status_code\\\", std::to_string(statusCode)}\\n    };\\n    \\n    request_counter->Add(1, attributes);\\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-cpp\"\n  }, \"void recordDuration(double duration, const std::string& method, const std::string& route) {\\n    auto meter_provider = opentelemetry::metrics::Provider::GetMeterProvider();\\n    auto meter = meter_provider->GetMeter(\\\"my-service\\\");\\n    \\n    auto request_duration = meter->CreateDoubleHistogram(\\n        \\\"http.server.duration\\\",\\n        \\\"ms\\\",\\n        \\\"HTTP request duration\\\"\\n    );\\n    \\n    std::map<std::string, std::string> attributes = {\\n        {\\\"http.method\\\", method},\\n        {\\\"http.route\\\", route}\\n    };\\n    \\n    request_duration->Record(duration, attributes);\\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\": \"grpc-服务集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#grpc-%E6%9C%8D%E5%8A%A1%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  }))), \"gRPC \\u670D\\u52A1\\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"#include <grpcpp/grpcpp.h>\\n#include <opentelemetry/trace/provider.h>\\n#include <opentelemetry/instrumentation/grpc/grpc_client.h>\\n\\nclass MyServiceImpl : public MyService::Service {\\npublic:\\n    grpc::Status GetUser(\\n        grpc::ServerContext* context,\\n        const GetUserRequest* request,\\n        GetUserResponse* response\\n    ) override {\\n        auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n            ->GetTracer(\\\"my-service\\\");\\n        \\n        auto span = tracer->StartSpan(\\\"get_user\\\");\\n        \\n        span->SetAttribute(\\\"user.id\\\", request->id());\\n        \\n        try {\\n            // \\u4E1A\\u52A1\\u903B\\u8F91\\n            auto user = fetchUser(request->id());\\n            response->set_id(user.id());\\n            response->set_name(user.name());\\n            \\n            span->SetStatus(opentelemetry::trace::StatusCode::kOk);\\n        } catch (const std::exception& e) {\\n            span->RecordException(e);\\n            span->SetStatus(opentelemetry::trace::StatusCode::kError, e.what());\\n            return grpc::Status(grpc::StatusCode::INTERNAL, e.what());\\n        }\\n        \\n        span->End();\\n        return grpc::Status::OK;\\n    }\\n};\\n\")), mdx(\"h3\", {\n    \"id\": \"http-服务集成使用-crow\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#http-%E6%9C%8D%E5%8A%A1%E9%9B%86%E6%88%90%E4%BD%BF%E7%94%A8-crow\",\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 \\u670D\\u52A1\\u96C6\\u6210\\uFF08\\u4F7F\\u7528 Crow\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"#include <crow.h>\\n#include <opentelemetry/trace/provider.h>\\n\\nint main() {\\n    initOpenTelemetry();\\n    \\n    crow::SimpleApp app;\\n    \\n    CROW_ROUTE(app, \\\"/users/<int>\\\")\\n    ([](int id) {\\n        auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n            ->GetTracer(\\\"my-service\\\");\\n        \\n        auto span = tracer->StartSpan(\\\"get_user\\\");\\n        span->SetAttribute(\\\"user.id\\\", std::to_string(id));\\n        \\n        try {\\n            auto user = fetchUser(id);\\n            span->SetStatus(opentelemetry::trace::StatusCode::kOk);\\n            span->End();\\n            return crow::response(user.toJson());\\n        } catch (const std::exception& e) {\\n            span->RecordException(e);\\n            span->SetStatus(opentelemetry::trace::StatusCode::kError, e.what());\\n            span->End();\\n            return crow::response(500, e.what());\\n        }\\n    });\\n    \\n    app.port(8080).multithreaded().run();\\n    return 0;\\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\": \"mysql-客户端集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#mysql-%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  }))), \"MySQL \\u5BA2\\u6237\\u7AEF\\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"#include <mysql/mysql.h>\\n#include <opentelemetry/trace/provider.h>\\n\\nstd::vector<Row> queryDatabase(const std::string& query) {\\n    auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n        ->GetTracer(\\\"my-service\\\");\\n    \\n    auto span = tracer->StartSpan(\\\"database.query\\\");\\n    \\n    span->SetAttribute(\\\"db.system\\\", \\\"mysql\\\");\\n    span->SetAttribute(\\\"db.statement\\\", query);\\n    \\n    MYSQL* conn = mysql_init(nullptr);\\n    mysql_real_connect(conn, \\\"localhost\\\", \\\"user\\\", \\\"password\\\", \\\"mydb\\\", 0, nullptr, 0);\\n    \\n    try {\\n        if (mysql_query(conn, query.c_str())) {\\n            throw std::runtime_error(mysql_error(conn));\\n        }\\n        \\n        MYSQL_RES* result = mysql_store_result(conn);\\n        std::vector<Row> rows;\\n        \\n        MYSQL_ROW row;\\n        while ((row = mysql_fetch_row(result))) {\\n            rows.push_back(Row(row));\\n        }\\n        \\n        mysql_free_result(result);\\n        span->SetStatus(opentelemetry::trace::StatusCode::kOk);\\n        \\n        return rows;\\n    } catch (const std::exception& e) {\\n        span->RecordException(e);\\n        span->SetStatus(opentelemetry::trace::StatusCode::kError, e.what());\\n        throw;\\n    } finally {\\n        mysql_close(conn);\\n        span->End();\\n    }\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"postgresql-客户端集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#postgresql-%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  }))), \"PostgreSQL \\u5BA2\\u6237\\u7AEF\\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"#include <libpq-fe.h>\\n#include <opentelemetry/trace/provider.h>\\n\\nstd::vector<Row> queryPostgreSQL(const std::string& query) {\\n    auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n        ->GetTracer(\\\"my-service\\\");\\n    \\n    auto span = tracer->StartSpan(\\\"database.query\\\");\\n    \\n    span->SetAttribute(\\\"db.system\\\", \\\"postgresql\\\");\\n    span->SetAttribute(\\\"db.statement\\\", query);\\n    \\n    PGconn* conn = PQconnectdb(\\\"host=localhost dbname=mydb user=user password=password\\\");\\n    \\n    try {\\n        PGresult* result = PQexec(conn, query.c_str());\\n        \\n        if (PQresultStatus(result) != PGRES_TUPLES_OK) {\\n            throw std::runtime_error(PQerrorMessage(conn));\\n        }\\n        \\n        std::vector<Row> rows;\\n        int nRows = PQntuples(result);\\n        \\n        for (int i = 0; i < nRows; i++) {\\n            rows.push_back(Row(result, i));\\n        }\\n        \\n        PQclear(result);\\n        span->SetStatus(opentelemetry::trace::StatusCode::kOk);\\n        \\n        return rows;\\n    } catch (const std::exception& e) {\\n        span->RecordException(e);\\n        span->SetStatus(opentelemetry::trace::StatusCode::kError, e.what());\\n        throw;\\n    } finally {\\n        PQfinish(conn);\\n        span->End();\\n    }\\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\": \"libcurl-集成\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#libcurl-%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  }))), \"libcurl \\u96C6\\u6210\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"#include <curl/curl.h>\\n#include <opentelemetry/trace/provider.h>\\n#include <opentelemetry/trace/propagation/http_trace_context.h>\\n\\nstd::string makeHttpRequest(const std::string& url) {\\n    auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n        ->GetTracer(\\\"my-service\\\");\\n    \\n    auto span = tracer->StartSpan(\\\"http_request\\\");\\n    \\n    span->SetAttribute(\\\"http.url\\\", url);\\n    span->SetAttribute(\\\"http.method\\\", \\\"GET\\\");\\n    \\n    // \\u6CE8\\u5165 Context \\u5230 HTTP headers\\n    std::map<std::string, std::string> headers;\\n    auto propagator = opentelemetry::trace::propagation::HttpTraceContext();\\n    auto context = opentelemetry::context::RuntimeContext::GetCurrent();\\n    propagator.Inject(headers, context);\\n    \\n    CURL* curl = curl_easy_init();\\n    struct curl_slist* header_list = nullptr;\\n    \\n    for (const auto& [key, value] : headers) {\\n        std::string header = key + \\\": \\\" + value;\\n        header_list = curl_slist_append(header_list, header.c_str());\\n    }\\n    \\n    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());\\n    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);\\n    \\n    std::string response_data;\\n    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, [](void* contents, size_t size, size_t nmemb, std::string* data) {\\n        data->append((char*)contents, size * nmemb);\\n        return size * nmemb;\\n    });\\n    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_data);\\n    \\n    CURLcode res = curl_easy_perform(curl);\\n    long status_code;\\n    curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status_code);\\n    \\n    curl_slist_free_all(header_list);\\n    curl_easy_cleanup(curl);\\n    \\n    span->SetAttribute(\\\"http.status_code\\\", (int)status_code);\\n    span->SetStatus(status_code >= 400 \\n        ? opentelemetry::trace::StatusCode::kError \\n        : opentelemetry::trace::StatusCode::kOk);\\n    \\n    span->End();\\n    return response_data;\\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\": \"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-cpp\"\n  }, \"#include <amqp.h>\\n#include <opentelemetry/trace/provider.h>\\n\\nvoid publishMessage(\\n    amqp_connection_state_t conn,\\n    const std::string& exchange,\\n    const std::string& routing_key,\\n    const std::string& message\\n) {\\n    auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n        ->GetTracer(\\\"my-service\\\");\\n    \\n    auto span = tracer->StartSpan(\\\"rabbitmq.publish\\\");\\n    \\n    span->SetAttribute(\\\"messaging.system\\\", \\\"rabbitmq\\\");\\n    span->SetAttribute(\\\"messaging.destination\\\", exchange);\\n    span->SetAttribute(\\\"messaging.rabbitmq.routing_key\\\", routing_key);\\n    \\n    amqp_basic_properties_t props;\\n    props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MODE_FLAG;\\n    props.content_type = amqp_cstring_bytes(\\\"text/plain\\\");\\n    props.delivery_mode = 2; // persistent\\n    \\n    amqp_bytes_t message_bytes = amqp_cstring_bytes(message.c_str());\\n    \\n    amqp_basic_publish(\\n        conn,\\n        1, // channel\\n        amqp_cstring_bytes(exchange.c_str()),\\n        amqp_cstring_bytes(routing_key.c_str()),\\n        0, // mandatory\\n        0, // immediate\\n        &props,\\n        message_bytes\\n    );\\n    \\n    span->SetStatus(opentelemetry::trace::StatusCode::kOk);\\n    span->End();\\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-cpp\"\n  }, \"#include <opentelemetry/sdk/trace/sampler.h>\\n\\nclass CustomSampler : public opentelemetry::sdk::trace::Sampler {\\npublic:\\n    opentelemetry::sdk::trace::SamplingResult ShouldSample(\\n        const opentelemetry::trace::SpanContext& parent_context,\\n        opentelemetry::trace::TraceId trace_id,\\n        const std::string& name,\\n        opentelemetry::trace::SpanKind span_kind,\\n        const opentelemetry::common::KeyValueIterable& attributes,\\n        const opentelemetry::trace::SpanContextKeyValueIterable& links\\n    ) noexcept override {\\n        // \\u603B\\u662F\\u91C7\\u6837\\u7279\\u5B9A\\u8DEF\\u5F84\\n        if (name.find(\\\"/checkout\\\") != std::string::npos ||\\n            name.find(\\\"/payment\\\") != std::string::npos) {\\n            return {opentelemetry::sdk::trace::Decision::RECORD_AND_SAMPLE};\\n        }\\n        \\n        // \\u4ECE\\u4E0D\\u91C7\\u6837\\u5065\\u5EB7\\u68C0\\u67E5\\n        if (name.find(\\\"/health\\\") != std::string::npos ||\\n            name.find(\\\"/metrics\\\") != std::string::npos) {\\n            return {opentelemetry::sdk::trace::Decision::DROP};\\n        }\\n        \\n        // \\u9ED8\\u8BA4\\u91C7\\u6837\\u7387 10%\\n        return {opentelemetry::sdk::trace::Decision::RECORD_AND_SAMPLE};\\n    }\\n    \\n    std::string GetDescription() const noexcept override {\\n        return \\\"CustomSampler\\\";\\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-cpp\"\n  }, \"#include <opentelemetry/sdk/trace/batch_span_processor.h>\\n\\nvoid initOptimizedTracer() {\\n    otlp::OtlpHttpExporterOptions exporter_options;\\n    exporter_options.url = \\\"http://uptrace-grpc.yodao.cn:80/v1/traces\\\";\\n    exporter_options.headers = {{\\\"uptrace-dsn\\\", \\\"http://token@uptrace-grpc.yodao.cn/project?grpc=4317\\\"}};\\n    exporter_options.timeout = std::chrono::seconds(10);\\n    \\n    auto exporter = std::unique_ptr<trace_sdk::SpanExporter>(\\n        new otlp::OtlpHttpExporter(exporter_options)\\n    );\\n    \\n    trace_sdk::BatchSpanProcessorOptions processor_options;\\n    processor_options.max_queue_size = 2048;\\n    processor_options.schedule_delay_millis = std::chrono::milliseconds(5000);\\n    processor_options.max_export_batch_size = 512;\\n    processor_options.export_timeout_millis = std::chrono::milliseconds(30000);\\n    \\n    auto processor = std::unique_ptr<trace_sdk::SpanProcessor>(\\n        new trace_sdk::BatchSpanProcessor(std::move(exporter), processor_options)\\n    );\\n    \\n    auto provider = opentelemetry::nostd::shared_ptr<trace_api::TracerProvider>(\\n        new trace_sdk::TracerProvider(std::move(processor), resource)\\n    );\\n    \\n    trace_api::Provider::SetTracerProvider(provider);\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"多-exporter-配置\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%A4%9A-exporter-%E9%85%8D%E7%BD%AE\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u591A Exporter \\u914D\\u7F6E\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"#include <opentelemetry/exporters/ostream/span_exporter.h>\\n#include <opentelemetry/exporters/jaeger/jaeger_exporter.h>\\n\\nvoid initMultipleExporters() {\\n    // OTLP Exporter\\n    otlp::OtlpHttpExporterOptions otlp_options;\\n    otlp_options.url = \\\"http://uptrace-grpc.yodao.cn:80/v1/traces\\\";\\n    otlp_options.headers = {{\\\"uptrace-dsn\\\", \\\"http://token@uptrace-grpc.yodao.cn/project?grpc=4317\\\"}};\\n    auto otlp_exporter = std::unique_ptr<trace_sdk::SpanExporter>(\\n        new otlp::OtlpHttpExporter(otlp_options)\\n    );\\n    \\n    // Console Exporter\\n    auto console_exporter = std::unique_ptr<trace_sdk::SpanExporter>(\\n        new opentelemetry::exporter::trace::OStreamSpanExporter(std::cout)\\n    );\\n    \\n    // \\u521B\\u5EFA\\u591A\\u4E2A processor\\n    auto otlp_processor = std::unique_ptr<trace_sdk::SpanProcessor>(\\n        new trace_sdk::BatchSpanProcessor(std::move(otlp_exporter))\\n    );\\n    \\n    auto console_processor = std::unique_ptr<trace_sdk::SpanProcessor>(\\n        new trace_sdk::SimpleSpanProcessor(std::move(console_exporter))\\n    );\\n    \\n    // \\u521B\\u5EFA TracerProvider\\n    auto provider = opentelemetry::nostd::shared_ptr<trace_api::TracerProvider>(\\n        new trace_sdk::TracerProvider(\\n            std::vector<std::unique_ptr<trace_sdk::SpanProcessor>>{\\n                std::move(otlp_processor),\\n                std::move(console_processor)\\n            },\\n            resource\\n        )\\n    );\\n    \\n    trace_api::Provider::SetTracerProvider(provider);\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"线程池配置\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E7%BA%BF%E7%A8%8B%E6%B1%A0%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  }))), \"\\u7EBF\\u7A0B\\u6C60\\u914D\\u7F6E\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"#include <opentelemetry/sdk/trace/batch_span_processor.h>\\n#include <thread>\\n#include <vector>\\n\\nvoid initWithThreadPool() {\\n    // \\u521B\\u5EFA\\u7EBF\\u7A0B\\u6C60\\u7528\\u4E8E\\u5F02\\u6B65\\u5BFC\\u51FA\\n    std::vector<std::thread> workers;\\n    const size_t num_threads = std::thread::hardware_concurrency();\\n    \\n    for (size_t i = 0; i < num_threads; ++i) {\\n        workers.emplace_back([&]() {\\n            // \\u5DE5\\u4F5C\\u7EBF\\u7A0B\\u903B\\u8F91\\n        });\\n    }\\n    \\n    // \\u914D\\u7F6E BatchSpanProcessor \\u4F7F\\u7528\\u7EBF\\u7A0B\\u6C60\\n    trace_sdk::BatchSpanProcessorOptions processor_options;\\n    processor_options.max_queue_size = 2048;\\n    processor_options.schedule_delay_millis = std::chrono::milliseconds(5000);\\n    \\n    auto processor = std::unique_ptr<trace_sdk::SpanProcessor>(\\n        new trace_sdk::BatchSpanProcessor(std::move(exporter), processor_options)\\n    );\\n    \\n    // ... \\u521B\\u5EFA TracerProvider\\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%A4%9A%E7%BA%BF%E7%A8%8B%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\\u591A\\u7EBF\\u7A0B\\u73AF\\u5883\\u4E2D\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"// \\u2705 \\u6B63\\u786E\\uFF1A\\u5728\\u591A\\u7EBF\\u7A0B\\u4E2D\\u4F20\\u9012 context\\nvoid processOrder(const std::string& orderId, std::shared_ptr<opentelemetry::trace::Span> parentSpan) {\\n    auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n        ->GetTracer(\\\"my-service\\\");\\n    \\n    auto span = tracer->StartSpan(\\\"process_order\\\", {\\n        .parent = parentSpan->GetContext()\\n    });\\n    \\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    validateOrder(orderId);\\n    chargePayment(orderId);\\n    \\n    span->End();\\n}\\n\\n// \\u5728\\u65B0\\u7EBF\\u7A0B\\u4E2D\\u4F7F\\u7528\\nstd::thread t([parentSpan, orderId]() {\\n    processOrder(orderId, parentSpan);\\n});\\nt.join();\\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-cpp\"\n  }, \"// \\u2705 \\u6B63\\u786E\\uFF1A\\u8BB0\\u5F55\\u9519\\u8BEF\\u5E76\\u8BBE\\u7F6E\\u72B6\\u6001\\ntry {\\n    processOrder(orderId);\\n    span->SetStatus(opentelemetry::trace::StatusCode::kOk);\\n} catch (const std::exception& e) {\\n    span->RecordException(e);\\n    span->SetStatus(opentelemetry::trace::StatusCode::kError, e.what());\\n    throw;\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"3-资源管理raii\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#3-%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86raii\",\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\\uFF08RAII\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"// \\u2705 \\u6B63\\u786E\\uFF1A\\u4F7F\\u7528 RAII \\u786E\\u4FDD span \\u7ED3\\u675F\\nclass ScopedSpan {\\npublic:\\n    ScopedSpan(std::shared_ptr<opentelemetry::trace::Span> span) : span_(span) {}\\n    ~ScopedSpan() { if (span_) span_->End(); }\\n    \\n    std::shared_ptr<opentelemetry::trace::Span> get() { return span_; }\\n    \\nprivate:\\n    std::shared_ptr<opentelemetry::trace::Span> span_;\\n};\\n\\nvoid operation() {\\n    auto tracer = opentelemetry::trace::Provider::GetTracerProvider()\\n        ->GetTracer(\\\"my-service\\\");\\n    auto span = tracer->StartSpan(\\\"operation\\\");\\n    ScopedSpan scoped(span);\\n    \\n    // \\u4E1A\\u52A1\\u903B\\u8F91\\n    // span \\u4F1A\\u5728\\u4F5C\\u7528\\u57DF\\u7ED3\\u675F\\u65F6\\u81EA\\u52A8\\u7ED3\\u675F\\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 C++ \\u652F\\u6301\\u901A\\u8FC7\\u73AF\\u5883\\u53D8\\u91CF\\u914D\\u7F6E\\uFF1A\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u670D\\u52A1\\u4FE1\\u606F\\nexport OTEL_SERVICE_NAME=my-cpp-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:80\\nexport OTEL_EXPORTER_OTLP_PROTOCOL=http/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\": \"#%E7%BC%96%E8%AF%91%E9%80%89%E9%A1%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  }))), \"\\u7F16\\u8BD1\\u9009\\u9879\"), mdx(\"h4\", {\n    \"id\": \"cmake-编译选项\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#cmake-%E7%BC%96%E8%AF%91%E9%80%89%E9%A1%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  }))), \"CMake \\u7F16\\u8BD1\\u9009\\u9879\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cmake\"\n  }, \"# \\u542F\\u7528 OTLP Exporter\\nset(WITH_OTLP ON)\\n\\n# \\u542F\\u7528 gRPC\\uFF08\\u5982\\u679C\\u9700\\u8981\\uFF09\\nset(WITH_GRPC ON)\\n\\n# \\u542F\\u7528\\u538B\\u7F29\\nset(WITH_ZLIB ON)\\n\\n# \\u542F\\u7528 protobuf\\uFF08\\u6027\\u80FD\\u4F18\\u5316\\uFF09\\nset(WITH_PROTOBUF ON)\\n\")), mdx(\"h4\", {\n    \"id\": \"使用-vcpkg-特性\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8-vcpkg-%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  }))), \"\\u4F7F\\u7528 vcpkg \\u7279\\u6027\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u5B89\\u88C5\\u5E26\\u6240\\u6709\\u7279\\u6027\\u7684\\u5305\\n./vcpkg install opentelemetry-cpp[otlp,grpc,protobuf,zlib]\\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\\u94FE\\u63A5\\u5E93:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"ldd ./my-app | grep opentelemetry\\n# \\u6216 macOS\\notool -L ./my-app | grep opentelemetry\\n\")), mdx(\"ol\", {\n    \"start\": 3\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u542F\\u7528\\u8C03\\u8BD5\\u65E5\\u5FD7:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"export OTEL_LOG_LEVEL=debug\\n\")), mdx(\"ol\", {\n    \"start\": 4\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u68C0\\u67E5\\u7F51\\u7EDC\\u8FDE\\u63A5:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"curl -v http://uptrace-grpc.yodao.cn:80/v1/traces\\n\")), mdx(\"h4\", {\n    \"id\": \"2-编译错误\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#2-%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  }))), \"2. \\u7F16\\u8BD1\\u9519\\u8BEF\"), mdx(\"p\", null, \"\\u786E\\u4FDD\\u6B63\\u786E\\u94FE\\u63A5 OpenTelemetry \\u5E93:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cmake\"\n  }, \"target_link_libraries(my-app\\n    opentelemetry::trace\\n    opentelemetry::exporter_otlp_http\\n    opentelemetry::sdk::trace\\n    opentelemetry::sdk::resource\\n)\\n\")), mdx(\"p\", null, \"\\u5E38\\u89C1\\u7F16\\u8BD1\\u9519\\u8BEF\\uFF1A\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u627E\\u4E0D\\u5230\\u5934\\u6587\\u4EF6\"), \": \\u68C0\\u67E5 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"CMAKE_PREFIX_PATH\"), \" \\u6216 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"vcpkg\"), \" \\u8DEF\\u5F84\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u94FE\\u63A5\\u9519\\u8BEF\"), \": \\u786E\\u4FDD\\u6240\\u6709\\u4F9D\\u8D56\\u5E93\\u90FD\\u5DF2\\u5B89\\u88C5\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"C++ \\u6807\\u51C6\"), \": \\u786E\\u4FDD\\u4F7F\\u7528 C++14 \\u6216\\u66F4\\u9AD8\\u7248\\u672C\")), mdx(\"h4\", {\n    \"id\": \"3-多线程问题\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#3-%E5%A4%9A%E7%BA%BF%E7%A8%8B%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  }))), \"3. \\u591A\\u7EBF\\u7A0B\\u95EE\\u9898\"), mdx(\"p\", null, \"\\u786E\\u4FDD\\u5728\\u591A\\u7EBF\\u7A0B\\u73AF\\u5883\\u4E2D\\u6B63\\u786E\\u4F7F\\u7528 context:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"// \\u4F7F\\u7528\\u7EBF\\u7A0B\\u5C40\\u90E8\\u5B58\\u50A8\\u6216\\u4F20\\u9012 context\\nthread_local auto context = opentelemetry::context::RuntimeContext::GetCurrent();\\n\\n// \\u6216\\u4F7F\\u7528\\u4E92\\u65A5\\u9501\\u4FDD\\u62A4\\nstd::mutex context_mutex;\\nstd::lock_guard<std::mutex> lock(context_mutex);\\nauto context = opentelemetry::context::RuntimeContext::GetCurrent();\\n\")), mdx(\"h4\", {\n    \"id\": \"4-内存泄漏\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#4-%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"4. \\u5185\\u5B58\\u6CC4\\u6F0F\"), mdx(\"p\", null, \"\\u4F7F\\u7528 RAII \\u786E\\u4FDD\\u8D44\\u6E90\\u6B63\\u786E\\u91CA\\u653E:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-cpp\"\n  }, \"class ScopedSpan {\\npublic:\\n    ScopedSpan(std::shared_ptr<opentelemetry::trace::Span> span) \\n        : span_(span) {}\\n    ~ScopedSpan() { \\n        if (span_) span_->End(); \\n    }\\n    \\n    // \\u7981\\u7528\\u62F7\\u8D1D\\n    ScopedSpan(const ScopedSpan&) = delete;\\n    ScopedSpan& operator=(const ScopedSpan&) = delete;\\n    \\n    // \\u5141\\u8BB8\\u79FB\\u52A8\\n    ScopedSpan(ScopedSpan&&) = default;\\n    ScopedSpan& operator=(ScopedSpan&&) = default;\\n    \\nprivate:\\n    std::shared_ptr<opentelemetry::trace::Span> span_;\\n};\\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 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-cpp\"\n  }, \"#include <opentelemetry/exporters/ostream/span_exporter.h>\\n\\nauto exporter = std::unique_ptr<trace_sdk::SpanExporter>(\\n    new opentelemetry::exporter::trace::OStreamSpanExporter(std::cout)\\n);\\n\\nauto processor = std::unique_ptr<trace_sdk::SpanProcessor>(\\n    new trace_sdk::SimpleSpanProcessor(std::move(exporter))\\n);\\n\")), mdx(\"h4\", {\n    \"id\": \"使用-gdb-调试\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E4%BD%BF%E7%94%A8-gdb-%E8%B0%83%E8%AF%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  }))), \"\\u4F7F\\u7528 GDB \\u8C03\\u8BD5\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"gdb ./my-app\\n(gdb) break opentelemetry::trace::Span::End\\n(gdb) run\\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\"), \": BatchSpanProcessor \\u6BD4 SimpleSpanProcessor \\u6027\\u80FD\\u66F4\\u597D\"), 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  }, \"\\u4F7F\\u7528\\u5F02\\u6B65\\u5BFC\\u51FA\"), \": \\u907F\\u514D\\u963B\\u585E\\u4E3B\\u7EBF\\u7A0B\"), 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\\uFF08\\u5982 10%\\uFF09\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u542F\\u7528\\u538B\\u7F29\"), \": \\u5982\\u679C\\u7F51\\u7EDC\\u5E26\\u5BBD\\u6709\\u9650\\uFF0C\\u542F\\u7528 gzip \\u538B\\u7F29\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u4F7F\\u7528 protobuf\"), \": \\u5982\\u679C\\u53EF\\u7528\\uFF0C\\u4F7F\\u7528 protobuf \\u800C\\u4E0D\\u662F JSON\")), 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/cpp/\"\n  }, \"OpenTelemetry C++ Documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/open-telemetry/opentelemetry-cpp\"\n  }, \"OpenTelemetry C++ GitHub\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://opentelemetry.io/docs/specs/semconv/\"\n  }, \"C++ Semantic Conventions\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#c-语言-opentelemetry-接入指南","title":"C++ 语言 OpenTelemetry 接入指南","items":[{"url":"#目录","title":"目录"},{"url":"#概述","title":"概述","items":[{"url":"#c-语言特性","title":"C++ 语言特性"},{"url":"#版本要求","title":"版本要求"},{"url":"#支持的信号","title":"支持的信号"},{"url":"#适用场景","title":"适用场景"}]},{"url":"#快速开始","title":"快速开始","items":[{"url":"#1-安装依赖","title":"1. 安装依赖","items":[{"url":"#使用-vcpkg推荐","title":"使用 vcpkg（推荐）"},{"url":"#使用-conan","title":"使用 Conan"},{"url":"#从源码编译","title":"从源码编译"}]},{"url":"#2-基础初始化","title":"2. 基础初始化"},{"url":"#3-配置环境变量","title":"3. 配置环境变量"},{"url":"#4-编译和运行","title":"4. 编译和运行"}]},{"url":"#sdk-手动接入","title":"SDK 手动接入","items":[{"url":"#安装依赖","title":"安装依赖","items":[{"url":"#cmakeliststxt-配置","title":"CMakeLists.txt 配置"}]},{"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":"#框架集成示例","title":"框架集成示例","items":[{"url":"#grpc-服务集成","title":"gRPC 服务集成"},{"url":"#http-服务集成使用-crow","title":"HTTP 服务集成（使用 Crow）"}]},{"url":"#数据库集成","title":"数据库集成","items":[{"url":"#mysql-客户端集成","title":"MySQL 客户端集成"},{"url":"#postgresql-客户端集成","title":"PostgreSQL 客户端集成"},{"url":"#http-客户端集成","title":"HTTP 客户端集成","items":[{"url":"#libcurl-集成","title":"libcurl 集成"}]},{"url":"#消息队列集成","title":"消息队列集成","items":[{"url":"#rabbitmq-集成","title":"RabbitMQ 集成"}]}]},{"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-资源管理raii","title":"3. 资源管理（RAII）"},{"url":"#环境变量配置","title":"环境变量配置"},{"url":"#编译选项","title":"编译选项","items":[{"url":"#cmake-编译选项","title":"CMake 编译选项"},{"url":"#使用-vcpkg-特性","title":"使用 vcpkg 特性"}]}]},{"url":"#故障排查","title":"故障排查","items":[{"url":"#常见问题","title":"常见问题","items":[{"url":"#1-数据未发送到后端","title":"1. 数据未发送到后端"},{"url":"#2-编译错误","title":"2. 编译错误"},{"url":"#3-多线程问题","title":"3. 多线程问题"},{"url":"#4-内存泄漏","title":"4. 内存泄漏"}]},{"url":"#调试技巧","title":"调试技巧","items":[{"url":"#启用详细日志","title":"启用详细日志"},{"url":"#使用-console-exporter","title":"使用 Console Exporter"},{"url":"#使用-gdb-调试","title":"使用 GDB 调试"}]},{"url":"#性能优化建议","title":"性能优化建议"}]},{"url":"#下一步","title":"下一步"},{"url":"#参考资源","title":"参考资源"}]}]}}},"pageContext":{"id":"56e94bd2-74b1-5e4e-b499-646b7e816357"}},
    "staticQueryHashes": ["1122327541","1339625561","148928582","2007862104","2140385554","3442269102","4275725850"]}