- Добавлен новый коллектор proxvmsystem, объединяющий функциональность system и gpu коллекторов - Добавлен machine_uid для идентификации VM/контейнеров в Proxmox инфраструктуре - Обновлена документация по коллекторам и проекту - Добавлены новые хосты в inventory для тестирования - Обновлен Makefile для сборки нового коллектора - Обновлен config.yaml с конфигурацией proxvmsystem коллектора Автор: Сергей Антропов Сайт: https://devops.org.ru
194 lines
13 KiB
Makefile
194 lines
13 KiB
Makefile
SHELL := /bin/sh
|
||
PROJECT_NAME := agent
|
||
|
||
.PHONY: build build-linux build-darwin build-windows run agent test lint docker-clean collectors collectors-darwin collectors-linux collectors-windows
|
||
.PHONY: kafka-topic kafka-once kafka-consume
|
||
|
||
build:
|
||
# Платформозависимая сборка агента (как у collectors)
|
||
@mkdir -p ./bin/agent .cache/go-build .cache/go-mod; \
|
||
if [ "$$(/usr/bin/uname -s)" = "Darwin" ]; then \
|
||
ARCH=$$(/usr/bin/uname -m | sed 's/x86_64/amd64/; s/arm64/arm64/'); \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=darwin -e GOARCH=$$ARCH -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -trimpath -o ./bin/agent/agent-darwin ./src"; \
|
||
else \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=linux -e GOARCH=amd64 -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -trimpath -o ./bin/agent/agent ./src"; \
|
||
fi
|
||
|
||
build-darwin:
|
||
# Кросс-сборка darwin (arm64) бинаря агента
|
||
@mkdir -p ./bin/agent .cache/go-build .cache/go-mod; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=darwin -e GOARCH=arm64 -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -trimpath -o ./bin/agent/agent-darwin ./src"
|
||
|
||
build-linux:
|
||
# Кросс-сборка linux (amd64) бинаря агента
|
||
@mkdir -p ./bin/agent .cache/go-build .cache/go-mod; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=linux -e GOARCH=amd64 -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -trimpath -o ./bin/agent/agent ./src"
|
||
|
||
build-windows:
|
||
# Кросс-сборка windows (amd64) бинаря агента
|
||
@mkdir -p ./bin/agent .cache/go-build .cache/go-mod; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=windows -e GOARCH=amd64 -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -trimpath -o ./bin/agent/agent.exe ./src"
|
||
|
||
|
||
|
||
collectors:
|
||
# Сборка коллекторов для текущей платформы (через Docker)
|
||
@mkdir -p ./bin/agent/collectors .cache/go-build .cache/go-mod
|
||
@if [ "$$(/usr/bin/uname -s)" = "Darwin" ]; then \
|
||
ARCH=$$(/usr/bin/uname -m | sed 's/x86_64/amd64/; s/arm64/arm64/'); \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace \
|
||
-e GOOS=darwin -e GOARCH=$$ARCH -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/uptime ./src/collectors/uptime && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/macos ./src/collectors/macos && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/docker ./src/collectors/docker"; \
|
||
else \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace \
|
||
-e GOOS=linux -e GOARCH=amd64 -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/uptime ./src/collectors/uptime && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/macos ./src/collectors/macos && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/system ./src/collectors/system && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/hba ./src/collectors/hba && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/sensors ./src/collectors/sensors && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/docker ./src/collectors/docker && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/gpu ./src/collectors/gpu && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/kubernetes ./src/collectors/kubernetes && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/proxcluster ./src/collectors/proxcluster && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/proxnode ./src/collectors/proxnode && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/proxvms ./src/collectors/proxvms"; \
|
||
fi
|
||
@# Убедимся, что скрипты исполняемые
|
||
@chmod +x ./bin/agent/collectors/*.sh 2>/dev/null || true
|
||
|
||
collectors-darwin:
|
||
# Кросс-сборка коллекторов для macOS
|
||
@mkdir -p ./bin/agent/collectors .cache/go-build .cache/go-mod; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=darwin -e GOARCH=arm64 -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/uptime-darwin ./src/collectors/uptime && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/macos-darwin ./src/collectors/macos"
|
||
|
||
collectors-linux:
|
||
# Кросс-сборка коллекторов для Linux
|
||
@mkdir -p ./bin/agent/collectors .cache/go-build .cache/go-mod; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=linux -e GOARCH=amd64 -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/uptime ./src/collectors/uptime && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/macos ./src/collectors/macos && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/system ./src/collectors/system && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/hba ./src/collectors/hba && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/sensors ./src/collectors/sensors && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/docker ./src/collectors/docker && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/gpu ./src/collectors/gpu && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/kubernetes ./src/collectors/kubernetes && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/proxcluster ./src/collectors/proxcluster && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/proxnode ./src/collectors/proxnode && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/proxvms ./src/collectors/proxvms && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/proxvmsystem ./src/collectors/proxvmsystem"
|
||
|
||
collectors-windows:
|
||
# Кросс-сборка коллекторов для Windows
|
||
@mkdir -p ./bin/agent/collectors .cache/go-build .cache/go-mod; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=windows -e GOARCH=amd64 -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/uptime-windows.exe ./src/collectors/uptime && \
|
||
CGO_ENABLED=0 go build -trimpath -o ./bin/agent/collectors/macos-windows.exe ./src/collectors/macos"
|
||
|
||
|
||
|
||
run: collectors
|
||
# На macOS собираем darwin-бинарь в Docker и запускаем на хосте (для доступа к macOS API);
|
||
# на других ОС — полностью в контейнере Linux.
|
||
@if [ "$$(/usr/bin/uname -s)" = "Darwin" ]; then \
|
||
mkdir -p ./bin/agent .cache/go-build .cache/go-mod; \
|
||
ARCH=$$(/usr/bin/uname -m | sed 's/x86_64/amd64/; s/arm64/arm64/'); \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=darwin -e GOARCH=$$ARCH \
|
||
-e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && go build -trimpath -o /workspace/bin/agent/agent-darwin ./src >/dev/null 2>&1"; \
|
||
LOG_LEVEL=error CONFIG_PATH=./bin/agent/config.yaml ./bin/agent/agent-darwin --once --mode stdout | docker run --rm -i ghcr.io/jqlang/jq:latest; \
|
||
else \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && go build -trimpath -o /tmp/agent ./src >/dev/null 2>&1 && LOG_LEVEL=error CONFIG_PATH=./bin/agent/config.yaml /tmp/agent --once --mode stdout" | docker run --rm -i ghcr.io/jqlang/jq:latest; \
|
||
fi
|
||
|
||
agent: collectors build
|
||
# Запуск агента с ВСЕМИ собранными коллекторами (не one-shot)
|
||
@if [ "$$(/usr/bin/uname -s)" = "Darwin" ]; then \
|
||
LOG_LEVEL=info CONFIG_PATH=./bin/agent/config.yaml ./bin/agent/agent-darwin --mode stdout; \
|
||
else \
|
||
LOG_LEVEL=info CONFIG_PATH=./bin/agent/config.yaml ./bin/agent/agent --mode stdout; \
|
||
fi
|
||
|
||
|
||
|
||
deploy: build-linux collectors-linux
|
||
# Деплой на удалённый хост через Ansible raw (без Python на целевой стороне)
|
||
docker run --rm -e ANSIBLE_HOST_KEY_CHECKING=False -v $$PWD:/workspace -v $$HOME/.ssh:/root/.ssh:ro -w /workspace cytopia/ansible:latest-tools \
|
||
ansible-playbook -i runner/inventory.ini runner/deploy-raw/playbook.yml -e LOCAL_BIN_DIR=/workspace/bin/agent -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo
|
||
|
||
delete:
|
||
# Очистка установленного агента (raw, без Python на целевой стороне)
|
||
docker run --rm -e ANSIBLE_HOST_KEY_CHECKING=False -v $$PWD:/workspace -v $$HOME/.ssh:/root/.ssh:ro -w /workspace cytopia/ansible:latest-tools \
|
||
ansible-playbook -i runner/inventory.ini runner/delete-raw/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo
|
||
|
||
deploy-service: build-linux collectors-linux
|
||
# Деплой и запуск через systemd (raw, без Python на целевой стороне)
|
||
docker run --rm -e ANSIBLE_HOST_KEY_CHECKING=False -v $$PWD:/workspace -v $$HOME/.ssh:/root/.ssh:ro -w /workspace cytopia/ansible:latest-tools \
|
||
ansible-playbook -i runner/inventory.ini runner/deploy-service-raw/playbook.yml -e LOCAL_BIN_DIR=/workspace/bin/agent -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo
|
||
|
||
delete-service:
|
||
# Остановка и очистка systemd-варианта без Python на целевой стороне
|
||
docker run --rm -e ANSIBLE_HOST_KEY_CHECKING=False -v $$PWD:/workspace -v $$HOME/.ssh:/root/.ssh:ro -w /workspace cytopia/ansible:latest-tools \
|
||
ansible-playbook -i runner/inventory.ini runner/delete-service-raw/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo
|
||
# Очистка установленного агента на удаленном хосте
|
||
docker run --rm -e ANSIBLE_HOST_KEY_CHECKING=False -v $$PWD:/workspace -v $$HOME/.ssh:/root/.ssh:ro -w /workspace cytopia/ansible:latest-tools \
|
||
ansible-playbook -i runner/inventory.ini runner/delete-raw/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo
|
||
|
||
|
||
|
||
test:
|
||
# Юнит-тесты в Docker без использования локальной машины
|
||
@mkdir -p .cache/go-build .cache/go-mod; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go test ./..."
|
||
|
||
lint:
|
||
# Линт кода через golangci-lint в Docker
|
||
@mkdir -p .cache/go-build .cache/go-mod; \
|
||
docker run --rm -v $$PWD:/app -w /app -e GOCACHE=/app/.cache/go-build -e GOMODCACHE=/app/.cache/go-mod golangci/golangci-lint:latest \
|
||
golangci-lint run --timeout 3m
|
||
|
||
docker-clean:
|
||
docker rmi -f $(PROJECT_NAME):build || true
|
||
|
||
# Вспомогательное: создать Kafka-топик (через kafkacat/kcat в контейнере)
|
||
kafka-topic:
|
||
@docker run --rm edenhill/kcat:1.7.1 -b 10.99.0.90:9092 -L | cat >/dev/null 2>&1 || true
|
||
@echo "Создание топика sensus.metrics (если нет) через kcat"; \
|
||
docker run --rm edenhill/kcat:1.7.1 -b 10.99.0.90:9092 -X allow.auto.create.topics=true -L | cat
|
||
|
||
# Одноразовый запуск агента в режиме Kafka
|
||
kafka-once:
|
||
# Одноразовая отправка метрик в Kafka
|
||
@if [ "$$(/usr/bin/uname -s)" = "Darwin" ]; then \
|
||
mkdir -p .cache/go-build .cache/go-mod; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=darwin -e GOARCH=$$(/usr/bin/uname -m | sed 's/x86_64/amd64/; s/arm64/arm64/') -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -trimpath -o ./bin/agent/agent-darwin ./src"; \
|
||
CONFIG_PATH=./bin/agent/config.yaml LOG_LEVEL=info ./bin/agent/agent-darwin --once --mode kafka || true; \
|
||
else \
|
||
mkdir -p .cache/go-build .cache/go-mod; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOCACHE=/workspace/.cache/go-build -e GOMODCACHE=/workspace/.cache/go-mod golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -trimpath -o /tmp/agent ./src >/dev/null 2>&1 && CONFIG_PATH=./bin/agent/config.yaml LOG_LEVEL=info /tmp/agent --once --mode kafka"; \
|
||
fi
|
||
|
||
# Прочитать последние 5 сообщений из топика sensus.metrics
|
||
kafka-consume:
|
||
@docker run --rm edenhill/kcat:1.7.1 -b 10.99.0.90:9092 -t sensus.metrics -o -5 -C -q -J | cat
|
||
|