Surveiller Policy Controller

Policy Controller utilise Prometheus pour collecter et afficher des métriques liées à ses processus.

Vous pouvez également configurer Cloud Monitoring pour extraire des métriques personnalisées de Prometheus. Ces métriques peuvent ensuite être affichées dans Prometheus et Monitoring. Pour en savoir plus, consultez la page Utiliser Prometheus.

Scraper les métriques

Toutes les métriques Prometheus peuvent être scrapées (c'est-à-dire récupérées) sur le port 8675. Pour pouvoir scraper des métriques, vous devez configurer votre cluster pour Prometheus L'une des options ci-dessous :

  • Reportez-vous à la documentation Prometheus pour configurer votre cluster en vue du scrape ou

  • Utilisez l'opérateur Prometheus avec les fichiers manifestes ci-dessous de façon à récupérer l'ensemble des métriques Anthos Config Management toutes les 10 secondes.

    1. Créez un répertoire temporaire pour y placer les fichiers manifestes.

      mkdir acm-monitor
      cd acm-monitor
      
    2. Téléchargez le manifeste de l'opérateur Prometheus à partir du dépôt CoreOS, à l'aide de la commande curl :

      curl -o bundle.yaml https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml
      

      Ce fichier manifeste est configuré pour utiliser l'espace de noms default, ce qui n'est pas recommandé. L'étape suivante modifie la configuration pour utiliser un espace de noms appelé monitoring. Pour utiliser un autre espace de noms, remplacez-le par monitoring dans les étapes restantes.

    3. Créez un fichier pour mettre à jour l'objet Namespace de la ressource ClusterRoleBinding dans le package ci-dessus.

      # patch-crb.yaml
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: prometheus-operator
      subjects:
      - kind: ServiceAccount
        name: prometheus-operator
        namespace: monitoring # we are patching from default namespace
      
    4. Créez un fichier kustomization.yaml qui applique le correctif et modifie l'objet Namespace pour les autres ressources du fichier manifeste.

      # kustomization.yaml
      resources:
      - bundle.yaml
      
      namespace: monitoring
      
      patchesStrategicMerge:
      - patch-crb.yaml
      
    5. Créez l'espace de noms monitoring. Vous pouvez utiliser un nom différent pour l'espace de noms, mais vous devrez modifier la valeur de namespace dans les fichiers manifestes YAML des étapes précédentes.

      kubectl create namespace monitoring
      
    6. Appliquez le fichier manifeste kustomized à l'aide des commandes suivantes :

      kubectl apply -k .
      
      until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; \
      do date; sleep 1; echo ""; done

      La deuxième commande bloque jusqu'à ce que les CRD soient disponibles sur le cluster.

    7. Créez le fichier manifeste pour les ressources nécessaires à la configuration d'un serveur Prometheus qui récupère les métriques d'Anthos Config Management.

      # acm.yaml
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: prometheus-acm
        namespace: monitoring
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: ClusterRole
      metadata:
        name: prometheus-acm
      rules:
      - apiGroups: [""]
        resources:
        - nodes
        - services
        - endpoints
        - pods
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources:
        - configmaps
        verbs: ["get"]
      - nonResourceURLs: ["/metrics"]
        verbs: ["get"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      kind: ClusterRoleBinding
      metadata:
        name: prometheus-acm
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: prometheus-acm
      subjects:
      - kind: ServiceAccount
        name: prometheus-acm
        namespace: monitoring
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: Prometheus
      metadata:
        name: acm
        namespace: monitoring
        labels:
          prometheus: acm
      spec:
        replicas: 2
        serviceAccountName: prometheus-acm
        serviceMonitorSelector:
          matchLabels:
            prometheus: config-management
        podMonitorSelector:
          matchLabels:
            prometheus: config-management
        alerting:
          alertmanagers:
          - namespace: default
            name: alertmanager
            port: web
        resources:
          requests:
            memory: 400Mi
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: prometheus-acm
        namespace: monitoring
        labels:
          prometheus: acm
      spec:
        type: NodePort
        ports:
        - name: web
          nodePort: 31900
          port: 9190
          protocol: TCP
          targetPort: web
        selector:
          app: prometheus
          prometheus: acm
      ---
        endpoints:
        - port: metrics
          interval: 10s
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: PodMonitor
      metadata:
        name: acm-pod
        namespace: monitoring
        labels:
          prometheus: config-management
      spec:
        selector:
          matchLabels:
            monitored: "true"
        namespaceSelector:
          matchNames:
          - gatekeeper-system
        podMetricsEndpoints:
        - port: metrics
          interval: 10s
      
    8. Appliquez le fichier manifeste à l'aide des commandes suivantes :

      kubectl apply -f acm.yaml
      
      until kubectl rollout status statefulset/prometheus-acm -n monitoring; \
      do sleep 1; done
      

      La deuxième commande bloque jusqu'à ce que les pods soient en cours d'exécution.

    9. Vous pouvez vérifier l'installation en transférant le port Web du serveur Prometheus sur votre ordinateur local.

      kubectl -n monitoring port-forward svc/prometheus-acm 9190
      

      Vous pouvez désormais accéder à l'interface utilisateur Web de Prometheus à l'adresse http://localhost:9190.

    10. Supprimez le répertoire temporaire.

      cd ..
      rm -rf acm-monitor
      

Si Policy Controller est activé sur votre cluster, vous pouvez interroger les métriques suivantes (toutes précédées du préfixe gatekeeper_) :

Métriques disponibles

Nom Type Libellés Description
gatekeeper_audit_duration_seconds Histogramme Distribution de la durée du cycle d'audit
gatekeeper_audit_last_run_time Jauge Horodatage de l'époch depuis la dernière exécution d'audit, exprimé en secondes avec virgule flottante
gatekeeper_constraint_template_ingestion_count Nombre état Nombre total d'actions d'ingestion de modèle de contrainte
gatekeeper_constraint_template_ingestion_duration_seconds Histogramme état Distribution de la durée d'ingestion de modèle de contrainte
gatekeeper_constraint_templates Jauge état Nombre actuel de modèles de contraintes
gatekeeper_constraints Jauge enforcement_action, état Nombre actuel de contraintes
gatekeeper_request_count Nombre admission_status Décompte de requêtes d'admission du serveur d'API
gatekeeper_request_duration_seconds Histogramme admission_status Distribution de la durée des requêtes d'admission
gatekeeper_violations Jauge enforcement_action Nombre de violations des règles d'audit détectées au cours du dernier cycle d'audit
gatekeeper_watch_manager_intended_watch_gvk Jauge Nombre de GroupVersionKinds uniques que Policy Controller est censé surveiller. Il s'agit d'une combinaison de contraintes et ressources synchronisées. Non mis en œuvre actuellement.
gatekeeper_watch_manager_watched_gvk Jauge Nombre de GroupVersionKinds uniques que Policy Controller surveille réellement. Ceci est censé converger pour correspondre à gatekeeper_watch_manager_intended_watch_gvk. Non mis en œuvre actuellement.
gatekeeper_sync Jauge type, état Nombre de ressources qui ont été répliquées dans le cache de l'OPA
gatekeeper_sync_duration_seconds Histogramme Distribution de la durée de synchronisation des objets
gatekeeper_sync_last_run_time Jauge Date et heure de la dernière synchronisation d'une ressource