Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
APLICA-SE A: Desenvolvedor | Premium
Este artigo fornece detalhes para configurar métricas e logs locais para o gateway auto-hospedado implantado em um cluster do Kubernetes. Para configurar as métricas e o logs na nuvem, consulte este artigo.
Métricas
O gateway auto-hospedado dá suporte ao StatsD, que é um protocolo unificador para coleta e agregação de métricas. Esta seção percorre as etapas para implantar o StatsD no Kubernetes, configurar o gateway para emitir métricas por meio do StatsD e usar o Prometheus para monitorar as métricas.
Implantar StatsD e Prometheus no cluster
O exemplo de configuração do YAML a seguir implanta o StatsD e o Prometheus no cluster do Kubernetes em que um gateway auto-hospedado é implantado. Ele também cria um Serviço para cada. Em seguida, o gateway auto-hospedado publica métricas no Serviço StatsD. Você acessa o painel do Prometheus por meio de seu Serviço.
Observação
O exemplo a seguir efetua pull de imagens de contêiner públicas do Docker Hub. Configure um segredo de pull para autenticar usando uma conta do Hub do Docker em vez de fazer uma solicitação de pull anônima. Para melhorar a confiabilidade ao trabalhar com conteúdo público, importe e gerencie as imagens em um Registro de Contêiner do Azure privado. Saiba mais sobre como trabalhar com imagens públicas.
apiVersion: v1
kind: ConfigMap
metadata:
name: sputnik-metrics-config
data:
statsd.yaml: ""
prometheus.yaml: |
global:
scrape_interval: 3s
evaluation_interval: 3s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'test_metrics'
static_configs:
- targets: ['localhost:9102']
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sputnik-metrics
spec:
replicas: 1
selector:
matchLabels:
app: sputnik-metrics
template:
metadata:
labels:
app: sputnik-metrics
spec:
containers:
- name: sputnik-metrics-statsd
image: prom/statsd-exporter
ports:
- name: tcp
containerPort: 9102
- name: udp
containerPort: 8125
protocol: UDP
args:
- --statsd.mapping-config=/tmp/statsd.yaml
- --statsd.listen-udp=:8125
- --web.listen-address=:9102
volumeMounts:
- mountPath: /tmp
name: sputnik-metrics-config-files
- name: sputnik-metrics-prometheus
image: prom/prometheus
ports:
- name: tcp
containerPort: 9090
args:
- --config.file=/tmp/prometheus.yaml
volumeMounts:
- mountPath: /tmp
name: sputnik-metrics-config-files
volumes:
- name: sputnik-metrics-config-files
configMap:
name: sputnik-metrics-config
---
apiVersion: v1
kind: Service
metadata:
name: sputnik-metrics-statsd
spec:
type: NodePort
ports:
- name: udp
port: 8125
targetPort: 8125
protocol: UDP
selector:
app: sputnik-metrics
---
apiVersion: v1
kind: Service
metadata:
name: sputnik-metrics-prometheus
spec:
type: LoadBalancer
ports:
- name: http
port: 9090
targetPort: 9090
selector:
app: sputnik-metrics
Salve as configurações em um arquivo chamado metrics.yaml. Use o seguinte comando para implantar tudo no cluster:
kubectl apply -f metrics.yaml
Quando a implantação terminar, execute o comando a seguir para verificar se os pods estão em execução. O nome do pod é diferente.
kubectl get pods
NAME READY STATUS RESTARTS AGE
sputnik-metrics-f6d97548f-4xnb7 2/2 Running 0 1m
Execute o comando a seguir para verificar se services estão em execução. Anote o CLUSTER-IP e PORT do Serviço StatsD, que você usará mais tarde. Você pode visitar o painel do Prometheus usando EXTERNAL-IP e PORT.
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sputnik-metrics-prometheus LoadBalancer 10.0.252.72 13.89.141.90 9090:32663/TCP 18h
sputnik-metrics-statsd NodePort 10.0.41.179 <none> 8125:32733/UDP 18h
Configurar o gateway auto-hospedado para emitir métricas
Agora que o StatsD e o Prometheus estão implantados, você pode atualizar as configurações do gateway auto-hospedado para começar a emitir métricas por meio do StatsD. Use a chave telemetry.metrics.local no ConfigMap da implantação de gateway auto-hospedado para habilitar ou desabilitar esse recurso. Você também pode definir opções adicionais. As seguintes opções estão disponíveis:
| Campo | Padrão | Descrição |
|---|---|---|
| telemetry.metrics.local | none |
Habilita o registro em log por meio do StatsD. O valor pode ser none, statsd. |
| telemetry.metrics.local.statsd.endpoint | n/d | Especifica o ponto de extremidade de StatsD. |
| telemetry.metrics.local.statsd.sampling | n/d | Especifica a taxa de amostragem de métricas. O valor pode ser entre 0 e 1. Exemplo: 0.5 |
| telemetry.metrics.local.statsd.tag-format | n/d |
Formato de marcaçãode exportador do StatsD. O valor pode ser none, librato, dogStatsD, influxDB. |
Veja um exemplo de configuração:
apiVersion: v1
kind: ConfigMap
metadata:
name: contoso-gateway-environment
data:
config.service.endpoint: "<self-hosted-gateway-management-endpoint>"
telemetry.metrics.local: "statsd"
telemetry.metrics.local.statsd.endpoint: "10.0.41.179:8125"
telemetry.metrics.local.statsd.sampling: "1"
telemetry.metrics.local.statsd.tag-format: "dogStatsD"
Atualize o arquivo YAML da implantação do gateway auto-hospedado com as configurações anteriores e aplique as alterações com o seguinte comando:
kubectl apply -f <file-name>.yaml
Para obter as alterações de configuração mais recentes, reinicie a implantação do gateway com o seguinte comando:
kubectl rollout restart deployment/<deployment-name>
Exibir as métricas
Agora que você implantou e configurou tudo, o gateway auto-hospedado relata métricas por meio do StatsD. Em seguida, o Prometheus coleta as métricas do StatsD. Vá para o painel do Prometheus usando o EXTERNAL-IP e PORT do Serviço Prometheus.
Faça algumas chamadas à API por meio do gateway auto-hospedado. Se tudo estiver configurado corretamente, você poderá exibir as seguintes métricas:
| Métrica | Descrição |
|---|---|
| requests_total | Número de solicitações de API no período |
| request_duration_seconds | Número de milissegundos do momento em que o gateway recebeu a solicitação até o momento em que a resposta foi enviada por completo |
| request_backend_duration_seconds | Número de milissegundos gastos na E/S do back-end no total (conectando, enviando e recebendo bytes) |
| request_client_duration_seconds | Número de milissegundos gastos na E/S geral do cliente (conectando, enviando e recebendo bytes) |
Registros
Por padrão, o gateway autogerenciado gera logs para stdout e stderr. Você pode exibir facilmente os logs usando o seguinte comando:
kubectl logs <pod-name>
Se você implantar seu gateway auto-hospedado no Serviço de Kubernetes do Azure, poderá habilitar o Azure Monitor para contêineres para coletar stdout e stderr de suas workloads e exibir os logs no Log Analytics.
O gateway auto-hospedado também dá suporte a muitos protocolos, incluindo localsyslog, rfc5424e journal. A tabela a seguir resume todas as opções com suporte.
| Campo | Padrão | Descrição |
|---|---|---|
| telemetry.logs.std | text |
Habilita o registro em log em fluxos padrão. O valor pode ser none, text, json |
| telemetry.logs.local | auto |
Habilita o registro em log local. O valor pode ser none, auto, localsyslog, rfc5424, journal, json |
| telemetry.logs.local.localsyslog.endpoint | n/d | Especifica o ponto de extremidade do syslog local. Para obter detalhes, confira Como usar logs do syslog local. |
| telemetry.logs.local.localsyslog.facility | n/d | Especifica o código de recurso do syslog local. Exemplo: 7 |
| telemetry.logs.local.rfc5424.endpoint | n/d | Especifica o ponto de extremidade rfc5424. |
| telemetry.logs.local.rfc5424.facility | n/d | Especifica o código de instalação por rfc5424. Exemplo: 7 |
| telemetry.logs.local.journal.endpoint | n/d | Especifica o ponto de extremidade do diário. |
| telemetry.logs.local.json.endpoint | 127.0.0.1:8888 | Especifica o ponto de extremidade UDP que aceita dados JSON: caminho do arquivo, IP:porta ou nome do host:porta. |
Este é um exemplo de configuração do log local:
apiVersion: v1
kind: ConfigMap
metadata:
name: contoso-gateway-environment
data:
config.service.endpoint: "<self-hosted-gateway-management-endpoint>"
telemetry.logs.std: "text"
telemetry.logs.local.localsyslog.endpoint: "/dev/log"
telemetry.logs.local.localsyslog.facility: "7"
Usar um ponto de extremidade JSON local
Limitações conhecidas
- O recurso de diagnóstico local dá suporte a até 3.072 bytes de conteúdo de solicitação e resposta. Se o tamanho da carga exceder esse limite, o agrupamento poderá quebrar o formato JSON.
Como usar logs do syslog local
Como configurar o gateway para transmitir logs
Quando você usa o syslog local como destino para logs, o tempo de execução precisa permitir o envio contínuo de logs para o destino. Para o Serviço de Kubernetes do Azure, você precisa montar um volume que corresponda ao destino.
Considerando a seguinte configuração:
apiVersion: v1
kind: ConfigMap
metadata:
name: contoso-gateway-environment
data:
config.service.endpoint: "<self-hosted-gateway-management-endpoint>"
telemetry.logs.local: localsyslog
telemetry.logs.local.localsyslog.endpoint: /dev/log
Você pode iniciar com facilidade os logs de streaming para esse ponto de extremidade do syslog local:
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-deployment
labels:
app: contoso
spec:
replicas: 1
selector:
matchLabels:
app: contoso
template:
metadata:
labels:
app: contoso
spec:
containers:
name: azure-api-management-gateway
image: mcr.microsoft.com/azure-api-management/gateway:2.5.0
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: contoso-gateway-environment
# ... redacted ...
+ volumeMounts:
+ - mountPath: /dev/log
+ name: logs
+ volumes:
+ - hostPath:
+ path: /dev/log
+ type: Socket
+ name: logs
Como consumir os logs do syslog local no AKS (Serviço de Kubernetes do Azure)
Ao configurar o syslog local no Serviço de Kubernetes do Azure, você pode escolher duas maneiras de explorar os logs:
- Use Coleta de Syslog com Insights de Contêiner
- Conectar e explorar logs nos nós de trabalho
Consumindo logs dos nós de trabalho
Você pode consumir logs facilmente obtendo acesso aos nós de trabalho:
- Crie uma conexão SSH com o nó (docs).
- Encontrar registros em
host/var/log/syslog.
Por exemplo, você pode filtrar todos os syslogs apenas para os do gateway auto-hospedado:
$ cat host/var/log/syslog | grep "apimuser"
May 15 05:54:20 aks-agentpool-43853532-vmss000000 apimuser[8]: Timestamp=2023-05-15T05:54:20.0445178Z, isRequestSuccess=True, totalTime=290, category=GatewayLogs, callerIpAddress=141.134.132.243, timeGenerated=2023-05-15T05:54:20.0445178Z, region=Repro, correlationId=aaaa0000-bb11-2222-33cc-444444dddddd, method=GET, url="http://20.126.242.200/echo/resource?param1\=sample", backendResponseCode=200, responseCode=200, responseSize=628, cache=none, backendTime=287, apiId=echo-api, operationId=retrieve-resource, apimSubscriptionId=master, clientProtocol=HTTP/1.1, backendProtocol=HTTP/1.1, apiRevision=1, backendMethod=GET, backendUrl="http://echoapi.cloudapp.net/api/resource?param1\=sample"
May 15 05:54:21 aks-agentpool-43853532-vmss000000 apimuser[8]: Timestamp=2023-05-15T05:54:21.1189171Z, isRequestSuccess=True, totalTime=150, category=GatewayLogs, callerIpAddress=141.134.132.243, timeGenerated=2023-05-15T05:54:21.1189171Z, region=Repro, correlationId=bbbb1111-cc22-3333-44dd-555555eeeeee, method=GET, url="http://20.126.242.200/echo/resource?param1\=sample", backendResponseCode=200, responseCode=200, responseSize=628, cache=none, backendTime=148, apiId=echo-api, operationId=retrieve-resource, apimSubscriptionId=master, clientProtocol=HTTP/1.1, backendProtocol=HTTP/1.1, apiRevision=1, backendMethod=GET, backendUrl="http://echoapi.cloudapp.net/api/resource?param1\=sample"
Observação
Se você alterar a raiz com chroot, por exemplo chroot /host, o caminho anterior precisará refletir essa alteração.
Conteúdo relacionado
- Saiba mais sobre as funcionalidades de observabilidade dos gateways do Gerenciamento de API do Azure.
- Saiba mais sobre o gateway auto-hospedado do Gerenciamento de API.
- Saiba mais sobre como configurar e persistir os logs na nuvem.