init
This commit is contained in:
122
README.md
Normal file
122
README.md
Normal 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
|
||||
Reference in New Issue
Block a user