2025-08-21 14:56:35 +05:00
2025-08-21 14:56:35 +05:00
2025-08-21 14:56:35 +05:00
2025-08-21 14:56:35 +05:00
2025-08-21 14:56:35 +05:00
2025-08-21 14:56:35 +05:00
2025-08-21 14:56:35 +05:00
2025-08-21 14:56:35 +05:00
2025-08-21 14:56:35 +05:00

Get From Loki

Компактный REST API сервис на C# для получения логов из Grafana Loki.

Описание

Сервис предоставляет REST API для запроса логов из Grafana Loki по лейблам и возвращает их в формате {timestamp, message}.

Требования

Запуск

  1. Убедитесь, что Grafana Loki запущен на http://localhost:3100
  2. Выполните команды:
dotnet restore
dotnet run --urls http://0.0.0.0:5000

Сервис будет доступен по адресу: http://localhost:5000

API Endpoints

GET /api/logs/query

Получить логи по лейблам через GET запрос

Параметры:

  • labels (обязательный) - лейблы в формате "key1=value1,key2=value2"
  • startTime (опциональный) - время начала в формате ISO 8601
  • endTime (опциональный) - время окончания в формате ISO 8601
  • limit (опциональный) - лимит записей (по умолчанию 100)

Примеры:

GET /api/logs/query?labels=job=cron,service_name=system&limit=50
GET /api/logs/query?labels=app=myapp,level=error&startTime=2024-01-01T00:00:00Z&endTime=2024-01-01T23:59:59Z

POST /api/logs/query

Получить логи по лейблам через POST запрос

Тело запроса:

{
  "labels": {
    "job": "cron",
    "service_name": "system",
    "level": "info"
  },
  "startTime": "2024-01-01T00:00:00Z",
  "endTime": "2024-01-01T23:59:59Z",
  "limit": 100
}

Примеры использования

Простой запрос по одному лейблу:

curl "http://localhost:5000/api/logs/query?labels=job=cron&limit=10"

Запрос по нескольким лейблам:

curl "http://localhost:5000/api/logs/query?labels=job=cron,service_name=system,level=info&limit=20"

POST запрос с временным окном:

curl -X POST "http://localhost:5000/api/logs/query" \
  -H "Content-Type: application/json" \
  -d '{
    "labels": {
      "app": "myapp",
      "environment": "production"
    },
    "startTime": "2024-01-01T00:00:00Z",
    "endTime": "2024-01-01T01:00:00Z",
    "limit": 50
  }'

Ответ

Сервис возвращает массив объектов в формате:

[
  {
    "timestamp": "2024-01-01T12:00:00Z",
    "message": "Log message content"
  }
]

Конфигурация

Настройки подключения к Loki находятся в файле appsettings.json:

{
  "Loki": {
    "BaseUrl": "http://localhost:3100",
    "QueryTimeout": 30
  }
}

LogQL запросы

Сервис автоматически формирует LogQL запросы для Loki API:

  • {job="cron",service_name="system"} - точное совпадение значений
  • {job!=""} - существование лейбла (если значение не указано)

Swagger UI

После запуска сервиса документация API доступна по адресу: http://localhost:5000/swagger

Description
No description provided
Readme 36 KiB
Languages
C# 100%