Customizando agentes de monitoramento do Kubernetes

No IBM Cloud Monitoring, é possível customizar a configuração do agente de monitoramento para definir um nível de log, bloquear portas, incluir ou excluir dados de métrica e eventos e filtrar contêineres.

Para customizar um agente de monitoramento do Kubernetes, é necessário configurar o arquivo sysdig-agent-configmap.yaml.

Há dois métodos que podem ser usados para modificar um arquivo de configuração:

  • Método 1: modificar o arquivo diretamente no cluster no qual o agente está em execução.
  • Método 2: modificar o arquivo localmente e aplicar as mudanças ao cluster.

Editando a configuração do agente de monitoramento do Kubernetes usando kubectl edit

Conclua as seguintes etapas para editar uma configuração do agente de monitoramento do Kubernetes:

  1. Configure o ambiente em cluster. Execute os seguintes comandos:

    Primeiro, obtenha o comando para configurar a variável de ambiente e faça download dos arquivos de configuração do Kubernetes.

    ibmcloud ks cluster config --cluster <cluster_name_or_ID>
    
  2. Edite o arquivo sysdig-agent-configmap.yaml.

    Execute o comando a seguir:

    kubectl edit configmap sysdig-agent -n ibm-observe
    

    Faça mudanças. Nota: consulte as instruções do editor vi para saber como fazer mudanças.

    Salve as mudanças. As mudanças são aplicadas automaticamente.

Editando a configuração do agente de monitoramento do Kubernetes usando kubectl apply

Use esse método se você tiver os arquivos yaml de configuração armazenados e gerenciados em um sistema de controle de origem.

Conclua as seguintes etapas para editar uma configuração do agente de monitoramento do Kubernetes:

  1. Obtenha a cópia mais recente de cada arquivo do controlador de origem.

    Para criar um arquivo local com a configuração que está implementada em um cluster, é possível também executar o comando:

    kubectl get configmap sysdig-agent -n=ibm-observe -o=yaml > prod-sysdig-agent-configmap.yaml
    
  2. Edite a configuração.

  3. Aplique as mudanças usando os comandos a seguir:

    kubectl apply -f sysdig-agent-configmap.yaml
    

Os agentes em execução selecionarão automaticamente a nova configuração após o Kubernetes enviar por push as mudanças em todos os nós no cluster.

Incluindo mais tags em dados que são coletados de um agente de monitoramento do Kubernetes

Conclua as seguintes etapas para incluir mais tags em uma configuração do agente de monitoramento do Kubernetes que já foi implementada:

  1. Configure o ambiente em cluster. Execute os seguintes comandos:

    Primeiro, obtenha o comando para configurar a variável de ambiente e faça download dos arquivos de configuração do Kubernetes.

    ibmcloud ks cluster config --cluster <cluster_name_or_ID>
    
  2. Edite o arquivo sysdig-agent-configmap.yaml.

    Execute o comando a seguir:

    kubectl edit configmap sysdig-agent -n ibm-observe
    
  3. Faça mudanças. Nota: consulte as instruções do editor vi para saber como fazer mudanças.

    apiVersion: v1
      data:
        dragent.yaml:
            k8s_cluster_name: mycluster
            collector: ingest.us-south.monitoring.cloud.ibm.com
            collector_port: 6443
            ssl: true
            sysdig_capture_enabled: false
            new_k8s: true
            tags: department:finance,region:us-south
      ...
    
  4. Salve as mudanças.

As mudanças são aplicadas automaticamente.

Para o exemplo fornecido, você obteria as tags agent.tag.department e agent.tag.region. Você poderia usá-las para definir alertas, customizar escopos e mais.

Coletando um conjunto de eventos do Kubernetes

O Monitoring suporta integrações de eventos com Kubernetes. Os agentes Monitoring descobrem automaticamente esses serviços e coletam dados de eventos deles. É possível editar o arquivo de configuração do agente para mudar seu comportamento padrão e incluir ou excluir dados do evento.

Por padrão, somente um conjunto limitado de eventos é coletado. Para obter mais informações sobre os eventos que são coletados por padrão, consulte Tipos de eventos.

Para incluir ou remover eventos, deve-se customizar o arquivo sysdig-agent-configmap.yaml e especificar quais eventos incluir e quais filtrar. Nota: uma entrada em uma seção no sysdig-agent-configmap.yaml substitui a seção inteira na configuração padrão.

Para filtrar eventos de pods do Kubernetes, conclua as etapas a seguir:

  1. Configure o ambiente em cluster. Execute os seguintes comandos:

    Primeiro, obtenha o comando para configurar a variável de ambiente e faça download dos arquivos de configuração do Kubernetes.

    ibmcloud ks cluster config --cluster <cluster_name_or_ID>
    
  2. Edite o arquivo sysdig-agent-configmap.yaml.

    Execute o comando a seguir:

    kubectl edit configmap sysdig-agent -n ibm-observe
    
  3. Faça mudanças. Inclua a seção de eventos ou atualize a seção.

    Nota: consulte as instruções do editor vi para saber como fazer mudanças.

    Por exemplo, você pode desejar coletar eventos de pulling do pod do Kubernetes e filtrar outros eventos de pod que são coletados por padrão. Você deseja ainda coletar eventos padrão do Kubernetes para os nós e os replicationControllers.

    events:
      kubernetes:
        pod:
          - Pulling
    
  4. Salve as mudanças.

As mudanças são aplicadas automaticamente.

Outro exemplo no qual é possível ver como coletar um subconjunto de eventos do Kubernetes: você deseja monitorar somente eventos de pulling, pulled e failed para os pods.

  • Opção 1: definir a sequência em entradas como uma lista com marcadores:

    events:
      kubernetes:
        pod:
          - Pulling
          - Pulled
          - Failed
    
  • Opção 2: definir a sequência em entradas em uma única linha entre colchetes:

    events:
      kubernetes:
        pod: [Pulling, Pulled, Failed]
    

Para obter mais informações sobre como trabalhar com eventos customizados, consulte Eventos customizados.

Desativando a coleta de eventos

Para desativar um agente de monitoramento da coleta de eventos do Kubernetes, deve-se modificar o arquivo sysdig-agent-configmap.yaml. Configure a entrada Kubernetes na seção events como none.

Conclua as etapas a seguir:

  1. Configure o ambiente em cluster. Execute os seguintes comandos:

    Primeiro, obtenha o comando para configurar a variável de ambiente e faça download dos arquivos de configuração do Kubernetes.

    ibmcloud ks cluster config --cluster <cluster_name_or_ID>
    
  2. Edite o arquivo sysdig-agent-configmap.yaml.

    Execute o comando a seguir:

    kubectl edit configmap sysdig-agent -n ibm-observe
    
  3. Faça mudanças. Inclua a seção de eventos ou atualize a seção.

    events:
      kubernetes: none
    
  4. Salve as mudanças.

As mudanças são aplicadas automaticamente.

Incluindo e excluindo métricas

Para filtrar as métricas customizadas, deve-se customizar a seção metrics_filter no arquivo sysdig-agent-configmap.yaml. É possível especificar quais métricas incluir e quais filtrar, configurando os parâmetros de filtragem include e exclude.

A ordem de regra de filtragem é configurada conforme a seguir: a primeira regra que corresponde a uma métrica é aplicada. As regras de acompanhamento para essa métrica são ignoradas.

Conclua as etapas a seguir:

  1. Configure o ambiente em cluster. Execute os seguintes comandos:

    Primeiro, obtenha o comando para configurar a variável de ambiente e faça download dos arquivos de configuração do Kubernetes.

    ibmcloud ks cluster config --cluster <cluster_name_or_ID>
    
  2. Edite o arquivo sysdig-agent-configmap.yaml.

    Execute o comando a seguir:

    kubectl edit configmap sysdig-agent -n ibm-observe
    
  3. Faça mudanças. Inclua a seção de metrics_filter ou atualize a seção.

    Por exemplo, se a seção metrics_filter de um agente de monitoramento for semelhante ao seguinte:

    metrics_filter:
      - include: metricA.*
      - exclude: metricA.*
      - include: metricB.*
      - include: haproxy.backend.*
      - exclude: haproxy.*
      - exclude: metricC.*
    
    • Você está configurando o agente de monitoramento para coletar todos os dados das métricas que começam com metricA, metricB e haproxy.backend.

    • Você está filtrando métricas iniciadas com metricC e outras métricas iniciadas com haproxy.

    • A entrada exclude: metricA.* é ignorada.

  4. Salve as mudanças.

As mudanças são aplicadas automaticamente.

Filtrando objetos e contêineres do Kubernetes dos quais os dados são coletados

Um agente de monitoramento do Kubernetes coleta automaticamente métricas de todos os contêineres que ele detecta em um cluster, incluindo métricas Prometheus, StatsD, JMX, verificações de app e integradas.

É possível customizar o agente de monitoramento para excluir contêineres da coleta de métricas.

Ao excluir contêineres, considere as informações a seguir:

  • Você reduz o agente e o carregamento de backend.
  • Você só coleta dados de contêineres que deseja monitorar.
  • É possível controlar custos relatando contêineres importantes e filtrando contêineres desnecessários ou não críticos.

Para ativar o recurso no qual um agente de monitoramento filtra contêineres, deve-se customizar o arquivo sysdig-agent-configmap.yaml. Configure a entrada use_container_filter na seção containers como true. Nota: por padrão, esse recurso está desativado. Em seguida, defina as regras que incluem uma ou mais condições e que você deseja aplicar.

A tabela a seguir descreve os parâmetros que podem ser definidos para configurar as regras de filtragem em um cluster:

Parâmetros para definir condições em contêineres
Parâmetro Condição
container.image Nome da imagem do contêiner
container.name Nome do contêiner
container.label.* Rótulo do contêiner
kubernetes.object.* Objeto Kubernetes. Um objeto pode ser um pod, um namespace, etc.
kubernetes.object.annotation.* Anotação de objeto do Kubernetes
kubernetes.object.label.* Rótulo do objeto Kubernetes
all Regra padrão para especificar todos os objetos

Considere as seguintes informações sobre como o agente de monitoramento aplica as regras definidas na seção container_filter:

  • Você define condições configurando-os com os parâmetros de filtragem include e exclude.
  • A primeira regra de correspondência na lista determina se o contêiner está incluído ou excluído.
  • As condições consistem em um nome de chave e um valor. Se a chave fornecida para um contêiner corresponder ao valor, a regra será aplicada.
  • Quando uma regra contém múltiplas condições, all the conditions precisam corresponder para que a regra seja aplicada.

Conclua as seguintes etapas para filtrar contêineres que são monitorados por um agente de monitoramento em um cluster:

  1. Configure o ambiente em cluster. Execute os seguintes comandos:

    Primeiro, obtenha o comando para configurar a variável de ambiente e faça download dos arquivos de configuração do Kubernetes.

    ibmcloud ks cluster config --cluster <cluster_name_or_ID>
    
  2. Edite o arquivo sysdig-agent-configmap.yaml.

    Execute o comando a seguir:

    kubectl edit configmap sysdig-agent -n ibm-observe
    
  3. Faça mudanças. Inclua a entrada use_container_filter e a seção container_filter ou atualize as entradas existentes.

    Por exemplo, consulte a extração a seguir de um mapa de configuração:

    # Enable the feature
    use_container_filter: true
    #
    # Include or exclude conditions
    container_filter:
      - include:
            container.image: appdomain/my-app-image
      - include:
            container.name: my-java-app
      - exclude:
            kubernetes.namespace.name: kube-system
    
  4. Salve as mudanças.

As mudanças são aplicadas automaticamente.

Bloqueando portas

Para bloquear o tráfego de rede e as métricas de portas de rede, deve-se customizar a seção blacklisted_ports no arquivo sysdig-agent-configmap.yaml. Deve-se listar as portas das quais você deseja filtrar quaisquer dados.

A Porta 53 (DNS) está sempre na lista de bloqueios e não precisa ser especificada no blacklisted_ports.

Conclua as etapas a seguir:

  1. Configure o ambiente em cluster. Execute os seguintes comandos:

    Primeiro, obtenha o comando para configurar a variável de ambiente e faça download dos arquivos de configuração do Kubernetes.

    ibmcloud ks cluster config --cluster <cluster_name_or_ID>
    
  2. Edite o arquivo sysdig-agent-configmap.yaml.

    Execute o comando a seguir:

    kubectl edit configmap sysdig-agent -n ibm-observe
    
  3. Faça mudanças. Inclua a seção de metrics_filter ou atualize a seção.

    Por exemplo, a amostra a seguir exibe como configurar a seção blacklisted_ports de um agente de monitoramento para excluir dados vindos das portas 6666 e 6379:

    blacklisted_ports:
      - 6666
      - 6379
    
  4. Salve as mudanças.

As mudanças são aplicadas automaticamente.

Mudando as configurações de log

Para definir as configurações de log, deve-se customizar a seção log no arquivo sysdig-agent-configmap.yaml.

O agente de monitoramento gera entradas de log em /opt/draios/logs/draios.log.

  • O arquivo de log gira ao atingir 10 MB de tamanho.
  • Os 10 arquivos de log mais recentes são mantidos. O registro de data anexado ao nome do arquivo é usado para determinar quais arquivos manter.

A tabela a seguir lista alguns cenários comuns e o valor que deve ser configurado em cada um deles:

Entradas da seção de registro
Casos de uso Entrada de seção de log Valor padrão
Solucionar problemas de comportamento do agente file_priority: debug info
Reduza a saída de console do contêiner console_priority: warning info
Filtrando eventos por severidade event_priority: warning information
Verifique quais métricas estão incluídas ou excluídas metrics_excess_log: true false

Mudando o nível de log

  • O file_priority na seção log controla o tipo de entradas de log gravadas no arquivo /opt/draios/logs/draios.log.
  • O console_priority na seção log controla o tipo de entradas de log gravadas na saída do console do contêiner ao executar o agente conteinerizado.
  • O nível de log padrão é informações, em que uma entrada de log é criada para cada transmissão de métrica agregada nos servidores de back-end, uma vez por segundo, além de entradas para quaisquer avisos e erros.
  • Os níveis de log válidos são: nenhum, erro, aviso, informações, depuração, rastreio

Filtrando eventos do Kubernetes por severidade

  • O event_priority na seção log controla o tipo de eventos enviados do agente
  • O nível de log padrão é informações. Isso significa que apenas informações e eventos de maior severidade são transmitidos.
  • Os níveis válidos são: emergencial, alerta, crítico, erro, aviso, aviso, informações, depuração e nenhum. Nota: os valores são listados de alta prioridade para baixa prioridade.
  • A configuração do nível para none bloqueará toda a coleção de eventos.

Registrando em um arquivo quais métricas estão incluídas ou excluídas

  • A configuração de metrics_excess_log para true na seção log ativará a criação de log das métricas customizadas incluídas ou excluídas.

  • A criação de log de métrica é desativada por padrão.

  • A criação de log ocorre no nível INFO a cada 30 segundos e permanece por 10 segundos.

  • A configuração metricsfile é necessária para especificar o local para que as métricas sejam gravadas pelo agente. O valor metricsfile.location é um caminho relativo sob o diretório /opt/draios. Nota: a entrada metricsfile é especificada no mesmo nível de log (não como um filho no yaml)

  • Os dados de criação de log são formatados conforme a seguir:

    +/-[type] [metric included/excluded]: metric.name (filter: +/-[metric.filter])
    
    • +/- é um símbolo que indica se a métrica está incluída ou excluída. Mais (+) indica que uma métrica está incluída. Menos (-) indica que uma métrica está excluída.

    • [type] especifica o tipo de métrica, por exemplo, statsd.

    • métrica [incluída/excluída] indica, de forma legível, se a métrica está incluída ou excluída.

      • metric.name * indica o nome da métrica.
    • (filter: +/-metric[metric.filter]) fornece informações sobre quaisquer filtros definidos na seção metrics_filter do arquivo sysdig-agent-configmap.yaml.

A seguir, uma entrada de log de amostra:

-[statsd] metric excluded: mongo.statsd.vsize (filter: -[mongo.statsd.*])
+[statsd] metric included: mongo.statsd.netIn (filter: +[mongo.statsd.net*])

Conclua as etapas a seguir para definir as configurações de log:

  1. Configure o ambiente em cluster. Execute os seguintes comandos:

    Primeiro, obtenha o comando para configurar a variável de ambiente e faça download dos arquivos de configuração do Kubernetes.

    ibmcloud ks cluster config --cluster <cluster_name_or_ID>
    
  2. Edite o arquivo sysdig-agent-configmap.yaml.

    Execute o comando a seguir:

    kubectl edit configmap sysdig-agent -n ibm-observe
    
  3. Faça mudanças. Inclua a seção de log ou atualize a seção e inclua as configurações que você deseja modificar com base nas descrições anteriores.

    Por exemplo:

    log:
      file_priority: warning
      console_priority: info
      event_priority: warning
      metrics_excess_log: true
    metricsfile: { location : metrics }
    
  4. Salve as mudanças.

As mudanças são aplicadas automaticamente.

Arquivo configmap yaml de amostra

apiVersion: v1
data:
  dragent.yaml: |
    ### Agent tags
    # tags: linux:ubuntu,dept:dev,local:nyc

    ####
    # collector address
    # collector: 192.168.1.1
    # Collector TCP port
    # collector_port: 6666
    # Whether collector accepts ssl
    # ssl: true
    # collector certificate validation
    # ssl_verify_certificate: true
    #######################################
    #
    k8s_cluster_name: cluster12
    collector: ingest.us-south.monitoring.cloud.ibm.com
    collector_port: 6443
    ssl: true
    ssl_verify_certificate: true
    sysdig_capture_enabled: false
    new_k8s: true
    tags: type:mycluster,region:us-south
    blacklisted_ports:
      - 6666
      - 6379
    events:
      kubernetes:
        node:
          - Rebooted
    metrics_filter:
      - include: metricA.*
      - exclude: metricA.*
      - include: metricB.*
    use_container_filter: true
    container_filter:
      - exclude:
        kubernetes.namespace.name: kube-system
    log:
      file_priority: warning
      console_priority: info
      event_priority: warning
      metrics_excess_log: true
    metricsfile: { location : metrics }
kind: ConfigMap
metadata:
  annotations:
...