Troubleshooting on-premise
Licencia requerida o connector en restart loop
Comprueba primero el validador y el estado saneado:
systemctl status spot-license.service --no-pager
sudo -u spot /opt/spot/bin/spot-agent-sap license-status --json
sudo -u spot /opt/spot/bin/spot-agent-sap license-check
journalctl -u spot-license.service -u spot-agent-sap.service -n 120 --no-pager
Si falta la licencia, actívala o instala el fichero offline siguiendo
Licencias y renovación. expired, revoked e
invalid bloquean el producto; un exceso de usuarios o instancias sólo muestra
un warning y no debe provocar reinicios. No pegues claves ni respuestas raw en
un ticket o en los logs.
Si una licencia online era válida y el servicio remoto queda temporalmente
inaccesible, SPOT puede mostrar hasta siete días de gracia desde la última
validación correcta, nunca más allá de la expiración. Un fallo del validador
local no activa esa gracia: corrige primero spot-license.service.
UI no abre
Comprueba:
systemctl status spot-server --no-pager
ss -ltnp | grep 8080
journalctl -u spot-server -n 120 --no-pager
Si el puerto está ocupado, cambia el puerto desde setup o configuración runtime.
Setup no guarda HTTPS
Valida que certificado y clave existen, pertenecen a la misma pareja y son legibles por el usuario del proceso. HTTP sigue siendo válido si aún no quieres activar TLS.
Elastic embebido no arranca
Comprueba memoria, permisos y logs:
systemctl status spot-elasticsearch --no-pager
journalctl -u spot-elasticsearch -n 120 --no-pager
curl -sS http://127.0.0.1:9200
El servicio debe escuchar sólo en 127.0.0.1:9200. En modo embebido no configures usuario, API key, CA ni insecure_skip_verify; vuelve a guardar embedded si quedaron valores de una configuración externa anterior.
Elastic externo HTTP queda bloqueado
Los perfiles externos exigen HTTPS. Un perfil HTTPS heredado sin transport_profile se clasifica de forma segura como external; un perfil HTTP heredado bloquea el nuevo runtime con elastic_transport_migration_required hasta que se migre. Elige CA del sistema, CA importada o Desactivar validación del certificado. Esta última opción no permite HTTP. Sólo http://127.0.0.1:9200, sin credenciales, puede clasificarse como embedded y únicamente dentro de spot-suite.
Elasticsearch pendiente
Es un estado válido de spot-suite-external cuando se aplazó el destino. Health,
usuarios y configuración siguen disponibles; las vistas de datos
esperan una conexión. Abre Configuración, introduce HTTPS, ejecuta Test y guarda.
No intentes arrancar un servicio embedded: esta variante no lo incluye.
Permission denied en código o SDK
No cambies /opt/spot a propietario spot ni spot-elastic. El payload system
debe ser root-owned; sólo datos y logs son mutables. Si un upgrade anterior dejó
ownership inseguro, reinstala el paquete para sustituir el árbol ejecutable y
verifica permisos. En portable, revisa que $SPOT_HOME pertenezca sólo al usuario
dedicado y no sea accesible por otros usuarios.
Falla un certificado privado
- Comprueba hostname, expiración y cadena.
- Importa la CA corporativa en Configuración > Trust store y selecciónala en el destino.
- Si necesitas aceptar el riesgo temporalmente, activa explícitamente Desactivar validación del certificado y guarda.
No existe fallback automático. Con la excepción activa la conexión continúa cifrada, pero no autentica al servidor; el warning permanece después de recargar o reiniciar. Cambiar de política TLS exige volver a introducir el password o API key.
No puedo borrar una CA
SPOT bloquea la eliminación mientras Elastic, LDAP o IA la utilicen. Cambia todos los destinos afectados a otra CA o a las CAs del sistema y guarda antes de borrarla. No edites manualmente el fingerprint ni introduzcas una ruta de fichero en la configuración.
LDAPS o StartTLS no conecta
Verifica esquema/modo, host, puerto, bind DN, SNI y CA. Si cambió alguno, vuelve a introducir la contraseña bind; una máscara no se reutiliza contra la nueva identidad. Las IP link-local, metadata, multicast y unspecified se bloquean incluso con validación de certificado desactivada.
No llegan datos SAP
Revisa:
- RFC SDK disponible en el servicio.
- Usuario y secreto SAP.
- Puertos RFC.
- Conexión SAP marcada como habilitada.
- Logs de
spot-agent-sap.
Si sólo falla CCMS events, distingue un fallo RFC de una alerta sin texto.
Una alerta con identidad, timestamp y valor válidos se conserva aunque SAP no
entregue el mensaje; SPOT muestra un texto operativo de fallback. Los errores de
autorización, las respuestas corruptas o un VALUE ausente sí detienen el ciclo
y conservan el watermark anterior. El diagnóstico separa nodos elegibles,
candidatos, emitidos, fallbacks y fallos reales.
Un dump ABAP no muestra descripción
Abre el dump desde 03 Work Process y revisa Description status. SPOT
muestra la descripción genérica del error de ejecución que SAP conserva en
SNAPT; no recoge el texto largo ni el detalle específico de esa instancia que
ves en ST22.
complete: SAP devolvió una descripción válida.empty: la lectura fue válida, pero no devolvió texto.unauthorized: el usuario RFC no pudo leer la descripción.unavailable: SAP o la lectura no estuvieron disponibles temporalmente.unsupported: SPOT no pudo demostrar los límites de la respuesta y la rechazó.legacy_missing: el documento procede de un conector anterior que no recogió una descripción utilizable.
Después de actualizar, deja completar un ciclo de ABAP dumps y la reparación
histórica. En el estado del connector comprueba que la colección actual avanza y
que la subcapacidad abap_dump_description_repair llega a supported. La
reparación revisa una sola ventana de 30 días por source/mandante, añade
observaciones nuevas sin sobrescribir las anteriores y reintenta de forma
idempotente si se interrumpe. Un dump más antiguo, eliminado por la retención de
SAP o sin texto en SNAPT no puede reconstruirse como detalle ST22.
Si el estado es unauthorized, revisa el permiso de lectura de
RFC_READ_TABLE sobre SNAPT. Si es unsupported o unavailable, conserva el
código saneado y comprueba la conectividad y la metadata DDIC. No adjuntes
filas, identificadores de error, programas, usuarios ni credenciales. Confirma
también que Metrics, Work Processes, Jobs, RFC y Certificates siguen avanzando;
un fallo de la reparación histórica no debe bloquear esas familias. Para el
detalle completo de una instancia, abre el dump correspondiente directamente en
ST22.
Jobs no avanza o muestra unsupported_rfc_read_table_shape
El connector ordena los campos solicitados según la metadata DDIC antes de leer
RFC_READ_TABLE. Esto cubre tanto los SAP que devuelven las columnas en el orden
solicitado como los que las serializan en el orden físico DDIC. Un formato
ambiguo o una metadata incoherente se rechaza con
unsupported_rfc_read_table_shape: SPOT no exporta esa lectura ni avanza su
cursor. Este contrato no implica compatibilidad con formatos arbitrarios que no
permitan demostrar los límites de cada columna.
Después de actualizar, valida una ejecución reciente:
- Selecciona el mismo SAP y rango temporal en Jobs y en SM37. Comprueba que
inicio, fin y
JOBCOUNTcorresponden a la misma ejecución. - Revisa en
spot-agent-sapal menos dos ciclos completos de Jobs: el último ciclo correcto y su cursor deben avanzar sin errores de fecha u hora. - Abre una ejecución terminal y confirma que el Job Log aparece completo, vacío o con un estado explícito; una lectura de tabla fallida no debe convertir un log parcial en completo.
- Confirma que las demás colecciones y el heartbeat siguen avanzando.
Si el error persiste, revisa la autorización de RFC_READ_TABLE y conserva sólo
el diagnóstico saneado. No adjuntes filas SAP, nombres de Jobs, usuarios,
mensajes ni credenciales.
Programs está vacío o su capacidad no es completa
Revisa Configuración > Conexiones SAP > Program statistics y el último
check. unauthorized requiere el S_RFC mínimo para
SWNC_GET_STATRECS_FRAME; unsupported indica que la release no expone la
ventana remota READ_START_DATE/TIME, READ_END_DATE/TIME, READ_TIME_ZONE,
MAX_RECORDS y READ_ONLY_MAINRECORDS; partial conserva todos los tiempos
principales del intervalo confirmado, mientras batchstep, rfc, http y
epp quedan no disponibles. No instales código Z ni interpretes un subregistro
ausente como “no hubo llamadas”. SPOT exige MAX_RECORDS como IMPORT INT
opcional/default -1 y READ_ONLY_MAINRECORDS como IMPORT CHAR en el
descriptor de esa misma invocación; envía READ_ONLY_MAINRECORDS="X", omite
MAX_RECORDS y no envía 500. Usa frames de hasta 60 segundos. Una hoja con
más de 400 registros principales conserva todas sus ejecuciones y reduce sólo
el máximo futuro de esa fuente; exactamente 400 no lo reduce. El count no
indica truncación. El protocolo puede estar vacío o contener sólo filas estándar
de finalización con RC decimal cero; si falta, es ambiguo, tiene otra forma o
un RC no cero, la hoja queda pendiente y su texto de error no se registra. La truncación explícita también deja la hoja pendiente y puede subdividirse hasta un segundo, con hasta 32 lecturas RFC de Programs por ventana móvil de 60 segundos entre todas las fuentes. El presupuesto persiste tras reinicio; al agotarse, la continuación espera sin reservar conexión SAP ni iniciar otro worker. Cada hoja confirma sólo su límite leído después del ACK. Cada horizonte avanza como máximo 30 minutos; si el atraso supera el intervalo de colección más 120 segundos, el siguiente empieza inmediatamente. Comprueba el último instante SAP confirmado y no sólo la llegada. Si aun así aparece error, el diagnóstico saneado distingue
agotamiento de llamadas, saturación en el frame mínimo, ventana inválida,
presupuesto agregado (50.000 documentos/32 MiB normalizados, incluido el
manifiesto) o conflicto de identidad/sistema. Cada respuesta RFC mantiene su
límite de 20.000 filas/64 MiB. Un error de lectura/validación deja la ronda sin
documentos exportables y conserva el checkpoint. Una hoja válida incluye todos
los registros principales y un manifiesto con conteo y ventana exactos; sólo su
ACK mueve el checkpoint. Una cancelación o un ACK
fallido durante la exportación también deja el cursor sin confirmar, aunque el
destino pueda conservar documentos deduplicables ya recibidos. Nunca se publica
una cola no leída como cubierta. Amplía el rango si la retención SAP
es corta y confirma que las demás colecciones y el heartbeat avanzan.
La clase sólo es concluyente si la versión instalada la reporta; un error genérico anterior no demuestra cuál ocurrió. Antes de iniciar el hijo, la admisión de la fuente tiene un límite independiente de 30 segundos. Sólo después de obtenerla procesa una única subventana con un presupuesto nuevo de 240 segundos y reservas finitas para terminar y recoger el worker. No usa el tiempo residual de una lectura anterior. Si la admisión vence o se cancela, no se ejecuta el worker, no se subdivide la ventana, no se exporta, no se confirma ACK ni se mueve el cursor; la siguiente fuente en cola puede continuar. Si vence el presupuesto del worker, las fronteras saneadas de descriptor, preparación de parámetros, selección de outputs, invocación y decodificación pueden sobrevivir aunque no llegue el terminal. Duración cero marca entrada y una positiva, finalización. Úsalas sólo para saber la última etapa observada: no contienen valores RFC, no demuestran que SAP completara la llamada ni permiten exportar, confirmar ACK o mover el checkpoint. Si el hijo alcanza exactamente su deadline de 240 segundos y la subventana activa aún es divisible, el coordinador no exporta y mantiene intactos el cursor y los ACK previos. Sustituye duraderamente sólo esa subventana por dos mitades contiguas, conserva el resto de la cola y el backoff, y reencola la continuación de inmediato con reparto justo. Una recarga o rollout cancelado prevalece, nunca autoriza esta división y se informa como cancelación de la colección, no como fallo de handoff; un reporte realmente ausente continúa siendo error.
Una lectura completa que tarda al menos 60 segundos o devuelve más de 400 registros principales reduce a la mitad el tamaño máximo durable de las próximas subventanas de esa fuente, desde 60 segundos hasta un segundo. Ocho hojas seguidas del tamaño aprendido, completas y confirmadas, de menos de diez segundos, hasta 100 registros principales y 8 MiB normalizados cada una, pueden duplicarlo hasta 60 segundos sólo para el siguiente horizonte. Fallos reinician la racha; timeout o saturación impone 15 minutos sin crecimiento. Las hojas menores pueden agotar antes las 32 admisiones por minuto; la continuación espera capacidad sin cambiar cobertura confirmada. Esto reduce el working set esperado, pero no garantiza un techo universal de memoria. Si el frame pequeño continúa agotando 240 segundos, el bloqueo sigue sin resolverse.
Si observas presión de memoria, revisa RSS/PSS del proceso completo,
memory.current, eventos memory.high, PSI, duración de Program statistics
y progreso de las demás familias. Reclaim sin OOM no demuestra por sí solo una
fuga de heap ni un spin nativo, y un heartbeat aislado no prueba continuidad.
Deshabilita temporalmente sólo program_statistics si necesitas recuperar las
otras colecciones y conserva la configuración anterior. Instala una versión
corregida y soportada del connector; mide el proceso completo con carga SAP real
y el headroom del host, y confirma el progreso de todas las familias antes de
volver a habilitarla. Deshabilitar Programs no es una solución permanente.
Comprueba también que ABAP dumps mantiene un último check reciente, aunque
no haya dumps nuevos, y correlaciona las horas de sus documentos con los
deadlines de Programs. Verifica Metrics, Work Processes, Jobs, Job Logs, RFC y
Certificates: un heartbeat por sí solo no demuestra continuidad. No eleves
límites de recursos como primer paso.
En un target Elasticsearch no gestionado, ejecuta bootstrap y revisa
program_template_update_required. Si aparece, añade los mappings de Programs
al template externo. No confundas esta acción con template_update_required de
Job Logs: la comprobación de Programs es independiente y no debe deshabilitar un
lector de Job Logs válido.
Consulta Programas para leer tiempos y
dependencias.
Dashboards sin datos
Comprueba que el selector contiene el source_id SAP esperado, no el ID del read
scope. En Configuración > Elasticsearch de lectura, valida URL+namespace y
Test; después revisa documentos con schema_version=2, tenant_id=onprem y
source_id no vacío en los streams exactos metrics y logs. Un scope caído
afecta sólo a sus targets.
En remote y hybrid, estas lecturas no dependen del journal de capacidades
del conector local. Si sólo existen documentos legacy, SPOT los ignora y la
vista queda en Sin datos o UNKNOWN; corrige o actualiza el productor. No
hay migración automática ni fallback a otra identidad o read scope.
target_binding_conflict significa que el mismo source_id apareció en dos
scopes. target_identity_conflict indica SID/client incompatibles. Corrige el
connector productor; cambiar alias o elegir otro Elasticsearch no resuelve el
conflicto. Si Events tiene datos pero Operations no, abre Metrics y valida una
métrica concreta con el mismo target y ventana.
stale significa que el SAP no ha enviado una observación reciente. El target
se conserva y sigue vinculado al mismo scope; revisa el connector y su cadencia.
unreachable significa que el read scope asignado no responde: prueba esa
tarjeta en Configuración y corrige red, TLS o credenciales de lectura. La API
responde target_storage_unavailable sólo para sus targets; no esperes ni
configures fallback a otro Elasticsearch.
DB alterna entre No data y OK
Oracle health sólo usa la hoja
Oracle / CCMS_ORA_health_check_run_pfcl / Database health check / Last succ. database check.
Comprueba que esa identidad exacta llega para el source_id seleccionado. SPOT
no infiere health desde latencia, backups o tablespaces. Si no existe una señal
genuina durante 90 minutos, el resultado correcto y estable es UNKNOWN; no
debe alternar por refrescos ni por documentos de otro SAP del namespace.
Cadencia o consumo del agente
Una observación puede aparecer bajo la etiqueta de inicio del bucket anterior;
Observed sigue siendo la hora SAP. Revisa en los logs scheduled_at,
start_delay_ms, duration_ms, skipped_cycles, @timestamp e ingested_at.
No aumentes la frescura para ocultar un scheduler retrasado.
Para CPU usa la diferencia de process_cpu_time_ns entre dos muestras. Revisa
también RSS/PSS, heap/GC/cgo, threads, cola, RFC, filas y bytes. El runtime debe
consolidar ciclos, no superar dos cores ni 768 MiB y volver cerca de su baseline
tras dos ciclos. Si no lo hace, detén el upgrade y conserva sólo evidencia
saneada.
Bootstrap devuelve management_disabled o falla el preflight
management_disabled indica que el target permite lectura/escritura, pero no que SPOT administre su almacenamiento. Activa SPOT manages Data Streams and ILM solo si el propietario de Elastic lo autoriza. Si el preflight falla, corrige versión, privilegios de templates/ILM/índices o espacio antes de reintentar; SPOT no muta el cluster cuando ese preflight no pasa.
Con la opción desactivada, un resultado management_status: unmanaged es correcto. detached indica que SPOT gestionó antes el target y ahora ha dejado de reconciliarlo sin eliminar lo existente.
IA no responde
Revisa proveedor, origen/base path, política TLS, CA, clave y conectividad saliente. Usa Test: aplica la misma política que runtime y registra el resultado sin mostrar secretos. Los proveedores con API key requieren HTTPS; HTTP loopback sólo funciona sin clave y HTTP LAN sin clave requiere aceptar su aviso específico.