feat: Add Official Microsoft & Gemini Skills (845+ Total)
🚀 Impact Significantly expands the capabilities of **Antigravity Awesome Skills** by integrating official skill collections from **Microsoft** and **Google Gemini**. This update increases the total skill count to **845+**, making the library even more comprehensive for AI coding assistants. ✨ Key Changes 1. New Official Skills - **Microsoft Skills**: Added a massive collection of official skills from [microsoft/skills](https://github.com/microsoft/skills). - Includes Azure, .NET, Python, TypeScript, and Semantic Kernel skills. - Preserves the original directory structure under `skills/official/microsoft/`. - Includes plugin skills from the `.github/plugins` directory. - **Gemini Skills**: Added official Gemini API development skills under `skills/gemini-api-dev/`. 2. New Scripts & Tooling - **`scripts/sync_microsoft_skills.py`**: A robust synchronization script that: - Clones the official Microsoft repository. - Preserves the original directory heirarchy. - Handles symlinks and plugin locations. - Generates attribution metadata. - **`scripts/tests/inspect_microsoft_repo.py`**: Debug tool to inspect the remote repository structure. - **`scripts/tests/test_comprehensive_coverage.py`**: Verification script to ensure 100% of skills are captured during sync. 3. Core Improvements - **`scripts/generate_index.py`**: Enhanced frontmatter parsing to safely handle unquoted values containing `@` symbols and commas (fixing issues with some Microsoft skill descriptions). - **`package.json`**: Added `sync:microsoft` and `sync:all-official` scripts for easy maintenance. 4. Documentation - Updated `README.md` to reflect the new skill counts (845+) and added Microsoft/Gemini to the provider list. - Updated `CATALOG.md` and `skills_index.json` with the new skills. 🧪 Verification - Ran `scripts/tests/test_comprehensive_coverage.py` to verify all Microsoft skills are detected. - Validated `generate_index.py` fixes by successfully indexing the new skills.
This commit is contained in:
@@ -0,0 +1,207 @@
|
||||
---
|
||||
name: azure-monitor-opentelemetry-exporter-py
|
||||
description: |
|
||||
Azure Monitor OpenTelemetry Exporter for Python. Use for low-level OpenTelemetry export to Application Insights.
|
||||
Triggers: "azure-monitor-opentelemetry-exporter", "AzureMonitorTraceExporter", "AzureMonitorMetricExporter", "AzureMonitorLogExporter".
|
||||
package: azure-monitor-opentelemetry-exporter
|
||||
---
|
||||
|
||||
# Azure Monitor OpenTelemetry Exporter for Python
|
||||
|
||||
Low-level exporter for sending OpenTelemetry traces, metrics, and logs to Application Insights.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install azure-monitor-opentelemetry-exporter
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
```bash
|
||||
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/
|
||||
```
|
||||
|
||||
## When to Use
|
||||
|
||||
| Scenario | Use |
|
||||
|----------|-----|
|
||||
| Quick setup, auto-instrumentation | `azure-monitor-opentelemetry` (distro) |
|
||||
| Custom OpenTelemetry pipeline | `azure-monitor-opentelemetry-exporter` (this) |
|
||||
| Fine-grained control over telemetry | `azure-monitor-opentelemetry-exporter` (this) |
|
||||
|
||||
## Trace Exporter
|
||||
|
||||
```python
|
||||
from opentelemetry import trace
|
||||
from opentelemetry.sdk.trace import TracerProvider
|
||||
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
||||
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter
|
||||
|
||||
# Create exporter
|
||||
exporter = AzureMonitorTraceExporter(
|
||||
connection_string="InstrumentationKey=xxx;..."
|
||||
)
|
||||
|
||||
# Configure tracer provider
|
||||
trace.set_tracer_provider(TracerProvider())
|
||||
trace.get_tracer_provider().add_span_processor(
|
||||
BatchSpanProcessor(exporter)
|
||||
)
|
||||
|
||||
# Use tracer
|
||||
tracer = trace.get_tracer(__name__)
|
||||
with tracer.start_as_current_span("my-span"):
|
||||
print("Hello, World!")
|
||||
```
|
||||
|
||||
## Metric Exporter
|
||||
|
||||
```python
|
||||
from opentelemetry import metrics
|
||||
from opentelemetry.sdk.metrics import MeterProvider
|
||||
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
|
||||
from azure.monitor.opentelemetry.exporter import AzureMonitorMetricExporter
|
||||
|
||||
# Create exporter
|
||||
exporter = AzureMonitorMetricExporter(
|
||||
connection_string="InstrumentationKey=xxx;..."
|
||||
)
|
||||
|
||||
# Configure meter provider
|
||||
reader = PeriodicExportingMetricReader(exporter, export_interval_millis=60000)
|
||||
metrics.set_meter_provider(MeterProvider(metric_readers=[reader]))
|
||||
|
||||
# Use meter
|
||||
meter = metrics.get_meter(__name__)
|
||||
counter = meter.create_counter("requests_total")
|
||||
counter.add(1, {"route": "/api/users"})
|
||||
```
|
||||
|
||||
## Log Exporter
|
||||
|
||||
```python
|
||||
import logging
|
||||
from opentelemetry._logs import set_logger_provider
|
||||
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
|
||||
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
|
||||
from azure.monitor.opentelemetry.exporter import AzureMonitorLogExporter
|
||||
|
||||
# Create exporter
|
||||
exporter = AzureMonitorLogExporter(
|
||||
connection_string="InstrumentationKey=xxx;..."
|
||||
)
|
||||
|
||||
# Configure logger provider
|
||||
logger_provider = LoggerProvider()
|
||||
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
|
||||
set_logger_provider(logger_provider)
|
||||
|
||||
# Add handler to Python logging
|
||||
handler = LoggingHandler(level=logging.INFO, logger_provider=logger_provider)
|
||||
logging.getLogger().addHandler(handler)
|
||||
|
||||
# Use logging
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.info("This will be sent to Application Insights")
|
||||
```
|
||||
|
||||
## From Environment Variable
|
||||
|
||||
Exporters read `APPLICATIONINSIGHTS_CONNECTION_STRING` automatically:
|
||||
|
||||
```python
|
||||
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter
|
||||
|
||||
# Connection string from environment
|
||||
exporter = AzureMonitorTraceExporter()
|
||||
```
|
||||
|
||||
## Azure AD Authentication
|
||||
|
||||
```python
|
||||
from azure.identity import DefaultAzureCredential
|
||||
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter
|
||||
|
||||
exporter = AzureMonitorTraceExporter(
|
||||
credential=DefaultAzureCredential()
|
||||
)
|
||||
```
|
||||
|
||||
## Sampling
|
||||
|
||||
Use `ApplicationInsightsSampler` for consistent sampling:
|
||||
|
||||
```python
|
||||
from opentelemetry.sdk.trace import TracerProvider
|
||||
from opentelemetry.sdk.trace.sampling import ParentBasedTraceIdRatio
|
||||
from azure.monitor.opentelemetry.exporter import ApplicationInsightsSampler
|
||||
|
||||
# Sample 10% of traces
|
||||
sampler = ApplicationInsightsSampler(sampling_ratio=0.1)
|
||||
|
||||
trace.set_tracer_provider(TracerProvider(sampler=sampler))
|
||||
```
|
||||
|
||||
## Offline Storage
|
||||
|
||||
Configure offline storage for retry:
|
||||
|
||||
```python
|
||||
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter
|
||||
|
||||
exporter = AzureMonitorTraceExporter(
|
||||
connection_string="...",
|
||||
storage_directory="/path/to/storage", # Custom storage path
|
||||
disable_offline_storage=False # Enable retry (default)
|
||||
)
|
||||
```
|
||||
|
||||
## Disable Offline Storage
|
||||
|
||||
```python
|
||||
exporter = AzureMonitorTraceExporter(
|
||||
connection_string="...",
|
||||
disable_offline_storage=True # No retry on failure
|
||||
)
|
||||
```
|
||||
|
||||
## Sovereign Clouds
|
||||
|
||||
```python
|
||||
from azure.identity import AzureAuthorityHosts, DefaultAzureCredential
|
||||
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter
|
||||
|
||||
# Azure Government
|
||||
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT)
|
||||
exporter = AzureMonitorTraceExporter(
|
||||
connection_string="InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.us/",
|
||||
credential=credential
|
||||
)
|
||||
```
|
||||
|
||||
## Exporter Types
|
||||
|
||||
| Exporter | Telemetry Type | Application Insights Table |
|
||||
|----------|---------------|---------------------------|
|
||||
| `AzureMonitorTraceExporter` | Traces/Spans | requests, dependencies, exceptions |
|
||||
| `AzureMonitorMetricExporter` | Metrics | customMetrics, performanceCounters |
|
||||
| `AzureMonitorLogExporter` | Logs | traces, customEvents |
|
||||
|
||||
## Configuration Options
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|-----------|-------------|---------|
|
||||
| `connection_string` | Application Insights connection string | From env var |
|
||||
| `credential` | Azure credential for AAD auth | None |
|
||||
| `disable_offline_storage` | Disable retry storage | False |
|
||||
| `storage_directory` | Custom storage path | Temp directory |
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use BatchSpanProcessor** for production (not SimpleSpanProcessor)
|
||||
2. **Use ApplicationInsightsSampler** for consistent sampling across services
|
||||
3. **Enable offline storage** for reliability in production
|
||||
4. **Use AAD authentication** instead of instrumentation keys
|
||||
5. **Set export intervals** appropriate for your workload
|
||||
6. **Use the distro** (`azure-monitor-opentelemetry`) unless you need custom pipelines
|
||||
Reference in New Issue
Block a user