Utilisez les API de requête XQL. Lancez une requête avec /public_api/v1/xql/start_xql_query, qui renvoie un ID d’exécution. Récupérez les résultats avec /public_api/v1/xql/get_query_results en JSON. Cet appel renvoie jusqu’à 1 000 résultats en ligne ; tout ce qui est plus volumineux revient sous forme d’un ID de flux que vous passez à /public_api/v1/xql/get_query_results_stream. L’authentification utilise deux en-têtes : votre clé API dans Authorization et son ID dans x-xdr-auth-id.
Cortex XDR collecte une télémetrie détaillée des endpoints, ainsi que des données réseau et d’identité dans de nombreux déploiements. Prime Core possède plus de 24 000 règles de détection uniques, mappées à 676 techniques MITRE ATT&CK. Voici comment extraire, nettoyer et enquêter gratuitement sur les données dans LogTotal.
Avant de commencer
Une clé API. Créez-en une dans les paramètres de Cortex XDR (le type de clé standard est le plus simple) avec un rôle pouvant exécuter des requêtes XQL. Notez la clé et son ID.
Votre URL API. Elle est affichée lorsque vous créez la clé, sous la forme https://api-<tenant>.xdr.<region>.paloaltonetworks.com.
Licence et quota. Les API XQL nécessitent une licence Cortex XDR Pro. Les requêtes utilisent votre quota XQL et vous pouvez exécuter jusqu’à quatre requêtes API en parallèle.
Le jeu de données. La télémetrie des endpoints est dans xdr_data, avec des champs tels que agent_hostname, event_type, action_process_image_command_line et actor_process_image_name. Construisez d’abord la requête dans le Query Builder.
Exportation avec les API XQL
XDR="https://api-<tenant>.xdr.<region>.paloaltonetworks.com"
H1="Authorization: $XDR_API_KEY"
H2="x-xdr-auth-id: $XDR_API_KEY_ID"
# 1. démarrez la requête (période en millisecondes epoch)
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. attendez les résultats
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. jusqu'à 1 000 résultats en ligne ; plus par le flux
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
La période ci-dessus est du 2026-10-19 00:00 UTC au 2026-10-20 00:00 UTC.
Téléversez, nettoyez et examinez dans LogTotal
- Téléversez. Ouvrir logtotal.com et déposez le fichier.
- Nettoyez.
- Examinez.
Quand ça tourne mal
| Symptôme | Cause probable | Fix |
|---|---|---|
| 401 | Clé et ID de clé échangés, ou clé expirée | Clé dans Authorization, ID dans x-xdr-auth-id |
| Erreur de licence | Pas de licence XDR Pro | Les API XQL nécessitent XDR Pro |
| Erreurs de quota | Quota XQL épuisé, ou plus de quatre requêtes parallèles | Attendez ; réduisez la requête |
| Exactement 1 000 résultats | Flux non utilisé | Récupérez le reste avec l’ID de flux |
| Erreurs de requête | Syntaxe XQL | Testez d’abord dans le Query Builder |
FAQ
Puis-je exporter les incidents et alertes?
Oui, via des API d’incidents et d’alertes séparées. Pour LogTotal, exportez la télémetrie derrière eux.
Qu’en est-il des journaux bruts tiers ?
Si vous les intégrez dans Cortex, ils vivent dans leurs propres jeux de données et sortent de la même manière.