Files
get-from-loki/README.md
2025-08-21 14:56:35 +05:00

123 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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