Deploying QuestDB on Azure

Quick reference

ComponentRecommendedNotes
InstanceD4s_v5 or E8s_v54-8 vCPUs, 16-64 GiB RAM
StoragePremium SSD v2, 200+ GiB16000 IOPS / 1000 MBps
File systemzfs with lz4Or ext4 if compression not needed
Ports9000, 8812, 9009, 9003Restrict to known IPs only

Infrastructure

Plan your infrastructure before launching. This section covers instance types, storage, and networking requirements.

Instance sizing

WorkloadInstancevCPUsRAMUse case
DevelopmentD2s_v528 GiBTesting, small datasets
Production (starter)D4s_v5416 GiBLight ingestion, moderate queries
Production (standard)E8s_v5864 GiBHigh ingestion, complex queries
Production (heavy)E16s_v516128 GiBHeavy workloads, large datasets

Understanding Azure instance names:

LetterMeaningRecommendation
DGeneral purposeGood starting point
EMemory optimizedBetter for large datasets
sPremium storage capableRequired for QuestDB
aAMD EPYC processorSimilar performance, often cheaper
pARM architectureAvoid - limited optimization support

Always choose instances with s in the name for Premium SSD support.

ARM instances:

Azure ARM instances (Cobalt, Ampere) are not recommended. QuestDB's JIT compilation and SIMD optimizations are limited on ARM. Use x86_64 instances.

Storage

Premium SSD v2 (recommended):

WorkloadSizeIOPSThroughput
Development50 GiB3000125 MBps
Production200+ GiB160001000 MBps
High I/O500+ GiB16000+1000+ MBps

Premium SSD v2 lets you provision IOPS and throughput independently of size. Separate your OS disk (30 GiB) from your data disk.

note

Premium SSD v2 throughput is limited by VM size. Check your instance's maximum disk throughput in the Azure documentation before provisioning.

Premium SSD (alternative):

If Premium SSD v2 is unavailable, use Premium SSD with these minimum sizes:

TierSizeIOPSThroughputUse case
P20512 GiB2300150 MBpsDevelopment
P301 TiB5000200 MBpsLight production
P402 TiB7500250 MBpsProduction

Premium SSD ties performance to disk size - you may need to over-provision capacity to get required IOPS.

Redundancy considerations:

  • Premium SSD v2 only supports locally-redundant storage (LRS)
  • Premium SSD supports zone-redundant storage (ZRS)
  • For LRS disks, take regular ZRS snapshots or use QuestDB Enterprise replication

File system:

Use zfs with lz4 compression to reduce storage costs. If you don't need compression, ext4 or xfs offer slightly better performance.

Unsupported storage:

  • Azure NetApp Files - Not supported as primary storage (NFS latency too high)
  • blobfuse2 - Not supported for database workloads
  • Blob Storage - Supported for Enterprise replication only, not primary storage

Networking

Network Security Group (NSG) rules:

PortProtocolSourcePurpose
22TCPYour IPSSH access
9000TCPYour IP / VNetWeb Console & REST API
8812TCPYour IP / VNetPostgreSQL wire protocol
9009TCPApplication serversInfluxDB line protocol
9003TCPMonitoring serversHealth check & Prometheus
warning

Never set source to * or Any for ports 9000, 8812, or 9009. Restrict access to known IP ranges or use Azure Bastion for secure access.

VNet recommendations:

  • Deploy QuestDB in a private subnet
  • Use Azure Bastion or a jump box for SSH access
  • Use Private Endpoints for Blob Storage (Enterprise replication)
  • Consider proximity placement groups for low-latency application access

Deployment

Deploy QuestDB on an Azure Virtual Machine.

Prerequisites

Create the VM

  1. In the Azure Portal, navigate to Virtual Machines
  2. Click CreateAzure virtual machine
  3. Configure basics:
    • Select or create a Resource group
    • Enter a Virtual machine name
    • Select your Region and Availability zone
    • Choose Ubuntu 24.04 LTS for the image
The Create Instance dialog on Microsoft Azure
Azure VM creation dialog
  1. Select your instance size (see Instance sizing)
  2. Configure SSH authentication:
    • Select SSH public key
    • Create a new key pair or use existing
SSH key configuration on Microsoft Azure
SSH key setup
  1. Click Review + create, then Create
  2. Download the private key when prompted
Deployment complete on Microsoft Azure
Deployment complete

Configure networking

  1. Go to your VM's Networking settings
  2. Click Add inbound port rule
  3. Add rules for QuestDB ports (see Networking):
    • Set Destination port ranges to 9000,8812,9003
    • Set Source to your IP range (not Any)
    • Set Protocol to TCP
    • Name the rule questdb
Network security group rules for QuestDB
NSG rules configured
warning

Only add port 9009 if you need ILP ingestion, and restrict the source to your application servers.

Install QuestDB

  1. Connect via SSH:
chmod 400 ~/Downloads/your_key.pem
ssh -i ~/Downloads/your_key.pem azureuser@<your-vm-ip>
  1. Download and start QuestDB:
wget https://github.com/questdb/questdb/releases/download/9.3.1/questdb-9.3.1-rt-linux-x86-64.tar.gz
tar xzf questdb-9.3.1-rt-linux-x86-64.tar.gz
cd questdb-9.3.1-rt-linux-x86-64/bin
./questdb.sh start
  1. Access the Web Console at http://<your-vm-ip>:9000
QuestDB Web Console running on Azure
Web Console ready

For production deployments, use systemd to manage the QuestDB service.


Security

Change default credentials

Update credentials immediately after deployment.

Web Console and REST API - edit conf/server.conf:

http.user=your_username
http.password=your_secure_password

PostgreSQL - edit conf/server.conf:

pg.user=your_username
pg.password=your_secure_password

InfluxDB line protocol - edit conf/auth.json. See ILP authentication.

Restart after changes:

./questdb.sh stop
./questdb.sh start

Disable unused interfaces

Reduce attack surface by disabling protocols you don't use:

conf/server.conf
pg.enabled=false           # Disable PostgreSQL
line.tcp.enabled=false # Disable ILP
http.enabled=false # Disable Web Console & REST API
http.security.readonly=true # Or make HTTP read-only

Operations

Upgrading

  1. Stop QuestDB:

    ./questdb.sh stop
  2. Back up your data directory

  3. Download and extract the new version:

wget https://github.com/questdb/questdb/releases/download/9.3.1/questdb-9.3.1-rt-linux-x86-64.tar.gz
tar xzf questdb-9.3.1-rt-linux-x86-64.tar.gz
  1. Start the new version:
    cd questdb-*/bin
    ./questdb.sh start

Monitoring

Health check:

curl http://localhost:9003/status

Prometheus metrics:

curl http://localhost:9003/metrics

Azure Monitor integration:

Use the Azure Monitor agent to collect:

  • VM metrics (CPU, memory, disk I/O)
  • QuestDB logs from the log/ directory
  • Custom metrics from the Prometheus endpoint

Enterprise on Azure

QuestDB Enterprise adds production features for Azure:

  • Blob Storage replication - Continuous backup for durability
  • Cold storage - Move old partitions to Blob Storage, query on-demand
  • High availability - Automatic failover across instances
  • EntraID SSO - Single sign-on with Microsoft Entra ID

For EntraID integration, see the Microsoft EntraID OIDC guide.

See Enterprise Quick Start for setup.