CodeGraph передаёт события безопасности в систему, с которой уже работает SOC.
Аутентификация, обращения к LLM и действия DLP попадают в общий поток расследования.
Поле request_id связывает событие с запросом; тип, время, серьёзность и сведения
о пользователе помогают настроить поиск и оповещения.
Диспетчер отправляет одно событие в несколько обработчиков. Syslog, CEF и LEEF
поддерживают UDP, TCP и TLS. Для каждого обработчика CodeGraph хранит результат
последних попыток и состояние healthy или degraded.
Выберите формат и транспорт
| Формат | Настройки | Для чего используется |
|---|---|---|
| Syslog | host, port, protocol, facility, app_name |
Передача событий в формате RFC 5424. |
| CEF | host, port, protocol, device_vendor, device_product, device_version |
Приёмник Common Event Format. |
| LEEF | host, port, protocol, product_vendor, product_name, product_version |
Приёмник Log Event Extended Format. |
Согласуйте с SOC адрес, порт, формат и правила индексации. Для TLS используйте DNS-имя, которое соответствует сертификату приёмника. Отправитель проверяет имя сервера и цепочку сертификата по стандартному хранилищу доверия.
Настройте отправку
Параметры находятся в security.siem файла config.yaml. В рабочей конфигурации
укажите адрес и порт приёмника SOC. В следующем примере локальный TCP-приёмник
слушает 127.0.0.1:15140; формат — Syslog, категория — LOCAL0 (16).
Сохраните пример как config.yaml в отдельной папке проверки. Используйте окружение
Python с установленным исходным пакетом CodeGraph.
security:
enabled: true
siem:
enabled: true
syslog:
enabled: true
protocol: tcp
host: 127.0.0.1
port: 15140
facility: 16
app_name: codegraph
cef:
enabled: false
leef:
enabled: false
buffer:
max_size: 10000
flush_interval_seconds: 5
retry_attempts: 3
retry_backoff_seconds: 2.0
Включите нужные обработчики через enabled. Для одновременной отправки в два
формата задайте адреса обоих приёмников. Диспетчер проверяет результат каждого.
Проверьте отправку и получение
Этот пример отправляет одно синтетическое событие security.alert через настоящий
TCP-транспорт. Приёмник печатает строку Syslog, а отправитель — результат и request_id.
- Сохраните следующий код как
receive_siem_test.pyв папке проверки.
"""Receive one local TCP Syslog message for the SIEM transport check."""
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
server.bind(("127.0.0.1", 15140))
server.listen(1)
server.settimeout(30)
print("Listening on 127.0.0.1:15140", flush=True)
connection, _ = server.accept()
with connection, connection.makefile("r", encoding="utf-8") as stream:
print(stream.readline().rstrip(), flush=True)
- Сохраните отправитель как
send_siem_test.pyв той же папке.
"""Send a synthetic security event using the selected SIEM configuration."""
import json
from uuid import uuid4
from src.security.config import SecurityConfigSource, load_security_config
from src.security.siem.base_handler import SecurityEvent, SecurityEventType
from src.security.siem.dispatcher import SIEMDispatcher
config = load_security_config(SecurityConfigSource(path="config.yaml"))
event = SecurityEvent.create(
event_type=SecurityEventType.SECURITY_ALERT,
message="SIEM integration test event",
request_id=str(uuid4()),
severity=6,
details={"source": "documentation-check", "test": True},
)
with SIEMDispatcher(config.siem) as dispatcher:
results = dispatcher.dispatch_sync_detailed(event)
print(json.dumps({"request_id": event.request_id, "handlers": results}))
succeeded = bool(results) and all(item["dispatched"] for item in results)
raise SystemExit(0 if succeeded else 1)
- В первом терминале запустите приёмник:
python receive_siem_test.py
Дождитесь строки Listening on 127.0.0.1:15140.
- Во втором терминале, из той же папки, отправьте событие:
python send_siem_test.py
Отправитель завершается с кодом 0. В массиве handlers найдите dispatched: true.
В строке приёмника должны быть event_type="security.alert", сообщение
SIEM integration test event и тот же request_id, что в JSON отправителя.
После получения одной строки приёмник завершает работу.
- Повторите команду отправителя после завершения приёмника. Она завершается с
кодом
1; обработчик возвращаетdispatched: falseиerror_summary. Это проверяет диагностику недоступного TCP-получателя.
Для подключения SOC замените адрес и порт в рабочей конфигурации. Найдите событие
по request_id в индексе SIEM и проверьте время, тип и уровень серьёзности. При UDP
запись у получателя подтверждает приём; при TCP/TLS она также показывает результат
индексации после сетевой отправки.
Как работает очередь
dispatch(event) ставит событие в очередь процесса. Фоновый поток отправляет
накопленные события с периодом flush_interval_seconds. При сбое событие возвращается
в очередь до следующей отправки. Общее число попыток задаёт retry_attempts.
Очередь вмещает max_size событий. При заполнении новое событие вытесняет самое
старое, счётчик dropped увеличивается. При перезапуске процесса очередь создаётся
заново. Учитывайте эти свойства при выборе размера очереди и режима обновления.
dispatch_sync(event) отправляет событие сразу и возвращает успешный результат
хотя бы одного обработчика. dispatch_sync_detailed(event) возвращает отдельный
результат каждого обработчика. flush() запускает отправку накопленной очереди.
| Счётчик | Что показывает | Действие оператора |
|---|---|---|
enqueued |
События, добавленные в очередь. | Сопоставьте с интенсивностью потока. |
sent |
Успешные отправки из очереди. | Проверьте приём в SIEM. |
failed |
События, для которых исчерпаны попытки отправки. | Проверьте адрес, транспорт и приёмник. |
retried |
Назначенные повторные отправки. | Найдите причину нестабильности доставки. |
dropped |
Потерянные события. | Настройте оповещение и разберите период потери. |
Контролируйте интеграцию через API
Войдите в CodeGraph и используйте маршруты REST API:
| Метод и маршрут | Результат | Доступ |
|---|---|---|
GET /api/v1/security/siem/config |
Действующая конфигурация. | Активный пользователь. |
PUT /api/v1/security/siem/config |
Обновлённая конфигурация. | Администратор. |
GET /api/v1/security/siem/stats |
Статистика и состояние доставки. | Активный пользователь. |
GET /api/v1/security/siem/events?limit=20 |
Последние попытки отправки. | Активный пользователь. |
Схемы запросов и ответов доступны в /api/docs развёрнутого API. Для изменения
конфигурации выполните вход с ролью администратора.
Настройте эксплуатацию
Оповещайте SOC о состоянии degraded, росте очереди, повторных отправках и dropped.
Задайте пороги по измеренной частоте событий и допустимой задержке приёма.
Согласуйте правила обработки чувствительных полей, срок хранения и доступ к индексу.
При отказе сохраните error_summary, время и конфигурацию без секретов. Проверьте
DNS, сеть, TLS и состояние приёмника. После восстановления отправьте очередь и
сопоставьте её счётчики с событиями в SIEM. Для периода деградации зафиксируйте
ответственного, дополнительный канал наблюдения и условие завершения восстановления.
Для приёмки сохраните конфигурацию, результаты синтетического события и проверки отказа, статистику очереди, запись в индексе SIEM и настройки оповещений. Проверку событий аутентификации и DLP проводите через соответствующие пользовательские действия: OAuth/LDAP и DLP.
Поля события
Событие содержит event_type, timestamp, request_id, message и severity.
Дополнительные поля описывают пользователя, сеть, провайдера, модель и действие DLP.
Значения severity соответствуют шкале Syslog 0–7.