O ASM oferece recursos de observabilidade para logs, métricas e rastreamento. Use o console do ASM para personalizar essas configurações no escopo global, de namespace ou de carga de trabalho específica. Por exemplo, configure o formato de saída de log, defina dimensões de métrica, ative ou desative métricas específicas e defina a porcentagem de amostragem para rastreamento.
Pré-requisitos
Uma instância do ASM versão 1.17.2.35 ou posterior. Para mais informações, consulte Criar uma instância do ASM ou Atualizar uma instância do ASM.
Escopos
|
Escopo |
Descrição |
|
Global |
As configurações globais aplicam-se a logs, métricas e rastreamento. O sistema permite apenas uma configuração global, que não pode ser excluída. As definições de rastreamento só podem ser configuradas no escopo global. |
|
Namespace |
Crie configurações de observabilidade dedicadas para um namespace. Cada namespace admite apenas uma configuração de observabilidade nesse nível. |
|
Personalizado |
Utilize um seletor de carga de trabalho para definir o escopo de uma configuração personalizada. Cada carga de trabalho pode pertencer a apenas uma configuração personalizada. |
Procedimento
Global
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Observability Settings, clique em aba Global. Configure os parâmetros de logs, métricas e rastreamento conforme necessário e clique em Submission.
Para descrições detalhadas das configurações, consulte as seções a seguir.
Área
Descrição
Namespace
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Observability Settings, clique em aba Namespace e, em seguida, clique em Create. Selecione o Namespace desejado, configure os parâmetros de logs e métricas conforme necessário e clique em Create.
Para descrições detalhadas das configurações, consulte as seções a seguir.
Área
Descrição
Personalizado
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Observability Settings, clique em aba Custom. Selecione o Namespace desejado e clique em Create. Insira um Name e um Label selector, configure os parâmetros de logs e métricas conforme necessário e clique em Create.
Para descrições detalhadas das configurações, consulte as seções a seguir.
Área
Descrição
Configurações de log
As configurações de log incluem ativar ou desativar a saída de log de acesso, definir o formato de saída, personalizar o formato e filtrar logs.
Saída de log de acesso
-
Na seção Log Settings, ative ou desative a chave Enable Log Output conforme necessário.
Se ativada, os sidecars ou gateways do plano de dados enviam logs de acesso para a saída padrão do contêiner.
Se desativada, os sidecars ou gateways do plano de dados param de enviar logs para a saída padrão do contêiner.
-
Visualize os logs na saída padrão do contêiner sidecar do plano de dados.
Os exemplos a seguir mostram como visualizar logs de acesso usando kubectl.
-
Execute o comando a seguir para visualizar os logs do sidecar.
kubectl logs <Pod-name> -c istio-proxy --tail 1 -
Execute o comando a seguir para visualizar os logs do gateway de entrada.
kubectl -n istio-system logs <ingress-gateway-Pod-name> --tail 1
-
-
(Opcional) Visualize os logs de acesso no console do ACK.
Caso utilize um cluster ACK, também é possível visualizar os logs de acesso no console do ACK.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Pods, clique em nome do Pod desejado e, em seguida, clique em aba Logs na parte inferior da página para visualizar o log de acesso.
Formato de saída de log
Este recurso requer uma instância do ASM versão 1.20.6.36 ou posterior. Para obter informações sobre como atualizar uma instância, consulte Atualizar uma instância do ASM.
Na seção Log Settings, defina Log Output Format como JSON ou TEXT conforme necessário.
Ao selecionar JSON, os logs de acesso são enviados para a saída padrão do contêiner como strings JSON.
Ao selecionar TEXT, os logs de acesso são enviados para a saída padrão do contêiner como strings de texto simples.
Formato de log personalizado
-
Na seção Log Settings, selecione os campos a serem incluídos, modifique as informações dos campos personalizados ou clique em ícone
para adicionar um novo campo de log.A personalização do formato de log só é possível quando Enable Log Output está ativado. Na seção Log Format, os campos de log padrão são obrigatórios e não podem ser modificados. Os campos de log podem recuperar valores de cabeçalhos de requisição, cabeçalhos de resposta ou valores internos do Envoy.
O exemplo a seguir mostra como imprimir o cabeçalho
accept-encodingde uma requisição. Defina accessLogFormat key como accept-encoding, Type como Request Properties e accessLogFormat value como Accept-Encoding. Por exemplo, o campo internoauthority_forcorresponde à variável de formato%REQ(:AUTHORITY)%, erequest_durationcorresponde a%REQUEST_DURATION%. Para um campo personalizado comoupstream_response_time, se você selecionar Response Attribute como tipo de atributo, a variável de formato será%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%. Para um campo personalizado comoaccept-encoding, se você selecionar Request Attribute como tipo de atributo, a variável de formato será%REQ(Accept-Encoding)%. -
Execute o comando a seguir para verificar nos logs dos componentes do plano de dados a presença do novo campo.
kubectl logs <Pod-name> -c istio-proxy --tail 1|grep accept-encoding --color=autoA saída mostra que o cabeçalho Accept-Encoding, adicionado na Etapa 1, foi gravado no log de acesso.
Filtragem de logs
Na seção Log Settings, selecione Enable Log Filter para ativar a filtragem de logs. Em seguida, insira uma expressão de filtro de log na caixa de texto. Os logs de acesso são gerados apenas para requisições que correspondem à expressão.
Por exemplo, para registrar apenas requisições com status HTTP de resposta 400 ou superior, use a expressão response.code >= 400. Para mais informações, consulte Expressões CEL e campos comuns.
Expressões e campos CEL
As expressões de filtro de log utilizam a Common Expression Language (CEL). A tabela a seguir lista os campos comuns para expressões CEL. Para mais informações, consulte CEL e Envoy.
|
Atributo |
Tipo |
Descrição |
|
request.path |
string |
O caminho da requisição. |
|
request.url_path |
string |
O caminho da requisição, excluindo a string de consulta. |
|
request.host |
string |
A parte do host da URL. |
|
request.method |
string |
O método da requisição. |
|
request.headers |
map<string, string> |
Todos os cabeçalhos da requisição, indexados pelo nome do cabeçalho em minúsculas. |
|
request.useragent |
string |
O valor do cabeçalho User-Agent. |
|
request.time |
timestamp |
O momento em que o primeiro byte da requisição chega. |
|
request.id |
string |
O ID da requisição. |
|
request.protocol |
string |
O protocolo da requisição. Valores válidos: |
|
request.query |
string |
A string de consulta na URL da requisição. |
|
response.code |
int |
O código de status da resposta HTTP. |
|
response.code_details |
string |
Detalhes sobre o código de resposta. |
|
response.grpc_status |
int |
O código de status gRPC na resposta. |
|
response.headers |
map<string, string> |
Todos os cabeçalhos da resposta, indexados pelo nome do cabeçalho em minúsculas. |
|
response.size |
int |
O tamanho do corpo da resposta em bytes. |
|
response.total_size |
int |
O tamanho total da mensagem de resposta em bytes. |
Configurações de métricas
As configurações de métricas incluem ativar ou desativar a geração de métricas e configurar dimensões de métrica.
Geração de métricas
As métricas dividem-se em métricas do lado do cliente e métricas do lado do servidor.
Métricas do lado do cliente são geradas quando um sidecar atua como cliente para iniciar requisições. Métricas de gateway também pertencem à categoria CLIENT.
Métricas do lado do servidor: Geradas quando um sidecar é acessado como servidor.
-
Na seção Metric Settings, na coluna Client-Side Metrics ou Server-Side Metrics, marque ou desmarque a caixa de seleção Enabled da métrica desejada conforme necessário.
Se ativada, o sidecar ou gateway do plano de dados expõe a métrica através do caminho
/stats/prometheusna porta 15020.Se desativada, a métrica não fica exposta nesta porta.
-
Execute o comando a seguir para visualizar as métricas expostas pelo sidecar ou gateway.
Use o comando kubectl para executar um comando curl no contêiner Sidecar ou gateway, acessando o caminho
/stats/prometheusna porta local 15020 para visualizar as métricas exportadas.kubectl exec <Pod-name> -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus | head -n 10Exemplo de saída:
# TYPE istio_agent_cert_expiry_seconds gauge istio_agent_cert_expiry_seconds{resource_name="default"} 46725.287654548 # HELP istio_agent_endpoint_no_pod Endpoints without an associated pod. # TYPE istio_agent_endpoint_no_pod gauge istio_agent_endpoint_no_pod 0 # HELP istio_agent_go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE istio_agent_go_gc_duration_seconds summary istio_agent_go_gc_duration_seconds{quantile="0"} 5.0149e-05 istio_agent_go_gc_duration_seconds{quantile="0.25"} 9.8807e-05 ......
Dimensões de métrica
As dimensões de métrica adicionam contexto, permitindo filtrar métricas no Prometheus. Por exemplo, use a dimensão source_app para filtrar métricas de requisições de uma aplicação cliente específica.
Editar dimensões padrão
Siga estas etapas para editar as dimensões padrão:
Na seção Metric Settings, na coluna Client-Side Metrics ou Server-Side Metrics, clique em Edit dimension para uma métrica ativada.
Na caixa de diálogo Customize CLIENT dimension configuration ou Customize SERVER dimension configuration, marque ou desmarque as caixas de seleção das dimensões a serem exportadas e clique em Confirm.
Por exemplo, se nenhuma dimensão estiver desativada, execute um comando curl dentro do contêiner sidecar ou gateway usando kubectl para acessar o caminho /stats/prometheus local na porta 15020 e visualize as métricas exportadas.
kubectl exec <Pod-name> -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus
Considere, por exemplo, a métrica istio_request_bytes_sum, que corresponde à métrica REQUEST_SIZE no console. A saída mostra que todas as dimensões estão incluídas.
istio_request_bytes_sum{reporter="destination",source_workload="istio-ingressgateway",source_canonical_service="unknown",source_canonical_revision="latest",source_workload_namespace="istio-system",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway",source_app="istio-ingressgateway",source_version="unknown",source_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",destination_workload="httpbin",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/httpbin",destination_app="httpbin",destination_version="v1",destination_service="httpbin.default.svc.cluster.local",destination_canonical_service="httpbin",destination_canonical_revision="v1",destination_service_name="httpbin",destination_service_namespace="default",destination_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 18000
Modifique a métrica REQUEST_SIZE padrão do lado do servidor para manter apenas a dimensão response_code. Em seguida, execute um comando curl para visualizar as métricas exportadas do caminho /stats/prometheus. A saída mostra que apenas a dimensão response_code está incluída.
istio_request_bytes_sum{response_code="200"} 16550
Adicionar dimensões personalizadas
Siga estas etapas para adicionar dimensões personalizadas:
Na seção Metric Settings, na coluna Client-Side Metrics ou Server-Side Metrics, clique em Edit dimension para uma métrica ativada.
Na caixa de diálogo Customize CLIENT dimension configuration ou Customize SERVER dimension configuration, na seção Custom Dimensions, configure o nome e o valor da dimensão e clique em Confirm.
Por exemplo, edite as dimensões personalizadas para a métrica REQUEST_SIZE do lado do servidor. Adicione uma dimensão com o nome request_path e o valor request.path. Depois, execute um comando curl para visualizar as métricas exportadas do caminho /stats/prometheus. A saída mostra que a métrica agora inclui a dimensão personalizada request_path.
istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800
Remover dimensões padrão desnecessárias para seus serviços pode reduzir o consumo de memória do Envoy e do Prometheus. No entanto, como a maioria das dimensões geralmente é necessária, a seção Metric Settings exibe apenas as dimensões removidas.
Configurações de rastreamento
Para construir um rastro completo, o rastreamento exige uma configuração de relatório consistente em toda a cadeia de chamadas. Endpoints de relatório ou porcentagens de amostragem inconsistentes podem resultar em rastros incompletos. Por esse motivo, instâncias do ASM anteriores à versão 1.24.6.83 não permitem configurações de rastreamento no nível de namespace ou de carga de trabalho. A partir da versão 1.24.6.83, o ASM suporta a modificação do recurso Telemetry através da API do Kubernetes para implementar configurações de rastreamento nos níveis de namespace e carga de trabalho. Para mais informações sobre como configurar recursos Telemetry, consulte Descrição do CRD Telemetry.
Porcentagem de amostragem
É possível personalizar a porcentagem de amostragem para rastreamento, que representa a proporção de requisições que acionam o relatório de rastro. Um valor igual a 0 desativa o rastreamento, impedindo que qualquer requisição acione o relatório.
Tags personalizadas
Personalize as tags nos spans de rastreamento reportados. Na seção Tracing Analysis Settings, clique em Add Custom Tags e configure o Name, Type e Value.
O Tipo pode ser Valor Fixo, Cabeçalho de Requisição ou Variável de Ambiente. A tabela a seguir descreve cada tipo e fornece exemplos de configuração.
|
Tipo |
Descrição |
Exemplo |
|
Fixed Value |
Uma tag de Valor Fixo utiliza o valor especificado por você. |
|
|
Request Header |
Uma tag de Cabeçalho de Requisição lê seu valor de um cabeçalho de requisição específico. Se o cabeçalho não estiver presente na requisição, o valor padrão será utilizado. Por exemplo, é possível obter o valor da tag a partir do cabeçalho User-Agent. Se o cabeçalho não existir, o valor da tag será definido como o valor padrão |
|
|
Environment Variable |
Uma tag de Variável de Ambiente lê seu valor de uma variável de ambiente específica na carga de trabalho. Se a variável de ambiente não existir na carga de trabalho, o valor padrão será utilizado. Por exemplo, é possível obter o valor da tag a partir da variável de ambiente |
|