123 lines
3.3 KiB
Markdown
123 lines
3.3 KiB
Markdown
# 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
|