Użyj interfejsów API zapytań XQL. Rozpocznij zapytanie za pomocą /public_api/v1/xql/start_xql_query, które zwraca identyfikator wykonania. Pobierz wyniki za pomocą /public_api/v1/xql/get_query_results w formacie JSON. To wywołanie zwraca do 1 000 wyników w linii; wszystko większe wraca jako identyfikator strumienia, który przekazujesz do /public_api/v1/xql/get_query_results_stream. Uwierzytelnianie wykorzystuje dwa nagłówki: Twój klucz API w Authorization i jego ID w x-xdr-auth-id.
Cortex XDR gromadzi szczegółowe dane telemetryczne punktu końcowego, plus dane sieciowe i tożsamości w wielu wdrożeniach. Prime Core ma ponad 24 000 unikalnych reguł wykrywania, mapowanych do 676 technik MITRE ATT&CK. Poniżej znajduje się sposób na wydobycie danych, ich sanitację i bezpłatne zbadanie w LogTotal.
Zanim zaczniesz
Klucz API. Stwórz go w ustawieniach Cortex XDR (standardowy typ klucza jest najprostszy) z rolą, która może uruchamiać zapytania XQL. Zanotuj klucz i jego ID.
Twój URL API. Pojawia się podczas tworzenia klucza, w formie https://api-<najemca>.xdr.<region>.paloaltonetworks.com.
Licencja i limit. Interfejsy API XQL potrzebują licencji Cortex XDR Pro. Zapytania wykorzystują Twój limit XQL, a Ty możesz uruchomić do czterech zapytań API jednocześnie.
Zbiór danych. Telemetria punktu końcowego znajduje się w xdr_data, z polami takimi jak agent_hostname, event_type, action_process_image_command_line i actor_process_image_name. Najpierw zbuduj zapytanie w Konstruktorze Zapytania.
Eksportuj za pomocą API XQL
XDR="https://api-<najemca>.xdr.<region>.paloaltonetworks.com"
H1="Authorization: $XDR_API_KEY"
H2="x-xdr-auth-id: $XDR_API_KEY_ID"
# 1. rozpocznij zapytanie (okres w milisekundach epoki)
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. czekaj na wyniki
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. do 1 000 wyników w linii; więcej przez strumień
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
Okres wymieniony powyżej to 2026-10-19 00:00 UTC do 2026-10-20 00:00 UTC.
Prześlij, zanieczyszczenie i przejrzyj w LogTotal
- Prześlij. Otwórz logtotal.com i wrzuć plik.
- Oczyść.
- Przejrzyj.
Kiedy coś się nie zgadza
| Objaw | Prawdopodobna przyczyna | Fix |
|---|---|---|
| 401 | Klucz i identyfikator klucza zamieniony miejscami lub klucz wygasł | Klucz w Authorization, ID w x-xdr-auth-id |
| Błąd licencjonowania | Brak licencji XDR Pro | Interfejsy API XQL potrzebują XDR Pro |
| Błędy limitu | Wykorzystany limit XQL lub więcej niż cztery zapytania równoległe | Czekaj; zawęź zapytanie |
| Dokładnie 1 000 wyników | Nie użyto strumienia | Pobierz resztę za pomocą ID strumienia |
| Błędy zapytań | Składnia XQL | Najpierw przetestuj w Konstruktorze Zapytania |
FAQ
Czy mogę eksportować incydenty i alerty?
Tak, za pomocą oddzielnych API incydentów i alertów. Dla LogTotal wyeksportuj telemetrię, która za nimi stoi.
A co z surowymi logami zewnętrznych stron?
Jeżeli załadujesz je do Cortex, są w swoich własnych zbiorach danych i wychodzą w taki sam sposób.