Быстрый Старт
Это руководство проведёт вас через процесс загрузки логов, трейсов и метрик в IceGate, а также их запрос через API и Grafana.
Примечание
Данное руководство предполагает, что IceGate уже запущен. См. Установка для развёртывания через Helm или Настройка среды разработки для локального окружения.
Загрузка Логов
IceGate принимает данные по протоколу OpenTelemetry (OTLP) через сервис приёма данных.
Отправка Логов через OTLP HTTP
curl -X POST http://localhost:4318/v1/logs \
-H "Content-Type: application/json" \
-H "X-Scope-OrgID: demo" \
-d '{
"resourceLogs": [{
"resource": {
"attributes": [
{"key": "service.name", "value": {"stringValue": "my-service"}}
]
},
"scopeLogs": [{
"logRecords": [{
"timeUnixNano": "'$(date +%s)000000000'",
"body": {"stringValue": "User login successful"},
"severityText": "INFO",
"severityNumber": 9,
"attributes": [
{"key": "user.id", "value": {"stringValue": "user-42"}},
{"key": "http.method", "value": {"stringValue": "POST"}}
]
}]
}]
}]
}'
Отправка Логов через OTLP gRPC
Используйте любой SDK OpenTelemetry. Пример на Python:
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
provider = LoggerProvider()
provider.add_log_record_processor(
BatchLogRecordProcessor(
OTLPLogExporter(
endpoint="localhost:4317",
headers={"X-Scope-OrgID": "demo"},
insecure=True,
)
)
)
Загрузка Трейсов
Отправьте спаны распределённых трейсов:
curl -X POST http://localhost:4318/v1/traces \
-H "Content-Type: application/json" \
-H "X-Scope-OrgID: demo" \
-d '{
"resourceSpans": [{
"resource": {
"attributes": [
{"key": "service.name", "value": {"stringValue": "my-service"}}
]
},
"scopeSpans": [{
"spans": [{
"traceId": "5B8EFFF798038103D269B633813FC60C",
"spanId": "EEE19B7EC3C1B174",
"name": "GET /api/users",
"kind": 2,
"startTimeUnixNano": "'$(date +%s)000000000'",
"endTimeUnixNano": "'$(date +%s)100000000'",
"status": {"code": 1},
"attributes": [
{"key": "http.method", "value": {"stringValue": "GET"}},
{"key": "http.status_code", "value": {"intValue": "200"}}
]
}]
}]
}]
}'
Загрузка Метрик
Отправьте данные метрик:
curl -X POST http://localhost:4318/v1/metrics \
-H "Content-Type: application/json" \
-H "X-Scope-OrgID: demo" \
-d '{
"resourceMetrics": [{
"resource": {
"attributes": [
{"key": "service.name", "value": {"stringValue": "my-service"}}
]
},
"scopeMetrics": [{
"metrics": [{
"name": "http_requests_total",
"sum": {
"dataPoints": [{
"startTimeUnixNano": "'$(date +%s)000000000'",
"timeUnixNano": "'$(date +%s)000000000'",
"asInt": "42",
"attributes": [
{"key": "method", "value": {"stringValue": "GET"}},
{"key": "status", "value": {"stringValue": "200"}}
]
}],
"aggregationTemporality": 2,
"isMonotonic": true
}
}]
}]
}]
}'
Запрос Логов с помощью LogQL
IceGate предоставляет API, совместимый с Loki, через сервис запросов (порт 3100) - подмножество API
Loki, перечисленное в справочнике API.
Базовый Запрос Логов
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query={service_name="my-service"}' \
--data-urlencode 'start='$(date -d '1 hour ago' +%s 2>/dev/null || date -v-1H +%s) \
--data-urlencode 'end='$(date +%s) \
--data-urlencode 'limit=100' \
-H "X-Scope-OrgID: demo"
Фильтрация по Уровню Серьёзности
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query={service_name="my-service", severity_text="ERROR"}' \
--data-urlencode 'start='$(date -d '1 hour ago' +%s 2>/dev/null || date -v-1H +%s) \
--data-urlencode 'end='$(date +%s) \
-H "X-Scope-OrgID: demo"
Поиск по Содержимому Логов
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query={service_name="my-service"} |= "login"' \
--data-urlencode 'start='$(date -d '1 hour ago' +%s 2>/dev/null || date -v-1H +%s) \
--data-urlencode 'end='$(date +%s) \
-H "X-Scope-OrgID: demo"
Агрегация Логов в Метрики
# Подсчёт логов за 5-минутные окна
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query=count_over_time({service_name="my-service"}[5m])' \
--data-urlencode 'start='$(date -d '1 hour ago' +%s 2>/dev/null || date -v-1H +%s) \
--data-urlencode 'end='$(date +%s) \
--data-urlencode 'step=300' \
-H "X-Scope-OrgID: demo"
# Частота ошибок в секунду
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query=rate({severity_text="ERROR"}[1m])' \
--data-urlencode 'start='$(date -d '1 hour ago' +%s 2>/dev/null || date -v-1H +%s) \
--data-urlencode 'end='$(date +%s) \
--data-urlencode 'step=60' \
-H "X-Scope-OrgID: demo"
Обзор Меток и Серий
Список Всех Меток
curl http://localhost:3100/loki/api/v1/labels \
-H "X-Scope-OrgID: demo"
Получение Значений Метки
curl http://localhost:3100/loki/api/v1/label/service_name/values \
-H "X-Scope-OrgID: demo"
Поиск Совпадающих Серий
curl -G http://localhost:3100/loki/api/v1/series \
--data-urlencode 'match[]={service_name=~"my-.*"}' \
-H "X-Scope-OrgID: demo"
Использование Grafana
IceGate совместим с источником данных Loki в Grafana для визуализации логов и создания дашбордов.
Добавление IceGate как Источника Данных
- Откройте Grafana (по умолчанию: http://localhost:3000)
- Перейдите в Connections > Data sources > Add data source
- Выберите Loki
- Укажите URL:
http://icegate-query:3100(илиhttp://localhost:3100для локального доступа) - В разделе HTTP Headers добавьте:
- Header:
X-Scope-OrgID - Value:
demo
- Header:
- Нажмите Save & Test
Исследование Логов
- Перейдите в Explore
- Выберите источник данных Loki
- Введите запрос LogQL:
{service_name="my-service"} - Нажмите Run query
- Переключайтесь между режимами Logs и Graph
Создание Дашборда
- Перейдите в Dashboards > New > New Dashboard
- Добавьте панель Logs:
- Query:
{service_name="my-service"} - Визуализация: Logs
- Query:
- Добавьте панель Time series для частоты ошибок:
- Query:
sum by (service_name) (rate({severity_text="ERROR"}[5m])) - Визуализация: Time series
- Query:
- Добавьте панель Stat для объёма логов:
- Query:
sum(count_over_time({service_name="my-service"}[1h])) - Визуализация: Stat
- Query:
Готовые Дашборды
При развёртывании с overlay-конфигурациями Kustomize или Docker Compose, Grafana поставляется с предварительно настроенными дашбордами IceGate для метрик сервисов приёма данных и запросов.
Использование OpenTelemetry Collector
Для производственных нагрузок используйте OpenTelemetry Collector для пересылки данных из ваших приложений в IceGate:
# otel-collector-config.yaml
exporters:
otlp/icegate:
endpoint: icegate-ingest:4317
tls:
insecure: true
headers:
X-Scope-OrgID: my-tenant
service:
pipelines:
logs:
receivers: [otlp]
exporters: [otlp/icegate]
traces:
receivers: [otlp]
exporters: [otlp/icegate]
metrics:
receivers: [otlp]
exporters: [otlp/icegate]
Мультитенантность
IceGate изолирует данные по тенантам с помощью заголовка X-Scope-OrgID. Данные каждого тенанта физически разделены.
# Загрузка данных для тенанта "team-a"
curl -X POST http://localhost:4318/v1/logs \
-H "X-Scope-OrgID: team-a" \
-H "Content-Type: application/json" \
-d '...'
# Запрос видит только данные team-a
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query={service_name="api"}' \
-H "X-Scope-OrgID: team-a"
Подробнее см. Мультитенантность.
Дальнейшие Шаги
- Изучите запросы LogQL подробнее
- Ознакомьтесь со справочником API Loki
- Настройте пайплайны приёма данных
- Разберитесь в модели данных