Utilice las API de consulta de XQL. Inicie una consulta con /public_api/v1/xql/start_xql_query, que devuelve un ID de ejecución. Obtenga los resultados con /public_api/v1/xql/get_query_results en JSON. Esa llamada devuelve hasta 1,000 resultados en línea; cualquier cosa más grande se devuelve como un ID de flujo que pasa a /public_api/v1/xql/get_query_results_stream. La autenticación utiliza dos encabezados: su clave API en Authorization y su ID en x-xdr-auth-id.
Cortex XDR recopila telemetría detallada del endpoint, además de datos de red e identidad en muchas implementaciones. Prime Core tiene más de 24,000 reglas de detección únicas, mapeadas a 676 técnicas MITRE ATT&CK. A continuación, se indica cómo extraer datos, sanitizarlos e investigarlos de forma gratuita en LogTotal.
Antes de comenzar
Una clave API. Cree una en la configuración de Cortex XDR (el tipo estándar de clave es el más simple) con un rol que pueda ejecutar consultas XQL. Anote la clave y su ID.
Su URL API. Se muestra al crear la clave, en la forma https://api-<tenant>.xdr.<region>.paloaltonetworks.com.
Licencia y cuota. Las API de XQL requieren una licencia de Cortex XDR Pro. Las consultas consumen su cuota de XQL y puede ejecutar hasta cuatro consultas API en paralelo.
El conjunto de datos. La telemetría del endpoint está en xdr_data, con campos como agent_hostname, event_type, action_process_image_command_line y actor_process_image_name. Construya la consulta primero en el Query Builder.
Exportar con las API de XQL
XDR="https://api-<tenant>.xdr.<region>.paloaltonetworks.com"
H1="Authorization: $XDR_API_KEY"
H2="x-xdr-auth-id: $XDR_API_KEY_ID"
# 1. iniciar la consulta (marco de tiempo en milisegundos de época)
QID=$(curl -sS -X POST "$XDR/public_api/v1/xql/start_xql_query" -H "$H1" -H "$H2" -H 'Content-Type: application/json'
-d '{"request_data": {"query": "dataset = xdr_data | filter agent_hostname = "WS-042" | fields _time, agent_hostname, event_type, action_process_image_name, action_process_image_command_line, actor_process_image_name", "timeframe": {"from": 1792368000000, "to": 1792454400000}}}'
| jq -r '.reply')
# 2. esperar los resultados
while :; do
RESP=$(curl -sS -X POST "$XDR/public_api/v1/xql/get_query_results" -H "$H1" -H "$H2" -H 'Content-Type: application/json'
-d "{"request_data": {"query_id": "$QID", "pending_flag": true, "format": "json"}}")
[ "$(echo "$RESP" | jq -r '.reply.status')" != "PENDING" ] && break
sleep 5
done
# 3. hasta 1,000 resultados en línea; más a través del flujo
STREAM=$(echo "$RESP" | jq -r '.reply.results.stream_id // empty')
if [ -n "$STREAM" ]; then
curl -sS -X POST "$XDR/public_api/v1/xql/get_query_results_stream" -H "$H1" -H "$H2" -H 'Content-Type: application/json'
-d "{"request_data": {"stream_id": "$STREAM", "is_gzip_compressed": false}}" > xdr_ws042_1019.jsonl
else
echo "$RESP" | jq -c '.reply.results.data[]' > xdr_ws042_1019.jsonl
fi
El marco de tiempo anterior es del 2026-10-19 00:00 UTC al 2026-10-20 00:00 UTC.
Subir, sanitizar y revisar en LogTotal
- Subir. Abrir logtotal.com y soltar el archivo.
- Sanitizar.
- Revisar.
Cuando algo sale mal
| Síntoma | Causa probable | Fix |
|---|---|---|
| 401 | Clave e ID de clave intercambiados, o la clave expiró | Clave en Authorization, ID en x-xdr-auth-id |
| Error de licencia | Sin licencia XDR Pro | Las API de XQL requieren XDR Pro |
| Errores de cuota | Cuota XQL agotada, o más de cuatro consultas en paralelo | Espere; estreche la consulta |
| Exactamente 1,000 resultados | Flujo no utilizado | Obtenga el resto con el ID de flujo |
| Errores de consulta | Sintaxis XQL | Pruebe primero en el Query Builder |
FAQ
¿Puedo exportar incidentes y alertas?
Sí, a través de API de incidentes y alertas separadas. Para LogTotal, exporte la telemetría detrás de ellos.
¿Qué pasa con los registros en bruto de terceros?
Si los ingiere en Cortex, viven en sus propios conjuntos de datos y salen de la misma manera.