Saltar al contenido principal

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​

  1. Comprueba hostname, expiración y cadena.
  2. Importa la CA corporativa en Configuración > Trust store y selecciónala en el destino.
  3. 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:

  1. Selecciona el mismo SAP y rango temporal en Jobs y en SM37. Comprueba que inicio, fin y JOBCOUNT corresponden a la misma ejecución.
  2. Revisa en spot-agent-sap al menos dos ciclos completos de Jobs: el último ciclo correcto y su cursor deben avanzar sin errores de fecha u hora.
  3. 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.
  4. 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.