docs: rewrite overview, collectors, config, build_and_run, deploy; update README [author: Сергей Антропов https://devops.org.ru]

This commit is contained in:
Sergey Antropoff 2025-09-08 15:19:13 +03:00
parent ad409950b8
commit 1402fceb0e
7 changed files with 285 additions and 10 deletions

View File

@ -2,17 +2,23 @@
Автор: Сергей Антропов, сайт: https://devops.org.ru
Модульный агент мониторинга на Go 1.22+. Поддерживает встроенные и внешние (exec) коллекторы, вывод в stdout и Kafka, systemd unit.
SensusAgent — модульный агент сбора метрик. Агент запускает коллекторы (встроенные и внешние exec) по расписанию, агрегирует их JSON-вывод и публикует в stdout или Kafka.
### Структура
- src/core — ядро (конфиг, логирование, реестр коллекторов, раннер, вывод)
- src/collectors — исходники Go-коллекторов (сборка в bin/agent/collectors)
- bin/agent — бинарник и конфиги
Ключевые ссылки:
- Обзор и архитектура: `docs/overview.md`
- Конфигурация: `docs/config.md`
- Коллекторы (создание и сборка): `docs/collectors.md`
- Сборка и запуск (Make/Docker/Compose): `docs/build_and_run.md`
- Деплой (Ansible, systemd): `docs/deploy.md`
### Сборка и запуск
Подробно см. `app/docs/README.md`.
### Конфигурация
Все настройки, включая коллекторы, находятся в `bin/agent/config.yaml`.
Быстрый старт:
```bash
make collectors-linux
make build-linux
make run
```
Конфигурация:
- Основной файл: `bin/agent/config.yaml`
- Переопределения: `CONFIG_PATH`, `LOG_LEVEL`

11
docs/README.md Normal file
View File

@ -0,0 +1,11 @@
## SensusAgent — документация
Автор: Сергей Антропов, сайт: https://devops.org.ru
Содержание:
- Обзор: `overview.md`
- Конфигурация: `config.md`
- Коллекторы: `collectors.md`
- Сборка и запуск: `build_and_run.md`
- Деплой: `deploy.md`

34
docs/build_and_run.md Normal file
View File

@ -0,0 +1,34 @@
### Сборка и запуск (через Docker/Make)
Автор: Сергей Антропов, сайт: https://devops.org.ru
Требования:
- Docker и Docker Compose
Основные цели Makefile:
- `make collectors` — сборка коллекторов для текущей платформы
- `make collectors-linux` / `collectors-darwin` / `collectors-windows` — кросс-сборка
- `make build` / `build-linux` / `build-darwin` — сборка агента
- `make run` — одноразовый запуск и вывод JSON (через jq)
- `make agent` — запуск агента с логированием в stdout
Примеры:
```bash
make collectors-linux
make build-linux
make run
```
Docker-образ разработки:
- Файл `Dockerfile` собирает бинарь агента `sensusagent` и часть коллекторов в `/bin/agent`
Docker Compose (упрощенный запуск):
Файл `docker-compose.yml` поднимает сервис `agent`.
```bash
docker compose up --build
```
Переменные окружения:
- `CONFIG_PATH` — путь к конфигу (по умолчанию `/bin/agent/config.yaml` в контейнере)
- `LOG_LEVEL``error` | `info` | `debug`

48
docs/collectors.md Normal file
View File

@ -0,0 +1,48 @@
### Коллекторы
Автор: Сергей Антропов, сайт: https://devops.org.ru
Коллектор — это модуль, который исполняется агентом по расписанию и выводит результат в формате JSON в stdout. Агент объединяет вывод всех активных коллекторов в один JSON-документ.
Размещение исходников и артефактов:
- Исходники Go-коллекторов: `src/collectors/<name>`
- Собранные бинарники/скрипты: `bin/agent/collectors/<name>`
Требования к коллектору:
- Вывод строго в формате JSON в stdout (одна строка или валидный JSON-объект)
- Отсутствие побочного вывода в stderr/stdout кроме JSON (для корректного парсинга)
- Завершение за время, не превышающее `timeout` в конфигурации
Пример внешнего скрипта-коллектора (`bin/agent/collectors/sample.sh`):
```bash
#!/usr/bin/env sh
set -eu
echo '{"sample": {"ok": true, "ts": '"$(date +%s)"'}}'
```
Пример описания коллектора в `bin/agent/config.yaml`:
```yaml
collectors:
system:
enabled: true
type: exec
key: system
interval: "30s"
timeout: "8s"
exec: "./collectors/system"
platforms: [linux]
```
Сборка Go-коллекторов через Makefile (в Docker):
```bash
make collectors # текущая платформа
make collectors-linux # linux/amd64
make collectors-darwin # darwin/arm64
```
Рекомендации по разработке:
- Следуйте единому JSON-стилю и ключам, не допускайте дублирования имен ключей между коллекторами
- Логирование делайте в stderr, чтобы не мешать JSON
- Ограничивайте потребление ресурсов и время выполнения
- На стороне агента используйте `interval` ≥ 10s для тяжелых коллекторов

86
docs/config.md Normal file
View File

@ -0,0 +1,86 @@
### Конфигурация
Автор: Сергей Антропов, сайт: https://devops.org.ru
Основной файл конфигурации: `bin/agent/config.yaml`. Путь можно переопределить переменной окружения `CONFIG_PATH`.
Ключевые секции:
- `mode`: режим вывода (`stdout` | `kafka` | `auto`)
- `log_level`: уровень логирования (`error` | `info` | `debug`)
- `kafka`: параметры продюсера (если используется `mode: kafka`)
- `collectors`: список коллекторов и их расписание
Пример полного файла `config.yaml`:
```yaml
mode: auto # stdout | kafka | auto
log_level: info
kafka:
enabled: false
brokers: ["kafka:9092"]
topic: "sensus.metrics"
client_id: "sensusagent"
enable_tls: false
timeout: "5s"
collectors:
system:
enabled: true
type: exec
key: system
interval: "30s"
timeout: "8s"
exec: "./collectors/system"
platforms: [linux]
uptime:
enabled: false
type: exec
key: uptime
interval: "10s"
timeout: "5s"
exec: "./collectors/uptime"
platforms: [darwin, linux, windows]
macos:
enabled: false
type: exec
key: macos
interval: "30s"
timeout: "10s"
exec: "./collectors/macos"
platforms: [darwin]
sample:
enabled: false
type: exec
key: sample
interval: "30s"
timeout: "5s"
exec: "./collectors/sample.sh"
platforms: [darwin, linux]
hba:
enabled: true
type: exec
key: hba
interval: "60s"
timeout: "10s"
exec: "./collectors/hba"
platforms: [linux]
```
Пояснения по полям коллектора:
- `enabled`: включить/выключить коллектор
- `type`: тип коллектора, `exec` — внешний бинарь/скрипт
- `key`: ключ верхнего уровня в итоговом JSON
- `interval`: минимальный интервал между запусками (Go duration)
- `timeout`: максимальное время выполнения (Go duration)
- `exec`: относительный путь к исполняемому файлу в каталоге `bin/agent/collectors`
- `platforms`: список платформ, на которых допустим запуск (`linux`, `darwin`, `windows`)
Переменные окружения:
- `CONFIG_PATH` — путь к `config.yaml`
- `LOG_LEVEL` — уровень логирования (`error`, `info`, `debug`)
Советы по конфигурации:
- Для тяжелых коллекторов увеличивайте `interval` и `timeout`
- При использовании Kafka установите `kafka.enabled: true` и корректные `brokers`/`topic`
- Следите, чтобы ключи `key` у разных коллекторов не пересекались

44
docs/deploy.md Normal file
View File

@ -0,0 +1,44 @@
### Деплой
Автор: Сергей Антропов, сайт: https://devops.org.ru
Варианты развертывания:
- Docker Compose: файл `docker-compose.yml`
- Systemd сервис: через роль `runner/deploy-service` (юнит находится в `runner/sensusagent.service` при необходимости)
- Ansible-плейбуки: `runner/deploy`, `runner/delete`, а также service-варианты
Подготовка удаленного хоста:
- Доступ по SSH (ключ находится у оператора)
- Права `sudo` для установки зависимостей
Быстрый деплой (одноразовый запуск агента без systemd):
```bash
make deploy
```
Что делает команда:
- Собирает linux-бинарь агента и коллектора в Docker
- Копирует `bin/agent/agent`, `bin/agent/config.yaml`, `bin/agent/collectors/*` на удаленный хост в `/opt/sensusagent`
- Обеспечивает зависимости (например, `sysstat`, `smartmontools` и др.)
Удаление установленного агента (без systemd):
```bash
make delete
```
Деплой и запуск через systemd:
```bash
make deploy-service
```
Остановка и очистка systemd-варианта:
```bash
make delete-service
```
Переменные Ansible:
- `LOCAL_BIN_DIR` — локальный каталог с собранным агентом (по умолчанию `./bin/agent`)
- `remote_dir` — удаленный каталог установки (по умолчанию `/opt/sensusagent` в плейбуках)
Инвентори:
- Файл `runner/inventory.ini` определяет целевые хосты и параметры подключения

46
docs/overview.md Normal file
View File

@ -0,0 +1,46 @@
### Обзор
Автор: Сергей Антропов, сайт: https://devops.org.ru
SensusAgent — модульный агент сбора метрик и инвентарных данных. Агент запускает встроенные и внешние (exec) коллекторы по расписанию, объединяет их JSON-вывод в единый документ и публикует в выбранный канал вывода (stdout, Kafka или auto-режим).
Основные возможности:
- Запуск коллекторов как внешних исполняемых файлов из `bin/agent/collectors` и как встроенных Go-бинарей
- Единый JSON-формат вывода для удобной интеграции
- Гибкая конфигурация через `bin/agent/config.yaml` и переменные окружения
- Кроссплатформенная сборка через Docker и Makefile (без локальной Go-сборки)
- Деплой и удаление через Ansible (`make deploy`, `make delete`, а также варианты с systemd)
Архитектура и компоненты репозитория:
- `src/core/*` — ядро агента (конфигурация, реестр коллекторов, раннер, логирование, вывод)
- `src/collectors/*` — исходники Go-коллекторов (сборка в `bin/agent/collectors`)
- `bin/agent` — исполняемые файлы и конфиги агента (`config.yaml`, собранные коллекторы)
- `runner/*` — сценарии Ansible для деплоя/удаления (и для systemd)
- `docs/*` — документация проекта
Поток выполнения:
1. Агент загружает конфигурацию из `bin/agent/config.yaml` (путь можно переопределить `CONFIG_PATH`)
2. Инициализирует логирование по уровню `LOG_LEVEL`
3. Регистрирует и планирует запуск коллекторов согласно их `interval` и `timeout`
4. Исполняет коллектора (встроенные или `type: exec`), читает JSON из stdout
5. Объединяет данные в общий JSON-документ и публикует в stdout или Kafka (в зависимости от `mode`)
Режимы вывода (`mode`):
- `stdout` — печать JSON в стандартный вывод
- `kafka` — отправка в Kafka-топик
- `auto` — автоматически выбирает канал (например, stdout, если Kafka отключена)
Переменные окружения (основные):
- `CONFIG_PATH` — путь к конфигурации (по умолчанию `./bin/agent/config.yaml`)
- `LOG_LEVEL` — уровень логирования (`error`, `info`, `debug`)
Поддерживаемые платформы:
- Linux (агент и коллекторы)
- macOS (часть коллекторов и сборок)
- Windows (ограниченно для некоторых коллекторов)
См. также:
- Конфигурация: `docs/config.md`
- Коллекторы: `docs/collectors.md`
- Сборка/запуск: `docs/build_and_run.md`
- Деплой: `docs/deploy.md`