• EnglishEspañol日本語한국어Português
  • EntrarComeçar agora

Esta tradução de máquina é fornecida para sua comodidade.

Caso haja alguma divergência entre a versão em inglês e a traduzida, a versão em inglês prevalece. Acesse esta página para mais informações.

Criar um problema

Monitor serviços em execução no Kubernetes

Se você possui serviços executados no Kubernetes e são suportados por nossa integração aplicável, você pode habilitar essas integração por meio de nossa integração Kubernetes .

Iniciar

Nossa integração Kubernetes vem junto com algumas de nossas integração no host. Isso permite que você obtenha dados para esses serviços adicionando uma seção à configuração da integração do Kubernetes, que reside como um ConfigMap dentro de um manifesto.

Para obter um exemplo de como monitorar o Redis em execução em um livro de visitas PHP do Kubernetes, consulte este tutorial.

Requisitos

Para monitor serviços em execução no Kubernetes, você precisa de:

Para este método de instalação, nossa integração RabbitMQ e Apache não reportam dados de inventário.

Habilite o monitoramento de serviços usando o Helm Chart

Os serviços de monitoramento no Kubernetes funcionam aproveitando nosso agente de infraestrutura e integração no host e um mecanismo de autodescoberta para apontá-los para o pod com um seletor especificado.

Para permitir que nossa integração Kubernetes monitor um ou mais serviços:

Obtenha a configuração básica

Você pode obter um exemplo de arquivo de configuração para nossa integração que pode ser executado no K8s nos seguintes links:

Leve em consideração que a maioria desses exemplos precisará ser configurada para seu ambiente específico, principalmente para inserir as credenciais necessárias para autenticação no serviço específico. Você pode ler mais sobre como configurar cada integração em detalhes nas páginas específicas de integração, vinculadas no dropdown acima.

Adicione a configuração ao seu values-newrelic.yaml

Dica

Este formato se aplica à integração do Kubernetes v3. Para a versão v2 mais antiga, verifique a seção abaixo.

Um trecho de configuração funcional deve ser um documento YAML com a seguinte estrutura:

# Top level name can be arbitrary, akin to a config file name
redis-sampleapp.yaml:
# Discovery section will define which pods will be monitored.
discovery:
command:
# nri-discovery-kubernetes is a tool that connects to the Kubelet to fetch local pods
# without putting stress in the API Server. It accepts the following arguments:
# --namespaces: Comma separated namespaces to limit discovery on
# --tls: Use tls for connecting to the kubelet
# --port: Port used to connect to the kubelet. Defaults to 10255.
exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250
# Monitor pods which have a `app=sampleapp` label
match:
label.app: sampleapp
# Integrations section contains the integration configs.
# ${placeholders} will be replaced with the specified attributes for each pod that is discovered
integrations:
- name: nri-redis # Integration name, should not be changed
env:
# Using the discovered pod IP as the hostname address
HOSTNAME: ${discovery.ip}
PORT: 6379
# Other integration options go here

Este trecho deve ser adicionado à seção integrations , em newrelic-infrastructure no seu arquivo values-newrelic.yaml . Por exemplo:

global:
licenseKey: _YOUR_NEW_RELIC_LICENSE_KEY_
cluster: _K8S_CLUSTER_NAME_
# Other settings...
newrelic-infrastructure:
# verboseLog: true
integrations:
redis-sampleapp.yaml:
discovery:
command:
# --namespaces: Comma separated list of namespaces to discover pods on
# --port: Port used to connect to the kubelet. Default is 10255
# --tls: Use secure (TLS) connection
exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250
match:
label.app: sampleapp
integrations:
- name: nri-redis
env:
HOSTNAME: ${discovery.ip}
PORT: 6379

Dica

Observe que estamos especificando --tls --port 10250. Versões anteriores da integração poderiam ter funcionado sem isso, a partir da versão 3 da integração do Kubernetes é obrigatório especificá-las. A razão para essa mudança é que a integração agora se conecta ao Kubelet usando o nodeIP em vez de localhost, com o primeiro exigindo TLS, enquanto o último não.

Integração direcionada a outro pod deve ter sua própria seção ao lado de redis-sampleapp.yaml.

Integração são binários independentes e são executados pelo agente de infraestrutura incluído no pod newrelic-nrk8s-kubelet-xxxxx . Os arquivos de configuração são implantados em todos os pods do nrk8s-kubelet DaemonSet, mas a descoberta garante que cada pod terá como destino apenas os pods de serviço programados no mesmo nó que aquele nrk8s-kubelet pod específico. Se uma instância do nrk8s-kubelet DaemonSet não tiver nenhum pod que corresponda aos rótulos especificados, a integração não será executada por essa ### instância.

(Legado v2) Adicione a configuração ao values.yaml

Verifique se a integração está funcionando

Vá para one.newrelic.com > All capabilities > Infrastructure, selecione Third party services e selecione o dashboard do serviço. Você deverá ver os dados sendo relatados.

Se você não vir os dados lá, a integração pode estar faltando algum parâmetro necessário para ser executada ou pode não ser capaz de alcançar o serviço de destino. Você pode obter o log da integração executando:

bash
$
kubectl logs -n newrelic newrelic-nrk8s-kubelet-xxxxx agent

Certifique-se de selecionar o pod específico do nrk8s-kubelet DaemonSet que está programado próximo ao pod que a integração deve ter como alvo. Você pode verificar qual instância está sendo executada em qual nó executando o seguinte comando:

bash
$
kubectl get pods -n newrelic -o wide -l app.kubernetes.io/component=kubelet

Notas adicionais sobre a ativação de serviços

  • A ativação de vários serviços pode usar mais recursos do que o definido nos limites de recursos do arquivo de configuração de integração do Kubernetes. Se isso se tornar um problema, aumente o limite na seção resources .
  • A integração do Kubernetes não é atualizada automaticamente. Para obter melhores resultados, atualize regularmente o .

Saber mais

Mais recursos para aprender sobre configuração:

Habilite o monitoramento de serviços usando manifestos

Dica

Recomendamos fortemente que você configure a integração por meio do arquivo values-newrelic.yaml e do nosso Helm Chart, conforme explicado na seção acima. Configurar o monitoramento de serviço além da instalação do manifesto é substancialmente mais difícil e não oferece nenhuma vantagem.

Para cada serviço que você deseja monitor, você deve adicionar um arquivo de configuração dessa integração à nossa configuração de integração do Kubernetes . Este documento cobrirá estes assuntos:

Como funciona a configuração YAML específica do serviço

A configuração da nossa integração Kubernetes segue o formato ConfigMap . Usar um ConfigMap nos permite dissociar a configuração da integração da imagem do Kubernetes . O outro benefício é que um ConfigMap pode ser atualizado automaticamente sem recarregar o contêiner em execução.

Como o agente de infraestrutura utiliza YAML para configurar sua integração associada, ConfigMaps são uma boa opção para armazenar YAML. (Para obter mais informações sobre o formato do arquivo de configuração, consulte Formato do arquivo de configuração de integração.)

A imagem de integração Kubernetes vem com um recurso de auto-discovery que simplifica a configuração de múltiplas instâncias de serviços usando um único arquivo de configuração. Por exemplo, se você tiver várias instâncias NGINX em execução, criar um arquivo de configuração de integração NGINX para cada instância seria difícil de implementar e atualizar. Com nossa opção de descoberta automática, você pode descobrir e monitor todas as suas instâncias NGINX com um único arquivo de configuração.

Cada integração possui sua própria configuração YAML específica. Nosso arquivo de configuração padrão de integração NGINX é assim:

discovery:
command:
# Use the following optional arguments:
# --namespaces: Comma separated list of namespaces to discover pods on
# --port: Port used to connect to the kubelet. Default is 10255
# --tls: Use secure (TLS) connection
# Custom Example:
# exec: /var/db/newrelic-infra/nri-discovery-kubernetes --namespaces namespace1,namespace2 --port 10250 --tls
# Default
exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250
match:
label.app: nginx
integrations:
- name: nri-nginx
env:
STATUS_URL: http://${discovery.ip}/status
STATUS_MODULE: discover
METRICS: 1

A configuração acima permite o seguinte:

  • Executa nri-discovery-kubernetes para consultar os dados do nó em que estamos atualmente.

  • Analisa os dados retornados e procura qualquer pod do Kubernetes que tenha um contêiner do Kubernetes com um rótulo app= com valor nginx.

  • Para qualquer correspondência, ele tenta executar a integração NGINX. O URL de status é criado a partir de:

    • O endereço IP do pod
    • A página de status é extraída do rótulo no pod K8 chamado status_url

Essa descoberta automática funciona da mesma forma que a descoberta automática de contêiner usada pelo agente de infraestrutura. Para opções mais avançadas, consulte auto-discovery de contêineres.

Adicione um YAML de serviço à configuração de integração do Kubernetes

Para que o trecho acima seja reconhecido pela integração, ele deverá ser colocado dentro do ConfigMap designado. Se você estiver usando nossa integração Kubernetes v3, um ConfigMap já deverá ter sido gerado, com um nome terminando em -integrations-cfg. Localize o mapa de configuração e adicione o trecho modificado a ele, para que fique assim:

---
apiVersion: v1
kind: ConfigMap
metadata:
name: newrelic-infrastructure-integrations-cfg
namespace: newrelic
data:
nginx-config.yml: |
discovery:
command:
# Use the following optional arguments:
# --namespaces: Comma separated list of namespaces to discover pods on
# --port: Port used to connect to the kubelet. Default is 10255
# --tls: Use secure (TLS) connection
# Custom Example:
# exec: /var/db/newrelic-infra/nri-discovery-kubernetes --namespaces namespace1,namespace2 --port 10250 --tls
# Default
exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250
match:
label.app: nginx
integrations:
- name: nri-nginx
env:
STATUS_URL: http://${discovery.ip}/status
STATUS_MODULE: discover
METRICS: 1

Se você estiver usando nossa integração Kubernetes v3, este ConfigMap já estará montado no contêiner necessário.

Importante

Para a integração Kubernetes versão 2, você precisará adicionar uma entrada para este ConfigMap na seção volumes e volumeMounts do spec do DaemonSet, para garantir que todos os arquivos no ConfigMap sejam montados em /etc/newrelic-infra/integrations.d/.

Observe que o mesmo ConfigMap pode conter vários arquivos de configuração, o que é recomendado para manter no mínimo as modificações nos manifestos.

---
apiVersion: v1
kind: ConfigMap
metadata:
name: newrelic-infrastructure-integrations-cfg
namespace: newrelic
data:
nginx-config.yml: |
discovery: # ...
integrations:
- name: nri-nginx
# ...
redis-config.yml: |
discovery: # ...
integrations:
- name: nri-redis
# ...

Como usar os dados relatados

Você pode aprender mais sobre como encontrar e usar seus dados do Kubernetes aqui e pode revisar nosso esquema de dados K8sServiceSample aqui.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.