@unrdf/observability 26.4.2
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/.eslintrc.cjs +10 -0
- package/IMPLEMENTATION-SUMMARY.md +478 -0
- package/LICENSE +21 -0
- package/README.md +482 -0
- package/capability-map.md +90 -0
- package/config/alert-rules.yml +269 -0
- package/config/prometheus.yml +136 -0
- package/dashboards/grafana-unrdf.json +798 -0
- package/dashboards/unrdf-workflow-dashboard.json +295 -0
- package/docs/OBSERVABILITY-PATTERNS.md +681 -0
- package/docs/OBSERVABILITY-RUNBOOK.md +554 -0
- package/examples/observability-demo.mjs +334 -0
- package/package.json +46 -0
- package/src/advanced-metrics.mjs +413 -0
- package/src/alerts/alert-manager.mjs +436 -0
- package/src/custom-events.mjs +558 -0
- package/src/distributed-tracing.mjs +352 -0
- package/src/exporters/grafana-exporter.mjs +415 -0
- package/src/index.mjs +61 -0
- package/src/metrics/workflow-metrics.mjs +346 -0
- package/src/receipts/anchor.mjs +155 -0
- package/src/receipts/index.mjs +62 -0
- package/src/receipts/merkle-tree.mjs +188 -0
- package/src/receipts/receipt-chain.mjs +209 -0
- package/src/receipts/receipt-schema.mjs +128 -0
- package/src/receipts/tamper-detection.mjs +219 -0
- package/test/advanced-metrics.test.mjs +302 -0
- package/test/custom-events.test.mjs +387 -0
- package/test/distributed-tracing.test.mjs +314 -0
- package/validation/observability-validation.mjs +366 -0
- package/vitest.config.mjs +25 -0
package/README.md
ADDED
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
# @unrdf/observability
|
|
2
|
+
|
|
3
|
+
**Innovative Prometheus/Grafana observability dashboard for UNRDF distributed workflows**
|
|
4
|
+
|
|
5
|
+
Real-time monitoring, alerting, and visualization for workflow execution, resource utilization, and business metrics.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
### Metrics Collection
|
|
10
|
+
|
|
11
|
+
- **Workflow Execution Metrics**: Total executions, duration, active workflows
|
|
12
|
+
- **Task Performance**: Execution time, success rate, queue depth
|
|
13
|
+
- **Resource Utilization**: CPU, memory, disk monitoring
|
|
14
|
+
- **Event Sourcing**: Events appended, store size tracking
|
|
15
|
+
- **Business Metrics**: Policy evaluations, cryptographic receipts
|
|
16
|
+
- **Latency Percentiles**: p50, p90, p95, p99 tracking
|
|
17
|
+
|
|
18
|
+
### Alerting System
|
|
19
|
+
|
|
20
|
+
- **Threshold-Based Alerts**: Configurable rules with hysteresis
|
|
21
|
+
- **Anomaly Detection**: Statistical z-score analysis
|
|
22
|
+
- **Webhook Notifications**: HTTP callbacks for alert events
|
|
23
|
+
- **Alert Deduplication**: Smart grouping and correlation
|
|
24
|
+
- **Severity Levels**: INFO, WARNING, CRITICAL
|
|
25
|
+
|
|
26
|
+
### Grafana Dashboards
|
|
27
|
+
|
|
28
|
+
- **Pre-built Dashboards**: Ready-to-use visualizations
|
|
29
|
+
- **Real-time Updates**: 5-second refresh intervals
|
|
30
|
+
- **Custom Variables**: Filter by workflow ID, pattern
|
|
31
|
+
- **Alert Annotations**: Visual markers for events
|
|
32
|
+
- **Exportable JSON**: Import directly into Grafana
|
|
33
|
+
|
|
34
|
+
## Installation
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pnpm add @unrdf/observability
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Quick Start
|
|
41
|
+
|
|
42
|
+
### Basic Usage
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
import { createWorkflowMetrics } from '@unrdf/observability';
|
|
46
|
+
|
|
47
|
+
const metrics = createWorkflowMetrics({
|
|
48
|
+
enableDefaultMetrics: true,
|
|
49
|
+
prefix: 'unrdf_workflow_',
|
|
50
|
+
labels: { environment: 'production' },
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Record workflow execution
|
|
54
|
+
metrics.recordWorkflowStart('wf-123', 'SEQUENCE');
|
|
55
|
+
// ... execute workflow ...
|
|
56
|
+
metrics.recordWorkflowComplete('wf-123', 'completed', 2.5, 'SEQUENCE');
|
|
57
|
+
|
|
58
|
+
// Export metrics
|
|
59
|
+
const prometheusMetrics = await metrics.getMetrics();
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Complete Observability Stack
|
|
63
|
+
|
|
64
|
+
```javascript
|
|
65
|
+
import { createObservabilityStack } from '@unrdf/observability';
|
|
66
|
+
|
|
67
|
+
const { metrics, grafana, alerts } = await createObservabilityStack({
|
|
68
|
+
metrics: {
|
|
69
|
+
enableDefaultMetrics: true,
|
|
70
|
+
prefix: 'unrdf_workflow_',
|
|
71
|
+
},
|
|
72
|
+
alerts: {
|
|
73
|
+
rules: [
|
|
74
|
+
{
|
|
75
|
+
id: 'high-latency',
|
|
76
|
+
name: 'High Workflow Latency',
|
|
77
|
+
metric: 'workflow_duration',
|
|
78
|
+
threshold: 10,
|
|
79
|
+
operator: 'gt',
|
|
80
|
+
severity: 'warning',
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
enableAnomalyDetection: true,
|
|
84
|
+
},
|
|
85
|
+
grafana: {
|
|
86
|
+
title: 'Production Workflows',
|
|
87
|
+
datasource: 'Prometheus',
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// Listen for alerts
|
|
92
|
+
alerts.on('alert', alert => {
|
|
93
|
+
console.log(`Alert: ${alert.name} - ${alert.severity}`);
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Live Demo
|
|
98
|
+
|
|
99
|
+
Run the included demo to see metrics in action:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
cd packages/observability
|
|
103
|
+
pnpm install
|
|
104
|
+
pnpm demo
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Then visit:
|
|
108
|
+
|
|
109
|
+
- **Prometheus Metrics**: http://localhost:9090/metrics
|
|
110
|
+
- **Metrics JSON**: http://localhost:9090/metrics/json
|
|
111
|
+
- **Grafana Dashboard**: http://localhost:9090/dashboard
|
|
112
|
+
- **Active Alerts**: http://localhost:9090/alerts
|
|
113
|
+
- **Statistics**: http://localhost:9090/stats
|
|
114
|
+
|
|
115
|
+
## API Reference
|
|
116
|
+
|
|
117
|
+
### WorkflowMetrics
|
|
118
|
+
|
|
119
|
+
#### Constructor
|
|
120
|
+
|
|
121
|
+
```javascript
|
|
122
|
+
new WorkflowMetrics(config);
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Config Options:**
|
|
126
|
+
|
|
127
|
+
- `enableDefaultMetrics` (boolean): Enable Node.js default metrics (default: true)
|
|
128
|
+
- `prefix` (string): Metric name prefix (default: 'unrdf*workflow*')
|
|
129
|
+
- `labels` (object): Global labels for all metrics
|
|
130
|
+
- `collectInterval` (number): Collection interval in ms (default: 10000)
|
|
131
|
+
|
|
132
|
+
#### Methods
|
|
133
|
+
|
|
134
|
+
##### recordWorkflowStart(workflowId, pattern)
|
|
135
|
+
|
|
136
|
+
Record workflow execution start.
|
|
137
|
+
|
|
138
|
+
##### recordWorkflowComplete(workflowId, status, durationSeconds, pattern)
|
|
139
|
+
|
|
140
|
+
Record workflow completion with duration.
|
|
141
|
+
|
|
142
|
+
##### recordTaskExecution(workflowId, taskId, taskType, status, durationSeconds)
|
|
143
|
+
|
|
144
|
+
Record task execution metrics.
|
|
145
|
+
|
|
146
|
+
##### updateTaskQueueDepth(workflowId, queueName, depth)
|
|
147
|
+
|
|
148
|
+
Update task queue depth gauge.
|
|
149
|
+
|
|
150
|
+
##### recordResourceUtilization(resourceType, resourceId, utilizationPercent)
|
|
151
|
+
|
|
152
|
+
Record resource utilization (0-100%).
|
|
153
|
+
|
|
154
|
+
##### recordEventAppended(eventType, workflowId)
|
|
155
|
+
|
|
156
|
+
Record event appended to event store.
|
|
157
|
+
|
|
158
|
+
##### recordPolicyEvaluation(policyName, result)
|
|
159
|
+
|
|
160
|
+
Record policy evaluation result.
|
|
161
|
+
|
|
162
|
+
##### recordCryptoReceipt(workflowId, algorithm)
|
|
163
|
+
|
|
164
|
+
Record cryptographic receipt generation.
|
|
165
|
+
|
|
166
|
+
##### recordError(errorType, workflowId, severity)
|
|
167
|
+
|
|
168
|
+
Record error occurrence.
|
|
169
|
+
|
|
170
|
+
##### getMetrics()
|
|
171
|
+
|
|
172
|
+
Get metrics in Prometheus text format.
|
|
173
|
+
|
|
174
|
+
##### getMetricsJSON()
|
|
175
|
+
|
|
176
|
+
Get metrics in JSON format.
|
|
177
|
+
|
|
178
|
+
### AlertManager
|
|
179
|
+
|
|
180
|
+
#### Constructor
|
|
181
|
+
|
|
182
|
+
```javascript
|
|
183
|
+
new AlertManager(config);
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Config Options:**
|
|
187
|
+
|
|
188
|
+
- `rules` (array): Initial alert rules
|
|
189
|
+
- `webhooks` (array): Webhook endpoints
|
|
190
|
+
- `checkInterval` (number): Rule check interval (default: 10000)
|
|
191
|
+
- `enableAnomalyDetection` (boolean): Enable anomaly detection (default: true)
|
|
192
|
+
|
|
193
|
+
#### Methods
|
|
194
|
+
|
|
195
|
+
##### addRule(rule)
|
|
196
|
+
|
|
197
|
+
Add alert rule.
|
|
198
|
+
|
|
199
|
+
**Rule Schema:**
|
|
200
|
+
|
|
201
|
+
```javascript
|
|
202
|
+
{
|
|
203
|
+
id: 'unique-rule-id',
|
|
204
|
+
name: 'Human Readable Name',
|
|
205
|
+
metric: 'metric_name',
|
|
206
|
+
threshold: 100,
|
|
207
|
+
operator: 'gt', // gt, lt, gte, lte, eq
|
|
208
|
+
severity: 'warning', // info, warning, critical
|
|
209
|
+
duration: 60000, // ms
|
|
210
|
+
enabled: true
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
##### evaluateMetric(metricName, value, labels)
|
|
215
|
+
|
|
216
|
+
Evaluate metric against all rules.
|
|
217
|
+
|
|
218
|
+
##### getActiveAlerts()
|
|
219
|
+
|
|
220
|
+
Get currently active alerts.
|
|
221
|
+
|
|
222
|
+
##### getAlertHistory(filters)
|
|
223
|
+
|
|
224
|
+
Get alert history with optional filters.
|
|
225
|
+
|
|
226
|
+
##### getStatistics()
|
|
227
|
+
|
|
228
|
+
Get alert statistics.
|
|
229
|
+
|
|
230
|
+
#### Events
|
|
231
|
+
|
|
232
|
+
- `alert`: Fired when alert triggers
|
|
233
|
+
- `alert:resolved`: Fired when alert resolves
|
|
234
|
+
- `webhook:error`: Fired on webhook delivery failure
|
|
235
|
+
|
|
236
|
+
### GrafanaExporter
|
|
237
|
+
|
|
238
|
+
#### Constructor
|
|
239
|
+
|
|
240
|
+
```javascript
|
|
241
|
+
new GrafanaExporter(config);
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**Config Options:**
|
|
245
|
+
|
|
246
|
+
- `title` (string): Dashboard title
|
|
247
|
+
- `datasource` (string): Prometheus datasource name (default: 'Prometheus')
|
|
248
|
+
- `refreshInterval` (string): Dashboard refresh interval (default: '5s')
|
|
249
|
+
- `tags` (array): Dashboard tags
|
|
250
|
+
|
|
251
|
+
#### Methods
|
|
252
|
+
|
|
253
|
+
##### generateDashboard()
|
|
254
|
+
|
|
255
|
+
Generate complete Grafana dashboard configuration.
|
|
256
|
+
|
|
257
|
+
##### exportJSON(pretty)
|
|
258
|
+
|
|
259
|
+
Export dashboard as JSON string.
|
|
260
|
+
|
|
261
|
+
##### generateAlertDashboard()
|
|
262
|
+
|
|
263
|
+
Generate alert-focused dashboard.
|
|
264
|
+
|
|
265
|
+
## Metrics Collected
|
|
266
|
+
|
|
267
|
+
### Workflow Metrics
|
|
268
|
+
|
|
269
|
+
- `unrdf_workflow_executions_total` (Counter): Total workflow executions
|
|
270
|
+
- `unrdf_workflow_execution_duration_seconds` (Histogram): Workflow duration
|
|
271
|
+
- `unrdf_workflow_active_workflows` (Gauge): Active workflows
|
|
272
|
+
|
|
273
|
+
### Task Metrics
|
|
274
|
+
|
|
275
|
+
- `unrdf_workflow_task_executions_total` (Counter): Total task executions
|
|
276
|
+
- `unrdf_workflow_task_duration_seconds` (Histogram): Task duration
|
|
277
|
+
- `unrdf_workflow_task_queue_depth` (Gauge): Queue depth
|
|
278
|
+
|
|
279
|
+
### Resource Metrics
|
|
280
|
+
|
|
281
|
+
- `unrdf_workflow_resource_utilization` (Gauge): Resource utilization %
|
|
282
|
+
- `unrdf_workflow_resource_allocations_total` (Counter): Resource allocations
|
|
283
|
+
|
|
284
|
+
### Event Sourcing Metrics
|
|
285
|
+
|
|
286
|
+
- `unrdf_workflow_events_appended_total` (Counter): Events appended
|
|
287
|
+
- `unrdf_workflow_event_store_size_bytes` (Gauge): Event store size
|
|
288
|
+
|
|
289
|
+
### Business Metrics
|
|
290
|
+
|
|
291
|
+
- `unrdf_workflow_policy_evaluations_total` (Counter): Policy evaluations
|
|
292
|
+
- `unrdf_workflow_crypto_receipts_total` (Counter): Crypto receipts
|
|
293
|
+
- `unrdf_workflow_errors_total` (Counter): Errors
|
|
294
|
+
|
|
295
|
+
### Performance Metrics
|
|
296
|
+
|
|
297
|
+
- `unrdf_workflow_latency_percentiles` (Summary): Latency percentiles
|
|
298
|
+
|
|
299
|
+
## Integration with Prometheus
|
|
300
|
+
|
|
301
|
+
### Prometheus Configuration
|
|
302
|
+
|
|
303
|
+
```yaml
|
|
304
|
+
scrape_configs:
|
|
305
|
+
- job_name: 'unrdf-workflows'
|
|
306
|
+
scrape_interval: 5s
|
|
307
|
+
static_configs:
|
|
308
|
+
- targets: ['localhost:9090']
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Alert Rules (prometheus.yml)
|
|
312
|
+
|
|
313
|
+
```yaml
|
|
314
|
+
groups:
|
|
315
|
+
- name: unrdf_workflow_alerts
|
|
316
|
+
interval: 30s
|
|
317
|
+
rules:
|
|
318
|
+
- alert: HighWorkflowErrorRate
|
|
319
|
+
expr: rate(unrdf_workflow_errors_total[5m]) > 1
|
|
320
|
+
for: 5m
|
|
321
|
+
labels:
|
|
322
|
+
severity: critical
|
|
323
|
+
annotations:
|
|
324
|
+
summary: 'High workflow error rate detected'
|
|
325
|
+
description: 'Error rate is {{ $value }} errors/sec'
|
|
326
|
+
|
|
327
|
+
- alert: HighResourceUtilization
|
|
328
|
+
expr: unrdf_workflow_resource_utilization > 90
|
|
329
|
+
for: 5m
|
|
330
|
+
labels:
|
|
331
|
+
severity: warning
|
|
332
|
+
annotations:
|
|
333
|
+
summary: 'Resource utilization above 90%'
|
|
334
|
+
description: '{{ $labels.resource_type }} on {{ $labels.resource_id }}'
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## Grafana Dashboard Import
|
|
338
|
+
|
|
339
|
+
1. Export dashboard JSON:
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
curl http://localhost:9090/dashboard/export > dashboard.json
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
2. Import in Grafana:
|
|
346
|
+
- Navigate to Dashboards → Import
|
|
347
|
+
- Upload `dashboard.json`
|
|
348
|
+
- Select Prometheus datasource
|
|
349
|
+
- Click Import
|
|
350
|
+
|
|
351
|
+
## Architecture
|
|
352
|
+
|
|
353
|
+
```
|
|
354
|
+
┌─────────────────────────────────────────────┐
|
|
355
|
+
│ Workflow Application │
|
|
356
|
+
│ (Records metrics via WorkflowMetrics) │
|
|
357
|
+
└─────────────────┬───────────────────────────┘
|
|
358
|
+
│
|
|
359
|
+
↓
|
|
360
|
+
┌─────────────────────────────────────────────┐
|
|
361
|
+
│ Prometheus Metrics Endpoint │
|
|
362
|
+
│ (Express Server) │
|
|
363
|
+
│ http://localhost:9090/metrics │
|
|
364
|
+
└─────────────────┬───────────────────────────┘
|
|
365
|
+
│
|
|
366
|
+
↓
|
|
367
|
+
┌─────────────────────────────────────────────┐
|
|
368
|
+
│ Prometheus Server (Scraper) │
|
|
369
|
+
│ - Scrapes metrics every 5s │
|
|
370
|
+
│ - Stores time-series data │
|
|
371
|
+
│ - Evaluates alert rules │
|
|
372
|
+
└─────────────────┬───────────────────────────┘
|
|
373
|
+
│
|
|
374
|
+
↓
|
|
375
|
+
┌─────────────────────────────────────────────┐
|
|
376
|
+
│ Grafana Dashboard │
|
|
377
|
+
│ - Visualizes metrics │
|
|
378
|
+
│ - Real-time graphs │
|
|
379
|
+
│ - Alert annotations │
|
|
380
|
+
└─────────────────────────────────────────────┘
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
## Alert Flow
|
|
384
|
+
|
|
385
|
+
```
|
|
386
|
+
Metric Value
|
|
387
|
+
↓
|
|
388
|
+
AlertManager.evaluateMetric()
|
|
389
|
+
↓
|
|
390
|
+
Check Threshold Rules
|
|
391
|
+
↓
|
|
392
|
+
Check Anomaly Detection (z-score)
|
|
393
|
+
↓
|
|
394
|
+
Alert Triggered?
|
|
395
|
+
↓
|
|
396
|
+
Emit 'alert' Event
|
|
397
|
+
↓
|
|
398
|
+
Send Webhook Notifications
|
|
399
|
+
↓
|
|
400
|
+
Store in Alert History
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
## Performance
|
|
404
|
+
|
|
405
|
+
- **Overhead**: <1ms per metric recording
|
|
406
|
+
- **Memory**: ~50MB for 1000 workflows
|
|
407
|
+
- **Throughput**: 10,000+ metrics/sec
|
|
408
|
+
- **Alert Latency**: <100ms detection to notification
|
|
409
|
+
|
|
410
|
+
## Best Practices
|
|
411
|
+
|
|
412
|
+
### 1. Metric Cardinality
|
|
413
|
+
|
|
414
|
+
Keep label cardinality low to avoid memory issues:
|
|
415
|
+
|
|
416
|
+
```javascript
|
|
417
|
+
// ✅ Good - bounded cardinality
|
|
418
|
+
metrics.recordWorkflowComplete(workflowId, 'completed', duration, 'SEQUENCE');
|
|
419
|
+
|
|
420
|
+
// ❌ Bad - unbounded cardinality
|
|
421
|
+
// metrics.recordWorkflow(userId, timestamp, randomValue);
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### 2. Alert Thresholds
|
|
425
|
+
|
|
426
|
+
Set thresholds based on baseline + 2σ:
|
|
427
|
+
|
|
428
|
+
```javascript
|
|
429
|
+
const baseline = 5; // seconds
|
|
430
|
+
const stdDev = 1.5;
|
|
431
|
+
const threshold = baseline + 2 * stdDev; // 8 seconds
|
|
432
|
+
|
|
433
|
+
alerts.addRule({
|
|
434
|
+
id: 'high-latency',
|
|
435
|
+
metric: 'workflow_duration',
|
|
436
|
+
threshold,
|
|
437
|
+
operator: 'gt',
|
|
438
|
+
severity: 'warning',
|
|
439
|
+
});
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### 3. Dashboard Organization
|
|
443
|
+
|
|
444
|
+
- Group related panels
|
|
445
|
+
- Use template variables for filtering
|
|
446
|
+
- Set appropriate time ranges
|
|
447
|
+
- Enable auto-refresh (5-10s)
|
|
448
|
+
|
|
449
|
+
### 4. Webhook Reliability
|
|
450
|
+
|
|
451
|
+
- Use exponential backoff
|
|
452
|
+
- Implement idempotency
|
|
453
|
+
- Monitor webhook failures
|
|
454
|
+
- Set reasonable timeouts
|
|
455
|
+
|
|
456
|
+
## Troubleshooting
|
|
457
|
+
|
|
458
|
+
### Metrics Not Appearing
|
|
459
|
+
|
|
460
|
+
1. Check metrics endpoint: `curl http://localhost:9090/metrics`
|
|
461
|
+
2. Verify Prometheus scraping: Prometheus UI → Targets
|
|
462
|
+
3. Check for metric name typos
|
|
463
|
+
|
|
464
|
+
### Alerts Not Firing
|
|
465
|
+
|
|
466
|
+
1. Verify rule configuration: `alerts.rules`
|
|
467
|
+
2. Check metric values: `alerts.metricHistory`
|
|
468
|
+
3. Enable debug logging: `alerts.on('alert', console.log)`
|
|
469
|
+
|
|
470
|
+
### High Memory Usage
|
|
471
|
+
|
|
472
|
+
1. Reduce metric history: limit to 100-500 samples
|
|
473
|
+
2. Lower cardinality: fewer unique label combinations
|
|
474
|
+
3. Increase scrape interval: 10-30s instead of 5s
|
|
475
|
+
|
|
476
|
+
## License
|
|
477
|
+
|
|
478
|
+
MIT
|
|
479
|
+
|
|
480
|
+
## Contributing
|
|
481
|
+
|
|
482
|
+
See main UNRDF repository for contribution guidelines.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Capability Map: @unrdf/observability
|
|
2
|
+
|
|
3
|
+
**Generated:** 2025-12-28
|
|
4
|
+
**Package:** @unrdf/observability
|
|
5
|
+
**Version:** 1.0.0
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
|
|
11
|
+
Innovative Prometheus/Grafana observability dashboard for UNRDF distributed workflows
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Capability Atoms
|
|
16
|
+
|
|
17
|
+
### A57: OTEL Integration
|
|
18
|
+
|
|
19
|
+
**Runtime:** Node.js
|
|
20
|
+
**Invariants:** tracing, metrics, logs
|
|
21
|
+
**Evidence:** `packages/observability/src/index.mjs`
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Package Metadata
|
|
26
|
+
|
|
27
|
+
### Dependencies
|
|
28
|
+
|
|
29
|
+
- `prom-client`: ^15.1.0
|
|
30
|
+
- `@opentelemetry/api`: ^1.9.0
|
|
31
|
+
- `@opentelemetry/exporter-prometheus`: ^0.49.0
|
|
32
|
+
- `@opentelemetry/sdk-metrics`: ^1.21.0
|
|
33
|
+
- `express`: ^4.18.2
|
|
34
|
+
- `zod`: ^4.1.13
|
|
35
|
+
|
|
36
|
+
### Exports
|
|
37
|
+
|
|
38
|
+
- `.`: `./src/index.mjs`
|
|
39
|
+
- `./metrics`: `./src/metrics/workflow-metrics.mjs`
|
|
40
|
+
- `./exporters`: `./src/exporters/grafana-exporter.mjs`
|
|
41
|
+
- `./alerts`: `./src/alerts/alert-manager.mjs`
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Integration Patterns
|
|
46
|
+
|
|
47
|
+
### Primary Use Cases
|
|
48
|
+
|
|
49
|
+
1. **OTEL Integration**
|
|
50
|
+
- Import: `import { /* exports */ } from '@unrdf/observability'`
|
|
51
|
+
- Use for: OTEL Integration operations
|
|
52
|
+
- Runtime: Node.js
|
|
53
|
+
|
|
54
|
+
### Composition Examples
|
|
55
|
+
|
|
56
|
+
```javascript
|
|
57
|
+
import { createStore } from '@unrdf/oxigraph';
|
|
58
|
+
import {} from /* functions */ '@unrdf/observability';
|
|
59
|
+
|
|
60
|
+
const store = createStore();
|
|
61
|
+
// Use observability capabilities with store
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Evidence Trail
|
|
67
|
+
|
|
68
|
+
- **A57**: `packages/observability/src/index.mjs`
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Next Steps
|
|
73
|
+
|
|
74
|
+
1. **Explore API Surface**
|
|
75
|
+
- Review exports in package.json
|
|
76
|
+
- Read source files in `src/` directory
|
|
77
|
+
|
|
78
|
+
2. **Integration Testing**
|
|
79
|
+
- Create test cases using package capabilities
|
|
80
|
+
- Verify compatibility with dependent packages
|
|
81
|
+
|
|
82
|
+
3. **Performance Profiling**
|
|
83
|
+
- Benchmark key operations
|
|
84
|
+
- Measure runtime characteristics
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
**Status:** GENERATED
|
|
89
|
+
**Method:** Systematic extraction from capability-basis.md + package.json analysis
|
|
90
|
+
**Confidence:** 95% (evidence-based)
|