Está a ver a documentação do Apigee e do Apigee Hybrid.
Não existe nenhum equivalente
Documentação do Apigee Edge para este tópico.
Sintoma
No arranque, os pods de métricas permanecem no estado CrashLoopBackoff. Isto pode causar lacunas periódicas nas suas métricas/gráficos à medida que os pods são reiniciados. Isto também pode causar discrepâncias com os dados do Analytics, uma vez que faltam algumas secções de dados.
Este problema pode ocorrer se a sua instalação híbrida produzir uma grande quantidade de dados de métricas. Pode ser produzido um grande volume de dados devido a uma carga de tráfego elevada (o que resulta num grande número de recursos subjacentes, por exemplo, MPs que emitem métricas) ou a um grande número de recursos do Apigee (por exemplo, proxies, destinos, ambientes, políticas, etc.) a serem monitorizados.
Mensagens de erro
Quando usa o kubectl para ver os estados dos pods, vê que um ou mais pods Metric estão no estado CrashLoopBackoff. Por exemplo:
kubectl get pods -n NAMESPACE
NAME READY STATUS RESTARTS AGE
apigee-metrics-default-telemetry-proxy-1a2b3c4 0/1 CrashLoopBackoff 10 10m
apigee-metrics-adapter-apigee-telemetry-a2b3c4d 0/1 CrashLoopBackoff 10 10m
...Causas possíveis
| Causa | Descrição | Instruções de resolução de problemas aplicáveis a |
|---|---|---|
| Os pods de métricas estão sem memória | Os pods de telemetria estão em CrashLoopBackoff devido a memória insuficiente | Apigee Hybrid |
Causa 1
Os pods de métricas estão sem memória (OOM) com o motivo do erro OOMKilled.
Diagnóstico
Verifique se o problema está a ocorrer inspecionando os registos do pod:
- Liste os pods para obter o ID do pod de métricas com falhas:
kubectl get pods -n APIGEE_NAMESPACE -l "app in (app, proxy, collector)"
- Verifique o registo do pod com falhas:
kubectl -n APIGEE_NAMESPACE describe pods POD_NAME
Por Exemplo:
kubectl describe -n apigee pods apigee-metrics-default-telemetry-proxy-1a2b3c4
Investigue a secção apigee-prometheus-agg do resultado. O resultado, como o seguinte, indica que o contentor está a atingir repetidamente uma condição de OOM:
Containers:
apigee-prometheus-agg:
Container ID: docker://cd893dbb06c2672c41a7d6f3f7d0de4d76742e68cef70d4250bf2d5cdfcdeae6
Image: us.gcr.io/apigee-saas-staging-repo/thirdparty/apigee-prom-prometheus/master:v2.9.2
Image ID: docker-pullable://us.gcr.io/apigee-saas-staging-repo/thirdparty/apigee-prom-prometheus/master@sha256:05350e0d1a577674442046961abf56b3e883dcd82346962f9e73f00667958f6b
Port: 19090/TCP
Host Port: 0/TCP
Args:
--config.file=/etc/prometheus/agg/prometheus.yml
--storage.tsdb.path=/prometheus/agg/
--storage.tsdb.retention=48h
--web.enable-admin-api
--web.listen-address=127.0.0.1:19090
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Started: Wed, 21 Oct 2020 16:53:42 +0000
Finished: Wed, 21 Oct 2020 16:54:28 +0000
Ready: False
Restart Count: 1446
Limits:
cpu: 500m
memory: 512Mi
Requests:
cpu: 100m
memory: 256Mi
Resolução
- Verifique os limites atuais do contentor com o seguinte comando
kubectl -n APIGEE_NAMESPACE describe pods POD_NAME
-
Configure os limites de pods de métricas no ficheiro
overrides.yamlcom as seguintes propriedades:metrics: aggregator: # The apigee-prometheus-agg container in the "proxy" pod resources: limits: memory: 32Gi # default: 3Gi app: # The apigee-prometheus-app container in the "app" pod resources: limits: memory: 16Gi # default: 1Gi - Aplique as alterações com o
helm upgrade:helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
Se continuar a encontrar o erro de falta de memória após aumentar o limite, pode aumentar o tamanho dos nós subjacentes para permitir uma maior utilização de memória.
Documentos relacionados
Faça a gestão dos componentes do plano de tempo de execução
Tem de recolher informações de diagnóstico
Recolha as seguintes informações de diagnóstico e, em seguida, contacte o apoio técnico do Apigee:
Recolha dados do contentor do Prometheus para a resolução de problemas
Inicie o encaminhamento de portas para o contentor do Prometheus. Repita o processo para os pods de apps e de proxy. Por exemplo:
kubectl port-forward -n apigee apigee-metrics-apigee-telemetry-app-1a2-b3c4-d5ef 8081:9090
Use o script abaixo no respetivo cluster para recolher dados:
#!/bin/bash
set -e
# check if jq is installed
jq --version &> /dev/null
if [ $? -ne 0 ]; then
echo "jq not installed"
exit 1
fi
# check if curl is installed
curl --version &> /dev/null
if [ $? -ne 0 ] ; then
echo "curl not installed"
exit 1
fi
# Simple check for missing arguments
if [[ $# -eq 0 ]] ; then
echo 'No arguments provided'
exit 1
fi
# Simple check for missing arguments
if [[ $# -ne 3 ]]; then
echo 'Illegal number of arguments'
exit 1
fi
FORWARDED_PORT=${1}
DEST_DIR=${2}
CASE_NUMBER=${3}
DIR_FULL_PATH=${DEST_DIR}/${CASE_NUMBER}_$(date +%Y_%m_%d_%H_%M_%S)
CURRENT_DATE=$(date +%Y-%m-%d)
# we set the default start date for query at 10 days before current date
START_DATE=$(date +%Y-%m-%d -d "10 days ago")
mkdir -pv ${DIR_FULL_PATH}
set -x
curl -s '127.0.0.1:'${FORWARDED_PORT}'/status' | tee ${DIR_FULL_PATH}/prometheus_status_$(hostname)-$(date +%Y.%m.%d_%H.%M.%S).txt
curl -s '127.0.0.1:'${FORWARDED_PORT}'/config' | tee ${DIR_FULL_PATH}/prometheus_config_$(hostname)-$(date +%Y.%m.%d_%H.%M.%S).txt
curl -s '127.0.0.1:'${FORWARDED_PORT}'/api/v1/targets' | tee ${DIR_FULL_PATH}/prometheus_targets_$(hostname)-$(date +%Y.%m.%d_%H.%M.%S).json
curl -s '127.0.0.1:'${FORWARDED_PORT}'/api/v1/status/config' | jq . | tee ${DIR_FULL_PATH}/prometheus_status_config_$(hostname)-$(date +%Y.%m.%d_%H.%M.%S).json
curl -s '127.0.0.1:'${FORWARDED_PORT}'/debug/pprof/heap' --output ${DIR_FULL_PATH}/prometheus_heap_$(date +%Y.%m.%d_%H.%M.%S).hprof
curl -s '127.0.0.1:'${FORWARDED_PORT}'/debug/pprof/heap?debug=1' | tee ${DIR_FULL_PATH}/prometheus_heap_$(date +%Y.%m.%d_%H.%M.%S).txt
curl -s '127.0.0.1:'${FORWARDED_PORT}'/debug/pprof/goroutine' --output ${DIR_FULL_PATH}/prometheus_goroutine_$(date +%Y.%m.%d_%H.%M.%S)
curl -s '127.0.0.1:'${FORWARDED_PORT}'/debug/pprof/goroutine?debug=1' | tee ${DIR_FULL_PATH}/prometheus_goroutine_$(date +%Y.%m.%d_%H.%M.%S).txt
curl -s '127.0.0.1:'${FORWARDED_PORT}'/debug/pprof/profile?seconds=10' --output ${DIR_FULL_PATH}/prometheus_profile_10_seconds_$(date +%Y.%m.%d_%H.%M.%S)
curl -s '127.0.0.1:'${FORWARDED_PORT}'/api/v1/query?query=topk(30%2C%20count%20by%20(__name__)(%7B__name__%3D~%22.%2B%22%7D))&timeout=5s&start='${START_DATE}'T00:00:00.000Z&end='${CURRENT_DATE}'T23:59:59.00Z&step=15s' | jq . | tee ${DIR_FULL_PATH}/prometheus_topk_count_by_name_$(hostname)-$(date +%Y.%m.%d_%H.%M.%S).json
curl -s '127.0.0.1:'${FORWARDED_PORT}'/api/v1/query?query=topk(30%2C%20count%20by%20(__name__%2C%20job)(%7B__name__%3D~%22.%2B%22%7D))&timeout=5s&start='${START_DATE}'T00:00:00.000Z&end='${CURRENT_DATE}'T23:59:59.00Z&step=15s' | jq . | tee ${DIR_FULL_PATH}/prometheus_topk_group_by_job_$(hostname)-$(date +%Y.%m.%d_%H.%M.%S).json
curl -s '127.0.0.1:'${FORWARDED_PORT}'/api/v1/query?query=topk(30%2C%20count%20by%20(job)(%7B__name__%3D~%22.%2B%22%7D))&timeout=5s&start='${START_DATE}'T00:00:00.000Z&end='${CURRENT_DATE}'T23:59:59.00Z&step=15s' | jq . | tee ${DIR_FULL_PATH}/prometheus_topk_job_most_timeseries_$(hostname)-$(date +%Y.%m.%d_%H.%M.%S).json
set +x
ls -latrh ${DIR_FULL_PATH}
tar -cvzf ${DIR_FULL_PATH}.tar.gz ${DIR_FULL_PATH}/
exit 0
Argumentos:
O script usa três argumentos posicionais.
- Número da porta: defina para a porta a partir da qual fez o encaminhamento (por exemplo, 8081).
- Diretório: diretório base para ficheiros de saída.
- Número do registo: número do registo, usado para o nome do ficheiro gerado.
Exemplo de utilização
./prometheus_gather.sh 8081 . 1510679