observability-toolkit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +107 -0
- package/dist/backends/index.d.ts +72 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +5 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/local-jsonl.d.ts +21 -0
- package/dist/backends/local-jsonl.d.ts.map +1 -0
- package/dist/backends/local-jsonl.js +281 -0
- package/dist/backends/local-jsonl.js.map +1 -0
- package/dist/backends/signoz-api.d.ts +28 -0
- package/dist/backends/signoz-api.d.ts.map +1 -0
- package/dist/backends/signoz-api.js +293 -0
- package/dist/backends/signoz-api.js.map +1 -0
- package/dist/lib/constants.d.ts +21 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +30 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/file-utils.d.ts +38 -0
- package/dist/lib/file-utils.d.ts.map +1 -0
- package/dist/lib/file-utils.js +129 -0
- package/dist/lib/file-utils.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +140 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/context-stats.d.ts +81 -0
- package/dist/tools/context-stats.d.ts.map +1 -0
- package/dist/tools/context-stats.js +213 -0
- package/dist/tools/context-stats.js.map +1 -0
- package/dist/tools/get-trace-url.d.ts +36 -0
- package/dist/tools/get-trace-url.d.ts.map +1 -0
- package/dist/tools/get-trace-url.js +43 -0
- package/dist/tools/get-trace-url.js.map +1 -0
- package/dist/tools/health-check.d.ts +50 -0
- package/dist/tools/health-check.d.ts.map +1 -0
- package/dist/tools/health-check.js +109 -0
- package/dist/tools/health-check.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +10 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/query-logs.d.ts +82 -0
- package/dist/tools/query-logs.d.ts.map +1 -0
- package/dist/tools/query-logs.js +86 -0
- package/dist/tools/query-logs.js.map +1 -0
- package/dist/tools/query-metrics.d.ts +96 -0
- package/dist/tools/query-metrics.d.ts.map +1 -0
- package/dist/tools/query-metrics.js +85 -0
- package/dist/tools/query-metrics.js.map +1 -0
- package/dist/tools/query-traces.d.ts +95 -0
- package/dist/tools/query-traces.d.ts.map +1 -0
- package/dist/tools/query-traces.js +83 -0
- package/dist/tools/query-traces.js.map +1 -0
- package/package.json +43 -0
package/README.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# @alyshia/observability-toolkit
|
|
2
|
+
|
|
3
|
+
MCP server for observability tooling - query traces, metrics, and logs from local JSONL files or SigNoz Cloud for Claude Code sessions.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
claude mcp add observability-toolkit -- npx -y @alyshia/observability-toolkit
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or for local development:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
claude mcp add observability-toolkit -- node ~/.claude/mcp-servers/observability-toolkit/dist/server.js
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Tools
|
|
18
|
+
|
|
19
|
+
| Tool | Description |
|
|
20
|
+
|------|-------------|
|
|
21
|
+
| `obs_query_traces` | Query traces from local JSONL or SigNoz |
|
|
22
|
+
| `obs_query_metrics` | Query metrics with aggregation support |
|
|
23
|
+
| `obs_query_logs` | Query logs by severity, search text, trace ID |
|
|
24
|
+
| `obs_health_check` | Check telemetry system health |
|
|
25
|
+
| `obs_context_stats` | Get context window utilization stats |
|
|
26
|
+
| `obs_get_trace_url` | Get SigNoz trace viewer URL |
|
|
27
|
+
|
|
28
|
+
## Configuration
|
|
29
|
+
|
|
30
|
+
Environment variables:
|
|
31
|
+
|
|
32
|
+
- `TELEMETRY_DIR` - Local telemetry directory (default: `~/.claude/telemetry`)
|
|
33
|
+
- `SIGNOZ_URL` - SigNoz instance URL (e.g., `https://ingest.us.signoz.cloud`)
|
|
34
|
+
- `SIGNOZ_API_KEY` - SigNoz API key for authentication
|
|
35
|
+
|
|
36
|
+
## Usage Examples
|
|
37
|
+
|
|
38
|
+
### Query traces
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
obs_query_traces({ backend: "local", limit: 10 })
|
|
42
|
+
obs_query_traces({ traceId: "abc123..." })
|
|
43
|
+
obs_query_traces({ serviceName: "claude-code", minDurationMs: 100 })
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Query logs
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
obs_query_logs({ severity: "ERROR", limit: 20 })
|
|
50
|
+
obs_query_logs({ search: "timeout", startDate: "2026-01-28" })
|
|
51
|
+
obs_query_logs({ traceId: "abc123..." })
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Query metrics
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
obs_query_metrics({ metricName: "session.context.size" })
|
|
58
|
+
obs_query_metrics({ metricName: "gen_ai.client.token.usage", aggregation: "sum" })
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Health check
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
obs_health_check({ verbose: true })
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Context stats
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
obs_context_stats({})
|
|
71
|
+
obs_context_stats({ sessionId: "abc123...", includeCost: true })
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Get trace URL
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
obs_get_trace_url({ traceId: "abc123..." })
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Data Sources
|
|
81
|
+
|
|
82
|
+
### Local JSONL
|
|
83
|
+
|
|
84
|
+
Reads telemetry data from `~/.claude/telemetry/`:
|
|
85
|
+
- `traces-YYYY-MM-DD.jsonl` - Trace spans
|
|
86
|
+
- `logs-YYYY-MM-DD.jsonl` - Log records
|
|
87
|
+
- `metrics-YYYY-MM-DD.jsonl` - Metric data points
|
|
88
|
+
|
|
89
|
+
### SigNoz Cloud
|
|
90
|
+
|
|
91
|
+
Queries SigNoz Cloud API when configured:
|
|
92
|
+
- Traces: `/api/v3/traces`
|
|
93
|
+
- Logs: `/api/v3/logs`
|
|
94
|
+
- Metrics: `/api/v3/query_range`
|
|
95
|
+
|
|
96
|
+
## Development
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
cd ~/.claude/mcp-servers/observability-toolkit
|
|
100
|
+
npm install
|
|
101
|
+
npm run build
|
|
102
|
+
npm run start
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## License
|
|
106
|
+
|
|
107
|
+
MIT
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend interface for telemetry data sources
|
|
3
|
+
*/
|
|
4
|
+
export interface TraceSpan {
|
|
5
|
+
traceId: string;
|
|
6
|
+
spanId: string;
|
|
7
|
+
parentSpanId?: string;
|
|
8
|
+
name: string;
|
|
9
|
+
kind?: string;
|
|
10
|
+
startTimeUnixNano: number;
|
|
11
|
+
endTimeUnixNano?: number;
|
|
12
|
+
durationMs?: number;
|
|
13
|
+
status?: {
|
|
14
|
+
code: number;
|
|
15
|
+
message?: string;
|
|
16
|
+
};
|
|
17
|
+
attributes?: Record<string, unknown>;
|
|
18
|
+
events?: Array<{
|
|
19
|
+
name: string;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
attributes?: Record<string, unknown>;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
export interface LogRecord {
|
|
25
|
+
timestamp: string;
|
|
26
|
+
severity: string;
|
|
27
|
+
body: string;
|
|
28
|
+
traceId?: string;
|
|
29
|
+
spanId?: string;
|
|
30
|
+
attributes?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
export interface MetricDataPoint {
|
|
33
|
+
timestamp: string;
|
|
34
|
+
name: string;
|
|
35
|
+
value: number;
|
|
36
|
+
unit?: string;
|
|
37
|
+
attributes?: Record<string, unknown>;
|
|
38
|
+
}
|
|
39
|
+
export interface QueryOptions {
|
|
40
|
+
startDate?: string;
|
|
41
|
+
endDate?: string;
|
|
42
|
+
limit?: number;
|
|
43
|
+
offset?: number;
|
|
44
|
+
}
|
|
45
|
+
export interface TraceQueryOptions extends QueryOptions {
|
|
46
|
+
traceId?: string;
|
|
47
|
+
serviceName?: string;
|
|
48
|
+
spanName?: string;
|
|
49
|
+
minDurationMs?: number;
|
|
50
|
+
maxDurationMs?: number;
|
|
51
|
+
}
|
|
52
|
+
export interface LogQueryOptions extends QueryOptions {
|
|
53
|
+
severity?: string;
|
|
54
|
+
search?: string;
|
|
55
|
+
traceId?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface MetricQueryOptions extends QueryOptions {
|
|
58
|
+
metricName?: string;
|
|
59
|
+
aggregation?: 'sum' | 'avg' | 'min' | 'max' | 'count';
|
|
60
|
+
groupBy?: string[];
|
|
61
|
+
}
|
|
62
|
+
export interface TelemetryBackend {
|
|
63
|
+
name: string;
|
|
64
|
+
queryTraces(options: TraceQueryOptions): Promise<TraceSpan[]>;
|
|
65
|
+
queryLogs(options: LogQueryOptions): Promise<LogRecord[]>;
|
|
66
|
+
queryMetrics(options: MetricQueryOptions): Promise<MetricDataPoint[]>;
|
|
67
|
+
healthCheck(): Promise<{
|
|
68
|
+
status: 'ok' | 'error';
|
|
69
|
+
message?: string;
|
|
70
|
+
}>;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAC3F;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IACtD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9D,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1D,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACtE,WAAW,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local JSONL backend for reading telemetry data from ~/.claude/telemetry/
|
|
3
|
+
*
|
|
4
|
+
* The local telemetry files use a flat JSONL format where each line is a complete
|
|
5
|
+
* span or log record, not the batched OpenTelemetry export format.
|
|
6
|
+
*/
|
|
7
|
+
import { TelemetryBackend, TraceSpan, LogRecord, MetricDataPoint, TraceQueryOptions, LogQueryOptions, MetricQueryOptions } from './index.js';
|
|
8
|
+
export declare class LocalJsonlBackend implements TelemetryBackend {
|
|
9
|
+
name: string;
|
|
10
|
+
private telemetryDir;
|
|
11
|
+
constructor(telemetryDir?: string);
|
|
12
|
+
queryTraces(options: TraceQueryOptions): Promise<TraceSpan[]>;
|
|
13
|
+
queryLogs(options: LogQueryOptions): Promise<LogRecord[]>;
|
|
14
|
+
queryMetrics(options: MetricQueryOptions): Promise<MetricDataPoint[]>;
|
|
15
|
+
private aggregate;
|
|
16
|
+
healthCheck(): Promise<{
|
|
17
|
+
status: 'ok' | 'error';
|
|
18
|
+
message?: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=local-jsonl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-jsonl.d.ts","sourceRoot":"","sources":["../../src/backends/local-jsonl.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAwKpB,qBAAa,iBAAkB,YAAW,gBAAgB;IACxD,IAAI,SAAiB;IACrB,OAAO,CAAC,YAAY,CAAS;gBAEjB,YAAY,CAAC,EAAE,MAAM;IAI3B,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAyC7D,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAoCzD,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAyC3E,OAAO,CAAC,SAAS;IAyDX,WAAW,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAqB3E"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local JSONL backend for reading telemetry data from ~/.claude/telemetry/
|
|
3
|
+
*
|
|
4
|
+
* The local telemetry files use a flat JSONL format where each line is a complete
|
|
5
|
+
* span or log record, not the batched OpenTelemetry export format.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { TELEMETRY_DIR } from '../lib/constants.js';
|
|
9
|
+
import { listFiles, readJsonlSync, parseDateFromFilename, getDateString, } from '../lib/file-utils.js';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
/**
|
|
12
|
+
* Convert flat span to normalized TraceSpan
|
|
13
|
+
*/
|
|
14
|
+
function normalizeSpan(raw) {
|
|
15
|
+
if (!raw.traceId || !raw.spanId || !raw.name)
|
|
16
|
+
return null;
|
|
17
|
+
// Convert [seconds, nanoseconds] to nanoseconds
|
|
18
|
+
const startTimeUnixNano = raw.startTime
|
|
19
|
+
? raw.startTime[0] * 1_000_000_000 + raw.startTime[1]
|
|
20
|
+
: 0;
|
|
21
|
+
const endTimeUnixNano = raw.endTime
|
|
22
|
+
? raw.endTime[0] * 1_000_000_000 + raw.endTime[1]
|
|
23
|
+
: undefined;
|
|
24
|
+
// Calculate duration in ms
|
|
25
|
+
let durationMs;
|
|
26
|
+
if (raw.duration) {
|
|
27
|
+
durationMs = (raw.duration[0] * 1000) + (raw.duration[1] / 1_000_000);
|
|
28
|
+
}
|
|
29
|
+
else if (endTimeUnixNano) {
|
|
30
|
+
durationMs = (endTimeUnixNano - startTimeUnixNano) / 1_000_000;
|
|
31
|
+
}
|
|
32
|
+
// Add service name to attributes if present in resource
|
|
33
|
+
const attributes = { ...raw.attributes };
|
|
34
|
+
if (raw.resource?.serviceName) {
|
|
35
|
+
attributes['service.name'] = raw.resource.serviceName;
|
|
36
|
+
}
|
|
37
|
+
if (raw.resource?.serviceVersion) {
|
|
38
|
+
attributes['service.version'] = raw.resource.serviceVersion;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
traceId: raw.traceId,
|
|
42
|
+
spanId: raw.spanId,
|
|
43
|
+
parentSpanId: raw.parentSpanId,
|
|
44
|
+
name: raw.name,
|
|
45
|
+
kind: raw.kind !== undefined ? ['INTERNAL', 'SERVER', 'CLIENT', 'PRODUCER', 'CONSUMER'][raw.kind] : undefined,
|
|
46
|
+
startTimeUnixNano,
|
|
47
|
+
endTimeUnixNano,
|
|
48
|
+
durationMs,
|
|
49
|
+
status: raw.status?.code !== undefined ? { code: raw.status.code, message: raw.status.message } : undefined,
|
|
50
|
+
attributes,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Convert flat log to normalized LogRecord
|
|
55
|
+
*/
|
|
56
|
+
function normalizeLog(raw) {
|
|
57
|
+
const attributes = { ...raw.attributes };
|
|
58
|
+
if (raw.resource?.serviceName) {
|
|
59
|
+
attributes['service.name'] = raw.resource.serviceName;
|
|
60
|
+
}
|
|
61
|
+
// Handle timestamp: either ISO string or [seconds, nanoseconds] array
|
|
62
|
+
let timestamp;
|
|
63
|
+
if (Array.isArray(raw.timestamp)) {
|
|
64
|
+
const ms = raw.timestamp[0] * 1000 + Math.floor(raw.timestamp[1] / 1_000_000);
|
|
65
|
+
timestamp = new Date(ms).toISOString();
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
timestamp = raw.timestamp;
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
timestamp,
|
|
72
|
+
severity: raw.severityText || raw.severity || 'INFO',
|
|
73
|
+
body: raw.body || '',
|
|
74
|
+
traceId: raw.traceId,
|
|
75
|
+
spanId: raw.spanId,
|
|
76
|
+
attributes,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Convert flat metric to normalized MetricDataPoint
|
|
81
|
+
*/
|
|
82
|
+
function normalizeMetric(raw) {
|
|
83
|
+
const attributes = { ...raw.attributes };
|
|
84
|
+
if (raw.resource?.serviceName) {
|
|
85
|
+
attributes['service.name'] = raw.resource.serviceName;
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
timestamp: raw.timestamp,
|
|
89
|
+
name: raw.name,
|
|
90
|
+
value: raw.value,
|
|
91
|
+
unit: raw.unit,
|
|
92
|
+
attributes,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get files within date range
|
|
97
|
+
*/
|
|
98
|
+
function getFilesInRange(dir, pattern, startDate, endDate) {
|
|
99
|
+
const files = listFiles(dir, pattern);
|
|
100
|
+
if (!startDate && !endDate) {
|
|
101
|
+
// Default to today only
|
|
102
|
+
const today = getDateString();
|
|
103
|
+
return files.filter(f => {
|
|
104
|
+
const date = parseDateFromFilename(f);
|
|
105
|
+
return date === today;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return files.filter(f => {
|
|
109
|
+
const date = parseDateFromFilename(f);
|
|
110
|
+
if (!date)
|
|
111
|
+
return false;
|
|
112
|
+
if (startDate && date < startDate)
|
|
113
|
+
return false;
|
|
114
|
+
if (endDate && date > endDate)
|
|
115
|
+
return false;
|
|
116
|
+
return true;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
export class LocalJsonlBackend {
|
|
120
|
+
name = 'local-jsonl';
|
|
121
|
+
telemetryDir;
|
|
122
|
+
constructor(telemetryDir) {
|
|
123
|
+
this.telemetryDir = telemetryDir || TELEMETRY_DIR;
|
|
124
|
+
}
|
|
125
|
+
async queryTraces(options) {
|
|
126
|
+
const files = getFilesInRange(this.telemetryDir, /traces-\d{4}-\d{2}-\d{2}\.jsonl$/, options.startDate, options.endDate);
|
|
127
|
+
const results = [];
|
|
128
|
+
const limit = options.limit || 100;
|
|
129
|
+
const offset = options.offset || 0;
|
|
130
|
+
for (const file of files) {
|
|
131
|
+
// Read flat span records (one per line)
|
|
132
|
+
const spans = readJsonlSync(file);
|
|
133
|
+
for (const raw of spans) {
|
|
134
|
+
const span = normalizeSpan(raw);
|
|
135
|
+
if (!span)
|
|
136
|
+
continue;
|
|
137
|
+
// Apply filters
|
|
138
|
+
if (options.traceId && span.traceId !== options.traceId)
|
|
139
|
+
continue;
|
|
140
|
+
if (options.spanName && !span.name.includes(options.spanName))
|
|
141
|
+
continue;
|
|
142
|
+
if (options.minDurationMs && (span.durationMs || 0) < options.minDurationMs)
|
|
143
|
+
continue;
|
|
144
|
+
if (options.maxDurationMs && (span.durationMs || Infinity) > options.maxDurationMs)
|
|
145
|
+
continue;
|
|
146
|
+
if (options.serviceName) {
|
|
147
|
+
const svc = span.attributes?.['service.name'];
|
|
148
|
+
if (svc !== options.serviceName)
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
results.push(span);
|
|
152
|
+
if (results.length >= offset + limit) {
|
|
153
|
+
return results.slice(offset, offset + limit);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return results.slice(offset, offset + limit);
|
|
158
|
+
}
|
|
159
|
+
async queryLogs(options) {
|
|
160
|
+
const files = getFilesInRange(this.telemetryDir, /logs-\d{4}-\d{2}-\d{2}\.jsonl$/, options.startDate, options.endDate);
|
|
161
|
+
const results = [];
|
|
162
|
+
const limit = options.limit || 100;
|
|
163
|
+
const offset = options.offset || 0;
|
|
164
|
+
for (const file of files) {
|
|
165
|
+
// Read flat log records (one per line)
|
|
166
|
+
const logs = readJsonlSync(file);
|
|
167
|
+
for (const raw of logs) {
|
|
168
|
+
const log = normalizeLog(raw);
|
|
169
|
+
if (!log)
|
|
170
|
+
continue;
|
|
171
|
+
// Apply filters
|
|
172
|
+
if (options.severity && log.severity.toUpperCase() !== options.severity.toUpperCase())
|
|
173
|
+
continue;
|
|
174
|
+
if (options.traceId && log.traceId !== options.traceId)
|
|
175
|
+
continue;
|
|
176
|
+
if (options.search && !log.body.toLowerCase().includes(options.search.toLowerCase()))
|
|
177
|
+
continue;
|
|
178
|
+
results.push(log);
|
|
179
|
+
if (results.length >= offset + limit) {
|
|
180
|
+
return results.slice(offset, offset + limit);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return results.slice(offset, offset + limit);
|
|
185
|
+
}
|
|
186
|
+
async queryMetrics(options) {
|
|
187
|
+
const files = getFilesInRange(this.telemetryDir, /metrics-\d{4}-\d{2}-\d{2}\.jsonl$/, options.startDate, options.endDate);
|
|
188
|
+
const results = [];
|
|
189
|
+
const limit = options.limit || 100;
|
|
190
|
+
const offset = options.offset || 0;
|
|
191
|
+
for (const file of files) {
|
|
192
|
+
// Read flat metric records (one per line)
|
|
193
|
+
const metrics = readJsonlSync(file);
|
|
194
|
+
for (const raw of metrics) {
|
|
195
|
+
const point = normalizeMetric(raw);
|
|
196
|
+
if (!point)
|
|
197
|
+
continue;
|
|
198
|
+
// Apply filters
|
|
199
|
+
if (options.metricName && !point.name.includes(options.metricName))
|
|
200
|
+
continue;
|
|
201
|
+
results.push(point);
|
|
202
|
+
if (results.length >= offset + limit) {
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (results.length >= offset + limit)
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
// Apply aggregation if requested
|
|
210
|
+
if (options.aggregation && results.length > 0) {
|
|
211
|
+
return this.aggregate(results, options.aggregation, options.groupBy);
|
|
212
|
+
}
|
|
213
|
+
return results.slice(offset, offset + limit);
|
|
214
|
+
}
|
|
215
|
+
aggregate(points, aggregation, groupBy) {
|
|
216
|
+
// Group by metric name and optional attributes
|
|
217
|
+
const groups = new Map();
|
|
218
|
+
for (const point of points) {
|
|
219
|
+
let key = point.name;
|
|
220
|
+
if (groupBy) {
|
|
221
|
+
for (const attr of groupBy) {
|
|
222
|
+
const val = point.attributes?.[attr];
|
|
223
|
+
if (val !== undefined)
|
|
224
|
+
key += `|${attr}=${val}`;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
const group = groups.get(key) || [];
|
|
228
|
+
group.push(point);
|
|
229
|
+
groups.set(key, group);
|
|
230
|
+
}
|
|
231
|
+
// Aggregate each group
|
|
232
|
+
const results = [];
|
|
233
|
+
for (const [, group] of groups) {
|
|
234
|
+
const values = group.map(p => p.value);
|
|
235
|
+
let value;
|
|
236
|
+
switch (aggregation) {
|
|
237
|
+
case 'sum':
|
|
238
|
+
value = values.reduce((a, b) => a + b, 0);
|
|
239
|
+
break;
|
|
240
|
+
case 'avg':
|
|
241
|
+
value = values.reduce((a, b) => a + b, 0) / values.length;
|
|
242
|
+
break;
|
|
243
|
+
case 'min':
|
|
244
|
+
value = Math.min(...values);
|
|
245
|
+
break;
|
|
246
|
+
case 'max':
|
|
247
|
+
value = Math.max(...values);
|
|
248
|
+
break;
|
|
249
|
+
case 'count':
|
|
250
|
+
value = values.length;
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
results.push({
|
|
254
|
+
timestamp: group[group.length - 1].timestamp,
|
|
255
|
+
name: group[0].name,
|
|
256
|
+
value,
|
|
257
|
+
unit: group[0].unit,
|
|
258
|
+
attributes: group[0].attributes,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
return results;
|
|
262
|
+
}
|
|
263
|
+
async healthCheck() {
|
|
264
|
+
if (!existsSync(this.telemetryDir)) {
|
|
265
|
+
return { status: 'error', message: `Telemetry directory not found: ${this.telemetryDir}` };
|
|
266
|
+
}
|
|
267
|
+
const today = getDateString();
|
|
268
|
+
const tracesFile = join(this.telemetryDir, `traces-${today}.jsonl`);
|
|
269
|
+
const logsFile = join(this.telemetryDir, `logs-${today}.jsonl`);
|
|
270
|
+
const hasTraces = existsSync(tracesFile);
|
|
271
|
+
const hasLogs = existsSync(logsFile);
|
|
272
|
+
if (!hasTraces && !hasLogs) {
|
|
273
|
+
return { status: 'ok', message: `No telemetry files for today (${today})` };
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
status: 'ok',
|
|
277
|
+
message: `Found: ${hasTraces ? 'traces' : ''}${hasTraces && hasLogs ? ', ' : ''}${hasLogs ? 'logs' : ''} for ${today}`,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=local-jsonl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-jsonl.js","sourceRoot":"","sources":["../../src/backends/local-jsonl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SigNoz Cloud API backend for querying traces, metrics, and logs
|
|
3
|
+
*/
|
|
4
|
+
import { TelemetryBackend, TraceSpan, LogRecord, MetricDataPoint, TraceQueryOptions, LogQueryOptions, MetricQueryOptions } from './index.js';
|
|
5
|
+
export declare class SigNozApiBackend implements TelemetryBackend {
|
|
6
|
+
name: string;
|
|
7
|
+
private baseUrl;
|
|
8
|
+
private apiKey;
|
|
9
|
+
private circuitBreaker;
|
|
10
|
+
constructor(baseUrl?: string, apiKey?: string);
|
|
11
|
+
private fetch;
|
|
12
|
+
/**
|
|
13
|
+
* Get nanosecond timestamp for SigNoz queries
|
|
14
|
+
*/
|
|
15
|
+
private getNanoTime;
|
|
16
|
+
queryTraces(options: TraceQueryOptions): Promise<TraceSpan[]>;
|
|
17
|
+
queryLogs(options: LogQueryOptions): Promise<LogRecord[]>;
|
|
18
|
+
queryMetrics(options: MetricQueryOptions): Promise<MetricDataPoint[]>;
|
|
19
|
+
healthCheck(): Promise<{
|
|
20
|
+
status: 'ok' | 'error';
|
|
21
|
+
message?: string;
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Get SigNoz trace viewer URL for a trace ID
|
|
25
|
+
*/
|
|
26
|
+
getTraceUrl(traceId: string): string;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=signoz-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signoz-api.d.ts","sourceRoot":"","sources":["../../src/backends/signoz-api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAkDpB,qBAAa,gBAAiB,YAAW,gBAAgB;IACvD,IAAI,SAAgB;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAA2B;gBAErC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;YAK/B,KAAK;IAkCnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOb,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAuF7D,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAsEzD,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA+DrE,WAAW,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAyB1E;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CASrC"}
|