feat(O11): Grafana dashboard for memory-observability

- 12 panels: rates, latency, errors, embedding, DB, health, relevance
- Covers all O1-O9 metrics in visual form
- Import via Grafana UI or provisioning
- Dashboard UID: poimen-memory-obs
This commit is contained in:
2026-09-13 21:49:30 +09:00
parent 12a97a59fa
commit ef31ef70a5
+131
View File
@@ -0,0 +1,131 @@
{
"annotations": { "list": [] },
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": null,
"links": [],
"panels": [
{
"title": "Ingest Rate (req/s)",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 },
"targets": [
{ "expr": "rate(memory_ingest_requests_total[5m])", "legendFormat": "ingest req/s" }
]
},
{
"title": "Query Rate (req/s)",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 0 },
"targets": [
{ "expr": "rate(memory_query_requests_total[5m])", "legendFormat": "query req/s" }
]
},
{
"title": "Ingest Latency (p50/p95/p99)",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 8 },
"targets": [
{ "expr": "histogram_quantile(0.5, rate(memory_ingest_duration_seconds_bucket[5m]))", "legendFormat": "p50" },
{ "expr": "histogram_quantile(0.95, rate(memory_ingest_duration_seconds_bucket[5m]))", "legendFormat": "p95" },
{ "expr": "histogram_quantile(0.99, rate(memory_ingest_duration_seconds_bucket[5m]))", "legendFormat": "p99" }
]
},
{
"title": "Query Latency (p50/p95/p99)",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 8 },
"targets": [
{ "expr": "histogram_quantile(0.5, rate(memory_query_duration_seconds_bucket[5m]))", "legendFormat": "p50" },
{ "expr": "histogram_quantile(0.95, rate(memory_query_duration_seconds_bucket[5m]))", "legendFormat": "p95" },
{ "expr": "histogram_quantile(0.99, rate(memory_query_duration_seconds_bucket[5m]))", "legendFormat": "p99" }
]
},
{
"title": "Error Rates",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 16 },
"targets": [
{ "expr": "rate(memory_ingest_errors_total[5m])", "legendFormat": "ingest errors" },
{ "expr": "rate(memory_query_errors_total[5m])", "legendFormat": "query errors" },
{ "expr": "rate(memory_query_embedding_failures_total[5m])", "legendFormat": "embedding failures" }
]
},
{
"title": "Embedding Latency",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 16 },
"targets": [
{ "expr": "histogram_quantile(0.5, rate(memory_query_embedding_duration_seconds_bucket[5m]))", "legendFormat": "p50" },
{ "expr": "histogram_quantile(0.95, rate(memory_query_embedding_duration_seconds_bucket[5m]))", "legendFormat": "p95" }
]
},
{
"title": "DB Row Counts",
"type": "stat",
"gridPos": { "h": 4, "w": 12, "x": 0, "y": 24 },
"targets": [
{ "expr": "memory_db_table_entity_rows", "legendFormat": "entities" },
{ "expr": "memory_db_table_edge_rows", "legendFormat": "edges" },
{ "expr": "memory_db_table_chunk_rows", "legendFormat": "chunks" }
]
},
{
"title": "Dependency Health",
"type": "stat",
"gridPos": { "h": 4, "w": 12, "x": 12, "y": 24 },
"targets": [
{ "expr": "memory_dependency_db_up", "legendFormat": "DB" },
{ "expr": "memory_dependency_embedding_up", "legendFormat": "Embedding" },
{ "expr": "memory_dependency_opensearch_up", "legendFormat": "OpenSearch" },
{ "expr": "memory_dependency_llm_up", "legendFormat": "LLM" }
]
},
{
"title": "DB Pool Stats",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 28 },
"targets": [
{ "expr": "memory_db_pool_size", "legendFormat": "pool size" },
{ "expr": "memory_db_pool_idle", "legendFormat": "idle" },
{ "expr": "memory_db_pool_active", "legendFormat": "active" }
]
},
{
"title": "Relevance Metrics",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 28 },
"targets": [
{ "expr": "memory_relevance_precision", "legendFormat": "precision" },
{ "expr": "memory_relevance_recall", "legendFormat": "recall" },
{ "expr": "memory_relevance_f1_score", "legendFormat": "F1" }
]
},
{
"title": "In-Flight Operations",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 36 },
"targets": [
{ "expr": "memory_ingest_in_flight", "legendFormat": "ingest" },
{ "expr": "memory_query_in_flight", "legendFormat": "query" }
]
},
{
"title": "Write Volume",
"type": "timeseries",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 36 },
"targets": [
{ "expr": "rate(memory_write_entities_total[5m])", "legendFormat": "entities/s" },
{ "expr": "rate(memory_write_edges_total[5m])", "legendFormat": "edges/s" },
{ "expr": "rate(memory_write_chunks_total[5m])", "legendFormat": "chunks/s" }
]
}
],
"schemaVersion": 39,
"tags": ["poimen", "memory", "observability"],
"templating": { "list": [] },
"time": { "from": "now-1h", "to": "now" },
"title": "Poimen Memory Observability",
"uid": "poimen-memory-obs"
}