Implantação de serviços de monitoramento no Kubernetes

Este tópico descreve como usar o Prometheus para implantar serviços de monitoramento para um cluster do Milvus no Kubernetes.

Monitorar métricas com o Prometheus

As métricas são indicadores que fornecem informações sobre o status de execução do seu sistema. Por exemplo, com as métricas, é possível entender a quantidade de memória ou recursos de CPU consumidos por um nó de dados no Milvus. Conhecer o desempenho e o estado dos componentes do seu cluster Milvus permite-lhe estar bem informado e, consequentemente, tomar melhores decisões e ajustar a atribuição de recursos de forma mais atempada.

Geralmente, as métricas são armazenadas numa base de dados de séries temporais (TSDB), como o Prometheus, e as métricas são registadas com um carimbo de data/hora. No caso da monitorização dos serviços Milvus, pode utilizar o Prometheus para extrair dados dos pontos de extremidade definidos pelos exportadores. Em seguida, o Prometheus exporta as métricas de cada componente do Milvus em http://<component-host>:9091/metrics.

No entanto, poderá ter várias réplicas para um componente, o que torna a configuração manual do Prometheus demasiado complicada. Portanto, é possível usar o Prometheus Operator, uma extensão do Kubernetes, para o gerenciamento automatizado e eficaz das instâncias de monitoramento do Prometheus. O uso do Prometheus Operator poupa o trabalho de adicionar manualmente alvos de métricas e provedores de serviços.

O ServiceMonitor Custom Resource Definition (CRD) permite definir declarativamente como um conjunto dinâmico de serviços é monitorado. Ele também permite selecionar quais serviços devem ser monitorados com a configuração desejada usando seleções de rótulos. Com o Prometheus Operator, é possível introduzir convenções que especificam como as métricas são expostas. Novos serviços podem ser descobertos automaticamente seguindo a convenção definida, sem a necessidade de reconfiguração manual.

A imagem a seguir ilustra o fluxo de trabalho do Prometheus.

Prometheus_architecture Prometheus_architecture

Pré-requisitos

Este tutorial usa o kube-prometheus para evitar o trabalho de instalar e configurar manualmente cada componente de monitoramento e alerta.

O Kube-prometheus coleta manifestos do Kubernetes, painéis do Grafana e regras do Prometheus combinados com documentação e scripts.

Antes de implantar os serviços de monitoramento, é necessário criar uma pilha de monitoramento usando a configuração no diretório de manifestos do kube-prometheus.

$ git clone https://github.com/prometheus-operator/kube-prometheus.git
$ cd kube-prometheus
$ kubectl apply --server-side -f manifests/setup
$ kubectl wait \
        --for condition=Established \
        --all CustomResourceDefinition \
        --namespace=monitoring
$ kubectl apply -f manifests/
O clusterrole padrão prometheus-k8s não pode capturar as métricas do milvus, é necessário corrigir:
kubectl patch clusterrole prometheus-k8s --type=json -p='[{"op": "add", "path": "/rules/-", "value": {"apiGroups": [""], "resources": ["pods", "services", "endpoints"], "verbs": ["get", "watch", "list"]}}]'

Para excluir uma pilha, execute kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup.

Implantar serviços de monitoramento no Kubernetes

1. Acessar os painéis de controle

Encaminhe o serviço Prometheus para a porta 9090, e o serviço Grafana para a porta 3000.

$ kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/prometheus-k8s 9090
$ kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/grafana 3000

2. Habilitar o ServiceMonitor

O ServiceMonitor não está habilitado para o Milvus Helm por padrão. Depois de instalar o Operador do Prometheus no cluster do Kubernetes, você pode habilitá-lo adicionando o parâmetro metrics.serviceMonitor.enabled=true.

Com o Helm

Pode ativar o ServiceMonitor definindo o parâmetro metrics.serviceMonitor.enabled=true da seguinte forma se tiver instalado o Milvus Helm chart.

```
$ helm upgrade my-release milvus/milvus --set metrics.serviceMonitor.enabled=true --reuse-values
```

Quando a instalação estiver concluída, utilize kubectl para verificar o recurso ServiceMonitor.

Com o Milvus Operator

Pode ativar o ServiceMonitor da seguinte forma se tiver instalado o Milvus utilizando o Milvus Operator.

  1. Execute o seguinte comando para editar o recurso personalizado do MIlvus. O comando a seguir assume que o recurso personalizado tem o nome my-release.

    $ kubectl edit milvus my-release
    
  2. Edite o campo spec.components.disableMetric para false.

    ...
    spec:
      components:
        disableMetric: false # set to true to disable metrics
    ...
    
  3. Salve e saia do editor.

  4. Aguarde até que o operador reconcilie as alterações. Pode verificar o estado do recurso personalizado Milvus executando o seguinte comando.

    $ kubectl get milvus my-release -o yaml
    

O campo status.components.metrics.serviceMonitor.enabled deve ser true.

3. Verificar as métricas

Depois de ativar o ServiceMonitor, pode aceder ao painel de controlo do Prometheus em http://localhost:9090/.

Clique na guia Status e, em seguida, em Targets. Deverá ver os alvos dos componentes do Milvus.

Prometheus_targets Alvos do Prometheus

Clique no separador Graph e introduza a expressão up{job="default/my-release"} na caixa de introdução de expressões. Deverá ver as métricas dos componentes do Milvus.

Prometheus_graph Prometheus_graph

4. Verifique o ServiceMonitor

$ kubectl get servicemonitor
NAME                           AGE
my-release-milvus              54s

O que vem a seguir