Monitorar o Policy Controller

O Policy Controller usa o Prometheus para coletar e mostrar métricas relacionadas aos processos dele.

Também é possível configurar o Cloud Monitoring para extrair métricas personalizadas do Prometheus. Em seguida, você poderá ver métricas personalizadas no Prometheus e no Monitoring. Para mais informações, consulte Como usar o Prometheus.

Como capturar as métricas

Todas as métricas do Prometheus estão disponíveis para captura na porta 8675. Para analisar as métricas, configure seu cluster para o Prometheus de duas maneiras. Siga uma destas instruções:

  • Siga a documentação do Prometheus para configurar seu cluster para capturas, ou

  • Use o operador Prometheus com os manifestos a seguir, que capturam todas as métricas do Anthos Config Management a cada 10 segundos.

    1. Crie um diretório temporário para conter os arquivos de manifesto.

      mkdir acm-monitor
      cd acm-monitor
      
    2. Faça o download do manifesto do Prometheus Operator no repositório do CoreOS usando o comando curl:

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

      Esse manifesto é configurado para usar o namespace default, o que não é recomendável. A próxima etapa modifica a configuração para usar um namespace chamado monitoring. Para usar um namespace diferente, substitua-o onde houver monitoring nas etapas restantes.

    3. Crie um arquivo para atualizar o namespace do ClusterRoleBinding no pacote acima.

      # 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. Crie um arquivo kustomization.yaml que aplique o patch e modifique o namespace para outros recursos no manifesto.

      # kustomization.yaml
      resources:
      - bundle.yaml
      
      namespace: monitoring
      
      patchesStrategicMerge:
      - patch-crb.yaml
      
    5. Crie o namespace monitoring: É possível usar um nome diferente para o namespace. Se você fizer isso, altere também o valor de namespace nos manifestos YAML das etapas anteriores.

      kubectl create namespace monitoring
      
    6. Aplique o manifesto kustomized usando os seguintes comandos:

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

      O segundo comando permanece bloqueado até que os CRDs estejam disponíveis no cluster.

    7. Crie o manifesto para os recursos necessários para configurar um servidor Prometheus que rastreie as métricas do 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. Aplique o manifesto usando os comandos a seguir:

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

      O segundo comando permanece bloqueado até que os pods estejam em execução.

    9. É possível verificar a instalação encaminhando a porta da Web do servidor do Prometheus para a máquina local.

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

      Agora é possível acessar a IU da Web do Prometheus em http://localhost:9190.

    10. Remova o diretório temporário.

      cd ..
      rm -rf acm-monitor
      

Se o Policy Controller estiver ativado no cluster, consulte as seguintes métricas (todas prefixadas com gatekeeper_):

Métricas disponíveis

Nome Tipo Rótulos Descrição
gatekeeper_audit_duration_seconds Histograma Distribuição da duração do ciclo de auditoria
gatekeeper_audit_last_run_time Medidor O carimbo de data e hora da época desde o último ambiente de execução da auditoria, fornecido como segundos em ponto flutuante
gatekeeper_constraint_template_ingestion_count Contador status Número total de ações de ingestão de modelo de restrição
gatekeeper_constraint_template_ingestion_duration_seconds Histograma status Distribuição de duração de ingestão de modelo de restrição
gatekeeper_constraint_templates Medidor status Número atual de modelos de restrição
gatekeeper_constraints Medidor enforcement_action, status Número atual de restrições
gatekeeper_request_count Contador admission_status Contagem de solicitações de admissão do servidor da API
gatekeeper_request_duration_seconds Histograma admission_status Distribuição da duração do pedido de admissão
gatekeeper_violations Medidor enforcement_action Número de violações de auditoria detectadas no último ciclo de auditoria
gatekeeper_watch_manager_intended_watch_gvk Medidor Quantos Policy Controller do GroupVersionKinds exclusivos precisam estar assistindo. Essa é uma combinação de recursos e restrições sincronizados. Não implementado no momento
gatekeeper_watch_manager_watched_gvk Medidor Quantos Policy Controller do GroupVersionKinds exclusivos estão realmente assistindo. Isso precisa convergir para ser igual a gatekeeper_watch_manager_intended_watch_gvk Não implementado no momento
gatekeeper_sync Medidor tipo, status Quantos recursos foram replicados no cache do OPA
gatekeeper_sync_duration_seconds Histograma Distribuição da duração da sincronização de objetos
gatekeeper_sync_last_run_time Medidor A última vez em que um recurso foi sincronizado