Linux
💡 Tip
The easiest way to run SigNoz is to use SigNoz Cloud - no installation, maintenance, or scaling needed.
New users get 30 days of unlimited access to all features. Click here to sign up.
This section provides information on installing SigNoz on Linux.
Prerequisites
- A Linux machine
- Root access to the machine
Install Clickhouse
- Install Clickhouse using the Clickhouse installation guide
Note: Do not start the clickhouse service yet. We will do that after installing zookeeper.
Install Zookeeper
- Install Java
sudo apt update
sudo apt upgrade -y
sudo apt install default-jdk -y
- Get and extract the latest release of Zookeeper from the releases page
curl -L https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz -o zookeeper.tar.gz
tar -xzf zookeeper.tar.gz
- Create the necessary zookeeper directories and copy the extracted files to
/opt/zookeeper
:
sudo mkdir -p /opt/zookeeper
sudo mkdir -p /var/lib/zookeeper
sudo mkdir -p /var/log/zookeeper
sudo cp -r apache-zookeeper-3.8.4-bin/* /opt/zookeeper
- Create the zookeeper config file:
sudo bash -c 'cat <<EOF > /opt/zookeeper/conf/zoo.cfg
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
admin.serverPort=3181
EOF'
- Create the zookeeper systemd environment file:
sudo bash -c 'cat <<EOF > /opt/zookeeper/conf/zoo.env
ZOO_LOG_DIR=/var/log/zookeeper
EOF'
- Create a user and group to run Zookeeper and give it ownership of the zookeeper directories:
sudo getent passwd zookeeper >/dev/null || sudo useradd --system --home /opt/zookeeper --no-create-home --user-group --shell /sbin/nologin zookeeper
sudo chown -R zookeeper:zookeeper /opt/zookeeper
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper
sudo chown -R zookeeper:zookeeper /var/log/zookeeper
- Create the zookeeper systemd service:
sudo bash -c 'cat <<EOF > /etc/systemd/system/zookeeper.service
[Unit]
Description=Zookeeper
Documentation=http://zookeeper.apache.org
[Service]
EnvironmentFile=/opt/zookeeper/conf/zoo.env
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF'
- Reload the systemd daemon and start the zookeeper service:
sudo systemctl daemon-reload
sudo systemctl start zookeeper.service
- Configure clickhouse to use zookeeper and start the clickhouse service:
sudo bash -c 'cat <<EOF > /etc/clickhouse-server/config.d/cluster.xml
<clickhouse replace="true">
<distributed_ddl>
<path>/clickhouse/task_queue/ddl</path>
</distributed_ddl>
<remote_servers>
<cluster>
<shard>
<replica>
<host>127.0.0.1</host>
<port>9000</port>
</replica>
</shard>
</cluster>
</remote_servers>
<zookeeper>
<node>
<host>127.0.0.1</host>
<port>2181</port>
</node>
</zookeeper>
<macros>
<shard>01</shard>
<replica>01</replica>
</macros>
</clickhouse>
EOF'
sudo chown clickhouse:clickhouse /etc/clickhouse-server/config.d/cluster.xml
sudo systemctl start clickhouse-server.service
Verify the installation
- Check the status of the clickhouse and zookeeper services:
sudo systemctl status clickhouse-server.service
sudo systemctl status zookeeper.service
- If the services are running, you should see the following output:
clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/lib/systemd/system/clickhouse-server.service; enabled; preset: enabled)
Active: active (running) since ...
zookeeper.service - Zookeeper
Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; preset: enabled)
Active: active (running) ...
- (Optional) Check the logs of the clickhouse and zookeeper services:
sudo journalctl -u clickhouse-server.service -f
sudo journalctl -u zookeeper.service -f
Run Clickhouse migrations
- Get and extract the latest release of SigNoz Schema Migrator:.
curl -L https://github.com/SigNoz/signoz-otel-collector/releases/latest/download/signoz-schema-migrator_linux_$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g').tar.gz -o signoz-schema-migrator.tar.gz
tar -xzf signoz-schema-migrator.tar.gz
- Run the migrations:
./signoz-schema-migrator_linux_$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g')/bin/signoz-schema-migrator sync --dsn="tcp://localhost:9000?password=password" --replication=true --up=
./signoz-schema-migrator_linux_$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g')/bin/signoz-schema-migrator async --dsn="tcp://localhost:9000?password=password" --replication=true --up=
Install SigNoz
- Get and extract the latest release of SigNoz:
curl -L https://github.com/SigNoz/signoz/releases/latest/download/signoz_linux_$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g').tar.gz -o signoz.tar.gz
tar -xzf signoz.tar.gz
- Create the necessary directories and copy the extracted files to
/opt/signoz
:
sudo mkdir -p /opt/signoz
sudo mkdir -p /var/lib/signoz
sudo cp -r signoz_linux_$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g')/* /opt/signoz
- Create the SigNoz systemd environment file:
sudo bash -c 'cat <<EOF > /opt/signoz/conf/systemd.env
SIGNOZ_INSTRUMENTATION_LOGS_LEVEL=info
INVITE_EMAIL_TEMPLATE=/opt/signoz/templates/invitation_email_template.html
SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db
SIGNOZ_WEB_ENABLED=true
SIGNOZ_WEB_DIRECTORY=/opt/signoz/web
SIGNOZ_JWT_SECRET=secret
SIGNOZ_ALERTMANAGER_PROVIDER=signoz
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://localhost:9000?password=password
EOF'
- Create a user and group to run SigNoz and give it ownership of the signoz directories:
sudo getent passwd signoz >/dev/null || sudo useradd --system --home /opt/signoz --no-create-home --user-group --shell /sbin/nologin signoz
sudo chown -R signoz:signoz /var/lib/signoz
sudo chown -R signoz:signoz /opt/signoz
- Create the SigNoz systemd service:
sudo bash -c 'cat <<EOF > /etc/systemd/system/signoz.service
[Unit]
Description=SigNoz
Documentation=https://signoz.io/docs
After=clickhouse-server.service
[Service]
User=signoz
Group=signoz
Type=simple
KillMode=mixed
Restart=on-failure
WorkingDirectory=/opt/signoz
EnvironmentFile=/opt/signoz/conf/systemd.env
ExecStart=/opt/signoz/bin/signoz --config=/opt/signoz/conf/prometheus.yml --use-logs-new-schema=true --use-trace-new-schema=true
[Install]
WantedBy=multi-user.target
EOF'
- Reload the systemd daemon and start the SigNoz service:
sudo systemctl daemon-reload
sudo systemctl start signoz.service
Verify the installation
- Check the status of the signoz service:
sudo systemctl status signoz.service
- If the services are running, you should see the following output:
signoz.service - SigNoz
Loaded: loaded (/etc/systemd/system/signoz.service; enabled; preset: enabled)
Active: active (running) since ...
- (Optional) Check the logs of the signoz service:
sudo journalctl -u signoz.service -f
Install SigNoz Otel Collector
- Get and extract the latest release of SigNoz Otel Collector:
curl -L https://github.com/SigNoz/signoz-otel-collector/releases/latest/download/signoz-otel-collector_linux_$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g').tar.gz -o signoz-otel-collector.tar.gz
tar -xzf signoz-otel-collector.tar.gz
- Create the necessary directories and copy the extracted files to
/opt/signoz-otel-collector
:
sudo mkdir -p /var/lib/signoz-otel-collector
sudo mkdir -p /opt/signoz-otel-collector
sudo cp -r signoz-otel-collector_linux_$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g')/* /opt/signoz-otel-collector
- Change the ownership of the files to the
signoz
user and group:
sudo chown -R signoz:signoz /var/lib/signoz-otel-collector
sudo chown -R signoz:signoz /opt/signoz-otel-collector
- Create a
config.yaml
file in the/opt/signoz-otel-collector/conf
directory:
sudo bash -c 'cat <<EOF > /opt/signoz-otel-collector/conf/config.yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
max_recv_msg_size_mib: 16
http:
endpoint: 0.0.0.0:4318
jaeger:
protocols:
grpc:
endpoint: 0.0.0.0:14250
thrift_http:
endpoint: 0.0.0.0:14268
httplogreceiver/heroku:
endpoint: 0.0.0.0:8081
source: heroku
httplogreceiver/json:
endpoint: 0.0.0.0:8082
source: json
processors:
batch:
send_batch_size: 50000
timeout: 1s
signozspanmetrics/delta:
metrics_exporter: clickhousemetricswrite
latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s]
dimensions_cache_size: 100000
dimensions:
- name: service.namespace
default: default
- name: deployment.environment
default: default
- name: signoz.collector.id
aggregation_temporality: AGGREGATION_TEMPORALITY_DELTA
extensions:
health_check:
endpoint: 0.0.0.0:13133
zpages:
endpoint: localhost:55679
pprof:
endpoint: localhost:1777
exporters:
clickhousetraces:
datasource: tcp://localhost:9000/signoz_traces?password=password
use_new_schema: true
clickhousemetricswrite:
endpoint: tcp://localhost:9000/signoz_metrics?password=password
timeout: 15s
resource_to_telemetry_conversion:
enabled: true
clickhouselogsexporter:
dsn: tcp://localhost:9000/signoz_logs?password=password
timeout: 10s
use_new_schema: true
metadataexporter:
dsn: tcp://localhost:9000/signoz_metadata?password=password
timeout: 10s
tenant_id: default
cache:
provider: in_memory
service:
telemetry:
logs:
encoding: json
metrics:
address: 0.0.0.0:8888
extensions: [health_check, zpages, pprof]
pipelines:
traces:
receivers: [otlp, jaeger]
processors: [signozspanmetrics/delta, batch]
exporters: [clickhousetraces, metadataexporter]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [clickhousemetricswrite, metadataexporter]
logs:
receivers: [otlp, httplogreceiver/heroku, httplogreceiver/json]
processors: [batch]
exporters: [clickhouselogsexporter, metadataexporter]
EOF'
- Create a
opamp.yaml
file in the/opt/signoz-otel-collector/conf
directory:
sudo bash -c 'cat <<EOF > /opt/signoz-otel-collector/conf/opamp.yaml
server_endpoint: ws://127.0.0.1:4320/v1/opamp
EOF'
- Create the SigNoz Otel Collector systemd service:
sudo bash -c 'cat <<EOF > /etc/systemd/system/signoz-otel-collector.service
[Unit]
Description=SigNoz OTel Collector
Documentation=https://signoz.io/docs
After=clickhouse-server.service
[Service]
User=signoz
Group=signoz
Type=simple
KillMode=mixed
Restart=on-failure
WorkingDirectory=/opt/signoz-otel-collector
ExecStart=/opt/signoz-otel-collector/bin/signoz-otel-collector --config=/opt/signoz-otel-collector/conf/config.yaml --manager-config=/opt/signoz-otel-collector/conf/opamp.yaml --copy-path=/var/lib/signoz-otel-collector/config.yaml
[Install]
WantedBy=multi-user.target
EOF'
- Reload the systemd daemon and start the SigNoz Otel Collector service:
sudo systemctl daemon-reload
sudo systemctl start signoz-otel-collector.service
Verify the installation
- Check the status of the signoz otel collector service:
sudo systemctl status signoz-otel-collector.service
- If the services are running, you should see the following output:
signoz-otel-collector.service - SigNoz OTel Collector
Loaded: loaded (/etc/systemd/system/signoz-otel-collector.service; enabled; preset: enabled)
Active: active (running) since ...
- (Optional) Check the logs of the signoz otel collector service:
sudo journalctl -u signoz-otel-collector.service -f
Test the installation
- Run the following command to check the health of signoz:
curl -X GET http://localhost:8080/api/v1/health
- If the installation is successful, you should see the following output:
{"status":"ok"}
✅ Info
By default, retention period is set to 7 days for logs and traces, and 30 days for metrics. To change this, navigate to the General tab on the Settings page of SigNoz UI.
For more details, refer to https://signoz.io/docs/userguide/retention-period.