SigNoz: развертывание альтернатив DataDog и NewRelic

Полное руководство по установке SigNoz — APM и Observability на базе OpenTelemetry: разверните бесплатный мониторинг приложений, серверов и контейнеров.

Не указано
Алексей Кузнецов
Алексей КузнецовСистемный администратор
22 января 2026 г.

Настройка окружения и 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 собирает и визуализирует три ключевых типа телеметрии:

  1. Распределенная трассировка (Distributed Tracing): Позволяет отследить путь запроса через все микросервисы, выявить узкие места и медленные операции. Поддерживает стандарт OpenTelemetry.
  2. Метрики (Metrics): Сбор стандартных метрик (CPU, память, бизнес-метрики) и построение дашбордов.
  3. Логи (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 — самый простой и поддерживаемый способ.

  1. Обновление системы и установка зависимостей:

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y docker.io docker-compose
    
  2. Запуск Docker службы:

    sudo systemctl start docker
    sudo systemctl enable docker
    
  3. Добавление пользователя в группу Docker (чтобы избегать sudo в командах):

    sudo usermod -aG docker $USER
    

    Внимание: После выполнения этой команды необходимо разлогиниться и снова залогиниться в системе или выполнить newgrp docker для применения изменений.

  4. Проверка установки:

    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 предложит создать аккаунт. Этот процесс происходит один раз.

  1. Введите имя пользователя (email) и пароль.
  2. Нажмите "Sign Up" (хотя кнопка называется Sign Up, это создание первого администратора).
  3. Вы будете автоматически перенаправлены на дашборд.

Подключение первых данных (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.

  1. Создайте конфигурационный файл 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]
    
  2. Запустите 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 имеет встроенную систему алертинга.

  1. Перейдите в раздел Alerts.
  2. Нажмите New Alert.
  3. Выберите тип: Metric Alert (на основе метрик) или Trace Alert (на основе трассировок).
  4. Пример алерта на метрику:
    • Условие: cpu_usage > 80
    • Окно агрегации: 1m
    • Оператор: >, Значение: 80
  5. Настройте канал уведомлений (Email, Slack, Webhook). Для Slack потребуется создать Incoming Webhook в вашем Slack workspace и вставить URL в настройках интеграций SigNoz.

Создание дашбордов

  1. Перейдите в раздел Dashboards.
  2. Нажмите New Dashboard -> Create Custom Dashboard.
  3. Добавьте виджет:
    • Выберите тип (Time Series, Table, Gauge).
    • Напишите запрос на языке ClickHouse SQL или используйте визуальный конструктор для метрик.
    • Пример простого SQL для запроса метрик: SELECT * FROM signoz_metrics.distributed_samples_v4 WHERE metric_name = 'cpu_usage'.
  4. Сохраните дашборд.

Интеграция с приложениями (через OpenTelemetry SDK)

Для полного охвата рекомендуется инструментировать код приложения.

  1. Выберите SDK для вашего языка (Python, Java, Go, Node.js, JS и т.д.) с официального сайта OpenTelemetry.
  2. Инициализируйте трассировщик в точке входа приложения (как в примере с Python выше).
  3. Настройте конфигурацию:
    • OTEL_EXPORTER_OTLP_ENDPOINT: URL вашего SigNoz (порт 4317 для gRPC или 4318 для HTTP).
    • OTEL_SERVICE_NAME: Имя вашего сервиса (будет отображаться в UI).
    • OTEL_EXPORTER_OTLP_INSECURE: true (если не используется TLS).
  4. Добавьте инструментацию. Для фреймворков (Flask, Spring, Express) используются специальные библиотеки (инструментация), которые автоматически создают спаны для HTTP-запросов и DB-вызовов.

Советы по эксплуатации

Обновление SigNoz

SigNoz регулярно выпускает обновления. Для обновления до последней версии:

  1. Перейдите в директорию со скриптом установки.
  2. Остановите текущие контейнеры:
    docker-compose -f docker-compose.yaml down
    
  3. Снова запустите скрипт установки (он скачает новые образы):
    curl -sL https://github.com/SigNoz/signoz/raw/main/scripts/install.sh | bash
    
  4. Запустите сервисы:
    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).

  1. В интерфейсе SigNoz создайте дашборд или используйте встроенные (если доступны).
  2. Мониторьте ключевые метрики:
    • clickhouse_uptime
    • rabbitmq_messages_ready (если используется очереди)
    • memory_usage (оперативная память)
    • cpu_usage
    • disk_usage (самое критическое — следите за объемом!)
  3. Настройте алерты на высокий уровень использования памяти или диска.

Заключение

Развернуть 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 — если у вас нет ограничений по бюджету и требуется готовое решение «из коробки».
Поделиться:TelegramX / TwitterVK