[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XERYG4G9YZ7TJ5DBMKXRWV":3,"skill-same:01M6XERYG4G9YZ7TJ5DBMKXRWV":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":14,"repositoryHtmlUrl":42,"repositoryHomepageUrl":6,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6XERYG4G9YZ7TJ5DBMKXRWV","azure-monitor-opentelemetry-exporter-py",null,"Azure Monitor OpenTelemetry Exporter for Python. Use for low-level OpenTelemetry export to Application Insights.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fazure-monitor-opentelemetry-exporter-py\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32],"azure","azure monitor opentelemetry exporter py","monitor","OpenTelemetry","azure monitor","python","use","export","community","application","insights","for","unknown","2026","2026-11-10 10:12:30",false,"---\nname: azure-monitor-opentelemetry-exporter-py\ndescription: Azure Monitor OpenTelemetry Exporter for Python. Use for low-level OpenTelemetry export to Application Insights.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\n---\n\n# Azure Monitor OpenTelemetry Exporter for Python\n\nLow-level exporter for sending OpenTelemetry traces, metrics, and logs to Application Insights.\n\n## Installation\n\n```bash\npip install azure-monitor-opentelemetry-exporter\n```\n\n## Environment Variables\n\n```bash\nAPPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https:\u002F\u002Fxxx.in.applicationinsights.azure.com\u002F\n```\n\n## When to Use\n| Scenario | Use |\n|----------|-----|\n| Quick setup, auto-instrumentation | `azure-monitor-opentelemetry` (distro) |\n| Custom OpenTelemetry pipeline | `azure-monitor-opentelemetry-exporter` (this) |\n| Fine-grained control over telemetry | `azure-monitor-opentelemetry-exporter` (this) |\n\n## Trace Exporter\n\n```python\nfrom opentelemetry import trace\nfrom opentelemetry.sdk.trace import TracerProvider\nfrom opentelemetry.sdk.trace.export import BatchSpanProcessor\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter\n\n# Create exporter\nexporter = AzureMonitorTraceExporter(\n    connection_string=\"InstrumentationKey=xxx;...\"\n)\n\n# Configure tracer provider\ntrace.set_tracer_provider(TracerProvider())\ntrace.get_tracer_provider().add_span_processor(\n    BatchSpanProcessor(exporter)\n)\n\n# Use tracer\ntracer = trace.get_tracer(__name__)\nwith tracer.start_as_current_span(\"my-span\"):\n    print(\"Hello, World!\")\n```\n\n## Metric Exporter\n\n```python\nfrom opentelemetry import metrics\nfrom opentelemetry.sdk.metrics import MeterProvider\nfrom opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorMetricExporter\n\n# Create exporter\nexporter = AzureMonitorMetricExporter(\n    connection_string=\"InstrumentationKey=xxx;...\"\n)\n\n# Configure meter provider\nreader = PeriodicExportingMetricReader(exporter, export_interval_millis=60000)\nmetrics.set_meter_provider(MeterProvider(metric_readers=[reader]))\n\n# Use meter\nmeter = metrics.get_meter(__name__)\ncounter = meter.create_counter(\"requests_total\")\ncounter.add(1, {\"route\": \"\u002Fapi\u002Fusers\"})\n```\n\n## Log Exporter\n\n```python\nimport logging\nfrom opentelemetry._logs import set_logger_provider\nfrom opentelemetry.sdk._logs import LoggerProvider, LoggingHandler\nfrom opentelemetry.sdk._logs.export import BatchLogRecordProcessor\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorLogExporter\n\n# Create exporter\nexporter = AzureMonitorLogExporter(\n    connection_string=\"InstrumentationKey=xxx;...\"\n)\n\n# Configure logger provider\nlogger_provider = LoggerProvider()\nlogger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))\nset_logger_provider(logger_provider)\n\n# Add handler to Python logging\nhandler = LoggingHandler(level=logging.INFO, logger_provider=logger_provider)\nlogging.getLogger().addHandler(handler)\n\n# Use logging\nlogger = logging.getLogger(__name__)\nlogger.info(\"This will be sent to Application Insights\")\n```\n\n## From Environment Variable\n\nExporters read `APPLICATIONINSIGHTS_CONNECTION_STRING` automatically:\n\n```python\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter\n\n# Connection string from environment\nexporter = AzureMonitorTraceExporter()\n```\n\n## Azure AD Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter\n\nexporter = AzureMonitorTraceExporter(\n    credential=DefaultAzureCredential()\n)\n```\n\n## Sampling\n\nUse `ApplicationInsightsSampler` for consistent sampling:\n\n```python\nfrom opentelemetry.sdk.trace import TracerProvider\nfrom opentelemetry.sdk.trace.sampling import ParentBasedTraceIdRatio\nfrom azure.monitor.opentelemetry.exporter import ApplicationInsightsSampler\n\n# Sample 10% of traces\nsampler = ApplicationInsightsSampler(sampling_ratio=0.1)\n\ntrace.set_tracer_provider(TracerProvider(sampler=sampler))\n```\n\n## Offline Storage\n\nConfigure offline storage for retry:\n\n```python\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter\n\nexporter = AzureMonitorTraceExporter(\n    connection_string=\"...\",\n    storage_directory=\"\u002Fpath\u002Fto\u002Fstorage\",  # Custom storage path\n    disable_offline_storage=False  # Enable retry (default)\n)\n```\n\n## Disable Offline Storage\n\n```python\nexporter = AzureMonitorTraceExporter(\n    connection_string=\"...\",\n    disable_offline_storage=True  # No retry on failure\n)\n```\n\n## Sovereign Clouds\n\n```python\nfrom azure.identity import AzureAuthorityHosts, DefaultAzureCredential\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter\n\n# Azure Government\ncredential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT)\nexporter = AzureMonitorTraceExporter(\n    connection_string=\"InstrumentationKey=xxx;IngestionEndpoint=https:\u002F\u002Fxxx.in.applicationinsights.azure.us\u002F\",\n    credential=credential\n)\n```\n\n## Exporter Types\n\n| Exporter | Telemetry Type | Application Insights Table |\n|----------|---------------|---------------------------|\n| `AzureMonitorTraceExporter` | Traces\u002FSpans | requests, dependencies, exceptions |\n| `AzureMonitorMetricExporter` | Metrics | customMetrics, performanceCounters |\n| `AzureMonitorLogExporter` | Logs | traces, customEvents |\n\n## Configuration Options\n\n| Parameter | Description | Default |\n|-----------|-------------|---------|\n| `connection_string` | Application Insights connection string | From env var |\n| `credential` | Azure credential for AAD auth | None |\n| `disable_offline_storage` | Disable retry storage | False |\n| `storage_directory` | Custom storage path | Temp directory |\n\n## Best Practices\n\n1. **Use BatchSpanProcessor** for production (not SimpleSpanProcessor)\n2. **Use ApplicationInsightsSampler** for consistent sampling across services\n3. **Enable offline storage** for reliability in production\n4. **Use AAD authentication** instead of instrumentation keys\n5. **Set export intervals** appropriate for your workload\n6. **Use the distro** (`azure-monitor-opentelemetry`) unless you need custom pipelines\n","# Azure Monitor OpenTelemetry Exporter for Python\n\nLow-level exporter for sending OpenTelemetry traces, metrics, and logs to Application Insights.\n\n## Installation\n\n```bash\npip install azure-monitor-opentelemetry-exporter\n```\n\n## Environment Variables\n\n```bash\nAPPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https:\u002F\u002Fxxx.in.applicationinsights.azure.com\u002F\n```\n\n## When to Use\n| Scenario | Use |\n|----------|-----|\n| Quick setup, auto-instrumentation | `azure-monitor-opentelemetry` (distro) |\n| Custom OpenTelemetry pipeline | `azure-monitor-opentelemetry-exporter` (this) |\n| Fine-grained control over telemetry | `azure-monitor-opentelemetry-exporter` (this) |\n\n## Trace Exporter\n\n```python\nfrom opentelemetry import trace\nfrom opentelemetry.sdk.trace import TracerProvider\nfrom opentelemetry.sdk.trace.export import BatchSpanProcessor\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter\n\n# Create exporter\nexporter = AzureMonitorTraceExporter(\n    connection_string=\"InstrumentationKey=xxx;...\"\n)\n\n# Configure tracer provider\ntrace.set_tracer_provider(TracerProvider())\ntrace.get_tracer_provider().add_span_processor(\n    BatchSpanProcessor(exporter)\n)\n\n# Use tracer\ntracer = trace.get_tracer(__name__)\nwith tracer.start_as_current_span(\"my-span\"):\n    print(\"Hello, World!\")\n```\n\n## Metric Exporter\n\n```python\nfrom opentelemetry import metrics\nfrom opentelemetry.sdk.metrics import MeterProvider\nfrom opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorMetricExporter\n\n# Create exporter\nexporter = AzureMonitorMetricExporter(\n    connection_string=\"InstrumentationKey=xxx;...\"\n)\n\n# Configure meter provider\nreader = PeriodicExportingMetricReader(exporter, export_interval_millis=60000)\nmetrics.set_meter_provider(MeterProvider(metric_readers=[reader]))\n\n# Use meter\nmeter = metrics.get_meter(__name__)\ncounter = meter.create_counter(\"requests_total\")\ncounter.add(1, {\"route\": \"\u002Fapi\u002Fusers\"})\n```\n\n## Log Exporter\n\n```python\nimport logging\nfrom opentelemetry._logs import set_logger_provider\nfrom opentelemetry.sdk._logs import LoggerProvider, LoggingHandler\nfrom opentelemetry.sdk._logs.export import BatchLogRecordProcessor\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorLogExporter\n\n# Create exporter\nexporter = AzureMonitorLogExporter(\n    connection_string=\"InstrumentationKey=xxx;...\"\n)\n\n# Configure logger provider\nlogger_provider = LoggerProvider()\nlogger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))\nset_logger_provider(logger_provider)\n\n# Add handler to Python logging\nhandler = LoggingHandler(level=logging.INFO, logger_provider=logger_provider)\nlogging.getLogger().addHandler(handler)\n\n# Use logging\nlogger = logging.getLogger(__name__)\nlogger.info(\"This will be sent to Application Insights\")\n```\n\n## From Environment Variable\n\nExporters read `APPLICATIONINSIGHTS_CONNECTION_STRING` automatically:\n\n```python\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter\n\n# Connection string from environment\nexporter = AzureMonitorTraceExporter()\n```\n\n## Azure AD Authentication\n\n```python\nfrom azure.identity import DefaultAzureCredential\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter\n\nexporter = AzureMonitorTraceExporter(\n    credential=DefaultAzureCredential()\n)\n```\n\n## Sampling\n\nUse `ApplicationInsightsSampler` for consistent sampling:\n\n```python\nfrom opentelemetry.sdk.trace import TracerProvider\nfrom opentelemetry.sdk.trace.sampling import ParentBasedTraceIdRatio\nfrom azure.monitor.opentelemetry.exporter import ApplicationInsightsSampler\n\n# Sample 10% of traces\nsampler = ApplicationInsightsSampler(sampling_ratio=0.1)\n\ntrace.set_tracer_provider(TracerProvider(sampler=sampler))\n```\n\n## Offline Storage\n\nConfigure offline storage for retry:\n\n```python\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter\n\nexporter = AzureMonitorTraceExporter(\n    connection_string=\"...\",\n    storage_directory=\"\u002Fpath\u002Fto\u002Fstorage\",  # Custom storage path\n    disable_offline_storage=False  # Enable retry (default)\n)\n```\n\n## Disable Offline Storage\n\n```python\nexporter = AzureMonitorTraceExporter(\n    connection_string=\"...\",\n    disable_offline_storage=True  # No retry on failure\n)\n```\n\n## Sovereign Clouds\n\n```python\nfrom azure.identity import AzureAuthorityHosts, DefaultAzureCredential\nfrom azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter\n\n# Azure Government\ncredential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT)\nexporter = AzureMonitorTraceExporter(\n    connection_string=\"InstrumentationKey=xxx;IngestionEndpoint=https:\u002F\u002Fxxx.in.applicationinsights.azure.us\u002F\",\n    credential=credential\n)\n```\n\n## Exporter Types\n\n| Exporter | Telemetry Type | Application Insights Table |\n|----------|---------------|---------------------------|\n| `AzureMonitorTraceExporter` | Traces\u002FSpans | requests, dependencies, exceptions |\n| `AzureMonitorMetricExporter` | Metrics | customMetrics, performanceCounters |\n| `AzureMonitorLogExporter` | Logs | traces, customEvents |\n\n## Configuration Options\n\n| Parameter | Description | Default |\n|-----------|-------------|---------|\n| `connection_string` | Application Insights connection string | From env var |\n| `credential` | Azure credential for AAD auth | None |\n| `disable_offline_storage` | Disable retry storage | False |\n| `storage_directory` | Custom storage path | Temp directory |\n\n## Best Practices\n\n1. **Use BatchSpanProcessor** for production (not SimpleSpanProcessor)\n2. **Use ApplicationInsightsSampler** for consistent sampling across services\n3. **Enable offline storage** for reliability in production\n4. **Use AAD authentication** instead of instrumentation keys\n5. **Set export intervals** appropriate for your workload\n6. **Use the distro** (`azure-monitor-opentelemetry`) unless you need custom pipelines\n",{"name":5,"risk":31,"source":27,"date_added":38,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcopilot\u002Fazure-monitor-opentelemetry-exporter-py","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill azure-monitor-opentelemetry-exporter-py",{"tool":51,"command":52},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill azure-monitor-opentelemetry-exporter-py",{"tool":54,"command":55},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill azure-monitor-opentelemetry-exporter-py","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fazure-monitor-opentelemetry-exporter-py\u002FSKILL.md",true,[],[60,84,110,120,133,152],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":71,"publishedAt":33},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[66],{"categoryNo":67,"categoryName":68,"taxonomyType":69,"taxonomyTypeDesc":70},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[72,73,74,75,76,77,78,79,80,81,82,83],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":33},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[91,92,93,94,95,96,74,97,98,99,100,101,102,103,104,105,106,107,108,109],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":33},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[117,118,91,102,103,104,105,95,74,107,119,108,109,101,99,98,97,106,96,94],"trend radar","radar","pulse",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":33},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[127,128,129,130,131,132],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":144,"publishedAt":33},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[139],{"categoryNo":140,"categoryName":141,"taxonomyType":142,"taxonomyTypeDesc":143},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[135,80,145,146,147,83,102,148,149,150,93,151,106],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":33},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[154,159,160,161,106,162,149,163,164,165,166,167],"status","play","go","latest","github","discover","control","cmd","volume"]