Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion kubernetes/monitoring/grafana-dashboard-monitoring-stack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ data:
"uid": "codeplace-monitoring-stack",
"title": "CodePlace Monitoring Stack",
"schemaVersion": 39,
"version": 2,
"version": 3,
"refresh": "30s",
"tags": ["codeplace", "monitoring", "scrape-contract"],
"links": [
Expand Down Expand Up @@ -571,6 +571,22 @@ data:
"legendFormat": "{{namespace}} {{job}}"
}
]
},
{
"type": "logs",
"title": "Recent kube-vip Logs",
"description": "Cluster control-plane kube-vip logs for VIP ownership, leader election, and ARP troubleshooting.",
"gridPos": {"x": 0, "y": 49, "w": 24, "h": 8},
"datasource": {"type": "loki", "uid": "Loki"},
"options": {
"showLabels": false,
"showTime": true,
"wrapLogMessage": true,
"dedupStrategy": "none"
},
"targets": [
{"refId": "A", "expr": "{namespace=\"kube-system\", app_kubernetes_io_name=\"kube-vip-ds\"}"}
]
}
]
}
1 change: 1 addition & 0 deletions kubernetes/monitoring/kubernetes-event-exporter.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ data:
config.yaml: |
logLevel: warn
logFormat: json
omitLookup: true
maxEventAgeSeconds: 60
metricsNamePrefix: event_exporter_
route:
Expand Down
7 changes: 6 additions & 1 deletion kubernetes/monitoring/logs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This directory contains Helm values for the Kubernetes logs stack.

- Loki: SingleBinary mode, filesystem storage, Longhorn PVC.
- Loki gateway: 2 replicas for the stateless write/query entrypoint.
- Alloy: DaemonSet log collector for every pod in `code-place-dev`, `code-place-prod`, and `monitoring`, plus Traefik pods in `kube-system`. It mounts host `/var/log` so `/var/log/pods` is readable from the Alloy container. It tolerates the standard `control-plane` and `master` NoSchedule taints so tainted control-plane nodes are still covered.
- Alloy: DaemonSet log collector for every pod in `code-place-dev`, `code-place-prod`, and `monitoring`, plus Traefik and kube-vip pods in `kube-system`. It mounts host `/var/log` so `/var/log/pods` is readable from the Alloy container. It tolerates the standard `control-plane` and `master` NoSchedule taints so tainted control-plane nodes are still covered.
- Kubernetes Event Exporter: Warning events are written to stdout as JSON and collected by Alloy from the `monitoring` namespace.
- Retention: `code-place-dev` 3 days, `code-place-prod` 7 days.
- Monitoring: Loki and Alloy ServiceMonitors are enabled for kube-prometheus-stack.
Expand Down Expand Up @@ -47,6 +47,10 @@ helm upgrade --install alloy grafana/alloy \

kubectl apply -k kubernetes/monitoring

# Event exporter reads its ConfigMap only at startup.
kubectl -n monitoring rollout restart deployment/kubernetes-event-exporter
kubectl -n monitoring rollout status deployment/kubernetes-event-exporter --timeout=3m

# One-time migration after the replacement Traefik PodMonitor is present.
kubectl -n monitoring get podmonitor traefik
kubectl -n monitoring delete servicemonitor traefik --ignore-not-found
Expand Down Expand Up @@ -79,6 +83,7 @@ Grafana should show a `Loki` datasource. Useful Explore queries:
{namespace="code-place-prod", app="backend"} | json
{namespace="code-place-dev", container=~"backend|celery-worker|judge-server"}
{namespace="kube-system", app_kubernetes_io_name="traefik"} | json | DownstreamStatus >= 400
{namespace="kube-system", app_kubernetes_io_name="kube-vip-ds"}
{namespace="monitoring", app_kubernetes_io_name="kubernetes-event-exporter"}
```

Expand Down
4 changes: 2 additions & 2 deletions kubernetes/monitoring/logs/alloy-values.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Helm values for grafana/alloy.
# Alloy runs as a DaemonSet and collects CodePlace, monitoring, and Traefik logs.
# Alloy runs as a DaemonSet and collects CodePlace, monitoring, Traefik, and kube-vip logs.

controller:
type: daemonset
Expand Down Expand Up @@ -37,7 +37,7 @@ alloy:
rule {
source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_label_app", "__meta_kubernetes_pod_label_app_kubernetes_io_name"]
separator = "/"
regex = "(code-place-dev|code-place-prod|monitoring)/.*|kube-system/.*/traefik"
regex = "(code-place-dev|code-place-prod|monitoring)/.*|kube-system/.*/(traefik|kube-vip-ds)"
action = "keep"
}

Expand Down
Loading