O Alibaba Cloud Ingress registra requisições HTTP no stdout. Ative a coleta de logs ao criar um cluster e use o Simple Log Service (SLS) para visualizar análises de logs de acesso do Nginx Ingress e monitorar o status do Ingress em tempo real. Este tópico descreve como implantar e visualizar os logs de acesso do Nginx Ingress.
Pré-requisitos
Antes de começar, verifique se:
O loongcollector está instalado no cluster (padrão durante a criação). Se estiver ausente, consulte Collect text logs from Kubernetes containers in DaemonSet mode.
-
O alibaba-log-controller está atualizado:
kubectl edit deployment alibaba-log-controller -n kube-system
Ative a coleta de logs para o nginx-ingress-controller
Use o console ACK, a menos que precise automatizar a configuração por meio de um pipeline GitOps ou CI/CD.
ACK console
Faça login no console ACK. No painel de navegação à esquerda, clique em console ACKClusters.
Na página Clusters, clique no cluster desejado. No painel de navegação à esquerda, escolha Operations > Add-ons.
Na página Add-ons, clique na aba Networking. No cartão Nginx Ingress Controller, clique no ícone
e selecione Enable Log Collection. Clique em OK.
CLI
O ACK fornece um CRD chamado AliyunLogConfig. Ao criar um AliyunLogConfig, o alibaba-log-controller gera automaticamente a configuração do SLS e atualiza os painéis.
Antes de criar um AliyunLogConfig:
Se já existirem pods do nginx-ingress-controller, recrie-os após aplicar o
AliyunLogConfigpara que a coleta de logs tenha efeito.O alibaba-log-controller deve estar na versão
0.2.0.0-76648ee-aliyunou posterior. Caso umAliyunLogConfigjá exista após a atualização do controller, exclua-o e crie-o novamente.Esta configuração pressupõe o formato de log padrão do ACK. Se você personalizou o formato de log, atualize a seção
processor_regex. Consulte Use CRDs to collect container logs in DaemonSet mode.
-
Crie um arquivo chamado
k8s-nginx-ingress.yamlcom o seguinte conteúdo:Defina
IncludeLabelcom os rótulos do Docker obtidos viadocker inspect.io.kubernetes.pod.namespaceseleciona por namespace;io.kubernetes.container.nameseleciona por container. Por exemplo,io.kubernetes.pod.namespace: backend-prodcoleta todos os containers desse namespace;io.kubernetes.container.name: worker-serverdireciona a coleta para um container específico. Especifique apenas esses dois rótulos. Para filtrar por variáveis de ambiente, useIncludeEnvouExcludeEnv. Consulte Use the Simple Log Service console to collect container stdout and stderr in DaemonSet mode .Campo
Descrição
Modificar?
metadata.namespaceNamespace do controller de Ingress
Sim, se não for
kube-systemspec.logstoreNome do Logstore do SLS
Opcional
IncludeLabelRótulos do Docker usados para selecionar containers
Sim, se estiver coletando de um namespace específico
processor_regex>RegexRegex de análise de log
Apenas se você alterou o formato de log padrão
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # Unique name for this AliyunLogConfig within the cluster. name: k8s-nginx-ingress # Set to the namespace of the Ingress controller you want to collect logs from. namespace: kube-system spec: # The SLS Logstore where logs are stored. logstore: nginx-ingress # Product code — do not change this value. productCode: k8s-nginx-ingress logtailConfig: inputType: plugin # Must match metadata.name. configName: k8s-nginx-ingress inputDetail: plugin: inputs: - type: service_docker_stdout detail: IncludeLabel: # Collect logs from the nginx-ingress-controller container. # If multiple Ingress controllers run in your cluster, collecting # by container name may produce duplicate logs. Review the # IncludeLabel behavior before applying. io.kubernetes.container.name: nginx-ingress-controller Stderr: true Stdout: true processors: - type: processor_regex detail: KeepSource: false # Fields extracted from each log line, in order: Keys: - client_ip - x_forward_for - remote_user - time - method - url - version - status - body_bytes_sent - http_referer - http_user_agent - request_length - request_time - proxy_upstream_name - upstream_addr - upstream_response_length - upstream_response_time - upstream_status - req_id - host - proxy_alternative_upstream_name NoKeyError: true NoMatchError: true # Regular expression that maps each capture group to the Keys above. Regex: ^(\S+)\s-\s\[([^]]+)]\s-\s(\S+)\s\[(\S+)\s\S+\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"]*)"\s"([^"]*)"\s(\S+)\s(\S+)+\s\[([^]]*)]\s(\S+?(?:,\s\S+?)*)\s(\S+?(?:,\s\S+?)*)\s(\S+?(?:,\s\S+?)*)\s(\S+?(?:,\s\S+?)*)\s(\S+)\s*(\S*)\s*\[*([^]]*)\]*.* SourceKey: contentA tabela a seguir descreve os campos mais comuns de personalização:
-
Aplique a configuração:
kubectl apply -f k8s-nginx-ingress.yaml
Para desativar a coleta de logs, exclua o AliyunLogConfig:
kubectl delete aliyunlogconfig k8s-nginx-ingress -n kube-system
Visualize o log de acesso e os painéis
Faça login no console do Simple Log Service.
Na seção Projects, clique no projeto do seu cluster ACK (nomeado
k8s-log-{cluster-id}).No painel de navegação à esquerda, clique no ícone
e selecione um painel na lista.
Painéis disponíveis:
|
Painel |
Intervalo de tempo |
Conteúdo |
|
Visão geral do Ingress |
Últimas 24 h / último 1 min |
Volume de tráfego, latência, taxas de erro, distribuição geográfica, principais URLs |
|
Central de acesso do Ingress |
Últimas 24 h |
Contagens de UV/PV, distribuição regional, principais navegadores e IPs de origem, detalhamento mobile |
|
Central de monitoramento do Ingress |
Última 1 h |
Taxa de sucesso em tempo real, proporções de erro, percentis de latência, principais Services por PV e taxa de falha |
|
Central de monitoramento do Ingress para implantações blue-green |
Dinâmico |
Comparação lado a lado das métricas de ServiceA e ServiceB para rollouts seguros |
|
Central de exceções do Ingress |
Automático |
Detecção de anomalias baseada em machine learning do SLS e análise de séries temporais |
Visão geral do Ingress
Rastreia o tráfego no nível do site pelo nginx-ingress-controller. Principais métricas:
Last 24 hours: visualizações de página (PVs), visitantes únicos (UVs), tráfego de entrada/saída, latência média, proporção de usuários mobile, proporção de erros 5xx, proporção de erros 404
Último 1 minuto: PVs, UVs, taxa de sucesso de requisições, latência média, latência P95, latência P99
Tendências e distribuição: Tendência de PV em 24 horas e 7 dias, distribuição regional de requisições, principais áreas e cidades, detalhamento Android/iOS
Principais URLs (última 1 hora): 10 URLs com maiores PVs, maior latência, mais erros 5xx e mais erros 404
Central de acesso do Ingress
Origens das requisições e distribuição de clientes nas últimas 24 horas: contagens de UV/PV, detalhamento regional, principais navegadores, IPs de origem e proporções mobile.
Central de monitoramento do Ingress
Métricas em tempo real da última hora para detecção e triagem de problemas:
Taxa de sucesso de requisições, proporção de 5xx, proporção de 404 e proporção de requisições não encaminhadas ao upstream
Latência média, latência P95, latência P99 e latência P999
Distribuição de requisições por código de status e proporção de PV por Ingress
Top 10 Services por PVs, taxa de falha, latência média e total de requisições

Central de monitoramento do Ingress para implantações blue-green
Comparação lado a lado das métricas de ServiceA e ServiceB — PVs, taxas de erro, percentis de latência e total de requisições — para detectar regressões durante rollouts blue-green.

Central de exceções do Ingress
Detecta anomalias nos logs do nginx-ingress-controller usando machine learning do SLS e análise de séries temporais.

Configure alertas
Configure regras de alerta em qualquer gráfico do painel, com notificações por e-mail, chatbot do DingTalk, webhooks ou SMS.
Consulte Configure an alert rule.
Este exemplo cria um alerta que dispara quando a proporção de erros 5xx excede 1%, verificado a cada 5 minutos.
Na seção Dashboard, clique em Ingress Monitoring Center. Passe o mouse sobre o ícone
no canto superior direito do gráfico 5XX Proportion e clique em Save as Alert (Old Version).No assistente Create Alert, defina Alert Name, Associated Chart, Frequency e Trigger Condition. O campo
totalrepresenta a proporção de erros 5xx; defina a Trigger Condition comototal > 1.Na página Notifications, selecione os canais de notificação, configure os parâmetros e clique em Submit.
Inscreva-se em um painel
Envie snapshots agendados do painel para um endereço de e-mail ou grupo do DingTalk. Consulte Subscribe to a dashboard.
Este exemplo inscreve-se no painel Ingress Overview V1.2 e envia um snapshot diário para um grupo do DingTalk às 10:00.
Na seção Dashboard, clique em Ingress Overview V1.2. Escolha Subscribe > Create.
No assistente Create Subscription, defina a Frequency como Daily e o horário para 10:00. Desative a opção Add Watermark e clique em Next.
Na página Notifications, selecione WebHook-DingTalk Bot em Notifications e defina a Request URL com a URL do webhook do seu chatbot do DingTalk. Clique em Submit.
Use o painel do Ingress com o ARMS
O painel Ingress Overview V1.2 integra-se ao Application Real-Time Monitoring Service (ARMS) para fornecer visibilidade completa de rastreamento ponta a ponta.
Faça login no console do Simple Log Service.
Na seção Projects, clique no projeto do seu cluster ACK.
No painel de navegação à esquerda, clique no ícone
e selecione Ingress Overview V1.2 na lista de Dashboard.Na seção Top 10 Request URLs by Latency, clique em uma URL na coluna URL(ARMS Troubleshooting) para visualizar os detalhes de rastreamento do ARMS para esse Service.
Próximos passos
Data filtering plugin — aplique filtros de consulta de log para investigar requisições específicas ou janelas de tempo.