Graylog зберігає свої повідомлення в OpenSearch або Elasticsearch, тому у вас є два шляхи. Використовуйте REST API Graylog, аутентифікуючись за допомогою токена доступу, або виконуйте запити до бекенд індексів (за замовчуванням graylog_*) безпосередньо за допомогою скрипта. У будь-якому випадку ви отримаєте JSON. Оригінальний рядок міститься в message, а в full_message для деяких входів. Експорт у веб-інтерфейсі Graylog генерує формат, який LogTotal сьогодні не читає.
Graylog – це популярна платформа для керування відкритими логами, яку часто вперше встановлює команда для центрального ведення логів. Prime Core має 23,274 правила виявлення для Graylog, пов’язаних з 671 технікою MITRE ATT&CK. Нижче описується, як витягти повідомлення, очистити їх та безкоштовно розслідувати їх у LogTotal.
Перед початком
Токен доступу. У Graylog, відкрийте налаштування вашого користувача і створіть токен. З API ви аутентифікуєтесь як <token>:token: токен як ім’я користувача і слово token як пароль.
Доступ до бекенду, якщо ви підключаєтеся напряму. Кластер OpenSearch або Elasticsearch позаду Graylog часто недоступний із зовні. Попросіть того, хто керує ним, про акаунт лише для читання.
Потоки та набори індексів. Graylog направляє повідомлення в потоки, а потоки співставляються з наборами індексів з їхніми власними префіксами та затримками. Знайте, який набір індексів містить ваші дані.
Варіант 1: REST API Graylog
GL="https://graylog.example.com"
curl -sS -u "$GL_TOKEN:token" -H 'Accept: application/json' -G "$GL/api/search/universal/absolute"
--data-urlencode 'query=source:web-03'
--data-urlencode 'from=2026-10-19T00:00:00.000Z'
--data-urlencode 'to=2026-10-20T00:00:00.000Z'
--data-urlencode 'limit=10000'
| jq -c '.messages[].message' > graylog_web03_1019.jsonl
Новіші версії Graylog віддають перевагу API пошуку Views. Для великих експортів, варіант 2 є більш надійним.
Варіант 2: Запит до бекенд індексів
Це той самий підхід, що і наш, спрямований на індекси Graylog:
import json, os
from opensearchpy import OpenSearch, helpers
client = OpenSearch("https://opensearch.example.com:9200",
http_auth=("reader", os.environ["OS_PASSWORD"]), verify_certs=True)
query = {"query": {"bool": {"filter": [
{"term": {"source": "web-03"}},
{"range": {"timestamp": {"gte": "2026-10-19 00:00:00.000", "lt": "2026-10-20 00:00:00.000"}}},
]}}}
with open("graylog_web03_1019.jsonl", "w") as out:
for hit in helpers.scan(client, index="graylog_*", query=query, size=1000):
out.write(json.dumps(hit["_source"]) + "n")
Graylog зберігає timestamp як yyyy-MM-dd HH:mm:ss.SSS в UTC, тому range використовує цей формат. Для бекенду, що працює на Elasticsearch, використовуйте клієнт elasticsearch аналогічно.
Завантажте, очистіть та перегляньте в LogTotal
- Завантажити. Відкрити logtotal.com і помістіть у файл.
- Очистіть.
- Перегляньте.
Коли щось йде не так
| Симптом | Ймовірна причина | Fix |
|---|---|---|
| 401 від API | Токен аутентифікований неправильно | Використовуйте <token>:token |
| 404 на кінцевій точці пошуку | Кінцева точка недоступна у вашій версії | Використовуйте Варіант 2, або API Views |
| Запит бекенду нічого не повертає | Неправильний префікс індексу, або формат timestamp | Перевірте набори індексів; використовуйте yyyy-MM-dd HH:mm:ss.SSS |
| Бекенд недоступний | Кластер не відкритий | Запитайте доступ лише для читання, або використовуйте API |
FAQ
message чи full_message?
message завжди є. full_message з’являється для деяких входів, таких як GELF, і може містити більше деталей. Експортуйте обидва, якщо вони у вас є.
Чи працює це для Graylog Cloud?
Маршрут API працює. Прямий доступ до бекенду зазвичай недоступний у хостингових планах.