Compare commits
4 Commits
9e95556f8b
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 223dd460b7 | |||
| 89672c0d9c | |||
| fce3fd4ffd | |||
| ec013b5e59 |
268
README.md
268
README.md
@@ -0,0 +1,268 @@
|
||||
# ArgoCD GitOps Repository
|
||||
|
||||
Ce dépôt contient une infrastructure GitOps complète basée sur ArgoCD avec monitoring intégré (Prometheus + Grafana) et extension de métriques.
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
Le projet utilise le pattern **App of Apps** d'ArgoCD pour gérer plusieurs applications de manière déclarative :
|
||||
|
||||
- **Root App** : Application principale qui déploie toutes les autres applications
|
||||
- **Podinfo** : Application de démonstration Kubernetes
|
||||
- **Kube-Prometheus-Stack** : Stack de monitoring complet (Prometheus + Grafana)
|
||||
- **ArgoCD Metrics Server** : Extension pour visualiser les métriques dans l'UI ArgoCD
|
||||
|
||||
## 📋 Prérequis
|
||||
|
||||
- [KIND](https://kind.sigs.k8s.io/) - Kubernetes IN Docker
|
||||
- [kubectl](https://kubernetes.io/docs/tasks/tools/) - CLI Kubernetes
|
||||
- [ArgoCD CLI](https://argo-cd.readthedocs.io/en/stable/cli_installation/) (optionnel)
|
||||
- [Kustomize](https://kubectl.docs.kubernetes.io/installation/kustomize/) (optionnel)
|
||||
|
||||
## 🚀 Déploiement rapide
|
||||
|
||||
### 1. Créer le cluster KIND
|
||||
|
||||
```bash
|
||||
kind create cluster --config kind-config.yaml
|
||||
```
|
||||
|
||||
Cette configuration crée un cluster avec :
|
||||
- Port mappings pour HTTP (80), HTTPS (443) et services NodePort (30080)
|
||||
- Label `ingress-ready=true` pour Ingress Controller
|
||||
|
||||
### 2. Installer ArgoCD
|
||||
|
||||
```bash
|
||||
# Créer le namespace
|
||||
kubectl create namespace argocd
|
||||
|
||||
# Installer ArgoCD
|
||||
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
|
||||
|
||||
# Attendre que les pods soient prêts
|
||||
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=argocd-server -n argocd --timeout=300s
|
||||
```
|
||||
|
||||
### 3. Configurer ArgoCD avec les extensions
|
||||
|
||||
```bash
|
||||
# Appliquer la configuration ArgoCD (extensions + RBAC)
|
||||
kubectl apply -n argocd -f bootstrap/argocd-values.yaml
|
||||
|
||||
# Activer le proxy extension
|
||||
kubectl patch configmap argocd-cmd-params-cm -n argocd --type merge -p '{"data":{"server.enable.proxy.extension":"true"}}'
|
||||
|
||||
# Redémarrer ArgoCD server pour appliquer les changements
|
||||
kubectl rollout restart deployment argocd-server -n argocd
|
||||
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=argocd-server -n argocd --timeout=300s
|
||||
```
|
||||
|
||||
### 4. Déployer l'App of Apps
|
||||
|
||||
```bash
|
||||
# Déployer la root application
|
||||
kubectl apply -f apps/app-of-apps.yaml
|
||||
|
||||
# Vérifier le déploiement
|
||||
kubectl get applications -n argocd
|
||||
```
|
||||
|
||||
### 5. Accéder à ArgoCD UI
|
||||
|
||||
```bash
|
||||
# Port-forward vers ArgoCD UI
|
||||
kubectl port-forward svc/argocd-server -n argocd 8080:443
|
||||
|
||||
# Récupérer le mot de passe admin
|
||||
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
|
||||
```
|
||||
|
||||
Accédez à https://localhost:8080 avec :
|
||||
- **Username**: `admin`
|
||||
- **Password**: (celui récupéré ci-dessus)
|
||||
|
||||
### 6. Accéder à Grafana
|
||||
|
||||
```bash
|
||||
# Port-forward vers Grafana
|
||||
kubectl port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80
|
||||
```
|
||||
|
||||
Accédez à http://localhost:3000 avec :
|
||||
- **Username**: `admin`
|
||||
- **Password**: `admin` (configuré dans `apps/prometheus.yaml`)
|
||||
|
||||
## 📊 Métriques dans ArgoCD
|
||||
|
||||
L'extension de métriques ajoute des onglets dans l'interface ArgoCD pour visualiser :
|
||||
|
||||
### Pour les Pods
|
||||
- **Golden Signal** : CPU et Memory usage
|
||||
- **Resource Usage** : CPU throttling, Memory working set, Memory cache
|
||||
- **Network** : Bytes/Packets reçus et transmis, Erreurs réseau
|
||||
- **Storage** : I/O disque (lectures/écritures), Utilisation du filesystem
|
||||
|
||||
### Pour les Deployments
|
||||
- **Application Metrics** : HTTP latency, Error rates (4xx, 5xx), Traffic
|
||||
- **Resource Usage** : CPU et Memory par deployment
|
||||
|
||||
## 🗂️ Structure du dépôt
|
||||
|
||||
```
|
||||
.
|
||||
├── apps/
|
||||
│ ├── app-of-apps.yaml # Root application (App of Apps)
|
||||
│ ├── metrics-server.yaml # ArgoCD metrics extension
|
||||
│ ├── podinfo.yaml # Application de démo
|
||||
│ └── prometheus.yaml # Stack Prometheus + Grafana
|
||||
├── bootstrap/
|
||||
│ └── argocd-values.yaml # Configuration ArgoCD (extensions + RBAC)
|
||||
├── manifests/
|
||||
│ └── metrics-server/
|
||||
│ ├── configmap.yaml # Configuration des graphiques de métriques
|
||||
│ ├── deployment.yaml # Déploiement du metrics server
|
||||
│ ├── service.yaml # Service du metrics server
|
||||
│ └── kustomization.yaml # Kustomize config
|
||||
├── kind-config.yaml # Configuration du cluster KIND
|
||||
└── README.md # Ce fichier
|
||||
```
|
||||
|
||||
## 🔧 Configuration
|
||||
|
||||
### Modifier les métriques affichées
|
||||
|
||||
Éditez `manifests/metrics-server/configmap.yaml` pour ajouter ou modifier les graphiques de métriques.
|
||||
|
||||
Chaque graphique est défini par :
|
||||
- `name` : Identifiant unique
|
||||
- `title` : Titre affiché dans l'UI
|
||||
- `description` : Description du graphique
|
||||
- `graphType` : Type de graphique (`line`, `pie`)
|
||||
- `queryExpression` : Requête PromQL
|
||||
|
||||
### Personnaliser Prometheus
|
||||
|
||||
Modifiez `apps/prometheus.yaml` pour :
|
||||
- Ajuster les ressources (CPU, Memory)
|
||||
- Changer la rétention des données
|
||||
- Modifier le mot de passe Grafana
|
||||
- Activer/désactiver Alertmanager
|
||||
|
||||
## 🛠️ Commandes utiles
|
||||
|
||||
### ArgoCD
|
||||
|
||||
```bash
|
||||
# Lister toutes les applications
|
||||
kubectl get applications -n argocd
|
||||
|
||||
# Voir les détails d'une application
|
||||
kubectl describe application <app-name> -n argocd
|
||||
|
||||
# Forcer une synchronisation
|
||||
kubectl patch application <app-name> -n argocd --type merge -p '{"operation":{"sync":{}}}'
|
||||
|
||||
# Voir les logs d'ArgoCD
|
||||
kubectl logs -n argocd deployment/argocd-server -f
|
||||
```
|
||||
|
||||
### Prometheus
|
||||
|
||||
```bash
|
||||
# Port-forward vers Prometheus
|
||||
kubectl port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090
|
||||
|
||||
# Vérifier les targets Prometheus
|
||||
kubectl port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090
|
||||
# Puis ouvrir http://localhost:9090/targets
|
||||
```
|
||||
|
||||
### Metrics Server
|
||||
|
||||
```bash
|
||||
# Voir les logs du metrics server
|
||||
kubectl logs -n argocd deployment/argocd-metrics-server -f
|
||||
|
||||
# Tester l'endpoint du metrics server
|
||||
kubectl port-forward -n argocd svc/argocd-metrics-server 9003:9003
|
||||
curl http://localhost:9003/health
|
||||
```
|
||||
|
||||
## 🐛 Dépannage
|
||||
|
||||
### Les métriques ne s'affichent pas
|
||||
|
||||
1. Vérifier que Prometheus collecte les métriques :
|
||||
```bash
|
||||
kubectl port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090
|
||||
# Ouvrir http://localhost:9090 et tester les requêtes PromQL
|
||||
```
|
||||
|
||||
2. Vérifier que le metrics server est accessible :
|
||||
```bash
|
||||
kubectl get svc -n argocd argocd-metrics-server
|
||||
kubectl logs -n argocd deployment/argocd-metrics-server
|
||||
```
|
||||
|
||||
3. Vérifier la configuration ArgoCD :
|
||||
```bash
|
||||
kubectl get cm argocd-cm -n argocd -o yaml | grep -A 10 "extension.config"
|
||||
kubectl get cm argocd-cmd-params-cm -n argocd -o yaml | grep proxy
|
||||
```
|
||||
|
||||
### Applications en état "OutOfSync"
|
||||
|
||||
```bash
|
||||
# Forcer une synchronisation
|
||||
kubectl patch application <app-name> -n argocd --type merge -p '{"operation":{"sync":{}}}'
|
||||
|
||||
# Ou via ArgoCD CLI
|
||||
argocd app sync <app-name>
|
||||
```
|
||||
|
||||
### Prometheus ne démarre pas
|
||||
|
||||
Vérifiez les ressources disponibles :
|
||||
```bash
|
||||
kubectl describe pod -n monitoring -l app.kubernetes.io/name=prometheus
|
||||
```
|
||||
|
||||
Si problème de ressources, ajustez dans `apps/prometheus.yaml` :
|
||||
```yaml
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m # Réduire si nécessaire
|
||||
memory: 256Mi # Réduire si nécessaire
|
||||
```
|
||||
|
||||
## 📚 Ressources
|
||||
|
||||
- [ArgoCD Documentation](https://argo-cd.readthedocs.io/)
|
||||
- [ArgoCD Metrics Extension](https://github.com/argoproj-labs/argocd-extension-metrics)
|
||||
- [Kube-Prometheus-Stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack)
|
||||
- [KIND Documentation](https://kind.sigs.k8s.io/)
|
||||
|
||||
## 🔐 Sécurité
|
||||
|
||||
⚠️ **Attention** : Cette configuration est destinée à un environnement de développement/test.
|
||||
|
||||
Pour la production, pensez à :
|
||||
- Changer les mots de passe par défaut (Grafana: `admin/admin`)
|
||||
- Utiliser des Secrets Kubernetes au lieu de valeurs en clair
|
||||
- Configurer TLS pour ArgoCD et Grafana
|
||||
- Ajouter des NetworkPolicies
|
||||
- Configurer des limites de ressources appropriées
|
||||
- Activer l'authentification RBAC stricte
|
||||
|
||||
## 🤝 Contribution
|
||||
|
||||
Les contributions sont les bienvenues ! N'hésitez pas à :
|
||||
1. Fork le projet
|
||||
2. Créer une branche pour votre feature
|
||||
3. Commiter vos changements
|
||||
4. Pousser vers la branche
|
||||
5. Ouvrir une Pull Request
|
||||
|
||||
## 📝 License
|
||||
|
||||
MIT License
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
kind: Cluster
|
||||
apiVersion: kind.x-k8s.io/v1alpha4
|
||||
name: kind-016
|
||||
nodes:
|
||||
- role: control-plane
|
||||
kubeadmConfigPatches:
|
||||
- |
|
||||
kind: InitConfiguration
|
||||
nodeRegistration:
|
||||
kubeletExtraArgs:
|
||||
node-labels: "ingress-ready=true"
|
||||
extraPortMappings:
|
||||
- containerPort: 80
|
||||
hostPort: 80
|
||||
protocol: TCP
|
||||
- containerPort: 443
|
||||
hostPort: 443
|
||||
protocol: TCP
|
||||
- containerPort: 30080
|
||||
hostPort: 30080
|
||||
protocol: TCP
|
||||
@@ -13,83 +13,234 @@ data:
|
||||
"dashboards": [
|
||||
{
|
||||
"groupKind": "pod",
|
||||
"tabs": ["Golden Signal"],
|
||||
"tabs": ["Golden Signal", "Resource Usage", "Network", "Storage"],
|
||||
"rows": [
|
||||
{
|
||||
"name": "pod",
|
||||
"title": "Pods",
|
||||
"name": "pod_cpu",
|
||||
"title": "CPU Usage",
|
||||
"tab": "Golden Signal",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "pod_cpu_line",
|
||||
"title": "CPU",
|
||||
"description": "",
|
||||
"title": "CPU Usage",
|
||||
"description": "CPU usage by pod over time",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_cpu_usage_seconds_total{pod=~\"{{.name}}\", image!=\"\", container!=\"POD\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
"queryExpression": "sum(rate(container_cpu_usage_seconds_total{pod=~\"{{.name}}\", image!=\"\", container!=\"POD\", container!=\"\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "pod_cpu_pie",
|
||||
"title": "CPU Avg",
|
||||
"description": "",
|
||||
"title": "CPU Distribution",
|
||||
"description": "Average CPU distribution",
|
||||
"graphType": "pie",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_cpu_usage_seconds_total{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "pod_memory_line",
|
||||
"title": "Memory",
|
||||
"description": "",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_memory_usage_bytes{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "pod_memory_pie",
|
||||
"title": "Mem Avg",
|
||||
"description": "",
|
||||
"graphType": "pie",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_memory_usage_bytes{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
"queryExpression": "avg(rate(container_cpu_usage_seconds_total{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\"}[5m])) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "container",
|
||||
"title": "Containers",
|
||||
"name": "pod_memory",
|
||||
"title": "Memory Usage",
|
||||
"tab": "Golden Signal",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "container_cpu_line",
|
||||
"title": "CPU",
|
||||
"description": "",
|
||||
"name": "pod_memory_line",
|
||||
"title": "Memory Usage",
|
||||
"description": "Memory usage by pod over time",
|
||||
"graphType": "line",
|
||||
"metricName": "container",
|
||||
"queryExpression": "sum(rate(container_cpu_usage_seconds_total{pod=~\"{{.name}}\", image!=\"\", container!=\"POD\", container!=\"\", container_name!=\"POD\"}[5m])) by (container)"
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(container_memory_usage_bytes{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\"}) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "container_cpu_pie",
|
||||
"title": "CPU Avg",
|
||||
"description": "",
|
||||
"name": "pod_memory_pie",
|
||||
"title": "Memory Distribution",
|
||||
"description": "Average memory distribution",
|
||||
"graphType": "pie",
|
||||
"metricName": "container",
|
||||
"queryExpression": "sum(rate(container_cpu_usage_seconds_total{pod=~\"{{.name}}\", image!=\"\",container!=\"POD\", container!=\"\", container_name!=\"POD\"}[5m])) by (container)"
|
||||
"metricName": "pod",
|
||||
"queryExpression": "avg(container_memory_usage_bytes{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\"}) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "container_memory_line",
|
||||
"title": "Memory",
|
||||
"description": "",
|
||||
"name": "cpu_throttling",
|
||||
"title": "CPU Throttling",
|
||||
"tab": "Resource Usage",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "cpu_throttle_line",
|
||||
"title": "CPU Throttling",
|
||||
"description": "CPU throttling periods",
|
||||
"graphType": "line",
|
||||
"metricName": "container",
|
||||
"queryExpression": "sum(rate(container_memory_usage_bytes{pod=~\"{{.name}}\", image!=\"\", container!=\"POD\", container!=\"\", container_name!=\"POD\"}[5m])) by (container)"
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_cpu_cfs_throttled_periods_total{pod=~\"{{.name}}\", container!=\"POD\", container!=\"\"}[5m])) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "container_memory_pie",
|
||||
"title": "Mem Avg",
|
||||
"description": "",
|
||||
"graphType": "pie",
|
||||
"metricName": "container",
|
||||
"queryExpression": "sum(rate(container_memory_usage_bytes{pod=~\"{{.name}}\", image!=\"\", container!=\"POD\", container!=\"\", container_name!=\"POD\"}[5m])) by (container)"
|
||||
"name": "memory_working_set",
|
||||
"title": "Memory Working Set",
|
||||
"tab": "Resource Usage",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "memory_working_set_line",
|
||||
"title": "Memory Working Set",
|
||||
"description": "Active memory in use",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(container_memory_working_set_bytes{pod=~\"{{.name}}\", container!=\"POD\", container!=\"\"}) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "memory_cache",
|
||||
"title": "Memory Cache",
|
||||
"tab": "Resource Usage",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "memory_cache_line",
|
||||
"title": "Memory Cache",
|
||||
"description": "Cached memory",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(container_memory_cache{pod=~\"{{.name}}\", container!=\"POD\", container!=\"\"}) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "network_receive",
|
||||
"title": "Network Receive",
|
||||
"tab": "Network",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "network_receive_bytes",
|
||||
"title": "Network Receive Bytes/sec",
|
||||
"description": "Network bytes received per second",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_network_receive_bytes_total{pod=~\"{{.name}}\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "network_receive_packets",
|
||||
"title": "Network Receive Packets/sec",
|
||||
"description": "Network packets received per second",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_network_receive_packets_total{pod=~\"{{.name}}\"}[5m])) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "network_transmit",
|
||||
"title": "Network Transmit",
|
||||
"tab": "Network",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "network_transmit_bytes",
|
||||
"title": "Network Transmit Bytes/sec",
|
||||
"description": "Network bytes transmitted per second",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_network_transmit_bytes_total{pod=~\"{{.name}}\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "network_transmit_packets",
|
||||
"title": "Network Transmit Packets/sec",
|
||||
"description": "Network packets transmitted per second",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_network_transmit_packets_total{pod=~\"{{.name}}\"}[5m])) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "network_errors",
|
||||
"title": "Network Errors",
|
||||
"tab": "Network",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "network_receive_errors",
|
||||
"title": "Network Receive Errors",
|
||||
"description": "Network receive errors",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_network_receive_errors_total{pod=~\"{{.name}}\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "network_transmit_errors",
|
||||
"title": "Network Transmit Errors",
|
||||
"description": "Network transmit errors",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_network_transmit_errors_total{pod=~\"{{.name}}\"}[5m])) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "fs_reads",
|
||||
"title": "Filesystem Reads",
|
||||
"tab": "Storage",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "fs_read_bytes",
|
||||
"title": "Filesystem Read Bytes/sec",
|
||||
"description": "Filesystem bytes read per second",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_fs_reads_bytes_total{pod=~\"{{.name}}\", container!=\"POD\", container!=\"\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "fs_reads_total",
|
||||
"title": "Filesystem Reads/sec",
|
||||
"description": "Filesystem read operations per second",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_fs_reads_total{pod=~\"{{.name}}\", container!=\"POD\", container!=\"\"}[5m])) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "fs_writes",
|
||||
"title": "Filesystem Writes",
|
||||
"tab": "Storage",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "fs_write_bytes",
|
||||
"title": "Filesystem Write Bytes/sec",
|
||||
"description": "Filesystem bytes written per second",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_fs_writes_bytes_total{pod=~\"{{.name}}\", container!=\"POD\", container!=\"\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "fs_writes_total",
|
||||
"title": "Filesystem Writes/sec",
|
||||
"description": "Filesystem write operations per second",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_fs_writes_total{pod=~\"{{.name}}\", container!=\"POD\", container!=\"\"}[5m])) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "fs_usage",
|
||||
"title": "Filesystem Usage",
|
||||
"tab": "Storage",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "fs_usage_bytes",
|
||||
"title": "Filesystem Usage",
|
||||
"description": "Filesystem space used",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(container_fs_usage_bytes{pod=~\"{{.name}}\", container!=\"POD\", container!=\"\"}) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "fs_limit_bytes",
|
||||
"title": "Filesystem Limit",
|
||||
"description": "Filesystem capacity",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(container_fs_limit_bytes{pod=~\"{{.name}}\", container!=\"POD\", container!=\"\"}) by (pod)"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -97,195 +248,88 @@ data:
|
||||
},
|
||||
{
|
||||
"groupKind": "deployment",
|
||||
"tabs": ["Golden Signal"],
|
||||
"tabs": ["Application Metrics", "Resource Usage"],
|
||||
"rows": [
|
||||
{
|
||||
"name": "httplatency",
|
||||
"name": "http_latency",
|
||||
"title": "HTTP Latency",
|
||||
"tab": "Golden Signal",
|
||||
"tab": "Application Metrics",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "http_200_latency",
|
||||
"title": "Latency",
|
||||
"description": "",
|
||||
"title": "HTTP 200 Latency",
|
||||
"description": "HTTP request latency for successful requests",
|
||||
"graphType": "line",
|
||||
"metricName": "pod_template_hash",
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_sum {namespace=\"{{.namespace}}\", status=\"200\"} [1m])) by (pod_template_hash)"
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_sum{namespace=\"{{.namespace}}\", status=\"200\"}[1m])) by (pod_template_hash)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "httperrortate",
|
||||
"name": "http_error_rate",
|
||||
"title": "HTTP Error Rate",
|
||||
"tab": "Golden Signal",
|
||||
"tab": "Application Metrics",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "http_error_rate_500",
|
||||
"title": "HTTP Error 500",
|
||||
"description": "",
|
||||
"title": "HTTP 5xx Errors",
|
||||
"description": "HTTP 5xx server errors",
|
||||
"graphType": "line",
|
||||
"metricName": "pod_template_hash",
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_count {namespace=\"{{.namespace}}\", status=\"500\"} [1m])) by (pod_template_hash)"
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_count{namespace=\"{{.namespace}}\", status=~\"5..\"}[1m])) by (pod_template_hash)"
|
||||
},
|
||||
{
|
||||
"name": "http_error_rate_400",
|
||||
"title": "HTTP Error 400",
|
||||
"description": "",
|
||||
"title": "HTTP 4xx Errors",
|
||||
"description": "HTTP 4xx client errors",
|
||||
"graphType": "line",
|
||||
"metricName": "pod_template_hash",
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_count {namespace=\"{{.namespace}}\", status=\"404\"} [1m])) by (pod_template_hash)"
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_count{namespace=\"{{.namespace}}\", status=~\"4..\"}[1m])) by (pod_template_hash)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "httptraffic",
|
||||
"name": "http_traffic",
|
||||
"title": "HTTP Traffic",
|
||||
"tab": "Golden Signal",
|
||||
"tab": "Application Metrics",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "http_traffic",
|
||||
"title": "Traffic",
|
||||
"description": "",
|
||||
"title": "Request Rate",
|
||||
"description": "HTTP requests per second",
|
||||
"graphType": "line",
|
||||
"metricName": "pod_template_hash",
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_count {namespace=\"{{.namespace}}\"} [1m])) by (pod_template_hash)"
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_count{namespace=\"{{.namespace}}\"}[1m])) by (pod_template_hash)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pod",
|
||||
"title": "Pods",
|
||||
"tab": "Golden Signal",
|
||||
"name": "deployment_cpu",
|
||||
"title": "CPU Usage",
|
||||
"tab": "Resource Usage",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "pod_cpu_line",
|
||||
"title": "CPU",
|
||||
"description": "",
|
||||
"name": "deployment_cpu_line",
|
||||
"title": "CPU Usage",
|
||||
"description": "CPU usage by deployment",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_cpu_usage_seconds_total{pod=~\"{{.name}}\", image!=\"\", container!=\"POD\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "pod_cpu_pie",
|
||||
"title": "CPU Avg",
|
||||
"description": "",
|
||||
"graphType": "pie",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_cpu_usage_seconds_total{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "pod_memory_line",
|
||||
"title": "Memory",
|
||||
"description": "",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_memory_usage_bytes{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "pod_memory_pie",
|
||||
"title": "Mem Avg",
|
||||
"description": "",
|
||||
"graphType": "pie",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_memory_usage_bytes{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
}
|
||||
]
|
||||
"queryExpression": "sum(rate(container_cpu_usage_seconds_total{namespace=\"{{.namespace}}\", pod=~\"{{.name}}.*\", image!=\"\", container!=\"POD\"}[5m])) by (pod)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"groupKind": "rollout",
|
||||
"tabs": ["Golden Signal"],
|
||||
"rows": [
|
||||
{
|
||||
"name": "httplatency",
|
||||
"title": "HTTP Latency",
|
||||
"tab": "Golden Signal",
|
||||
"name": "deployment_memory",
|
||||
"title": "Memory Usage",
|
||||
"tab": "Resource Usage",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "http_200_latency",
|
||||
"title": "Latency",
|
||||
"description": "",
|
||||
"graphType": "line",
|
||||
"metricName": "rollout_template_hash",
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_sum {namespace=\"{{.namespace}}\", status=\"200\"} [1m])) by (rollout_template_hash)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "httperrortate",
|
||||
"title": "HTTP Error Rate",
|
||||
"tab": "Golden Signal",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "http_error_rate_500",
|
||||
"title": "HTTP Error 500",
|
||||
"description": "",
|
||||
"graphType": "line",
|
||||
"metricName": "rollout_template_hash",
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_count {namespace=\"{{.namespace}}\", status=\"500\"} [1m])) by (rollout_template_hash)"
|
||||
},
|
||||
{
|
||||
"name": "http_error_rate_400",
|
||||
"title": "HTTP Error 400",
|
||||
"description": "",
|
||||
"graphType": "line",
|
||||
"metricName": "rollout_template_hash",
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_count {namespace=\"{{.namespace}}\", status=\"404\"} [1m])) by (rollout_template_hash)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "httptraffic",
|
||||
"title": "HTTP Traffic",
|
||||
"tab": "Golden Signal",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "http_traffic",
|
||||
"title": "Traffic",
|
||||
"description": "",
|
||||
"graphType": "line",
|
||||
"metricName": "rollout_template_hash",
|
||||
"queryExpression": "sum(rate(http_server_requests_seconds_count {namespace=\"{{.namespace}}\"} [1m])) by (rollout_template_hash)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pod",
|
||||
"title": "Pods",
|
||||
"tab": "Golden Signal",
|
||||
"graphs": [
|
||||
{
|
||||
"name": "pod_cpu_line",
|
||||
"title": "CPU",
|
||||
"description": "",
|
||||
"name": "deployment_memory_line",
|
||||
"title": "Memory Usage",
|
||||
"description": "Memory usage by deployment",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_cpu_usage_seconds_total{pod=~\"{{.name}}\", image!=\"\", container!=\"POD\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "pod_cpu_pie",
|
||||
"title": "CPU Avg",
|
||||
"description": "",
|
||||
"graphType": "pie",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_cpu_usage_seconds_total{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "pod_memory_line",
|
||||
"title": "Memory",
|
||||
"description": "",
|
||||
"graphType": "line",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_memory_usage_bytes{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
},
|
||||
{
|
||||
"name": "pod_memory_pie",
|
||||
"title": "Mem Avg",
|
||||
"description": "",
|
||||
"graphType": "pie",
|
||||
"metricName": "pod",
|
||||
"queryExpression": "sum(rate(container_memory_usage_bytes{pod=~\"{{.name}}\", container!=\"POD\", image!=\"\", container!=\"\", container_name!=\"POD\"}[5m])) by (pod)"
|
||||
"queryExpression": "sum(container_memory_usage_bytes{namespace=\"{{.namespace}}\", pod=~\"{{.name}}.*\", container!=\"POD\", container!=\"\"}) by (pod)"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -294,9 +338,8 @@ data:
|
||||
]
|
||||
}
|
||||
],
|
||||
"provider":
|
||||
{
|
||||
"Name": "default",
|
||||
"provider": {
|
||||
"name": "default",
|
||||
"default": true,
|
||||
"address": "http://kube-prometheus-stack-prometheus.monitoring.svc:9090"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user