Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Configures monitoring systems, implements structured logging pipelines, creates Prometheus/Grafana dashboards, defines alerting rules, and instruments distributed tracing. Implements Prometheus/Grafana stacks, conducts load testing, performs application profiling, and plans infrastructure capacity. Use when setting up application monitoring, adding observability to services, debugging production issues with logs/metrics/traces, running load tests with k6 or Artillery, profiling CPU/memory bottle
.claude/skills/jeffallan-monitoring-expert/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 84% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 65% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 212% | 0% |
Observability and performance specialist implementing comprehensive monitoring, alerting, tracing, and performance testing systems.
jsimport pino from 'pino'; const logger = pino({ level: 'info' }); // Good — structured fields, includes correlation ID logger.info({ requestId: req.id, userId: req.user.id, durationMs: elapsed }, 'order.created'); // Bad — string interpolation, no correlation console.log(`Order created for user ${userId}`);
jsimport { Counter, Histogram, register } from 'prom-client'; const httpRequests = new Counter({ name: 'http_requests_total', help: 'Total HTTP requests', labelNames: ['method', 'route', 'status'], }); const httpDuration = new Histogram({ name: 'http_request_duration_seconds', help: 'HTTP request latency', labelNames: ['method', 'route'], buckets: [0.05, 0.1, 0.3, 0.5, 1, 2, 5], }); // Instrument a route app.use((req, res, next) => { const end = httpDuration.startTimer({ method: req.method, route: req.path }); res.on('finish', () => { httpRequests.inc({ method: req.method, route: req.path, status: res.statusCode }); end(); }); next(); }); // Expose scrape endpoint app.get('/metrics', async (req, res) => { res.set('Content-Type', register.contentType); res.end(await register.metrics()); });
jsimport { NodeSDK } from '@opentelemetry/sdk-node'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; import { trace } from '@opentelemetry/api'; const sdk = new NodeSDK({ traceExporter: new OTLPTraceExporter({ url: 'http://jaeger:4318/v1/traces' }), }); sdk.start(); // Manual span around a critical operation const tracer = trace.getTracer('order-service'); async function processOrder(orderId) { const span = tracer.startSpan('order.process'); span.setAttribute('order.id', orderId); try { const result = await db.saveOrder(orderId); span.setStatus({ code: SpanStatusCode.OK }); return result; } catch (err) { span.recordException(err); span.setStatus({ code: SpanStatusCode.ERROR }); throw err; } finally { span.end(); } }
yamlgroups: - name: api.rules rules: - alert: HighErrorRate expr: | rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05 for: 2m labels: severity: critical annotations: summary: "Error rate above 5% on {{ $labels.route }}"
jsimport http from 'k6/http'; import { check, sleep } from 'k6'; export const options = { stages: [ { duration: '1m', target: 50 }, // ramp up { duration: '5m', target: 50 }, // sustained load { duration: '1m', target: 0 }, // ramp down ], thresholds: { http_req_duration: ['p(95)<500'], // 95th percentile < 500 ms http_req_failed: ['rate<0.01'], // error rate < 1% }, }; export default function () { const res = http.get('https://api.example.com/orders'); check(res, { 'status is 200': (r) => r.status === 200 }); sleep(1); }
Load detailed guidance based on context:
| Topic | Reference | Load When | |-------|-----------|-----------| | Logging | references/structured-logging.md | Pino, JSON logging | | Metrics | references/prometheus-metrics.md | Counter, Histogram, Gauge | | Tracing | references/opentelemetry.md | OpenTelemetry, spans | | Alerting | references/alerting-rules.md | Prometheus alerts | | Dashboards | references/dashboards.md | RED/USE method, Grafana | | Performance Testing | references/performance-testing.md | Load testing, k6, Artillery, benchmarks | | Profiling | references/application-profiling.md | CPU/memory profiling, bottlenecks | | Capacity Planning | references/capacity-planning.md | Scaling, forecasting, budgets |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | pass→pass | 9,540 | 9,164 | -4% | 1 | 1 | 0% | 1,938 | 3,194 | +65% | 0 | 0 | — |
case-01 | pass→pass | 4,390 | 7,573 | +73% | 1 | 1 | 0% | 991 | 3,094 | +212% | 0 | 0 | — |
case-02 | pass→pass | 15,494 | 14,542 | -6% | 1 | 1 | 0% | 2,857 | 4,180 | +46% | 0 | 0 | — |
case-03 | pass→pass | 13,038 | 12,717 | -2% | 1 | 1 | 0% | 2,717 | 4,598 | +69% | 0 | 0 | — |
case-04 | fail→pass | 9,904 | 6,452 | -35% | 1 | 1 | 0% | 1,927 | 2,544 | +32% | 0 | 0 | — |
case-05 | pass→pass | 12,583 | 12,849 | +2% | 1 | 1 | 0% | 2,128 | 4,011 | +88% | 0 | 0 | — |
case-07 | pass→pass | 9,994 | 9,263 | -7% | 1 | 1 | 0% | 1,937 | 3,400 | +76% | 0 | 0 | — |
case-08 | pass→pass | 10,410 | 8,062 | -23% | 1 | 1 | 0% | 2,022 | 3,043 | +50% | 0 | 0 | — |
case-09 | fail→pass | 11,868 | 12,705 | +7% | 1 | 1 | 0% | 2,604 | 4,292 | +65% | 0 | 0 | — |
case-10 | pass→pass | 12,383 | 10,158 | -18% | 1 | 1 | 0% | 2,412 | 3,577 | +48% | 0 | 0 | — |
case-11 | fail→pass | 9,819 | 11,072 | +13% | 1 | 1 | 0% | 2,060 | 3,786 | +84% | 0 | 0 | — |
case-12 | pass→pass | 12,562 | 10,288 | -18% | 1 | 1 | 0% | 2,267 | 3,624 | +60% | 0 | 0 | — |
case-13 | pass→pass | 9,249 | 8,673 | -6% | 1 | 1 | 0% | 1,637 | 3,136 | +92% | 0 | 0 | — |
case-14 | pass→pass | 5,370 | 2,609 | -51% | 1 | 1 | 0% | 931 | 1,934 | +108% | 0 | 0 | — |
case-15 | pass→pass | 9,779 | 8,427 | -14% | 1 | 1 | 0% | 1,897 | 3,191 | +68% | 0 | 0 | — |
case-16 | pass→pass | 8,239 | 8,151 | -1% | 1 | 1 | 0% | 1,469 | 2,823 | +92% | 0 | 0 | — |
case-17 | pass→pass | 13,948 | 13,327 | -4% | 1 | 1 | 0% | 2,424 | 3,999 | +65% | 0 | 0 | — |
case-18 | pass→pass | 10,050 | 9,835 | -2% | 1 | 1 | 0% | 1,897 | 3,427 | +81% | 0 | 0 | — |
case-19 | pass→pass | 12,469 | 12,597 | +1% | 1 | 1 | 0% | 2,233 | 3,640 | +63% | 0 | 0 | — |
case-20 | pass→pass | 11,211 | 11,290 | +1% | 1 | 1 | 0% | 2,173 | 3,487 | +60% | 0 | 0 | — |
case-21 | pass→pass | 13,478 | 13,385 | -1% | 1 | 1 | 0% | 2,416 | 3,973 | +64% | 0 | 0 | — |
case-22 | pass→pass | 6,025 | 5,290 | -12% | 1 | 1 | 0% | 1,154 | 2,444 | +112% | 0 | 0 | — |
case-23 | pass→pass | 11,257 | 9,122 | -19% | 1 | 1 | 0% | 2,213 | 3,141 | +42% | 0 | 0 | — |
case-24 | pass→pass | 7,272 | 5,693 | -22% | 1 | 1 | 0% | 1,392 | 2,585 | +86% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +13 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.