summaryrefslogtreecommitdiff
path: root/f3s/prometheus/Justfile
blob: 1a63371e8fa8fc6c354e1fac7a8ba715295e05cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
NAMESPACE := "monitoring"
APP_NAME := "prometheus"

status:
    @echo "=== Prometheus Pods ==="
    @kubectl get pods -n {{NAMESPACE}} -l app.kubernetes.io/name=prometheus
    @echo ""
    @echo "=== Grafana Pods ==="
    @kubectl get pods -n {{NAMESPACE}} -l app.kubernetes.io/name=grafana
    @echo ""
    @echo "=== Alertmanager Pods ==="
    @kubectl get pods -n {{NAMESPACE}} -l app.kubernetes.io/name=alertmanager
    @echo ""
    @echo "=== Services ==="
    @kubectl get svc -n {{NAMESPACE}} | grep prometheus
    @echo ""
    @echo "=== PVCs ==="
    @kubectl get pvc -n {{NAMESPACE}} | grep -E '(prometheus|grafana)'
    @echo ""
    @echo "=== ArgoCD Status ==="
    @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo ""

logs-prometheus lines="100":
    kubectl logs -n {{NAMESPACE}} -l app.kubernetes.io/name=prometheus --tail={{lines}} -f

logs-grafana lines="100":
    kubectl logs -n {{NAMESPACE}} -l app.kubernetes.io/name=grafana --tail={{lines}} -f

logs-alertmanager lines="100":
    kubectl logs -n {{NAMESPACE}} -l app.kubernetes.io/name=alertmanager --tail={{lines}} -f

port-forward-prometheus port="9090":
    @echo "🚀 Forwarding Prometheus to localhost:{{port}}"
    @echo ""
    @echo "Access URLs:"
    @echo "  Alerts:  http://localhost:{{port}}/alerts"
    @echo "  Rules:   http://localhost:{{port}}/rules"
    @echo "  Graph:   http://localhost:{{port}}/graph"
    @echo "  Targets: http://localhost:{{port}}/targets"
    @echo ""
    @echo "Press Ctrl+C to stop"
    @echo ""
    kubectl port-forward -n {{NAMESPACE}} svc/prometheus-kube-prometheus-prometheus {{port}}:9090

port-forward-grafana port="3000":
    @echo "🚀 Forwarding Grafana to localhost:{{port}}"
    @echo ""
    @echo "Access URL: http://localhost:{{port}}"
    @echo ""
    @echo "Press Ctrl+C to stop"
    @echo ""
    kubectl port-forward -n {{NAMESPACE}} svc/prometheus-grafana {{port}}:80

port-forward-alertmanager port="9093":
    @echo "🚀 Forwarding Alertmanager to localhost:{{port}}"
    @echo ""
    @echo "Access URL: http://localhost:{{port}}"
    @echo ""
    @echo "Press Ctrl+C to stop"
    @echo ""
    kubectl port-forward -n {{NAMESPACE}} svc/prometheus-kube-prometheus-alertmanager {{port}}:9093

# Quick access to Prometheus alerts view
alerts: (port-forward-prometheus "9090")

# Quick access to Alertmanager
alertmanager: (port-forward-alertmanager "9093")

sync:
    @echo "Triggering ArgoCD sync..."
    @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite
    @sleep 2
    @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo ""

argocd-status:
    argocd app get {{APP_NAME}} --core

restart-prometheus:
    @echo "Restarting Prometheus..."
    kubectl rollout restart -n {{NAMESPACE}} statefulset/prometheus-prometheus-kube-prometheus-prometheus

restart-grafana:
    @echo "Restarting Grafana..."
    kubectl rollout restart -n {{NAMESPACE}} deployment/prometheus-grafana

restart-alertmanager:
    @echo "Restarting Alertmanager..."
    kubectl rollout restart -n {{NAMESPACE}} statefulset/alertmanager-prometheus-kube-prometheus-alertmanager

restart: restart-grafana

# Query firing alerts via NodePort (default node: r0)
firing-alerts node="r0":
    @curl -s "http://{{node}}:30090/api/v1/alerts" | jq -r '.data.alerts[] | select(.state=="firing") | "\(.labels.alertname) [\(.labels.severity // "unknown")]: \(.annotations.summary // .annotations.description // "no description")"'

# Query all alerts (firing and pending) via NodePort
all-alerts node="r0":
    @curl -s "http://{{node}}:30090/api/v1/alerts" | jq '.data.alerts'

# Count of firing alerts
firing-count node="r0":
    @curl -s "http://{{node}}:30090/api/v1/alerts" | jq '[.data.alerts[] | select(.state=="firing")] | length'