Use as APIs de consulta XQL. Inicie uma consulta com /public_api/v1/xql/start_xql_query, o que retorna um ID de execução. Busque os resultados com /public_api/v1/xql/get_query_results em JSON. Essa chamada retorna até 1.000 resultados inline; qualquer coisa maior vem como um ID de stream que você passa para /public_api/v1/xql/get_query_results_stream. A autenticação usa dois cabeçalhos: sua chave de API em Authorization e seu ID em x-xdr-auth-id.
O Cortex XDR coleta telemetria detalhada de endpoints, além de dados de rede e identidade em muitas implantações. Prime Core possui mais de 24.000 regras de detecção únicas, mapeadas para 676 técnicas MITRE ATT&CK. Abaixo está como extrair dados, sanitizá-los e investigá-los gratuitamente no LogTotal.
Antes de começar
Uma chave de API. Crie uma nas configurações do Cortex XDR (o tipo de chave padrão é o mais simples) com uma função que possa executar consultas XQL. Anote a chave e seu ID.
Sua URL de API. É mostrado quando você cria a chave, na forma https://api-<tenant>.xdr.<region>.paloaltonetworks.com.
Licença e cota. As APIs XQL precisam de uma licença Cortex XDR Pro. Consultas consomem sua cota XQL, e você pode executar até quatro consultas de API em paralelo.
O conjunto de dados. A telemetria de endpoint está em xdr_data, com campos como agent_hostname, event_type, action_process_image_command_line e actor_process_image_name. Construa a consulta no Query Builder primeiro.
Exportar com as APIs XQL
XDR="https://api-<tenant>.xdr.<region>.paloaltonetworks.com"
H1="Authorization: $XDR_API_KEY"
H2="x-xdr-auth-id: $XDR_API_KEY_ID"
# 1. inicie a consulta (período em milissegundos 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. aguarde pelos 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. até 1.000 resultados inline; mais pela stream
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
O período acima é 2026-10-19 00:00 UTC a 2026-10-20 00:00 UTC.
Carregar, sanitizar e revisar no LogTotal
- Carregar. Abrir logtotal.com e largue o arquivo.
- Sanitizar.
- Revisar.
Quando algo dá errado
| Sintoma | Causa provável | Fix |
|---|---|---|
| 401 | Chave e ID da chave trocados, ou a chave expirou | Chave em Authorization, ID em x-xdr-auth-id |
| Erro de licença | Sem licença XDR Pro | APIs XQL precisam de XDR Pro |
| Erros de cota | Cota XQL esgotada, ou mais de quatro consultas paralelas | Aguarde; refine a consulta |
| Exatamente 1.000 resultados | Stream não utilizado | Busque o resto com o ID de stream |
| Erros de consulta | Sintaxe XQL | Teste primeiro no Query Builder |
FAQ
Posso exportar incidentes e alertas?
Sim, através de APIs separadas de incidentes e alertas. Para o LogTotal, exporte a telemetria por trás deles.
E quanto aos logs brutos de terceiros?
Se você os ingerir no Cortex, eles residem em seus próprios conjuntos de dados e saem da mesma maneira.