Skip to main content

observability

System observability and monitoring

Source facts

Repository
ffsshhttiikk/opencode-agents-skills
Last source activity
February 28, 2026 at 22:53
Detected SKILL.md language
English
Stars
3
Forks
2

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
observability
description
System observability and monitoring
license
MIT
compatibility
opencode
metadata
{"audience":"developer, devops-engineer, sre","category":"devops"}
## What I do - Design and implement observability strategies - Build metrics, logging, and tracing pipelines - Create dashboards for system visibility - Configure alerting and incident response - Implement distributed tracing - Analyze system behavior and performance ## When to use me - When troubleshooting distributed systems - When establishing SRE practices - When implementing SLI/SLO tracking - When debugging performance issues - When building production-ready systems - When needing cross-service visibility ## Key Concepts ### Three Pillars of Observability 1. **Metrics**: Quantitative measurements over time - Counters, Gauges, Histograms - Aggregable, efficient storage 2. **Logs**: Discrete events with context - Structured, timestamped - Rich context and metadata 3. **Traces**: Request paths through systems - Distributed request tracking - Causal relationships ### OpenTelemetry ```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 # Setup tracing provider = TracerProvider() processor = BatchSpanProcessor( JaegerExporter( agent_host_name="jaeger", agent_port=6831, ) ) provider.add_span_processor(processor) trace.set_tracer_provider(provider) tracer = trace.get_tracer(__name__) # Create spans @tracer.start_as_current_span("process_order") def process_order(order_id): with tracer.start_as_current_span("validate") as span: span.set_attribute("order.id", order_id) validate_order(order_id) with tracer.start_as_current_span("charge") as span: charge_customer(order_id) ``` ### Prometheus Configuration ```yaml global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: - alertmanager:9093 rule_files: - "alerts/*.yml" scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'kubernetes-nodes' kubernetes_sd_configs: - role: node - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep ``` ### Grafana Dashboard ```json { "dashboard": { "title": "Service Dashboard", "panels": [ { "title": "Request Rate", "type": "graph", "targets": [ { "expr": "sum(rate(http_requests_total[5m])) by (service)", "legendFormat": "{{service}}" } ] }, { "title": "Error Rate", "type": "graph", "targets": [ { "expr": "sum(rate(http_requests_total{status=~\"5..\"}[5m])) by (service) / sum(rate(http_requests_total[5m])) by (service)", "legendFormat": "{{service}}" } ] }, { "title": "Latency p99", "type": "graph", "targets": [ { "expr": "histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service))", "legendFormat": "p99 {{service}}" } ] } ] } } ``` ### SLI/SLO Implementation ```yaml # Service Level Indicators slis: - name: availability type: ratio description: "Successful requests / Total requests" source: prometheus query: | sum(rate(http_requests_total{status!~"5.."}[5m])) / sum(rate(http_requests_total[5m])) - name: latency type: threshold description: "P99 latency" source: prometheus query: | histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le) ) # Service Level Objectives slo: - name: api-availability sli: availability target: 99.9 window: 30d error_budget: alerts: - name: ErrorBudgetWarning threshold: 0.05 - name: ErrorBudgetCritical threshold: 0.01 ``` ### Distributed Tracing ```javascript // Jaeger client integration const jaegerConfig = { serviceName: 'order-service', reporter: { logSpans: true, agentHost: 'jaeger', agentPort: 6831, }, sampler: { type: 'const', param: 1, }, }; const tracer = initJaeger(jaegerConfig); // Add to HTTP requests app.use((req, res, next) => { const span = tracer.startSpan('http-request'); span.setTag('http.method', req.method); span.setTag('http.url', req.url); res.on('finish', () => { span.setTag('http.status_code', res.statusCode); span.finish(); }); next(); }); ``` ### Key Patterns - **Red Metrics**: Rate, Errors, Duration - **USE Method**: Utilization, Saturation, Errors - **Golden Signals**: Latency, Traffic, Errors, Saturation - **DORA Metrics**: Deployment Frequency, Lead Time, MTTR, Change Failure Rate - **RED Metrics**: Rate, Errors, Duration (per service)
View on GitHub