跳到正文
cccskills
免费在 GitHub 公开

monitoring-observability

Set up application monitoring with OpenTelemetry traces, Prometheus metrics, Grafana dashboards, and structured logs. Use its examples to instrument HTTP and database activity, track business operations, redact secrets, and define alerts for errors and latency.

中文简介正在准备中。当前显示英语简介。

原文查看原文说明

Monitoring and observability with OpenTelemetry, Prometheus, Grafana dashboards, and structured logging

实测评分 未实测

查看安装方法

适用场景

  • Instrument HTTP and database activity
  • Track errors and latency with metrics
  • Create alerts and service dashboards
  • Correlate logs with traces

包含的文件(1)

  • SKILL.md5.4 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Monitoring & Observability

OpenTelemetry Setup

import { NodeSDK } from "@opentelemetry/sdk-node";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
import { PgInstrumentation } from "@opentelemetry/instrumentation-pg";
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";

const sdk = new NodeSDK({
  serviceName: "order-service",
  traceExporter: new OTLPTraceExporter({
    url: "http://otel-collector:4318/v1/traces",
  }),
  metricReader: new PeriodicExportingMetricReader({
    exporter: new OTLPMetricExporter({
      url: "http://otel-collector:4318/v1/metrics",
    }),
    exportIntervalMillis: 15000,
  }),
  instrumentations: [
    new HttpInstrumentation(),
    new PgInstrumentation(),
  ],
});

sdk.start();
process.on("SIGTERM", () => sdk.shutdown());

Custom Spans and Metrics

import { trace, metrics, SpanStatusCode } from "@opentelemetry/api";

const tracer = trace.getTracer("order-service");
const meter = metrics.getMeter("order-service");

const orderCounter = meter.createCounter("orders.created", {
  description: "Number of orders created",
});

const orderDuration = meter.createHistogram("orders.processing_duration_ms", {
  description: "Order processing duration in milliseconds",
  unit: "ms",
});

async function createOrder(input: CreateOrderInput) {
  return tracer.startActiveSpan("createOrder", async (span) => {
    try {
      span.setAttributes({
        "order.customer_id": input.customerId,
        "order.item_count": input.items.length,
      });

      const start = performance.now();
      const order = await db.order.create({ data: input });

      orderCounter.add(1, { status: "success" });
      orderDuration.record(performance.now() - start);

      span.setStatus({ code: SpanStatusCode.OK });
      return order;
    } catch (error) {
      span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
      orderCounter.add(1, { status: "error" });
      throw error;
    } finally {
      span.end();
    }
  });
}

Prometheus Metrics

# prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: "api-servers"
    static_configs:
      - targets: ["api-1:9090", "api-2:9090"]
    metrics_path: /metrics

  - job_name: "node-exporter"
    static_configs:
      - targets: ["node-exporter:9100"]
import { collectDefaultMetrics, Counter, Histogram, Registry } from "prom-client";

const registry = new Registry();
collectDefaultMetrics({ register: registry });

const httpRequestDuration = new Histogram({
  name: "http_request_duration_seconds",
  help: "HTTP request duration in seconds",
  labelNames: ["method", "route", "status"],
  buckets: [0.01, 0.05, 0.1, 0.5, 1, 5],
  registers: [registry],
});

app.use((req, res, next) => {
  const end = httpRequestDuration.startTimer();
  res.on("finish", () => {
    end({ method: req.method, route: req.route?.path ?? req.path, status: res.statusCode });
  });
  next();
});

app.get("/metrics", async (req, res) => {
  res.set("Content-Type", registry.contentType);
  res.end(await registry.metrics());
});

Structured Logging

import pino from "pino";

const logger = pino({
  level: process.env.LOG_LEVEL ?? "info",
  formatters: {
    level: (label) => ({ level: label }),
  },
  redact: ["req.headers.authorization", "password", "token"],
});

function requestLogger(req, res, next) {
  const start = Date.now();
  res.on("finish", () => {
    logger.info({
      method: req.method,
      url: req.url,
      status: res.statusCode,
      duration_ms: Date.now() - start,
      trace_id: req.headers["x-trace-id"],
    });
  });
  next();
}

Alerting Rules

groups:
  - name: api-alerts
    rules:
      - alert: HighErrorRate
        expr: rate(http_request_duration_seconds_count{status=~"5.."}[5m]) / rate(http_request_duration_seconds_count[5m]) > 0.05
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Error rate above 5% for {{ $labels.route }}"

      - alert: HighLatency
        expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) > 2
        for: 10m
        labels:
          severity: warning

Anti-Patterns

  • Logging sensitive data (passwords, tokens, PII) without redaction
  • Using string interpolation in log messages instead of structured fields
  • Creating unbounded cardinality in metric labels (e.g., user IDs as labels)
  • Not correlating logs and traces with a shared trace ID
  • Alerting on symptoms (high CPU) without understanding root cause
  • Missing SLO definitions before building dashboards

Checklist

  • OpenTelemetry SDK initialized with auto-instrumentation for HTTP, DB, and messaging
  • Custom spans added for business-critical operations
  • Metrics use bounded label cardinality
  • Structured logging with JSON output and secret redaction
  • Trace context propagated across service boundaries
  • Alerting rules based on SLOs (error rate, latency percentiles)
  • Dashboards show RED metrics (Rate, Errors, Duration) per service
  • Log retention and rotation policies configured

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Use this skill to make web interfaces more accessible. It provides patterns for semantic HTML, ARIA, keyboard navigation, forms, and color contrast, plus a checklist for evaluating WCAG AA accessibility with assistive technology.

中文简介正在准备中。当前显示英语简介。

  • Making menus and tabs keyboard accessible
  • Improving form labels and error announcements
  • Reviewing contrast and screen reader support
rohitg00/awesome-claude-code-toolkit27302026年5月12日 更新

Route broad SEO requests to the relevant platform module, such as LinkedIn, GitHub, or a CV. For work spanning several profiles or assets, it helps establish shared facts first and keeps the task focused on the needed context.

中文简介正在准备中。当前显示英语简介。

  • Choose a module for an unclear SEO request
  • Plan SEO work across LinkedIn and GitHub
  • Prepare shared facts before rewriting profile assets
rohitg00/awesome-claude-code-toolkit27302026年5月12日 更新

Plan REST APIs with consistent resource URLs, HTTP methods, error responses, pagination, filtering, and versioning. It also covers writing an OpenAPI specification, a machine-readable API contract that can guide implementation and validation.

中文简介正在准备中。当前显示英语简介。

  • Choose resource URLs and HTTP methods for an API
  • Plan pagination and filtering for list endpoints
  • Draft an OpenAPI specification before implementation
rohitg00/awesome-claude-code-toolkit27302026年5月12日 更新

Use this skill to plan or implement web authentication and access control. It covers JWT access and refresh tokens, OAuth2 with PKCE, sessions, and role-based permissions, with code examples and a checklist of common security practices.

中文简介正在准备中。当前显示英语简介。

  • Adding JWT access and refresh tokens to a web app
  • Setting up an OAuth2 login flow with PKCE
  • Restricting routes by user role
rohitg00/awesome-claude-code-toolkit27302026年5月12日 更新

Build AWS application infrastructure using patterns for Lambda, DynamoDB, S3, and CDK. The examples cover API handlers, data access design, file event processing, and infrastructure settings, helping you shape cloud resources as code and avoid common setup mistakes.

中文简介正在准备中。当前显示英语简介。

  • Design a Lambda API with DynamoDB
  • Plan DynamoDB keys around query needs
  • Process files uploaded to S3
rohitg00/awesome-claude-code-toolkit27302026年5月12日 更新

Create CI/CD workflows for GitHub Actions or GitLab CI that run validation, tests, builds, and deployments. Examples show job dependencies, caching, matrices, coverage reports, database services, and deployment gates to make automated delivery steps easier to organize.

中文简介正在准备中。当前显示英语简介。

  • Set up lint and test workflow jobs
  • Run tests across operating systems and versions
  • Build and deploy from the main branch
rohitg00/awesome-claude-code-toolkit27302026年5月12日 更新

查看 rohitg00 的全部技能

报告此技能的问题