Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 0 additions & 119 deletions .gitlab-ci.yml

This file was deleted.

20 changes: 15 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,17 +69,17 @@ cp src/LinkTracker.AiAgent.Api/.env.template src/LinkTracker.AiAgent.Api/.env
7. Задать общий сервисный секрет. Bot и Scrapper аутентифицируют друг друга по нему,
поэтому значение должно совпадать в обоих сервисах.
```
cp .env.template .env
cp deploy/.env.template deploy/.env
```
8. Поставить в корневой .env своё значение `SERVICE_AUTH_SECRET`, а в
8. Поставить в `deploy/.env` своё значение `SERVICE_AUTH_SECRET`, а в
`src/LinkTracker.Bot.Api/.env` и `src/LinkTracker.Scrapper.Api/.env` — то же самое
значение в `ServiceAuth__Secret` (нужно для локального запуска без Docker).

### Для локального запуска
9. В [bot.Api.appsettings](src/LinkTracker.Bot.Api/appsettings.json), [scrapper.Api.appsettings](src/LinkTracker.Scrapper.Api/appsettings.json) и [aiagent.Api.appsettings](src/LinkTracker.AiAgent.Api/appsettings.json) в ветках Scrapper, Bot и AiAgent соответственно выбрать валидные параметры.
10. Выполнить поочердено запуск сначала [docker-compose](docker-compose.yml), [Scrapper](src/LinkTracker.Scrapper.Api/Program.cs), [Bot](src/LinkTracker.Bot.Api/Program.cs) и [AiAgent](src/LinkTracker.AiAgent.Api/Program.cs) с помощью команд.
10. Выполнить поочердено запуск сначала [docker-compose](deploy/docker-compose.yml), [Scrapper](src/LinkTracker.Scrapper.Api/Program.cs), [Bot](src/LinkTracker.Bot.Api/Program.cs) и [AiAgent](src/LinkTracker.AiAgent.Api/Program.cs) с помощью команд.
```
docker compose -f docker-compose.yml up
docker compose -f deploy/docker-compose.yml up
dotnet run --project src/LinkTracker.Scrapper.Api
dotnet run --project src/LinkTracker.Bot.Api
dotnet run --project src/LinkTracker.AiAgent.Api
Expand All @@ -89,7 +89,7 @@ dotnet run --project src/LinkTracker.AiAgent.Api
9. В [bot.Docker.appesettings](src/LinkTracker.Bot.Api/appsettings.Docker.json), [scrapper.Docker.appsettings](src/LinkTracker.Scrapper.Api/appsettings.Docker.json) и [aiagent.Docker.appesettings](src/LinkTracker.AiAgent.Api/appsettings.Docker.json) в ветках Scrapper, Bot и AiAgent соответственно выбрать валидные параметры.
10. Поднять инфраструктуру и все три сервиса одной командой — порядок запуска обеспечивают `depends_on` в compose-файлах.
```
docker compose -f docker-compose.yml -f docker-compose.apps.yml up
docker compose -f deploy/docker-compose.yml -f deploy/docker-compose.apps.yml up
```


Expand All @@ -116,3 +116,13 @@ dotnet test
| p99 | 283.45 ms | 19.76 ms | -93.03% |
| Успешные ответы 200 | 25 507 | 29 482 | +3 975 |
| Ошибки 500/502/504 | 0 | 0 | без изменений |

---
## Структура репозитория

| Путь | Содержимое |
|---|---|
| [src/](src/) | Исходный код сервисов, общие библиотеки и тесты |
| [migrations/](migrations/) | SQL-миграции схемы Postgres (применяются DbUp при старте Scrapper) |
| [deploy/](deploy/) | Compose-файлы, конфигурация Prometheus и Grafana, шаблон корневого `.env` |
| [docs/](docs/) | [Наблюдаемость](docs/OBSERVABILITY.md) и [примеры PromQL](docs/example-pql.txt) |
File renamed without changes.
16 changes: 9 additions & 7 deletions docker-compose.apps.yml → deploy/docker-compose.apps.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
name: linktracker

x-service-auth-env: &service-auth-env
ServiceAuth__Secret: "${SERVICE_AUTH_SECRET:?SERVICE_AUTH_SECRET must be set in the root .env file}"
ServiceAuth__Secret: "${SERVICE_AUTH_SECRET:?SERVICE_AUTH_SECRET must be set in deploy/.env}"

services:
scrapper:
build:
context: .
context: ..
dockerfile: src/LinkTracker.Scrapper.Api/Dockerfile
network: host
container_name: linktracker-scrapper
Expand All @@ -22,14 +24,14 @@ services:
- "8081"
- "8082"
env_file:
- src/LinkTracker.Scrapper.Api/.env
- ../src/LinkTracker.Scrapper.Api/.env
environment:
<<: *service-auth-env
ASPNETCORE_ENVIRONMENT: "Docker"

bot:
build:
context: .
context: ..
dockerfile: src/LinkTracker.Bot.Api/Dockerfile
network: host
container_name: linktracker-bot
Expand All @@ -48,14 +50,14 @@ services:
- "8092"
- "8011"
env_file:
- src/LinkTracker.Bot.Api/.env
- ../src/LinkTracker.Bot.Api/.env
environment:
<<: *service-auth-env
ASPNETCORE_ENVIRONMENT: "Docker"

aiagent:
build:
context: .
context: ..
dockerfile: src/LinkTracker.AiAgent.Api/Dockerfile
network: host
container_name: linktracker-aiagent
Expand All @@ -75,6 +77,6 @@ services:
- "8101"
- "8102"
env_file:
- src/LinkTracker.AiAgent.Api/.env
- ../src/LinkTracker.AiAgent.Api/.env
environment:
ASPNETCORE_ENVIRONMENT: "Docker"
2 changes: 2 additions & 0 deletions docker-compose.yml → deploy/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
name: linktracker

x-kafka-common-env: &kafka-common-env
KAFKA_PROCESS_ROLES: "broker,controller"
KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER"
Expand Down
File renamed without changes.
14 changes: 7 additions & 7 deletions OBSERVABILITY.md → docs/OBSERVABILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ Rate limiter применяется точечно, политикой `public-a

## Конфигурация сбора

Настраивается на стороне Prometheus в `monitoring/prometheus.yml` — приложениям
Настраивается на стороне Prometheus в `deploy/monitoring/prometheus.yml` — приложениям
никакой конфигурации телеметрии не требуется. Лейбл `job` берётся из имени scrape-job
(`scrapper` / `bot` / `aiagent`), `instance` — из адреса цели.

Expand All @@ -89,27 +89,27 @@ Rate limiter применяется точечно, политикой `public-a

## Grafana

Дашборд и алерты провижинятся автоматически из `monitoring/grafana/provisioning`:
Дашборд и алерты провижинятся автоматически из `deploy/monitoring/grafana/provisioning`:

- **Datasource**: Prometheus (`uid: prometheus`).
- **Dashboard**: `LinkTracker Observability` (`monitoring/.../dashboards/linktracker-dashboard.json`) —
- **Dashboard**: `LinkTracker Observability` (`deploy/monitoring/.../dashboards/linktracker-dashboard.json`) —
панели RED, БД, Kafka, RAM и бизнес-метрики.
- **Alert (требование задания)**: правило `High process memory usage`
(`monitoring/.../alerting/rules.yaml`) на метрику `process_memory_working_set_bytes`.
(`deploy/monitoring/.../alerting/rules.yml`) на метрику `process_memory_working_set_bytes`.
Срабатывает, когда RAM сервиса (`scrapper`/`bot`) превышает 500 MB дольше 2 минут.

## PromQL запросы

Примеры PromQL для визуализаций — в `example-pql.txt`.
Примеры PromQL для визуализаций — в `docs/example-pql.txt`.

## Запуск мониторинга

```bash
# Поднять инфраструктуру (Kafka, Postgres, Valkey, Prometheus, Grafana)
docker compose -f docker-compose.yml up -d
docker compose -f deploy/docker-compose.yml up -d

# Поднять приложения
docker compose -f docker-compose.yml -f docker-compose.apps.yml up -d
docker compose -f deploy/docker-compose.yml -f deploy/docker-compose.apps.yml up -d
```

После запуска:
Expand Down
File renamed without changes.
File renamed without changes.
1 change: 1 addition & 0 deletions src/LinkTracker.AiAgent.Api/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src

COPY ["linktracker.sln", "./"]
COPY ["src/Directory.Build.props", "src/"]

COPY ["src/LinkTracker.AiAgent.Api", "src/LinkTracker.AiAgent.Api/"]
COPY ["src/LinkTracker.AiAgent.Application/LinkTracker.AiAgent.Application.csproj", "src/LinkTracker.AiAgent.Application/"]
Expand Down
1 change: 1 addition & 0 deletions src/LinkTracker.Bot.Api/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src

COPY ["linktracker.sln", "./"]
COPY ["src/Directory.Build.props", "src/"]

COPY ["src/LinkTracker.Bot.Api/LinkTracker.Bot.Api.csproj", "src/LinkTracker.Bot.Api/"]
COPY ["src/LinkTracker.Bot.Application/LinkTracker.Bot.Application.csproj", "src/LinkTracker.Bot.Application/"]
Expand Down
1 change: 1 addition & 0 deletions src/LinkTracker.Scrapper.Api/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src

COPY ["linktracker.sln", "./"]
COPY ["src/Directory.Build.props", "src/"]

COPY ["src/LinkTracker.Scrapper.Api/LinkTracker.Scrapper.Api.csproj", "src/LinkTracker.Scrapper.Api/"]
COPY ["src/LinkTracker.Scrapper.Application/LinkTracker.Scrapper.Application.csproj", "src/LinkTracker.Scrapper.Application/"]
Expand Down
Loading