monitoring-expert について
Node.js サービスの開発者向けに、ログ、エラー追跡、ヘルスチェック、メトリクスの設定を案内するスキルです。コード例と調査用コマンドを掲載しています。
主な機能
- 01Pino によるログ設定
- 02Sentry によるエラー追跡
- 03HTTP ヘルスチェック
- 04Prometheus メトリクス
- 05ログとリソースの調査コマンド
活用シーン
- 01Node.js サービスへの構造化ログ追加
- 02Sentry を使ったアプリのエラー追跡
- 03ヘルスチェックとメトリクスのエンドポイント提供
- 04ログとホストリソース使用状況の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ duck4nh/ antigravity-kit --skill monitoring-expertインストール後、Claude Code で/monitoring-expertを入力して読み込まれたか確認します。
README(原文)English
プロジェクトの README よりこの README の日本語訳はまだありません。以下は英語の原文です。日本語の紹介はページ上部をご覧ください。
Monitoring Expert
Logging (Node.js)
// Using Pino (fast)
import pino from 'pino';
const logger = pino({
level: process.env.LOG_LEVEL || 'info',
transport: process.env.NODE_ENV !== 'production'
? { target: 'pino-pretty' }
: undefined
});
// Usage
logger.info({ userId: 123 }, 'User logged in');
logger.error({ err, requestId }, 'Failed to process');
// Express middleware
import pinoHttp from 'pino-http';
app.use(pinoHttp({ logger }));
Error Tracking (Sentry)
import * as Sentry from '@sentry/node';
Sentry.init({
dsn: process.env.SENTRY_DSN,
environment: process.env.NODE_ENV,
tracesSampleRate: 0.1,
});
// Capture errors
try {
riskyOperation();
} catch (error) {
Sentry.captureException(error);
throw error;
}
// Express error handler
app.use(Sentry.Handlers.errorHandler());
Health Checks
// /health endpoint
app.get('/health', async (req, res) => {
const health = {
status: 'ok',
timestamp: new Date().toISOString(),
uptime: process.uptime(),
checks: {
database: await checkDatabase(),
redis: await checkRedis(),
}
};
const isHealthy = Object.values(health.checks).every(v => v === 'ok');
res.status(isHealthy ? 200 : 503).json(health);
});
async function checkDatabase() {
try {
await prisma.$queryRaw`SELECT 1`;
return 'ok';
} catch { return 'error'; }
}
Metrics (Prometheus)
import promClient from 'prom-client';
// Default metrics
promClient.collectDefaultMetrics();
// Custom metrics
const httpRequestDuration = new promClient.Histogram({
name: 'http_request_duration_seconds',
help: 'HTTP request duration',
labelNames: ['method', 'route', 'status'],
});
// Middleware
app.use((req, res, next) => {
const end = httpRequestDuration.startTimer();
res.on('finish', () => {
end({ method: req.method, route: req.path, status: res.statusCode });
});
next();
});
// Endpoint
app.get('/metrics', async (req, res) => {
res.set('Content-Type', promClient.register.contentType);
res.end(await promClient.register.metrics());
});
Quick Debug Commands
# Check logs
journalctl -u myapp -f --since "1 hour ago"
docker logs -f --tail 100 container_name
# Check resources
htop
df -h
free -m
# Network
netstat -tlnp
ss -tlnp
curl -I http://localhost:3000/health
コメント
Markdown 対応