feat: add Loki log query support to lab-monitoring
Add 3 opt-in Loki tools (query_logs, list_labels, list_label_values) that are registered when LOKI_URL is configured. Includes Loki HTTP client, CLI commands (logs, labels), NixOS module option, formatting, and tests. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
23
README.md
23
README.md
@@ -18,13 +18,14 @@ Search and query Home Manager configuration options across multiple home-manager
|
||||
|
||||
### Lab Monitoring (`lab-monitoring`)
|
||||
|
||||
Query Prometheus metrics and Alertmanager alerts from your monitoring stack. Unlike other servers, this queries live HTTP APIs — no database or indexing needed.
|
||||
Query Prometheus metrics, Alertmanager alerts, and Loki logs from your monitoring stack. Unlike other servers, this queries live HTTP APIs — no database or indexing needed.
|
||||
|
||||
- List and inspect alerts from Alertmanager
|
||||
- Execute PromQL queries against Prometheus
|
||||
- Search metric names with metadata
|
||||
- View scrape target health
|
||||
- Manage alert silences
|
||||
- Query logs via LogQL (when Loki is configured)
|
||||
|
||||
### NixOS Options (`nixos-options`) - Legacy
|
||||
|
||||
@@ -97,7 +98,8 @@ Configure in your MCP client (e.g., Claude Desktop):
|
||||
"args": ["serve"],
|
||||
"env": {
|
||||
"PROMETHEUS_URL": "http://prometheus.example.com:9090",
|
||||
"ALERTMANAGER_URL": "http://alertmanager.example.com:9093"
|
||||
"ALERTMANAGER_URL": "http://alertmanager.example.com:9093",
|
||||
"LOKI_URL": "http://loki.example.com:3100"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -135,7 +137,8 @@ Alternatively, if you have Nix installed, you can use the flake directly without
|
||||
"args": ["run", "git+https://git.t-juice.club/torjus/labmcp#lab-monitoring", "--", "serve"],
|
||||
"env": {
|
||||
"PROMETHEUS_URL": "http://prometheus.example.com:9090",
|
||||
"ALERTMANAGER_URL": "http://alertmanager.example.com:9093"
|
||||
"ALERTMANAGER_URL": "http://alertmanager.example.com:9093",
|
||||
"LOKI_URL": "http://loki.example.com:3100"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -256,6 +259,15 @@ lab-monitoring targets
|
||||
# Search metrics
|
||||
lab-monitoring metrics node
|
||||
lab-monitoring metrics -n 20 cpu
|
||||
|
||||
# Query logs from Loki (requires LOKI_URL)
|
||||
lab-monitoring logs '{job="varlogs"}'
|
||||
lab-monitoring logs '{job="nginx"} |= "error"' --start 2h --limit 50
|
||||
lab-monitoring logs '{job="systemd"}' --direction forward
|
||||
|
||||
# List Loki labels
|
||||
lab-monitoring labels
|
||||
lab-monitoring labels --values job
|
||||
```
|
||||
|
||||
**Delete an indexed revision:**
|
||||
@@ -276,6 +288,7 @@ hm-options delete release-23.11
|
||||
| `NIXOS_OPTIONS_DATABASE` | Database connection string for nixos-options (legacy) | `sqlite://nixos-options.db` |
|
||||
| `PROMETHEUS_URL` | Prometheus base URL for lab-monitoring | `http://localhost:9090` |
|
||||
| `ALERTMANAGER_URL` | Alertmanager base URL for lab-monitoring | `http://localhost:9093` |
|
||||
| `LOKI_URL` | Loki base URL for lab-monitoring (optional, enables log tools) | *(none)* |
|
||||
|
||||
### Database Connection Strings
|
||||
|
||||
@@ -336,6 +349,9 @@ hm-options -d "sqlite://my.db" index hm-unstable
|
||||
| `list_targets` | List scrape targets with health status |
|
||||
| `list_silences` | List active/pending alert silences |
|
||||
| `create_silence` | Create a new alert silence (requires `--enable-silences` flag) |
|
||||
| `query_logs` | Execute a LogQL range query against Loki (requires `LOKI_URL`) |
|
||||
| `list_labels` | List available label names from Loki (requires `LOKI_URL`) |
|
||||
| `list_label_values` | List values for a specific label from Loki (requires `LOKI_URL`) |
|
||||
|
||||
## NixOS Modules
|
||||
|
||||
@@ -489,6 +505,7 @@ Both `options.http` and `packages.http` also support:
|
||||
| `package` | package | from flake | Package to use |
|
||||
| `prometheusUrl` | string | `"http://localhost:9090"` | Prometheus base URL |
|
||||
| `alertmanagerUrl` | string | `"http://localhost:9093"` | Alertmanager base URL |
|
||||
| `lokiUrl` | nullOr string | `null` | Loki base URL (enables log query tools when set) |
|
||||
| `enableSilences` | bool | `false` | Enable the create_silence tool (write operation) |
|
||||
| `http.address` | string | `"127.0.0.1:8084"` | HTTP listen address |
|
||||
| `http.endpoint` | string | `"/mcp"` | HTTP endpoint path |
|
||||
|
||||
Reference in New Issue
Block a user