This commit is contained in:
2025-08-21 14:56:35 +05:00
commit ecde1f0eeb
10 changed files with 923 additions and 0 deletions

122
README.md Normal file
View File

@ -0,0 +1,122 @@
# 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