SigNoz: развертывание альтернатив DataDog и NewRelic
Полное руководство по установке SigNoz — APM и Observability на базе OpenTelemetry: разверните бесплатный мониторинг приложений, серверов и контейнеров.
Настройка окружения и Docker
Для начала необходимо установить Docker и Docker Compose, а также добавить текущего пользователя в группу docker для выполнения команд без sudo. Это стандартная процедура для подготовки сервера к развертыванию контейнеризованных приложений.
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
# Внимание: После выполнения предыдущей команды необходимо перелогиниться или выполнить:
newgrp docker
# Проверка установки
docker --version
docker-compose --versionСкачивание и запуск SigNoz
Создайте директорию для проекта, скачайте официальный скрипт установки и запустите его. Скрипт автоматически подготовит файлы docker-compose.yaml и необходимые конфигурации. Затем запустите контейнеры в фоновом режиме.
mkdir signoz
cd signoz
curl -sL https://github.com/SigNoz/signoz/raw/main/scripts/install.sh | bash
# Запуск сервисов SigNoz
docker-compose -f docker-compose.yaml up -dПроверка статуса контейнеров
Убедитесь, что все сервисы (ClickHouse, frontend, query-service и др.) перешли в статус 'Up'. Если какой-то контейнер падает или перезапускается, проверьте логи для выявления ошибок.
docker-compose -f docker-compose.yaml ps
# Для просмотра логов (полезно при проблемах)
docker-compose -f docker-compose.yaml logs -fДоступ к веб-интерфейсу и создание аккаунта
Откройте браузер и перейдите по адресу http://<IP-адрес-сервера>:3301. При первом входе система предложит создать аккаунт администратора. Введите email и пароль для завершения начальной настройки.
http://localhost:3301 # Если устанавливали локально
# Или http://<внешний-ip-сервера>:3301Интеграция приложения (пример с Python)
Для отправки трассировок в SigNoz установите OpenTelemetry SDK для Python. Приведенный код инициализирует трассировщик и настраивает экспорт данных на сервер SigNoz через протокол gRPC. Замените <IP-SERVER> на реальный IP вашего сервера SigNoz.
# Установка зависимостей
pip install opentelemetry-api opentelemetry-sdk opentelemetry-instrumentation-flask
pip install "opentelemetry-exporter-otlp-proto-grpc"
# Код приложения (app.py)
from flask import Flask
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
app = Flask(__name__)
# Настройка трассировщика
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)
# Настройка экспортера (подключение к SigNoz)
otlp_exporter = OTLPSpanExporter(endpoint="http://<IP-SERVER>:4317", insecure=True)
span_processor = BatchSpanProcessor(otlp_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)
@app.route('/')
def home():
with tracer.start_as_current_span("main_request"):
return "Hello, SigNoz!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)Создание алертов и дашбордов
В интерфейсе SigNoz перейдите в раздел 'Alerts' для создания уведомлений (например, на превышение CPU) и в раздел 'Dashboards' для визуализации метрик. Для алертов можно настроить интеграции с Slack или Email.
# Пример конфигурации для алерта (описание шагов в UI):
# 1. Нажмите New Alert -> Metric Alert
# 2. Условие: cpu_usage > 80
# 3. Окно агрегации: 1m
# 4. Настройте канал уведомлений (Webhook для Slack)
# Пример простого SQL запроса для дашборда:
SELECT * FROM signoz_metrics.distributed_samples_v4 WHERE metric_name = 'cpu_usage'Обновление SigNoz
Для обновления до последней версии остановите текущие контейнеры и снова запустите скрипт установки. Это скачает новые образы Docker, после чего можно запустить сервисы снова.
cd signoz
docker-compose -f docker-compose.yaml down
curl -sL https://github.com/SigNoz/signoz/raw/main/scripts/install.sh | bash
docker-compose -f docker-compose.yaml up -dРезервное копирование данных
Создайте дамп базы данных PostgreSQL для сохранения метаданных (настройки, дашборды). Данные в ClickHouse (трассировки, метрики, логи) требуют более сложных стратегий бэкапа (снапшоты volumes или встроенные механизмы ClickHouse).
# Бэкап метаданных SigNoz (PostgreSQL)
docker exec signoz-postgres pg_dump -U signoz signoz > backup_$(date +%F).sqlРуководство: Как самостоятельно развернуть SigNoz — альтернатива DataDog и NewRelic
Введение
В современной инфраструктуре, где приложения распределены и сложны, мониторинг перестал быть роскошью и стал необходимостью. Он позволяет оперативно выявлять проблемы, анализировать производительность и понимать поведение системы в реальном времени. Традиционные коммерческие решения вроде DataDog и NewRelic предлагают мощный функционал, но часто сопровождаются высокой ценой, привязкой к поставщику и сложными моделями лицензирования.
SigNoz выступает как серьезная альтернатива в этом сегменте. Это open-source платформа для наблюдаемости (Observability), объединяющая трассировку (distributed tracing), метрики (metrics) и логи (logs) в одном интерфейсе. Её ключевое преимущество — полный контроль над данными и инфраструктурой, возможность самостоятельного развертывания и отсутствие скрытых затрат.
Это руководство проведет вас через все этапы развертывания SigNoz: от подготовки окружения до первоначальной настройки и интеграции с вашими приложениями. Мы будем использовать Docker Compose — это самый надежный и воспроизводимый способ для инсталляции.
Обзор SigNoz
Основные возможности
SigNoz собирает и визуализирует три ключевых типа телеметрии:
- Распределенная трассировка (Distributed Tracing): Позволяет отследить путь запроса через все микросервисы, выявить узкие места и медленные операции. Поддерживает стандарт OpenTelemetry.
- Метрики (Metrics): Сбор стандартных метрик (CPU, память, бизнес-метрики) и построение дашбордов.
- Логи (Logs): Централизованный сбор и поиск логов, корреляция логов с трассировками.
Архитектура
SigNoz построен на следующих компонентах:
- Frontend UI: React-приложение для визуализации данных.
- Query Service: Бэкенд, обрабатывающий запросы от UI.
- Ingestion Service: Сервис, принимающий данные от агентов (OpenTelemetry Collector или напрямую от SDK).
- База данных (ClickHouse): Собственная OLAP-база данных от Yandex, оптимизированная для аналитики временных рядов. Выбрана за высокую производительность и компактность хранения.
- База данных (PostgreSQL): Хранит метаданные: настройки пользователей, дашборды, алерты.
- База данных (SQLite): Локальное хранилище для индекса по логам (используется для быстрого поиска).
- OpenTelemetry Collector: Стандартный агент для сбора и обработки телеметрии (включается в сборку).
Отличия от коммерческих аналогов
- Стоимость: Основные затраты — это аренда сервера. Нет платы за данные или юзеров.
- Открытость исходного кода: Полный доступ к коду, возможность форка и кастомизации.
- Собственность данных: Данные хранятся на вашем сервере, под вашим контролем.
- Стандарты: Построен на OpenTelemetry, что обеспечивает совместимость с большим количеством языков и фреймворков.
Подготовка окружения
Требования к инфраструктуре
SigNoz — это достаточно ресурсоемкое приложение. Для тестовой среды достаточно:
- CPU: 2 ядра
- RAM: 8 ГБ (рекомендуется 16 ГБ для продакшена)
- Диск: 50 ГБ (прирост логов и метрик может быть быстрым, мониторьте использование)
- Операционная система: Linux (Ubuntu/Debian рекомендуется), macOS, Windows (через WSL2)
Важно: SigNoz не рекомендуется запускать на ноутбуке для постоянной работы, так как это может негативно сказаться на стабильности.
Выбор ОС
Мы будем использовать Ubuntu 22.04 LTS как наиболее стабильную и популярную ОС для серверов.
Настройка Docker
SigNoz распространяется в виде Docker-образов. Установка через Docker Compose — самый простой и поддерживаемый способ.
-
Обновление системы и установка зависимостей:
sudo apt update && sudo apt upgrade -y sudo apt install -y docker.io docker-compose -
Запуск Docker службы:
sudo systemctl start docker sudo systemctl enable docker -
Добавление пользователя в группу Docker (чтобы избегать
sudoв командах):sudo usermod -aG docker $USERВнимание: После выполнения этой команды необходимо разлогиниться и снова залогиниться в системе или выполнить
newgrp dockerдля применения изменений. -
Проверка установки:
docker --version docker-compose --version
Пошаговая установка
1. Скачивание сценария установки
Создайте директорию для SigNoz и перейдите в нее:
mkdir signoz
cd signoz
Скачаем официальный скрипт установки с GitHub:
curl -sL https://github.com/SigNoz/signoz/raw/main/scripts/install.sh | bash
Этот скрипт автоматически скачает необходимые файлы docker-compose.yaml и конфигурационные файлы.
2. Настройка конфигурации (опционально)
По умолчанию SigNoz использует порты:
- 3301 - UI (сигнал)
- 4317 - gRPC Receiver (OpenTelemetry)
- 4318 - HTTP Receiver (OpenTelemetry)
Если у вас уже есть конфликтующие сервисы, вы можете изменить порты в файле docker-compose.yaml или .env файле. Рекомендуется оставить по умолчанию для простоты.
3. Запуск SigNoz
Используйте Docker Compose для запуска всех контейнеров:
docker-compose -f docker-compose.yaml up -d
-f docker-compose.yamlуказывает на файл описания сервисов.-dзапускает контейнеры в фоновом режиме (detached mode).
4. Проверка статуса
Ожидайте, пока все контейнеры перейдут в состояние Up. Проверьте статус:
docker-compose -f docker-compose.yaml ps
Вы должны увидеть несколько контейнеров (clickhouse, frontend, query-service и т.д.) в статусе Up.
Также можно проверить логи старта:
docker-compose -f docker-compose.yaml logs -f
Ищите сообщения о том, что UI доступен и сервисы запущены.
5. Доступ к веб-интерфейсу
Откройте браузер и перейдите по адресу:
http://<IP-адрес-вашего-сервера>:3301
Если вы устанавливаете локально, это http://localhost:3301.
Первоначальная настройка
Создание учетной записи
При первом входе SigNoz предложит создать аккаунт. Этот процесс происходит один раз.
- Введите имя пользователя (email) и пароль.
- Нажмите "Sign Up" (хотя кнопка называется Sign Up, это создание первого администратора).
- Вы будете автоматически перенаправлены на дашборд.
Подключение первых данных (traces, metrics, logs)
SigNoz поддерживает отправку телеметрии двумя способами: через OpenTelemetry SDK напрямую или через OpenTelemetry Collector (рекомендуемый для продакшена).
Способ 1: Быстрый старт (OpenTelemetry SDK)
Допустим, у вас есть Python-приложение. Установите библиотеки:
pip install opentelemetry-api opentelemetry-sdk opentelemetry-instrumentation-flask
pip install "opentelemetry-exporter-otlp-proto-grpc"
Пример кода для отправки трассировок в SigNoz:
from flask import Flask
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
app = Flask(__name__)
# Настройка трассировщика
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)
# Настройка экспортера (подключение к SigNoz)
otlp_exporter = OTLPSpanExporter(endpoint="http://<IP-SERVER>:4317", insecure=True)
span_processor = BatchSpanProcessor(otlp_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)
@app.route('/')
def home():
with tracer.start_as_current_span("main_request"):
return "Hello, SigNoz!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Замените <IP-SERVER> на IP адрес вашего сервера, где запущен SigNoz.
Способ 2: Через OpenTelemetry Collector (для продакшена)
Если у вас несколько микросервисов или необходима предобработка данных (фильтрация, добавление атрибутов), используйте Collector.
-
Создайте конфигурационный файл
otel-collector-config.yamlна вашем сервере:receivers: otlp: protocols: grpc: endpoint: "0.0.0.0:4317" http: endpoint: "0.0.0.0:4318" processors: batch: timeout: 1s send_batch_size: 1024 exporters: otlp: endpoint: "localhost:4317" # Отправляем в локальный контейнер SigNoz insecure: true headers: "signoz-access-token": "your-token" # Если включена аутентификация service: pipelines: traces: receivers: [otlp] processors: [batch] exporters: [otlp] -
Запустите Collector (можно через Docker):
docker run -p 4317:4317 -p 4318:4318 \ -v $(pwd)/otel-collector-config.yaml:/etc/otel-collector-config.yaml \ --name otel-collector \ -d otel/opentelemetry-collector:latest \ --config=/etc/otel-collector-config.yamlТеперь ваши приложения должны отправлять данные на порт 4317/4318 этого контейнера, а он перенаправит их в SigNoz.
Расширенная конфигурация
Настройка алертов
SigNoz имеет встроенную систему алертинга.
- Перейдите в раздел Alerts.
- Нажмите New Alert.
- Выберите тип: Metric Alert (на основе метрик) или Trace Alert (на основе трассировок).
- Пример алерта на метрику:
- Условие:
cpu_usage > 80 - Окно агрегации: 1m
- Оператор:
>, Значение:80
- Условие:
- Настройте канал уведомлений (Email, Slack, Webhook). Для Slack потребуется создать Incoming Webhook в вашем Slack workspace и вставить URL в настройках интеграций SigNoz.
Создание дашбордов
- Перейдите в раздел Dashboards.
- Нажмите New Dashboard -> Create Custom Dashboard.
- Добавьте виджет:
- Выберите тип (Time Series, Table, Gauge).
- Напишите запрос на языке ClickHouse SQL или используйте визуальный конструктор для метрик.
- Пример простого SQL для запроса метрик:
SELECT * FROM signoz_metrics.distributed_samples_v4 WHERE metric_name = 'cpu_usage'.
- Сохраните дашборд.
Интеграция с приложениями (через OpenTelemetry SDK)
Для полного охвата рекомендуется инструментировать код приложения.
- Выберите SDK для вашего языка (Python, Java, Go, Node.js, JS и т.д.) с официального сайта OpenTelemetry.
- Инициализируйте трассировщик в точке входа приложения (как в примере с Python выше).
- Настройте конфигурацию:
OTEL_EXPORTER_OTLP_ENDPOINT: URL вашего SigNoz (порт 4317 для gRPC или 4318 для HTTP).OTEL_SERVICE_NAME: Имя вашего сервиса (будет отображаться в UI).OTEL_EXPORTER_OTLP_INSECURE: true (если не используется TLS).
- Добавьте инструментацию. Для фреймворков (Flask, Spring, Express) используются специальные библиотеки (инструментация), которые автоматически создают спаны для HTTP-запросов и DB-вызовов.
Советы по эксплуатации
Обновление SigNoz
SigNoz регулярно выпускает обновления. Для обновления до последней версии:
- Перейдите в директорию со скриптом установки.
- Остановите текущие контейнеры:
docker-compose -f docker-compose.yaml down - Снова запустите скрипт установки (он скачает новые образы):
curl -sL https://github.com/SigNoz/signoz/raw/main/scripts/install.sh | bash - Запустите сервисы:
docker-compose -f docker-compose.yaml up -d
Резервное копирование
Данные SigNoz хранятся в ClickHouse (основные данные) и PostgreSQL (метаданные).
- ClickHouse: Самый надежный способ — использовать встроенные механизмы ClickHouse или снапшоты volume. Если вы используете Docker, вы можете остановить контейнер и архивировать папку с данными, но это может привести к потере части данных. Лучше использовать бэкапы на уровне БД.
- PostgreSQL: Сделайте дамп базы данных:
docker exec signoz-postgres pg_dump -U signoz signoz > backup_$(date +%F).sql - Для простоты (не рекомендуется для продакшена): Вы можете заархивировать всю папку
signozсо всеми volume'ами. Это работает, но только если сервис остановлен.
Мониторинг самого SigNoz
SigNoz собирает метрики о самом себе (self-monitoring).
- В интерфейсе SigNoz создайте дашборд или используйте встроенные (если доступны).
- Мониторьте ключевые метрики:
clickhouse_uptimerabbitmq_messages_ready(если используется очереди)memory_usage(оперативная память)cpu_usagedisk_usage(самое критическое — следите за объемом!)
- Настройте алерты на высокий уровень использования памяти или диска.
Заключение
Развернуть SigNoz — это отличный шаг к самостоятельной наблюдаемости вашей инфраструктуры. Вы получили контроль, открытость и гибкость коммерческого решения, но без экстремальных затрат. Основные этапы — установка Docker, запуск через Docker Compose, интеграция с приложениями через OpenTelemetry — не требуют глубоких навыков DevOps, если следовать инструкциям.
SigNoz подходит для стартапов, малых и средних проектов, а также для компаний, которые хотят избежать вендорской зависимости. Для крупных энтерпрайз-проектов с требованием SLA может потребоваться более тщательная настройка резервного копирования и отказоустойчивости кластера ClickHouse.
Альтернативы, если SigNoz по какой-то причине не подошел:
- Grafana + Prometheus + Loki: Классический open-source стек для метрик и логов (требует больше настройки).
- Apache SkyWalking: Мощный альтернатива в стиле APM, больше сфокусирован на Java.
- Jaeger: Чистая распределенная трассировка без метрик и логов «из коробки».
- Chronosphere / Cortex: Для масштабированных метрик, но сложнее в настройке.
- Commercial: Datadog, New Relic, Dynatrace — если у вас нет ограничений по бюджету и требуется готовое решение «из коробки».