Використовуйте XQL API запити. Почніть запит з /public_api/v1/xql/start_xql_query, який повертає ідентифікатор виконання. Отримайте результати за допомогою /public_api/v1/xql/get_query_results у форматі JSON. Цей виклик повертає до 1,000 результатів вбудовано; все більше повертається як ідентифікатор потоку, який ви передаєте в /public_api/v1/xql/get_query_results_stream. Аутентифікація використовує два заголовки: ваш API ключ в Authorization та його ID у x-xdr-auth-id.
Cortex XDR збирає детальну телеметрію кінцевих точок, а також мережеві та ідентифікаційні дані в багатьох розгортаннях. Prime Core має понад 24,000 унікальних правил виявлення, пов’язаних з 676 техніками MITRE ATT&CK. Нижче пояснюється, як безкоштовно отримати дані, очистити їх і дослідити в LogTotal.
Перш ніж почати
Ключ API. Створіть його в налаштуваннях Cortex XDR (стандартний тип ключа найпростіший) з роллю, яка може запускати XQL запити. Зверніть увагу на ключ та його ID.
Ваш URL API. Він показується під час створення ключа у формі https://api-<tenant>.xdr.<region>.paloaltonetworks.com.
Ліцензія та квота. XQL API потребують ліцензії Cortex XDR Pro. Запити використовують вашу XQL квоту, і ви можете запускати до чотирьох API запитів паралельно.
Набір даних. Телеметрія кінцевих точок знаходиться в xdr_data, містить такі поля, як agent_hostname, event_type, action_process_image_command_line та actor_process_image_name. Створіть запит спочатку у Query Builder.
Експорт за допомогою XQL API
XDR="https://api-<tenant>.xdr.<region>.paloaltonetworks.com"
H1="Authorization: $XDR_API_KEY"
H2="x-xdr-auth-id: $XDR_API_KEY_ID"
# 1. початок запиту (період часу в мілісекундах з початку епохи)
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. очікування результатів
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. до 1,000 результатів вбудовано; більше через потік
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
Проміжок часу вище становить 2026-10-19 00:00 UTC до 2026-10-20 00:00 UTC.
Завантажте, очистіть та перегляньте в LogTotal
- Завантажити. Відкрийте logtotal.com і перетягніть у файл.
- Очистити.
- Перегляньте.
Коли щось пішло не так
| Симптом | Можлива причина | Fix |
|---|---|---|
| 401 | Ключ і ID ключа переплутані, або ключ протерміновано | Ключ в Authorization, ID в x-xdr-auth-id |
| Помилка ліцензії | Немає ліцензії XDR Pro | XQL APIs потребують XDR Pro |
| Помилки квоти | Використано квоту XQL або більше, ніж чотири паралельні запити | Чекати; сузити запит |
| Рівно 1,000 результатів | Потік не використовується | Отримайте решту за допомогою ідентифікатора потоку |
| Помилки запиту | Синтаксис XQL | Перевірте спочатку у Query Builder |
FAQ
Чи можу я експортувати інциденти та сповіщення?
Так, через окремі API інцидентів і сповіщень. Для LogTotal експортуйте телеметрію за ними.
Що щодо сирих журналів третьої сторони?
Якщо ви індексуєте їх у Cortex, вони живуть у своїх наборах даних та виходять тим самим шляхом.