{
    "componentChunkName": "component---node-modules-shenhh-smooth-doc-src-templates-doc-js",
    "path": "/docs/languages/python/",
    "result": {"data":{"mdx":{"fields":{"pageType":"doc","title":"Python 语言接入指南","editLink":"https://gitlab.corp.youdao.com/DevOPS/apm/docs/edit/master/pages/docs/languages/python.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\": \"Python 语言接入指南\",\n  \"section\": \"语言接入指南\",\n  \"slug\": \"/docs/languages/python/\",\n  \"order\": 3\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\": \"python-语言-opentelemetry-接入指南\"\n  }, mdx(\"a\", {\n    parentName: \"h1\",\n    \"href\": \"#python-%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  }))), \"Python \\u8BED\\u8A00 OpenTelemetry \\u63A5\\u5165\\u6307\\u5357\"), mdx(\"p\", null, \"\\u672C\\u6587\\u6863\\u63D0\\u4F9B Python \\u5E94\\u7528\\u63A5\\u5165 OpenTelemetry \\u7684\\u5B8C\\u6574\\u6307\\u5357\\uFF0C\\u5305\\u62EC\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\\u548C SDK \\u624B\\u52A8\\u63A5\\u5165\\u4E24\\u79CD\\u65B9\\u5F0F\\u3002\"), mdx(\"h2\", {\n    \"id\": \"目录\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E7%9B%AE%E5%BD%95\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u76EE\\u5F55\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E6%A6%82%E8%BF%B0\"\n  }, \"\\u6982\\u8FF0\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E9%9B%B6%E4%BB%A3%E7%A0%81%E6%8E%A5%E5%85%A5%E6%8E%A8%E8%8D%90\"\n  }, \"\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\\uFF08\\u63A8\\u8350\\uFF09\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#sdk-%E6%89%8B%E5%8A%A8%E6%8E%A5%E5%85%A5\"\n  }, \"SDK \\u624B\\u52A8\\u63A5\\u5165\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E6%A1%86%E6%9E%B6%E9%9B%86%E6%88%90%E7%A4%BA%E4%BE%8B\"\n  }, \"\\u6846\\u67B6\\u96C6\\u6210\\u793A\\u4F8B\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E9%AB%98%E7%BA%A7%E9%85%8D%E7%BD%AE\"\n  }, \"\\u9AD8\\u7EA7\\u914D\\u7F6E\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5\"\n  }, \"\\u6700\\u4F73\\u5B9E\\u8DF5\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"#%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5\"\n  }, \"\\u6545\\u969C\\u6392\\u67E5\"))), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"概述\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E6%A6%82%E8%BF%B0\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6982\\u8FF0\"), mdx(\"h3\", {\n    \"id\": \"python-语言特性\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#python-%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  }))), \"Python \\u8BED\\u8A00\\u7279\\u6027\"), mdx(\"p\", null, \"Python \\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  }, \"\\u6210\\u719F\\u7A33\\u5B9A\"), \": API \\u548C SDK \\u5DF2\\u8FBE\\u5230 1.0 \\u7A33\\u5B9A\\u7248\\u672C\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u4E30\\u5BCC\\u7684\\u81EA\\u52A8\\u57CB\\u70B9\"), \": \\u652F\\u6301 40+ \\u4E3B\\u6D41\\u6846\\u67B6\\u548C\\u5E93\\u7684\\u81EA\\u52A8\\u57CB\\u70B9\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u7B80\\u5355\\u6613\\u7528\"), \": \\u901A\\u8FC7 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"opentelemetry-instrument\"), \" \\u547D\\u4EE4\\u5B9E\\u73B0\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u7075\\u6D3B\\u914D\\u7F6E\"), \": \\u652F\\u6301\\u73AF\\u5883\\u53D8\\u91CF\\u548C\\u4EE3\\u7801\\u914D\\u7F6E\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u5F02\\u6B65\\u652F\\u6301\"), \": \\u5B8C\\u6574\\u652F\\u6301 asyncio \\u548C\\u5F02\\u6B65\\u6846\\u67B6\")), 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  }, \"Python \\u7248\\u672C\"), \": 3.7+ (\\u63A8\\u8350 3.10+)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"OpenTelemetry Python\"), \": v1.20.0+\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"\\u652F\\u6301\\u67B6\\u6784\"), \": x86_64, arm64, aarch64\")), mdx(\"h3\", {\n    \"id\": \"支持的信号\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%94%AF%E6%8C%81%E7%9A%84%E4%BF%A1%E5%8F%B7\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u652F\\u6301\\u7684\\u4FE1\\u53F7\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u2705 \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Traces\"), \": \\u5B8C\\u5168\\u652F\\u6301\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u2705 \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Metrics\"), \": \\u5B8C\\u5168\\u652F\\u6301\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u2705 \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Logs\"), \": \\u5B8C\\u5168\\u652F\\u6301\\uFF08Python 3.11+\\uFF09\")), mdx(\"h3\", {\n    \"id\": \"适用场景\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E9%80%82%E7%94%A8%E5%9C%BA%E6%99%AF\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u9002\\u7528\\u573A\\u666F\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Web \\u670D\\u52A1\\uFF08Flask\\u3001Django\\u3001FastAPI\\uFF09\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u5FAE\\u670D\\u52A1\\u67B6\\u6784\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u6570\\u636E\\u5E93\\u5E94\\u7528\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u6D88\\u606F\\u961F\\u5217\\u5E94\\u7528\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u6279\\u5904\\u7406\\u4F5C\\u4E1A\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u5F02\\u6B65\\u5E94\\u7528\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"零代码接入推荐\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E9%9B%B6%E4%BB%A3%E7%A0%81%E6%8E%A5%E5%85%A5%E6%8E%A8%E8%8D%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\\uFF08\\u63A8\\u8350\\uFF09\"), mdx(\"p\", null, \"\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\\u662F Python OpenTelemetry \\u6700\\u5F3A\\u5927\\u7684\\u7279\\u6027\\uFF0C\\u901A\\u8FC7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"opentelemetry-instrument\"), \" \\u547D\\u4EE4\\u5373\\u53EF\\u5B9E\\u73B0\\u81EA\\u52A8\\u57CB\\u70B9\\uFF0C\\u65E0\\u9700\\u4FEE\\u6539\\u4EFB\\u4F55\\u6E90\\u4EE3\\u7801\\u3002\"), mdx(\"h3\", {\n    \"id\": \"快速开始5-分钟\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B5-%E5%88%86%E9%92%9F\",\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\\uFF085 \\u5206\\u949F\\uFF09\"), mdx(\"h4\", {\n    \"id\": \"1-安装-opentelemetry\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#1-%E5%AE%89%E8%A3%85-opentelemetry\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"1. \\u5B89\\u88C5 OpenTelemetry\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u5B89\\u88C5\\u6838\\u5FC3\\u5305\\npip install opentelemetry-distro opentelemetry-exporter-otlp\\n\\n# \\u81EA\\u52A8\\u5B89\\u88C5\\u6240\\u6709\\u57CB\\u70B9\\u5E93\\nopentelemetry-bootstrap -a install\\n\")), mdx(\"h4\", {\n    \"id\": \"2-配置环境变量\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#2-%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  }))), \"2. \\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-python-service\\nexport OTEL_RESOURCE_ATTRIBUTES=service.version=1.0.0,deployment.environment=production\\n\\n# OTLP Exporter\\nexport OTEL_EXPORTER_OTLP_ENDPOINT=uptrace-grpc.yodao.cn:4317\\nexport OTEL_EXPORTER_OTLP_PROTOCOL=grpc\\nexport OTEL_EXPORTER_OTLP_INSECURE=true # \\u8FD9\\u4E2A\\u9700\\u8981\\u8BBE\\u7F6E\\uFF01\\uFF01\\uFF01\\nexport OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project\\n\\n# Traces \\u914D\\u7F6E\\nexport OTEL_TRACES_EXPORTER=otlp\\nexport OTEL_TRACES_SAMPLER=parentbased_traceidratio\\nexport OTEL_TRACES_SAMPLER_ARG=0.1\\n\\n# Metrics \\u914D\\u7F6E\\nexport OTEL_METRICS_EXPORTER=otlp\\nexport OTEL_METRIC_EXPORT_INTERVAL=60000\\n\\n# Logs \\u914D\\u7F6E\\nexport OTEL_LOGS_EXPORTER=otlp\\n\")), mdx(\"h4\", {\n    \"id\": \"3-启动应用\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#3-%E5%90%AF%E5%8A%A8%E5%BA%94%E7%94%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"3. \\u542F\\u52A8\\u5E94\\u7528\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u4F7F\\u7528 opentelemetry-instrument \\u542F\\u52A8\\nopentelemetry-instrument python app.py\\n\\n# \\u6216\\u4F7F\\u7528\\u6A21\\u5757\\u65B9\\u5F0F\\nopentelemetry-instrument python -m myapp\\n\\n# \\u6216\\u4F7F\\u7528 gunicorn/uwsgi\\nopentelemetry-instrument gunicorn app:app\\nopentelemetry-instrument uwsgi --module app:app\\n\")), mdx(\"p\", null, \"\\u5C31\\u8FD9\\u4E48\\u7B80\\u5355\\uFF01\\u60A8\\u7684\\u5E94\\u7528\\u73B0\\u5728\\u5DF2\\u7ECF\\u81EA\\u52A8\\u57CB\\u70B9\\u5E76\\u5F00\\u59CB\\u53D1\\u9001\\u9065\\u6D4B\\u6570\\u636E\\u4E86\\u3002\"), mdx(\"h3\", {\n    \"id\": \"详细步骤\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E8%AF%A6%E7%BB%86%E6%AD%A5%E9%AA%A4\",\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  }))), \"\\u8BE6\\u7EC6\\u6B65\\u9AA4\"), mdx(\"h4\", {\n    \"id\": \"步骤-1-安装依赖\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E6%AD%A5%E9%AA%A4-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  }))), \"\\u6B65\\u9AA4 1: \\u5B89\\u88C5\\u4F9D\\u8D56\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u6700\\u5C0F\\u5B89\\u88C5\"), \"\\uFF08\\u4EC5\\u6838\\u5FC3\\u529F\\u80FD\\uFF09:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"pip install opentelemetry-distro opentelemetry-exporter-otlp\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u5B8C\\u6574\\u5B89\\u88C5\"), \"\\uFF08\\u63A8\\u8350\\uFF0C\\u5305\\u542B\\u6240\\u6709\\u81EA\\u52A8\\u57CB\\u70B9\\u5E93\\uFF09:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"pip install opentelemetry-distro opentelemetry-exporter-otlp\\n\\n# \\u81EA\\u52A8\\u5B89\\u88C5\\u6240\\u6709\\u652F\\u6301\\u7684\\u57CB\\u70B9\\u5E93\\nopentelemetry-bootstrap -a install\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u624B\\u52A8\\u5B89\\u88C5\\u7279\\u5B9A\\u57CB\\u70B9\\u5E93\"), \":\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# Web \\u6846\\u67B6\\npip install opentelemetry-instrumentation-flask\\npip install opentelemetry-instrumentation-django\\npip install opentelemetry-instrumentation-fastapi\\n\\n# \\u6570\\u636E\\u5E93\\npip install opentelemetry-instrumentation-sqlalchemy\\npip install opentelemetry-instrumentation-psycopg2\\npip install opentelemetry-instrumentation-mysql\\n\\n# HTTP \\u5BA2\\u6237\\u7AEF\\npip install opentelemetry-instrumentation-requests\\npip install opentelemetry-instrumentation-httpx\\npip install opentelemetry-instrumentation-aiohttp-client\\n\\n# \\u6D88\\u606F\\u961F\\u5217\\npip install opentelemetry-instrumentation-kafka-python\\npip install opentelemetry-instrumentation-celery\\npip install opentelemetry-instrumentation-pika\\n\\n# RPC\\npip install opentelemetry-instrumentation-grpc\\n\\n# \\u65E5\\u5FD7\\npip install opentelemetry-instrumentation-logging\\n\")), mdx(\"h4\", {\n    \"id\": \"步骤-2-配置环境变量\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E6%AD%A5%E9%AA%A4-2-%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  }))), \"\\u6B65\\u9AA4 2: \\u914D\\u7F6E\\u73AF\\u5883\\u53D8\\u91CF\"), mdx(\"p\", null, \"\\u521B\\u5EFA \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".env\"), \" \\u6587\\u4EF6\\uFF08\\u63A8\\u8350\\uFF09:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# .env\\nOTEL_SERVICE_NAME=my-python-service\\nOTEL_RESOURCE_ATTRIBUTES=service.version=1.0.0,deployment.environment=production\\n\\nOTEL_EXPORTER_OTLP_ENDPOINT=uptrace-grpc.yodao.cn:4317\\nOTEL_EXPORTER_OTLP_PROTOCOL=grpc\\nOTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project\\n\\nOTEL_TRACES_EXPORTER=otlp\\nOTEL_TRACES_SAMPLER=parentbased_traceidratio\\nOTEL_TRACES_SAMPLER_ARG=0.1\\n\\nOTEL_METRICS_EXPORTER=otlp\\nOTEL_METRIC_EXPORT_INTERVAL=60000\\n\\nOTEL_LOGS_EXPORTER=otlp\\nOTEL_LOG_LEVEL=info\\n\")), mdx(\"p\", null, \"\\u52A0\\u8F7D\\u73AF\\u5883\\u53D8\\u91CF:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u4F7F\\u7528 python-dotenv\\npip install python-dotenv\\n\\n# \\u5728\\u4EE3\\u7801\\u4E2D\\u52A0\\u8F7D\\nfrom dotenv import load_dotenv\\nload_dotenv()\\n\\n# \\u6216\\u4F7F\\u7528 export\\nexport $(cat .env | xargs)\\n\")), mdx(\"h4\", {\n    \"id\": \"步骤-3-启动应用\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E6%AD%A5%E9%AA%A4-3-%E5%90%AF%E5%8A%A8%E5%BA%94%E7%94%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6B65\\u9AA4 3: \\u542F\\u52A8\\u5E94\\u7528\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u65B9\\u5F0F 1: \\u76F4\\u63A5\\u542F\\u52A8\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"opentelemetry-instrument python app.py\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u65B9\\u5F0F 2: \\u6A21\\u5757\\u65B9\\u5F0F\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"opentelemetry-instrument python -m myapp\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u65B9\\u5F0F 3: WSGI \\u670D\\u52A1\\u5668\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# Gunicorn\\nopentelemetry-instrument gunicorn -w 4 -b 0.0.0.0:8000 app:app\\n\\n# uWSGI\\nopentelemetry-instrument uwsgi --http :8000 --module app:app\\n\\n# Waitress\\nopentelemetry-instrument waitress-serve --listen=0.0.0.0:8000 app:app\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u65B9\\u5F0F 4: ASGI \\u670D\\u52A1\\u5668\\uFF08FastAPI\\u3001Starlette\\uFF09\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# Uvicorn\\nopentelemetry-instrument uvicorn app:app --host 0.0.0.0 --port 8000\\n\\n# Hypercorn\\nopentelemetry-instrument hypercorn app:app --bind 0.0.0.0:8000\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u65B9\\u5F0F 5: Django\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u5F00\\u53D1\\u670D\\u52A1\\u5668\\nopentelemetry-instrument python manage.py runserver\\n\\n# \\u751F\\u4EA7\\u73AF\\u5883\\uFF08Gunicorn\\uFF09\\nopentelemetry-instrument gunicorn myproject.wsgi:application\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u65B9\\u5F0F 6: Celery Worker\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"opentelemetry-instrument celery -A myapp worker --loglevel=info\\n\")), mdx(\"h3\", {\n    \"id\": \"支持的框架和库\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E6%94%AF%E6%8C%81%E7%9A%84%E6%A1%86%E6%9E%B6%E5%92%8C%E5%BA%93\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u652F\\u6301\\u7684\\u6846\\u67B6\\u548C\\u5E93\"), mdx(\"h4\", {\n    \"id\": \"web-框架\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#web-%E6%A1%86%E6%9E%B6\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Web \\u6846\\u67B6\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u6846\\u67B6\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u5305\\u540D\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u7248\\u672C\\u8981\\u6C42\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Flask\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-flask\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1.0+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Django\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-django\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2.0+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"FastAPI\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-fastapi\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"0.1+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Starlette\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-starlette\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"0.1+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Tornado\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-tornado\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5.0+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Bottle\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-bottle\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"0.12+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Pyramid\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-pyramid\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1.7+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"aiohttp\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-aiohttp-server\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3.0+\")))), mdx(\"h4\", {\n    \"id\": \"数据库\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E6%95%B0%E6%8D%AE%E5%BA%93\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u6570\\u636E\\u5E93\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u6570\\u636E\\u5E93\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u5305\\u540D\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u7248\\u672C\\u8981\\u6C42\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"SQLAlchemy\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-sqlalchemy\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1.3+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"psycopg2\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-psycopg2\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2.7+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"MySQL\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-mysql\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"8.0+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"pymongo\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-pymongo\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3.1+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"redis\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-redis\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3.0+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"SQLite\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-sqlite3\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u6240\\u6709\\u7248\\u672C\")))), mdx(\"h4\", {\n    \"id\": \"http-客户端\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#http-%E5%AE%A2%E6%88%B7%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  }))), \"HTTP \\u5BA2\\u6237\\u7AEF\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u5BA2\\u6237\\u7AEF\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u5305\\u540D\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u7248\\u672C\\u8981\\u6C42\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"requests\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-requests\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2.0+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"urllib3\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-urllib3\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1.0+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"httpx\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-httpx\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"0.20+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"aiohttp-client\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-aiohttp-client\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3.0+\")))), mdx(\"h4\", {\n    \"id\": \"消息队列\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%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  }))), \"\\u6D88\\u606F\\u961F\\u5217\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u961F\\u5217\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u5305\\u540D\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u7248\\u672C\\u8981\\u6C42\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Kafka\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-kafka-python\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2.0+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Celery\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-celery\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"4.0+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Pika (RabbitMQ)\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-pika\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1.0+\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Redis Pub/Sub\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-redis\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3.0+\")))), mdx(\"h4\", {\n    \"id\": \"rpc-框架\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#rpc-%E6%A1%86%E6%9E%B6\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"RPC \\u6846\\u67B6\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u6846\\u67B6\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u5305\\u540D\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u7248\\u672C\\u8981\\u6C42\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"gRPC\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-grpc\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1.0+\")))), mdx(\"h4\", {\n    \"id\": \"日志库\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E6%97%A5%E5%BF%97%E5%BA%93\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u65E5\\u5FD7\\u5E93\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u5E93\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u5305\\u540D\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u7248\\u672C\\u8981\\u6C42\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"logging\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"opentelemetry-instrumentation-logging\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u6240\\u6709\\u7248\\u672C\")))), mdx(\"h3\", {\n    \"id\": \"启用禁用特定埋点库\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%90%AF%E7%94%A8%E7%A6%81%E7%94%A8%E7%89%B9%E5%AE%9A%E5%9F%8B%E7%82%B9%E5%BA%93\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u542F\\u7528/\\u7981\\u7528\\u7279\\u5B9A\\u57CB\\u70B9\\u5E93\"), mdx(\"h4\", {\n    \"id\": \"通过环境变量\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E9%80%9A%E8%BF%87%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  }))), \"\\u901A\\u8FC7\\u73AF\\u5883\\u53D8\\u91CF\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u542F\\u7528\\u7279\\u5B9A\\u57CB\\u70B9\\u5E93\\nexport OTEL_PYTHON_INSTRUMENTATION_ENABLED=true\\nexport OTEL_PYTHON_INSTRUMENTATION_FLASK_ENABLED=true\\nexport OTEL_PYTHON_INSTRUMENTATION_REQUESTS_ENABLED=true\\n\\n# \\u7981\\u7528\\u7279\\u5B9A\\u57CB\\u70B9\\u5E93\\nexport OTEL_PYTHON_INSTRUMENTATION_SQLALCHEMY_ENABLED=false\\nexport OTEL_PYTHON_INSTRUMENTATION_REDIS_ENABLED=false\\n\")), mdx(\"h4\", {\n    \"id\": \"通过配置文件\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E9%80%9A%E8%BF%87%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u901A\\u8FC7\\u914D\\u7F6E\\u6587\\u4EF6\"), mdx(\"p\", null, \"\\u521B\\u5EFA \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"instrumentation.yaml\"), \":\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"instrumentation:\\n  flask:\\n    enabled: true\\n  django:\\n    enabled: true\\n  requests:\\n    enabled: true\\n  sqlalchemy:\\n    enabled: false\\n\")), mdx(\"h3\", {\n    \"id\": \"验证零代码接入\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E9%AA%8C%E8%AF%81%E9%9B%B6%E4%BB%A3%E7%A0%81%E6%8E%A5%E5%85%A5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u9A8C\\u8BC1\\u96F6\\u4EE3\\u7801\\u63A5\\u5165\"), mdx(\"p\", null, \"\\u542F\\u52A8\\u5E94\\u7528\\u540E\\uFF0C\\u8BBF\\u95EE\\u60A8\\u7684\\u670D\\u52A1\\u7AEF\\u70B9\\uFF0C\\u7136\\u540E\\u5728 APM \\u5E73\\u53F0\\u67E5\\u770B\\u6570\\u636E\\uFF1A\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Traces\"), \": \\u67E5\\u770B\\u8C03\\u7528\\u94FE\\u8DEF\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Metrics\"), \": \\u67E5\\u770B\\u8BF7\\u6C42\\u91CF\\u3001\\u5EF6\\u8FDF\\u7B49\\u6307\\u6807\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Service Map\"), \": \\u67E5\\u770B\\u670D\\u52A1\\u62D3\\u6251\\u56FE\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u5FEB\\u901F\\u9A8C\\u8BC1\\u811A\\u672C\"), \":\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"# verify.py\\nimport requests\\nimport time\\n\\nprint(\\\"Sending test request...\\\")\\nresponse = requests.get(\\\"http://localhost:8000/health\\\")\\nprint(f\\\"Status: {response.status_code}\\\")\\n\\nprint(\\\"Waiting for traces to be exported...\\\")\\ntime.sleep(5)\\n\\nprint(\\\"Check your APM platform for service:\\\", os.getenv(\\\"OTEL_SERVICE_NAME\\\"))\\n\")), mdx(\"p\", null, \"\\u8FD0\\u884C:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"opentelemetry-instrument python verify.py\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"sdk-手动接入\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#sdk-%E6%89%8B%E5%8A%A8%E6%8E%A5%E5%85%A5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"SDK \\u624B\\u52A8\\u63A5\\u5165\"), mdx(\"p\", null, \"SDK \\u624B\\u52A8\\u63A5\\u5165\\u63D0\\u4F9B\\u66F4\\u7CBE\\u7EC6\\u7684\\u63A7\\u5236\\u548C\\u81EA\\u5B9A\\u4E49\\u80FD\\u529B\\u3002\"), mdx(\"h3\", {\n    \"id\": \"安装依赖\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u5B89\\u88C5\\u4F9D\\u8D56\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# \\u6838\\u5FC3 SDK\\npip install opentelemetry-api opentelemetry-sdk\\n\\n# OTLP Exporter\\npip install opentelemetry-exporter-otlp-proto-grpc\\n\\n# \\u57CB\\u70B9\\u5E93\\uFF08\\u53EF\\u9009\\uFF09\\npip install opentelemetry-instrumentation-flask\\npip install opentelemetry-instrumentation-requests\\npip install opentelemetry-instrumentation-sqlalchemy\\n\")), mdx(\"h3\", {\n    \"id\": \"基础初始化\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E5%9F%BA%E7%A1%80%E5%88%9D%E5%A7%8B%E5%8C%96\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u57FA\\u7840\\u521D\\u59CB\\u5316\"), mdx(\"h4\", {\n    \"id\": \"1-创建-opentelemetry-初始化函数\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#1-%E5%88%9B%E5%BB%BA-opentelemetry-%E5%88%9D%E5%A7%8B%E5%8C%96%E5%87%BD%E6%95%B0\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"1. \\u521B\\u5EFA OpenTelemetry \\u521D\\u59CB\\u5316\\u51FD\\u6570\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"# otel.py\\nimport os\\nfrom opentelemetry import trace, metrics\\nfrom opentelemetry.sdk.trace import TracerProvider\\nfrom opentelemetry.sdk.trace.export import BatchSpanProcessor\\nfrom opentelemetry.sdk.metrics import MeterProvider\\nfrom opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader\\nfrom opentelemetry.sdk.resources import Resource\\nfrom opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter\\nfrom opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter\\nfrom opentelemetry.sdk.resources import Resource\\nimport opentelemetry.semconv.resource as semconv_resource\\n\\ndef init_opentelemetry():\\n    \\\"\\\"\\\"\\u521D\\u59CB\\u5316 OpenTelemetry\\\"\\\"\\\"\\n    \\n    # 1. \\u521B\\u5EFA Resource\\n    resource = Resource.create({\\n        semconv_resource.SERVICE_NAME: os.getenv(\\\"OTEL_SERVICE_NAME\\\", \\\"my-service\\\"),\\n        semconv_resource.SERVICE_VERSION: os.getenv(\\\"SERVICE_VERSION\\\", \\\"1.0.0\\\"),\\n        \\\"deployment.environment\\\": os.getenv(\\\"DEPLOYMENT_ENVIRONMENT\\\", \\\"production\\\"),\\n    })\\n    \\n    # 2. \\u521B\\u5EFA Trace Exporter\\n    trace_exporter = OTLPSpanExporter(\\n        endpoint=os.getenv(\\\"OTEL_EXPORTER_OTLP_ENDPOINT\\\", \\\"http://localhost:4317\\\"),\\n        headers={\\n            \\\"uptrace-dsn\\\": os.getenv(\\\"OTEL_EXPORTER_OTLP_HEADERS\\\", \\\"\\\"),\\n        },\\n    )\\n    \\n    # 3. \\u521B\\u5EFA Trace Provider\\n    tracer_provider = TracerProvider(resource=resource)\\n    tracer_provider.add_span_processor(BatchSpanProcessor(trace_exporter))\\n    trace.set_tracer_provider(tracer_provider)\\n    \\n    # 4. \\u521B\\u5EFA Metric Exporter\\n    metric_exporter = OTLPMetricExporter(\\n        endpoint=os.getenv(\\\"OTEL_EXPORTER_OTLP_ENDPOINT\\\", \\\"http://localhost:4317\\\"),\\n        headers={\\n            \\\"uptrace-dsn\\\": os.getenv(\\\"OTEL_EXPORTER_OTLP_HEADERS\\\", \\\"\\\"),\\n        },\\n    )\\n    \\n    # 5. \\u521B\\u5EFA Metric Provider\\n    metric_reader = PeriodicExportingMetricReader(\\n        metric_exporter,\\n        export_interval_millis=60000,  # 60 \\u79D2\\n    )\\n    meter_provider = MeterProvider(\\n        resource=resource,\\n        metric_readers=[metric_reader],\\n    )\\n    metrics.set_meter_provider(meter_provider)\\n    \\n    return tracer_provider, meter_provider\\n\\ndef shutdown_opentelemetry(tracer_provider, meter_provider):\\n    \\\"\\\"\\\"\\u5173\\u95ED OpenTelemetry\\\"\\\"\\\"\\n    tracer_provider.shutdown()\\n    meter_provider.shutdown()\\n\")), mdx(\"h4\", {\n    \"id\": \"2-在应用中使用\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#2-%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  }))), \"2. \\u5728\\u5E94\\u7528\\u4E2D\\u4F7F\\u7528\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"# app.py\\nimport atexit\\nfrom otel import init_opentelemetry, shutdown_opentelemetry\\n\\n# \\u521D\\u59CB\\u5316\\ntracer_provider, meter_provider = init_opentelemetry()\\n\\n# \\u6CE8\\u518C\\u9000\\u51FA\\u5904\\u7406\\natexit.register(shutdown_opentelemetry, tracer_provider, meter_provider)\\n\\n# \\u5E94\\u7528\\u903B\\u8F91\\nfrom opentelemetry import trace\\n\\ntracer = trace.get_tracer(__name__)\\n\\ndef main():\\n    with tracer.start_as_current_span(\\\"main_operation\\\") as span:\\n        span.set_attribute(\\\"operation.type\\\", \\\"main\\\")\\n        # \\u4E1A\\u52A1\\u903B\\u8F91\\n        pass\\n\\nif __name__ == \\\"__main__\\\":\\n    main()\\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-python\"\n  }, \"from opentelemetry import trace\\nfrom opentelemetry.trace import Status, StatusCode\\n\\ntracer = trace.get_tracer(__name__)\\n\\ndef process_order(order_id: str):\\n    \\\"\\\"\\\"\\u5904\\u7406\\u8BA2\\u5355\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"process_order\\\") as span:\\n        # \\u8BBE\\u7F6E\\u5C5E\\u6027\\n        span.set_attribute(\\\"order.id\\\", order_id)\\n        span.set_attribute(\\\"operation\\\", \\\"process\\\")\\n        \\n        # \\u6DFB\\u52A0\\u4E8B\\u4EF6\\n        span.add_event(\\\"order_validation_started\\\")\\n        \\n        # \\u9A8C\\u8BC1\\u8BA2\\u5355\\n        try:\\n            validate_order(order_id)\\n            span.add_event(\\\"order_validated\\\")\\n            \\n            # \\u5904\\u7406\\u652F\\u4ED8\\n            process_payment(order_id)\\n            span.add_event(\\\"payment_processed\\\")\\n            \\n            # \\u8BBE\\u7F6E\\u6210\\u529F\\u72B6\\u6001\\n            span.set_status(Status(StatusCode.OK))\\n            span.set_attribute(\\\"order.success\\\", True)\\n            \\n        except Exception as e:\\n            # \\u8BB0\\u5F55\\u9519\\u8BEF\\n            span.record_exception(e)\\n            span.set_status(Status(StatusCode.ERROR, str(e)))\\n            raise\\n\\ndef validate_order(order_id: str):\\n    \\\"\\\"\\\"\\u9A8C\\u8BC1\\u8BA2\\u5355\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"validate_order\\\") as span:\\n        span.set_attribute(\\\"order.id\\\", order_id)\\n        # \\u9A8C\\u8BC1\\u903B\\u8F91\\n        pass\\n\\ndef process_payment(order_id: str):\\n    \\\"\\\"\\\"\\u5904\\u7406\\u652F\\u4ED8\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"process_payment\\\") as span:\\n        span.set_attribute(\\\"order.id\\\", order_id)\\n        span.set_attribute(\\\"payment.method\\\", \\\"credit_card\\\")\\n        # \\u652F\\u4ED8\\u903B\\u8F91\\n        pass\\n\")), mdx(\"h4\", {\n    \"id\": \"span-属性和事件\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#span-%E5%B1%9E%E6%80%A7%E5%92%8C%E4%BA%8B%E4%BB%B6\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Span \\u5C5E\\u6027\\u548C\\u4E8B\\u4EF6\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from opentelemetry import trace\\nfrom opentelemetry.trace import SpanKind\\n\\ntracer = trace.get_tracer(__name__)\\n\\ndef example_span_attributes():\\n    \\\"\\\"\\\"Span \\u5C5E\\u6027\\u548C\\u4E8B\\u4EF6\\u793A\\u4F8B\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\n        \\\"example_operation\\\",\\n        kind=SpanKind.INTERNAL,\\n    ) as span:\\n        # \\u8BBE\\u7F6E\\u5C5E\\u6027\\n        span.set_attribute(\\\"user.id\\\", \\\"12345\\\")\\n        span.set_attribute(\\\"user.email\\\", \\\"user@example.com\\\")\\n        span.set_attribute(\\\"user.age\\\", 30)\\n        span.set_attribute(\\\"user.premium\\\", True)\\n        span.set_attribute(\\\"user.roles\\\", [\\\"admin\\\", \\\"user\\\"])\\n        \\n        # \\u6DFB\\u52A0\\u4E8B\\u4EF6\\n        span.add_event(\\n            \\\"cache_miss\\\",\\n            attributes={\\n                \\\"cache.key\\\": \\\"user:12345\\\",\\n                \\\"cache.type\\\": \\\"redis\\\",\\n            },\\n        )\\n        \\n        # \\u6DFB\\u52A0\\u5E26\\u65F6\\u95F4\\u6233\\u7684\\u4E8B\\u4EF6\\n        from datetime import datetime\\n        span.add_event(\\n            \\\"retry_attempt\\\",\\n            timestamp=datetime.now().timestamp() * 1e9,  # \\u7EB3\\u79D2\\n            attributes={\\n                \\\"retry.count\\\": 2,\\n                \\\"retry.reason\\\": \\\"timeout\\\",\\n            },\\n        )\\n\")), mdx(\"h4\", {\n    \"id\": \"context-传播\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#context-%E4%BC%A0%E6%92%AD\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Context \\u4F20\\u64AD\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from opentelemetry import trace, propagate\\nfrom opentelemetry.propagate import inject, extract\\nimport requests\\n\\n# HTTP \\u5BA2\\u6237\\u7AEF\\u4F20\\u64AD\\ndef make_http_request(url: str):\\n    \\\"\\\"\\\"\\u53D1\\u9001 HTTP \\u8BF7\\u6C42\\u5E76\\u4F20\\u64AD context\\\"\\\"\\\"\\n    tracer = trace.get_tracer(__name__)\\n    \\n    with tracer.start_as_current_span(\\\"http_request\\\") as span:\\n        span.set_attribute(\\\"http.url\\\", url)\\n        span.set_attribute(\\\"http.method\\\", \\\"GET\\\")\\n        \\n        # \\u6CE8\\u5165 trace context \\u5230 HTTP headers\\n        headers = {}\\n        inject(headers)\\n        \\n        response = requests.get(url, headers=headers)\\n        \\n        span.set_attribute(\\\"http.status_code\\\", response.status_code)\\n        return response\\n\\n# HTTP \\u670D\\u52A1\\u7AEF\\u63D0\\u53D6\\nfrom flask import Flask, request\\n\\napp = Flask(__name__)\\n\\n@app.route(\\\"/api/users/<user_id>\\\")\\ndef get_user(user_id: str):\\n    \\\"\\\"\\\"\\u83B7\\u53D6\\u7528\\u6237\\u4FE1\\u606F\\\"\\\"\\\"\\n    tracer = trace.get_tracer(__name__)\\n    \\n    # \\u4ECE HTTP headers \\u63D0\\u53D6 trace context\\n    context = extract(request.headers)\\n    \\n    with tracer.start_as_current_span(\\\"get_user\\\", context=context) as span:\\n        span.set_attribute(\\\"user.id\\\", user_id)\\n        # \\u4E1A\\u52A1\\u903B\\u8F91\\n        return {\\\"id\\\": user_id, \\\"name\\\": \\\"John Doe\\\"}\\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-python\"\n  }, \"from opentelemetry import metrics\\n\\nmeter = metrics.get_meter(__name__)\\n\\n# \\u521B\\u5EFA Counter\\nrequest_counter = meter.create_counter(\\n    name=\\\"http.server.requests\\\",\\n    description=\\\"Total number of HTTP requests\\\",\\n    unit=\\\"1\\\",\\n)\\n\\ndef handle_request(method: str, route: str, status_code: int):\\n    \\\"\\\"\\\"\\u5904\\u7406\\u8BF7\\u6C42\\u5E76\\u8BB0\\u5F55\\u6307\\u6807\\\"\\\"\\\"\\n    request_counter.add(\\n        1,\\n        attributes={\\n            \\\"http.method\\\": method,\\n            \\\"http.route\\\": route,\\n            \\\"http.status_code\\\": status_code,\\n        },\\n    )\\n\")), mdx(\"h4\", {\n    \"id\": \"histogram直方图\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#histogram%E7%9B%B4%E6%96%B9%E5%9B%BE\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Histogram\\uFF08\\u76F4\\u65B9\\u56FE\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from opentelemetry import metrics\\n\\nmeter = metrics.get_meter(__name__)\\n\\n# \\u521B\\u5EFA Histogram\\nrequest_duration = meter.create_histogram(\\n    name=\\\"http.server.duration\\\",\\n    description=\\\"HTTP request duration\\\",\\n    unit=\\\"ms\\\",\\n)\\n\\ndef record_duration(duration_ms: float, method: str, route: str):\\n    \\\"\\\"\\\"\\u8BB0\\u5F55\\u8BF7\\u6C42\\u6301\\u7EED\\u65F6\\u95F4\\\"\\\"\\\"\\n    request_duration.record(\\n        duration_ms,\\n        attributes={\\n            \\\"http.method\\\": method,\\n            \\\"http.route\\\": route,\\n        },\\n    )\\n\")), mdx(\"h4\", {\n    \"id\": \"updowncounter升降计数器\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#updowncounter%E5%8D%87%E9%99%8D%E8%AE%A1%E6%95%B0%E5%99%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"UpDownCounter\\uFF08\\u5347\\u964D\\u8BA1\\u6570\\u5668\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from opentelemetry import metrics\\n\\nmeter = metrics.get_meter(__name__)\\n\\n# \\u521B\\u5EFA UpDownCounter\\nactive_connections = meter.create_up_down_counter(\\n    name=\\\"http.server.active_connections\\\",\\n    description=\\\"Number of active HTTP connections\\\",\\n    unit=\\\"1\\\",\\n)\\n\\ndef connection_opened():\\n    \\\"\\\"\\\"\\u8FDE\\u63A5\\u6253\\u5F00\\\"\\\"\\\"\\n    active_connections.add(1)\\n\\ndef connection_closed():\\n    \\\"\\\"\\\"\\u8FDE\\u63A5\\u5173\\u95ED\\\"\\\"\\\"\\n    active_connections.add(-1)\\n\")), mdx(\"h4\", {\n    \"id\": \"observable-gauge可观察仪表\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#observable-gauge%E5%8F%AF%E8%A7%82%E5%AF%9F%E4%BB%AA%E8%A1%A8\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Observable Gauge\\uFF08\\u53EF\\u89C2\\u5BDF\\u4EEA\\u8868\\uFF09\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from opentelemetry import metrics\\nimport psutil\\n\\nmeter = metrics.get_meter(__name__)\\n\\n# \\u521B\\u5EFA Observable Gauge\\nmemory_usage = meter.create_observable_gauge(\\n    name=\\\"runtime.memory.heap_alloc\\\",\\n    description=\\\"Heap memory allocated\\\",\\n    unit=\\\"bytes\\\",\\n    callbacks=[get_memory_usage],\\n)\\n\\ndef get_memory_usage(options):\\n    \\\"\\\"\\\"\\u83B7\\u53D6\\u5185\\u5B58\\u4F7F\\u7528\\u91CF\\\"\\\"\\\"\\n    process = psutil.Process()\\n    memory_info = process.memory_info()\\n    memory_usage.observe(\\n        memory_info.rss,\\n        attributes={},\\n    )\\n\")), mdx(\"h3\", {\n    \"id\": \"logs---日志集成\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#logs---%E6%97%A5%E5%BF%97%E9%9B%86%E6%88%90\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Logs - \\u65E5\\u5FD7\\u96C6\\u6210\"), mdx(\"h4\", {\n    \"id\": \"集成标准-logging\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E9%9B%86%E6%88%90%E6%A0%87%E5%87%86-logging\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u96C6\\u6210\\u6807\\u51C6 logging\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import logging\\nfrom opentelemetry import trace\\nfrom opentelemetry.instrumentation.logging import LoggingInstrumentor\\n\\n# \\u542F\\u7528\\u65E5\\u5FD7\\u57CB\\u70B9\\nLoggingInstrumentor().instrument()\\n\\n# \\u521B\\u5EFA logger\\nlogger = logging.getLogger(__name__)\\nlogger.setLevel(logging.INFO)\\n\\n# \\u4F7F\\u7528 logger\\uFF08\\u81EA\\u52A8\\u6DFB\\u52A0 trace \\u4FE1\\u606F\\uFF09\\ntracer = trace.get_tracer(__name__)\\n\\ndef example_logging():\\n    \\\"\\\"\\\"\\u65E5\\u5FD7\\u793A\\u4F8B\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"example_operation\\\") as span:\\n        # \\u65E5\\u5FD7\\u4F1A\\u81EA\\u52A8\\u5305\\u542B trace_id \\u548C span_id\\n        logger.info(\\n            \\\"Processing request\\\",\\n            extra={\\n                \\\"user_id\\\": \\\"12345\\\",\\n                \\\"action\\\": \\\"create\\\",\\n            },\\n        )\\n\")), mdx(\"h4\", {\n    \"id\": \"自定义日志格式\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%97%A5%E5%BF%97%E6%A0%BC%E5%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  }))), \"\\u81EA\\u5B9A\\u4E49\\u65E5\\u5FD7\\u683C\\u5F0F\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import logging\\nfrom opentelemetry import trace\\nfrom opentelemetry.trace import format_trace_id, format_span_id\\n\\nclass TraceFormatter(logging.Formatter):\\n    \\\"\\\"\\\"\\u81EA\\u5B9A\\u4E49\\u65E5\\u5FD7\\u683C\\u5F0F\\uFF0C\\u5305\\u542B trace \\u4FE1\\u606F\\\"\\\"\\\"\\n    \\n    def format(self, record):\\n        # \\u83B7\\u53D6\\u5F53\\u524D span\\n        span = trace.get_current_span()\\n        if span and span.get_span_context().is_valid():\\n            span_context = span.get_span_context()\\n            record.trace_id = format_trace_id(span_context.trace_id)\\n            record.span_id = format_span_id(span_context.span_id)\\n        else:\\n            record.trace_id = None\\n            record.span_id = None\\n        \\n        return super().format(record)\\n\\n# \\u914D\\u7F6E logger\\nlogger = logging.getLogger(__name__)\\nhandler = logging.StreamHandler()\\nhandler.setFormatter(TraceFormatter(\\n    '%(asctime)s [%(levelname)s] trace_id=%(trace_id)s span_id=%(span_id)s %(message)s'\\n))\\nlogger.addHandler(handler)\\nlogger.setLevel(logging.INFO)\\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\": \"flask\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#flask\",\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  }))), \"Flask\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"# app.py\\nfrom flask import Flask, jsonify\\nfrom opentelemetry.instrumentation.flask import FlaskInstrumentor\\nfrom opentelemetry import trace\\n\\napp = Flask(__name__)\\n\\n# \\u542F\\u7528 Flask \\u81EA\\u52A8\\u57CB\\u70B9\\nFlaskInstrumentor().instrument_app(app)\\n\\ntracer = trace.get_tracer(__name__)\\n\\n@app.route(\\\"/users/<user_id>\\\")\\ndef get_user(user_id):\\n    \\\"\\\"\\\"\\u83B7\\u53D6\\u7528\\u6237\\u4FE1\\u606F\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"get_user_handler\\\") as span:\\n        span.set_attribute(\\\"user.id\\\", user_id)\\n        \\n        # \\u67E5\\u8BE2\\u7528\\u6237\\n        user = query_user(user_id)\\n        \\n        return jsonify(user)\\n\\n@app.route(\\\"/users\\\", methods=[\\\"POST\\\"])\\ndef create_user():\\n    \\\"\\\"\\\"\\u521B\\u5EFA\\u7528\\u6237\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"create_user_handler\\\") as span:\\n        data = request.get_json()\\n        \\n        user = save_user(data)\\n        \\n        return jsonify(user), 201\\n\\ndef query_user(user_id: str):\\n    \\\"\\\"\\\"\\u67E5\\u8BE2\\u7528\\u6237\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"query_user\\\") as span:\\n        span.set_attribute(\\\"db.operation\\\", \\\"SELECT\\\")\\n        # \\u6570\\u636E\\u5E93\\u67E5\\u8BE2\\u903B\\u8F91\\n        return {\\\"id\\\": user_id, \\\"name\\\": \\\"John Doe\\\"}\\n\\ndef save_user(data: dict):\\n    \\\"\\\"\\\"\\u4FDD\\u5B58\\u7528\\u6237\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"save_user\\\") as span:\\n        span.set_attribute(\\\"db.operation\\\", \\\"INSERT\\\")\\n        # \\u6570\\u636E\\u5E93\\u63D2\\u5165\\u903B\\u8F91\\n        return data\\n\\nif __name__ == \\\"__main__\\\":\\n    app.run(host=\\\"0.0.0.0\\\", port=8000)\\n\")), mdx(\"p\", null, \"\\u542F\\u52A8:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"opentelemetry-instrument python app.py\\n\")), mdx(\"h3\", {\n    \"id\": \"django\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#django\",\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  }))), \"Django\"), mdx(\"h4\", {\n    \"id\": \"settingspy-配置\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#settingspy-%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  }))), \"settings.py \\u914D\\u7F6E\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"# settings.py\\nINSTALLED_APPS = [\\n    # ... \\u5176\\u4ED6\\u5E94\\u7528\\n]\\n\\n# OpenTelemetry \\u914D\\u7F6E\\nfrom opentelemetry.instrumentation.django import DjangoInstrumentor\\nfrom opentelemetry.instrumentation.psycopg2 import Psycopg2Instrumentor\\n\\n# \\u542F\\u7528 Django \\u81EA\\u52A8\\u57CB\\u70B9\\nDjangoInstrumentor().instrument()\\n\\n# \\u542F\\u7528 PostgreSQL \\u81EA\\u52A8\\u57CB\\u70B9\\nPsycopg2Instrumentor().instrument()\\n\")), mdx(\"h4\", {\n    \"id\": \"viewspy\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#viewspy\",\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  }))), \"views.py\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"# views.py\\nfrom django.http import JsonResponse\\nfrom opentelemetry import trace\\n\\ntracer = trace.get_tracer(__name__)\\n\\ndef get_user(request, user_id):\\n    \\\"\\\"\\\"\\u83B7\\u53D6\\u7528\\u6237\\u4FE1\\u606F\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"get_user_view\\\") as span:\\n        span.set_attribute(\\\"user.id\\\", user_id)\\n        \\n        # \\u4E1A\\u52A1\\u903B\\u8F91\\n        user = {\\\"id\\\": user_id, \\\"name\\\": \\\"John Doe\\\"}\\n        \\n        return JsonResponse(user)\\n\")), mdx(\"p\", null, \"\\u542F\\u52A8:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"opentelemetry-instrument python manage.py runserver\\n\")), mdx(\"h3\", {\n    \"id\": \"fastapi\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#fastapi\",\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  }))), \"FastAPI\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"# main.py\\nfrom fastapi import FastAPI\\nfrom opentelemetry.instrumentation.fastapi import FastAPIInstrumentor\\nfrom opentelemetry import trace\\n\\napp = FastAPI()\\n\\n# \\u542F\\u7528 FastAPI \\u81EA\\u52A8\\u57CB\\u70B9\\nFastAPIInstrumentor.instrument_app(app)\\n\\ntracer = trace.get_tracer(__name__)\\n\\n@app.get(\\\"/users/{user_id}\\\")\\nasync def get_user(user_id: str):\\n    \\\"\\\"\\\"\\u83B7\\u53D6\\u7528\\u6237\\u4FE1\\u606F\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"get_user_handler\\\") as span:\\n        span.set_attribute(\\\"user.id\\\", user_id)\\n        \\n        user = await query_user(user_id)\\n        \\n        return user\\n\\n@app.post(\\\"/users\\\")\\nasync def create_user(user: dict):\\n    \\\"\\\"\\\"\\u521B\\u5EFA\\u7528\\u6237\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"create_user_handler\\\") as span:\\n        saved_user = await save_user(user)\\n        \\n        return saved_user\\n\\nasync def query_user(user_id: str):\\n    \\\"\\\"\\\"\\u67E5\\u8BE2\\u7528\\u6237\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"query_user\\\") as span:\\n        span.set_attribute(\\\"db.operation\\\", \\\"SELECT\\\")\\n        # \\u5F02\\u6B65\\u6570\\u636E\\u5E93\\u67E5\\u8BE2\\n        return {\\\"id\\\": user_id, \\\"name\\\": \\\"John Doe\\\"}\\n\\nasync def save_user(user: dict):\\n    \\\"\\\"\\\"\\u4FDD\\u5B58\\u7528\\u6237\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"save_user\\\") as span:\\n        span.set_attribute(\\\"db.operation\\\", \\\"INSERT\\\")\\n        # \\u5F02\\u6B65\\u6570\\u636E\\u5E93\\u63D2\\u5165\\n        return user\\n\")), mdx(\"p\", null, \"\\u542F\\u52A8:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"opentelemetry-instrument uvicorn main:app --host 0.0.0.0 --port 8000\\n\")), mdx(\"h3\", {\n    \"id\": \"sqlalchemy\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#sqlalchemy\",\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  }))), \"SQLAlchemy\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from sqlalchemy import create_engine, Column, Integer, String\\nfrom sqlalchemy.ext.declarative import declarative_base\\nfrom sqlalchemy.orm import sessionmaker\\nfrom opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor\\nfrom opentelemetry import trace\\n\\nBase = declarative_base()\\n\\nclass User(Base):\\n    __tablename__ = \\\"users\\\"\\n    \\n    id = Column(Integer, primary_key=True)\\n    name = Column(String(50))\\n    email = Column(String(100))\\n\\n# \\u521B\\u5EFA\\u5F15\\u64CE\\nengine = create_engine(\\\"postgresql://user:password@localhost/dbname\\\")\\n\\n# \\u542F\\u7528 SQLAlchemy \\u81EA\\u52A8\\u57CB\\u70B9\\nSQLAlchemyInstrumentor().instrument(\\n    engine=engine,\\n    enable_commenter=True,  # \\u6DFB\\u52A0 SQL \\u6CE8\\u91CA\\n    commenter_options={\\\"db_driver\\\": True},\\n)\\n\\nSession = sessionmaker(bind=engine)\\n\\ntracer = trace.get_tracer(__name__)\\n\\ndef get_user(user_id: int):\\n    \\\"\\\"\\\"\\u83B7\\u53D6\\u7528\\u6237\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"get_user\\\") as span:\\n        session = Session()\\n        try:\\n            user = session.query(User).filter(User.id == user_id).first()\\n            span.set_attribute(\\\"db.rows_affected\\\", 1 if user else 0)\\n            return user\\n        finally:\\n            session.close()\\n\")), mdx(\"h3\", {\n    \"id\": \"redis\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#redis\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Redis\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import redis\\nfrom opentelemetry.instrumentation.redis import RedisInstrumentor\\nfrom opentelemetry import trace\\n\\n# \\u521B\\u5EFA Redis \\u5BA2\\u6237\\u7AEF\\nr = redis.Redis(host=\\\"localhost\\\", port=6379, db=0)\\n\\n# \\u542F\\u7528 Redis \\u81EA\\u52A8\\u57CB\\u70B9\\nRedisInstrumentor().instrument()\\n\\ntracer = trace.get_tracer(__name__)\\n\\ndef get_user_from_cache(user_id: str):\\n    \\\"\\\"\\\"\\u4ECE\\u7F13\\u5B58\\u83B7\\u53D6\\u7528\\u6237\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"get_user_from_cache\\\") as span:\\n        span.set_attribute(\\\"cache.key\\\", f\\\"user:{user_id}\\\")\\n        \\n        user = r.get(f\\\"user:{user_id}\\\")\\n        \\n        if user:\\n            span.set_attribute(\\\"cache.hit\\\", True)\\n        else:\\n            span.set_attribute(\\\"cache.hit\\\", False)\\n        \\n        return user\\n\")), mdx(\"h3\", {\n    \"id\": \"requests-http-客户端\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#requests-http-%E5%AE%A2%E6%88%B7%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  }))), \"Requests (HTTP \\u5BA2\\u6237\\u7AEF)\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import requests\\nfrom opentelemetry.instrumentation.requests import RequestsInstrumentor\\nfrom opentelemetry import trace\\n\\n# \\u542F\\u7528 Requests \\u81EA\\u52A8\\u57CB\\u70B9\\nRequestsInstrumentor().instrument()\\n\\ntracer = trace.get_tracer(__name__)\\n\\ndef call_external_api(url: str):\\n    \\\"\\\"\\\"\\u8C03\\u7528\\u5916\\u90E8 API\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"call_external_api\\\") as span:\\n        span.set_attribute(\\\"http.url\\\", url)\\n        span.set_attribute(\\\"http.method\\\", \\\"GET\\\")\\n        \\n        response = requests.get(url)\\n        \\n        span.set_attribute(\\\"http.status_code\\\", response.status_code)\\n        \\n        return response.json()\\n\")), mdx(\"h3\", {\n    \"id\": \"celery\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#celery\",\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  }))), \"Celery\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from celery import Celery\\nfrom opentelemetry.instrumentation.celery import CeleryInstrumentor\\nfrom opentelemetry import trace\\n\\napp = Celery(\\\"myapp\\\", broker=\\\"redis://localhost:6379/0\\\")\\n\\n# \\u542F\\u7528 Celery \\u81EA\\u52A8\\u57CB\\u70B9\\nCeleryInstrumentor().instrument()\\n\\ntracer = trace.get_tracer(__name__)\\n\\n@app.task\\ndef process_order(order_id: str):\\n    \\\"\\\"\\\"\\u5904\\u7406\\u8BA2\\u5355\\u4EFB\\u52A1\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"process_order_task\\\") as span:\\n        span.set_attribute(\\\"order.id\\\", order_id)\\n        span.set_attribute(\\\"task.name\\\", \\\"process_order\\\")\\n        \\n        # \\u4EFB\\u52A1\\u903B\\u8F91\\n        pass\\n\")), mdx(\"p\", null, \"\\u542F\\u52A8 Worker:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"opentelemetry-instrument celery -A myapp worker --loglevel=info\\n\")), mdx(\"h3\", {\n    \"id\": \"grpc\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#grpc\",\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\"), mdx(\"h4\", {\n    \"id\": \"server\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#server\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Server\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import grpc\\nfrom opentelemetry.instrumentation.grpc import GrpcInstrumentorServer\\nfrom opentelemetry import trace\\n\\n# \\u542F\\u7528 gRPC Server \\u81EA\\u52A8\\u57CB\\u70B9\\nGrpcInstrumentorServer().instrument()\\n\\ntracer = trace.get_tracer(__name__)\\n\\nclass UserService(users_pb2_grpc.UserServiceServicer):\\n    def GetUser(self, request, context):\\n        \\\"\\\"\\\"\\u83B7\\u53D6\\u7528\\u6237\\\"\\\"\\\"\\n        with tracer.start_as_current_span(\\\"GetUser\\\") as span:\\n            span.set_attribute(\\\"user.id\\\", request.id)\\n            \\n            # \\u4E1A\\u52A1\\u903B\\u8F91\\n            return users_pb2.UserResponse(\\n                id=request.id,\\n                name=\\\"John Doe\\\",\\n            )\\n\\nserver = grpc.server(futures.ThreadPoolExecutor(max_workers=10))\\nusers_pb2_grpc.add_UserServiceServicer_to_server(UserService(), server)\\nserver.add_insecure_port(\\\"[::]:50051\\\")\\nserver.start()\\n\")), mdx(\"h4\", {\n    \"id\": \"client\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#client\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Client\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import grpc\\nfrom opentelemetry.instrumentation.grpc import GrpcInstrumentorClient\\nfrom opentelemetry import trace\\n\\n# \\u542F\\u7528 gRPC Client \\u81EA\\u52A8\\u57CB\\u70B9\\nGrpcInstrumentorClient().instrument()\\n\\ntracer = trace.get_tracer(__name__)\\n\\ndef call_user_service(user_id: str):\\n    \\\"\\\"\\\"\\u8C03\\u7528\\u7528\\u6237\\u670D\\u52A1\\\"\\\"\\\"\\n    with tracer.start_as_current_span(\\\"call_user_service\\\") as span:\\n        channel = grpc.insecure_channel(\\\"localhost:50051\\\")\\n        stub = users_pb2_grpc.UserServiceStub(channel)\\n        \\n        response = stub.GetUser(users_pb2.GetUserRequest(id=user_id))\\n        \\n        return response\\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-python\"\n  }, \"from opentelemetry.sdk.trace import TracerProvider\\nfrom opentelemetry.sdk.trace.export import BatchSpanProcessor\\nfrom opentelemetry.sdk.trace.sampling import TraceIdRatioBased, ParentBased\\n\\n# \\u521B\\u5EFA\\u91C7\\u6837\\u5668\\nsampler = ParentBased(TraceIdRatioBased(0.1))  # 10% \\u91C7\\u6837\\n\\n# \\u5E94\\u7528\\u5230 TracerProvider\\ntracer_provider = TracerProvider(sampler=sampler)\\n\")), mdx(\"h3\", {\n    \"id\": \"自定义属性添加\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%B1%9E%E6%80%A7%E6%B7%BB%E5%8A%A0\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u81EA\\u5B9A\\u4E49\\u5C5E\\u6027\\u6DFB\\u52A0\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from opentelemetry.sdk.trace import SpanProcessor, ReadWriteSpan\\n\\nclass AttributeAdder(SpanProcessor):\\n    \\\"\\\"\\\"\\u6DFB\\u52A0\\u81EA\\u5B9A\\u4E49\\u5C5E\\u6027\\u5230\\u6240\\u6709 Span\\\"\\\"\\\"\\n    \\n    def on_start(self, span: ReadWriteSpan, parent_context=None):\\n        span.set_attribute(\\\"environment\\\", \\\"production\\\")\\n        span.set_attribute(\\\"region\\\", \\\"us-east-1\\\")\\n        span.set_attribute(\\\"version\\\", \\\"1.0.0\\\")\\n    \\n    def on_end(self, span):\\n        pass\\n    \\n    def shutdown(self):\\n        pass\\n    \\n    def force_flush(self, timeout_millis=30000):\\n        pass\\n\\n# \\u4F7F\\u7528\\ntracer_provider.add_span_processor(AttributeAdder())\\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-python\"\n  }, \"from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter\\nfrom opentelemetry.exporter.jaeger.thrift import JaegerExporter\\nfrom opentelemetry.sdk.trace.export import ConsoleSpanExporter, BatchSpanProcessor\\n\\n# \\u521B\\u5EFA\\u591A\\u4E2A Exporter\\notlp_exporter = OTLPSpanExporter(endpoint=\\\"uptrace-grpc.yodao.cn:4317\\\")\\njaeger_exporter = JaegerExporter(agent_host_name=\\\"localhost\\\", agent_port=6831)\\nconsole_exporter = ConsoleSpanExporter()\\n\\n# \\u6DFB\\u52A0\\u5230 TracerProvider\\ntracer_provider = TracerProvider()\\ntracer_provider.add_span_processor(BatchSpanProcessor(otlp_exporter))\\ntracer_provider.add_span_processor(BatchSpanProcessor(jaeger_exporter))\\ntracer_provider.add_span_processor(BatchSpanProcessor(console_exporter))\\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-python\"\n  }, \"from opentelemetry.sdk.trace.export import BatchSpanProcessor\\n\\n# \\u4F18\\u5316\\u6279\\u91CF\\u5BFC\\u51FA\\u914D\\u7F6E\\nbatch_processor = BatchSpanProcessor(\\n    exporter,\\n    max_queue_size=2048,        # \\u961F\\u5217\\u5927\\u5C0F\\n    max_export_batch_size=512,  # \\u6279\\u91CF\\u5927\\u5C0F\\n    export_timeout_millis=30000,  # \\u5BFC\\u51FA\\u8D85\\u65F6\\n    schedule_delay_millis=5000,    # \\u6279\\u91CF\\u5EF6\\u8FDF\\n)\\n\\ntracer_provider.add_span_processor(batch_processor)\\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-使用环境变量配置\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#1-%E4%BD%BF%E7%94%A8%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  }))), \"1. \\u4F7F\\u7528\\u73AF\\u5883\\u53D8\\u91CF\\u914D\\u7F6E\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import os\\nfrom opentelemetry import trace, metrics\\n\\n# \\u4ECE\\u73AF\\u5883\\u53D8\\u91CF\\u8BFB\\u53D6\\u914D\\u7F6E\\nservice_name = os.getenv(\\\"OTEL_SERVICE_NAME\\\", \\\"my-service\\\")\\nendpoint = os.getenv(\\\"OTEL_EXPORTER_OTLP_ENDPOINT\\\", \\\"http://localhost:4317\\\")\\n\")), mdx(\"h3\", {\n    \"id\": \"2-优雅关闭\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#2-%E4%BC%98%E9%9B%85%E5%85%B3%E9%97%AD\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"2. \\u4F18\\u96C5\\u5173\\u95ED\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import atexit\\nfrom opentelemetry.sdk.trace import TracerProvider\\n\\ntracer_provider = TracerProvider()\\n\\n# \\u6CE8\\u518C\\u9000\\u51FA\\u5904\\u7406\\natexit.register(tracer_provider.shutdown)\\n\")), mdx(\"h3\", {\n    \"id\": \"3-错误处理\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#3-%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"3. \\u9519\\u8BEF\\u5904\\u7406\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from opentelemetry.trace import Status, StatusCode\\n\\ntry:\\n    # \\u4E1A\\u52A1\\u903B\\u8F91\\n    pass\\nexcept Exception as e:\\n    span.record_exception(e)\\n    span.set_status(Status(StatusCode.ERROR, str(e)))\\n    raise\\n\")), mdx(\"h3\", {\n    \"id\": \"4-异步支持\"\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#4-%E5%BC%82%E6%AD%A5%E6%94%AF%E6%8C%81\",\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. \\u5F02\\u6B65\\u652F\\u6301\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"import asyncio\\nfrom opentelemetry import trace\\n\\nasync def async_operation():\\n    \\\"\\\"\\\"\\u5F02\\u6B65\\u64CD\\u4F5C\\\"\\\"\\\"\\n    tracer = trace.get_tracer(__name__)\\n    \\n    with tracer.start_as_current_span(\\\"async_operation\\\") as span:\\n        # \\u5F02\\u6B65\\u4E1A\\u52A1\\u903B\\u8F91\\n        await asyncio.sleep(1)\\n        pass\\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  }, \"\\u542F\\u7528\\u8C03\\u8BD5\\u65E5\\u5FD7:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"export OTEL_LOG_LEVEL=debug\\nopentelemetry-instrument python app.py\\n\")), mdx(\"ol\", {\n    \"start\": 3\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4F7F\\u7528 Console Exporter \\u9A8C\\u8BC1:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"export OTEL_TRACES_EXPORTER=console\\nopentelemetry-instrument python app.py\\n\")), mdx(\"h4\", {\n    \"id\": \"2-框架未自动埋点\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#2-%E6%A1%86%E6%9E%B6%E6%9C%AA%E8%87%AA%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  }))), \"2. \\u6846\\u67B6\\u672A\\u81EA\\u52A8\\u57CB\\u70B9\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u89E3\\u51B3\\u65B9\\u6848\"), \":\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u786E\\u8BA4\\u5DF2\\u5B89\\u88C5\\u5BF9\\u5E94\\u7684\\u57CB\\u70B9\\u5E93:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"pip list | grep opentelemetry-instrumentation\\n\")), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u68C0\\u67E5\\u57CB\\u70B9\\u5E93\\u662F\\u5426\\u542F\\u7528:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"export OTEL_PYTHON_INSTRUMENTATION_FLASK_ENABLED=true\\n\")), mdx(\"ol\", {\n    \"start\": 3\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u67E5\\u770B\\u652F\\u6301\\u7684\\u6846\\u67B6\\u5217\\u8868\")), mdx(\"h4\", {\n    \"id\": \"3-性能问题\"\n  }, mdx(\"a\", {\n    parentName: \"h4\",\n    \"href\": \"#3-%E6%80%A7%E8%83%BD%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. \\u6027\\u80FD\\u95EE\\u9898\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u89E3\\u51B3\\u65B9\\u6848\"), \":\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u964D\\u4F4E\\u91C7\\u6837\\u7387:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"export OTEL_TRACES_SAMPLER_ARG=0.01\\n\")), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u8C03\\u6574\\u6279\\u91CF\\u914D\\u7F6E:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"BatchSpanProcessor(\\n    exporter,\\n    max_queue_size=1024,\\n    schedule_delay_millis=10000,\\n)\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"下一步\"\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#%E4%B8%8B%E4%B8%80%E6%AD%A5\",\n    \"aria-hidden\": true,\n    \"className\": \"anchor\"\n  }, mdx(\"svg\", {\n    \"aria-hidden\": \"true\",\n    height: \"16\",\n    version: \"1.1\",\n    viewBox: \"0 0 16 16\",\n    width: \"16\"\n  }, mdx(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"\\u4E0B\\u4E00\\u6B65\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/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/advanced/troubleshooting/\"\n  }, \"\\u6545\\u969C\\u6392\\u67E5\"), \" - \\u5E38\\u89C1\\u95EE\\u9898\\u89E3\\u51B3\\u65B9\\u6848\")), 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/python/\"\n  }, \"OpenTelemetry Python Documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/open-telemetry/opentelemetry-python\"\n  }, \"OpenTelemetry Python SDK\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/open-telemetry/opentelemetry-python-contrib\"\n  }, \"OpenTelemetry Python Contrib\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://opentelemetry.io/docs/specs/semconv/\"\n  }, \"Python Semantic Conventions\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://opentelemetry-python.readthedocs.io/en/latest/\"\n  }, \"OpenTelemetry-Python API Reference\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#python-语言-opentelemetry-接入指南","title":"Python 语言 OpenTelemetry 接入指南","items":[{"url":"#目录","title":"目录"},{"url":"#概述","title":"概述","items":[{"url":"#python-语言特性","title":"Python 语言特性"},{"url":"#版本要求","title":"版本要求"},{"url":"#支持的信号","title":"支持的信号"},{"url":"#适用场景","title":"适用场景"}]},{"url":"#零代码接入推荐","title":"零代码接入（推荐）","items":[{"url":"#快速开始5-分钟","title":"快速开始（5 分钟）","items":[{"url":"#1-安装-opentelemetry","title":"1. 安装 OpenTelemetry"},{"url":"#2-配置环境变量","title":"2. 配置环境变量"},{"url":"#3-启动应用","title":"3. 启动应用"}]},{"url":"#详细步骤","title":"详细步骤","items":[{"url":"#步骤-1-安装依赖","title":"步骤 1: 安装依赖"},{"url":"#步骤-2-配置环境变量","title":"步骤 2: 配置环境变量"},{"url":"#步骤-3-启动应用","title":"步骤 3: 启动应用"}]},{"url":"#支持的框架和库","title":"支持的框架和库","items":[{"url":"#web-框架","title":"Web 框架"},{"url":"#数据库","title":"数据库"},{"url":"#http-客户端","title":"HTTP 客户端"},{"url":"#消息队列","title":"消息队列"},{"url":"#rpc-框架","title":"RPC 框架"},{"url":"#日志库","title":"日志库"}]},{"url":"#启用禁用特定埋点库","title":"启用/禁用特定埋点库","items":[{"url":"#通过环境变量","title":"通过环境变量"},{"url":"#通过配置文件","title":"通过配置文件"}]},{"url":"#验证零代码接入","title":"验证零代码接入"}]},{"url":"#sdk-手动接入","title":"SDK 手动接入","items":[{"url":"#安装依赖","title":"安装依赖"},{"url":"#基础初始化","title":"基础初始化","items":[{"url":"#1-创建-opentelemetry-初始化函数","title":"1. 创建 OpenTelemetry 初始化函数"},{"url":"#2-在应用中使用","title":"2. 在应用中使用"}]},{"url":"#traces---手动埋点","title":"Traces - 手动埋点","items":[{"url":"#创建和使用-span","title":"创建和使用 Span"},{"url":"#span-属性和事件","title":"Span 属性和事件"},{"url":"#context-传播","title":"Context 传播"}]},{"url":"#metrics---指标采集","title":"Metrics - 指标采集","items":[{"url":"#counter计数器","title":"Counter（计数器）"},{"url":"#histogram直方图","title":"Histogram（直方图）"},{"url":"#updowncounter升降计数器","title":"UpDownCounter（升降计数器）"},{"url":"#observable-gauge可观察仪表","title":"Observable Gauge（可观察仪表）"}]},{"url":"#logs---日志集成","title":"Logs - 日志集成","items":[{"url":"#集成标准-logging","title":"集成标准 logging"},{"url":"#自定义日志格式","title":"自定义日志格式"}]}]},{"url":"#框架集成示例","title":"框架集成示例","items":[{"url":"#flask","title":"Flask"},{"url":"#django","title":"Django","items":[{"url":"#settingspy-配置","title":"settings.py 配置"},{"url":"#viewspy","title":"views.py"}]},{"url":"#fastapi","title":"FastAPI"},{"url":"#sqlalchemy","title":"SQLAlchemy"},{"url":"#redis","title":"Redis"},{"url":"#requests-http-客户端","title":"Requests (HTTP 客户端)"},{"url":"#celery","title":"Celery"},{"url":"#grpc","title":"gRPC","items":[{"url":"#server","title":"Server"},{"url":"#client","title":"Client"}]}]},{"url":"#高级配置","title":"高级配置","items":[{"url":"#自定义采样策略","title":"自定义采样策略"},{"url":"#自定义属性添加","title":"自定义属性添加"},{"url":"#多-exporter-配置","title":"多 Exporter 配置"},{"url":"#性能优化配置","title":"性能优化配置"}]},{"url":"#最佳实践","title":"最佳实践","items":[{"url":"#1-使用环境变量配置","title":"1. 使用环境变量配置"},{"url":"#2-优雅关闭","title":"2. 优雅关闭"},{"url":"#3-错误处理","title":"3. 错误处理"},{"url":"#4-异步支持","title":"4. 异步支持"}]},{"url":"#故障排查","title":"故障排查","items":[{"url":"#常见问题","title":"常见问题","items":[{"url":"#1-数据未发送到后端","title":"1. 数据未发送到后端"},{"url":"#2-框架未自动埋点","title":"2. 框架未自动埋点"},{"url":"#3-性能问题","title":"3. 性能问题"}]}]},{"url":"#下一步","title":"下一步"},{"url":"#参考资源","title":"参考资源"}]}]}}},"pageContext":{"id":"a88d9588-5077-54ea-b84d-b2152fd5ce75"}},
    "staticQueryHashes": ["1122327541","1339625561","148928582","2007862104","2140385554","3442269102","4275725850"]}