Skip to main content

معلومات المصدر

المستودع
ffsshhttiikk/opencode-agents-skills
آخر نشاط في المصدر
٢٨ فبراير ٢٠٢٦ في ٢٢:٥٥
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٣
التفرعات
٢

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
tracing
description
Distributed tracing implementation
license
MIT
compatibility
opencode
metadata
{"audience":"developer, devops-engineer, sre","category":"devops"}
## What I do - Implement distributed tracing in applications - Configure tracing collectors and exporters - Analyze request flows across services - Debug performance issues using traces - Correlate traces with logs and metrics - Optimize system performance using trace data ## When to use me - When debugging distributed systems - When understanding request flows - When identifying bottlenecks - When debugging latency issues - When building observable systems - When optimizing performance ## Key Concepts ### Trace Structure ``` Trace ├── Span (Root) │ ├── Span (Database) │ │ └── Span (Connection Pool) │ ├── Span (HTTP Call 1) │ ├── Span (HTTP Call 2) │ │ └── Span (Retry 1) │ └── Span (Cache) │ └── Context ├── Trace ID: abc123 └── Span ID: xyz789 ``` ### OpenTelemetry Python ```python from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.exporter.jaeger.thrift import JaegerExporter from opentelemetry.instrumentation.flask import FlaskInstrumentor from opentelemetry.instrumentation.requests import RequestsInstrumentor # Initialize tracing provider = TracerProvider() processor = BatchSpanProcessor( JaegerExporter( agent_host_name="jaeger", agent_port=6831, ) ) provider.add_span_processor(processor) trace.set_tracer_provider(provider) # Instrument Flask FlaskInstrumentor().instrument_app(app) RequestsInstrumentor().instrument() # Create custom spans tracer = trace.get_tracer(__name__) def process_order(order_id): with tracer.start_as_current_span("process_order") as span: span.set_attribute("order.id", order_id) # Database call with tracer.start_as_current_span("db.save") as span: span.set_attribute("db.system", "postgresql") save_order(order_id) # External API call with tracer.start_as_current_span("http.payment") as span: span.set_attribute("http.method", "POST") span.set_attribute("http.url", "https://api.payment.com/charge") call_payment_api(order_id) ``` ### Jaeger Configuration ```yaml apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger spec: strategy: all-in-one collector: maxTraces: 100000 resources: limits: cpu: 500m memory: 512Mi query: options: basePath: /jaeger storage: type: elasticsearch elasticsearch: nodeCount: 3 redundancyPolicy: SingleRedundancy ``` ### Zipkin ```java // Spring Boot with Zipkin @SpringBootApplication @EnableZipkinTracer public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } // Service discovery with Eureka @Bean public Brave brave() { return Brave.Builder("my-service") .spanReporter(zipkin) .build(); } @Bean public Tracer tracer(Brave brave) { return brave; } ``` ### Trace Query ```logql # Jaeger query service = user-api operation = /api/users limit = 20 # Filter by tags http.method = GET http.status_code = 200 error = true # Time range start = 2024-01-15T10:00:00Z end = 2024-01-15T10:30:00Z ``` ### Distributed Context Propagation ```python # Manual context propagation from opentelemetry import trace def call_downstream_service(url, headers): # Extract context from incoming request ctx = trace.get_current_span().get_context() # Inject context into headers tracer = trace.get_tracer(__name__) with tracer.start_as_current_span("call_downstream") as span: # Add downstream span to trace carrier = {} trace.propagation.inject(span.get_context(), carrier) # Make HTTP call with propagated context response = requests.get( url, headers={**headers, **carrier} ) return response ``` ### Performance Analysis ```python # Analyze traces for performance class TraceAnalyzer: def __init__(self, jaeger_client): self.client = jaeger_client def find_slow_traces(self, threshold_ms=1000): return self.client.query( service='api', lookback='1h', min_duration=threshold_ms * 1000 # microseconds ) def analyze_bottlenecks(self, service): spans = self.client.get_service_spans(service) # Group by operation by_operation = defaultdict(list) for span in spans: by_operation[span.operation_name].append(span) # Calculate average duration per operation results = {} for op, spans in by_operation.items(): avg_duration = sum(s.duration for s in spans) / len(spans) results[op] = avg_duration return sorted(results.items(), key=lambda x: x[1], reverse=True) def find_error_patterns(self): return self.client.query( service='api', tag={'error': 'true'} ) ``` ### Trace-Based Optimization 1. **Identify Slow Operations**: Find spans with high duration 2. **Find Serial Dependencies**: Look for sequential spans 3. **Detect Unnecessary Calls**: Find duplicate or retry spans 4. **Analyze Cache Hit Rates**: Check for repeated DB/cache calls 5. **Optimize Database Queries**: Find N+1 query patterns 6. **Reduce Network Hops**: Minimize service-to-service calls
عرض على GitHub