# Get From Loki Компактный REST API сервис на C# для получения логов из Grafana Loki. ## Описание Сервис предоставляет REST API для запроса логов из Grafana Loki по лейблам и возвращает их в формате `{timestamp, message}`. ## Требования - .NET 8.0 - Grafana Loki (работающий на http://localhost:3100) ## Запуск 1. Убедитесь, что Grafana Loki запущен на http://localhost:3100 2. Выполните команды: ```bash 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 запрос **Тело запроса:** ```json { "labels": { "job": "cron", "service_name": "system", "level": "info" }, "startTime": "2024-01-01T00:00:00Z", "endTime": "2024-01-01T23:59:59Z", "limit": 100 } ``` ## Примеры использования ### Простой запрос по одному лейблу: ```bash curl "http://localhost:5000/api/logs/query?labels=job=cron&limit=10" ``` ### Запрос по нескольким лейблам: ```bash curl "http://localhost:5000/api/logs/query?labels=job=cron,service_name=system,level=info&limit=20" ``` ### POST запрос с временным окном: ```bash 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 }' ``` ## Ответ Сервис возвращает массив объектов в формате: ```json [ { "timestamp": "2024-01-01T12:00:00Z", "message": "Log message content" } ] ``` ## Конфигурация Настройки подключения к Loki находятся в файле `appsettings.json`: ```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