Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Non esiste una documentazione
Apigee Edge equivalente per questo argomento.
Sintomo
All'avvio, i pod delle metriche rimangono nello stato CrashLoopBackoff. Ciò potrebbe causare interruzioni periodiche nelle metriche/nei grafici durante il riavvio dei pod. Ciò potrebbe anche causare discrepanze con i dati di Analytics, in quanto mancano alcune sezioni dei dati.
Questo problema può verificarsi se l'installazione ibrida produce una grande quantità di dati delle metriche. Una grande quantità di dati può essere prodotta a causa di un carico di traffico elevato (con conseguente numero elevato di risorse sottostanti, ad esempio MP che emettono metriche) o di un numero elevato di risorse Apigee (ad esempio proxy, target, ambienti, policy e così via) monitorate.
Messaggi di errore
Quando utilizzi kubectl per visualizzare gli stati dei pod, noti che uno o più pod Metric si trovano nello stato CrashLoopBackoff. Ad esempio:
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
...Cause possibili
| Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
|---|---|---|
| I pod delle metriche hanno esaurito la memoria | I pod di telemetria si trovano in CrashLoopBackoff a causa di memoria insufficiente | Apigee hybrid |
Causa 1
I pod delle metriche sono in esaurimento della memoria (OOM) con il motivo dell'errore OOMKilled.
Diagnosi
Verifica che il problema si verifichi controllando i log del pod:
- Elenca i pod per ottenere l'ID del pod Metrics che non funziona:
kubectl get pods -n APIGEE_NAMESPACE -l "app in (app, proxy, collector)"
- Controlla il log del pod non riuscito:
kubectl -n APIGEE_NAMESPACE describe pods POD_NAME
Ad esempio:
kubectl describe -n apigee pods apigee-metrics-default-telemetry-proxy-1a2b3c4
Esamina la sezione apigee-prometheus-agg dell'output. Un output come il seguente indica che il container raggiunge ripetutamente una condizione 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
Risoluzione
- Controlla i limiti attuali dei container con il seguente comando
kubectl -n APIGEE_NAMESPACE describe pods POD_NAME
-
Configura i limiti del pod delle metriche nel file
overrides.yamlcon le seguenti proprietà: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 - Applica le modifiche con
helm upgrade:helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
Se l'errore di esaurimento della memoria si verifica ancora dopo l'aumento del limite, puoi aumentare le dimensioni dei nodi sottostanti per consentire un maggiore utilizzo della memoria.
Documenti correlati
Gestire i componenti del piano di runtime
Deve raccogliere informazioni diagnostiche
Raccogli le seguenti informazioni diagnostiche e poi contatta l'assistenza Apigee:
Raccogliere i dati dal contenitore Prometheus per la risoluzione dei problemi
Avvia il port forwarding per il container Prometheus. Ripeti l'operazione per i pod dell'app e del proxy. Ad esempio:
kubectl port-forward -n apigee apigee-metrics-apigee-telemetry-app-1a2-b3c4-d5ef 8081:9090
Utilizza lo script riportato di seguito all'interno del cluster per raccogliere i dati:
#!/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
Argomenti:
Lo script accetta tre argomenti posizionali.
- Numero di porta: impostalo sulla porta da cui hai eseguito l'inoltro (ad es. 8081).
- Directory: directory di base per i file di output.
- Numero della richiesta: numero della richiesta, utilizzato per il nome file generato.
Esempio di utilizzo
./prometheus_gather.sh 8081 . 1510679