documentation/deployment/azure.md
import Screenshot from "@theme/Screenshot" import InterpolateReleaseData from "../../src/components/InterpolateReleaseData" import CodeBlock from "@theme/CodeBlock"
| Component | Recommended | Notes |
|---|---|---|
| Instance | D4s_v5 or E8s_v5 | 4-8 vCPUs, 16-64 GiB RAM |
| Storage | Premium SSD v2, 200+ GiB | 16000 IOPS / 1000 MBps |
| File system | zfs with lz4 | Or ext4 if compression not needed |
| Ports | 9000, 8812, 9009, 9003 | Restrict to known IPs only |
Plan your infrastructure before launching. This section covers instance types, storage, and networking requirements.
| Workload | Instance | vCPUs | RAM | Use case |
|---|---|---|---|---|
| Development | D2s_v5 | 2 | 8 GiB | Testing, small datasets |
| Production (starter) | D4s_v5 | 4 | 16 GiB | Light ingestion, moderate queries |
| Production (standard) | E8s_v5 | 8 | 64 GiB | High ingestion, complex queries |
| Production (heavy) | E16s_v5 | 16 | 128 GiB | Heavy workloads, large datasets |
Understanding Azure instance names:
| Letter | Meaning | Recommendation |
|---|---|---|
D | General purpose | Good starting point |
E | Memory optimized | Better for large datasets |
s | Premium storage capable | Required for QuestDB |
a | AMD EPYC processor | Similar performance, often cheaper |
p | ARM architecture | Avoid - 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.
Premium SSD v2 (recommended):
| Workload | Size | IOPS | Throughput |
|---|---|---|---|
| Development | 50 GiB | 3000 | 125 MBps |
| Production | 200+ GiB | 16000 | 1000 MBps |
| High I/O | 500+ GiB | 16000+ | 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:
| Tier | Size | IOPS | Throughput | Use case |
|---|---|---|---|---|
| P20 | 512 GiB | 2300 | 150 MBps | Development |
| P30 | 1 TiB | 5000 | 200 MBps | Light production |
| P40 | 2 TiB | 7500 | 250 MBps | Production |
Premium SSD ties performance to disk size - you may need to over-provision capacity to get required IOPS.
Redundancy considerations:
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:
Network Security Group (NSG) rules:
| Port | Protocol | Source | Purpose |
|---|---|---|---|
| 22 | TCP | Your IP | SSH access |
| 9000 | TCP | Your IP / VNet | Web Console & REST API |
| 8812 | TCP | Your IP / VNet | PostgreSQL wire protocol |
| 9009 | TCP | Application servers | InfluxDB line protocol |
| 9003 | TCP | Monitoring servers | Health 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 on an Azure Virtual Machine.
<Screenshot alt="The Create Instance dialog on Microsoft Azure" src="images/guides/microsoft-azure-ubuntu/create-vm.webp" width={450} title="Azure VM creation dialog" />
<Screenshot alt="SSH key configuration on Microsoft Azure" src="images/guides/microsoft-azure-ubuntu/ssh-setup.webp" width={450} title="SSH key setup" />
<Screenshot alt="Deployment complete on Microsoft Azure" src="images/guides/microsoft-azure-ubuntu/deployment-complete.webp" width={450} title="Deployment complete" />
9000,8812,9003Any)TCPquestdb<Screenshot alt="Network security group rules for QuestDB" src="images/guides/microsoft-azure-ubuntu/firewall-rules.webp" width={450} title="NSG rules configured" />
:::warning Only add port 9009 if you need ILP ingestion, and restrict the source to your application servers. :::
chmod 400 ~/Downloads/your_key.pem
ssh -i ~/Downloads/your_key.pem azureuser@<your-vm-ip>
<InterpolateReleaseData
renderText={(release) => (
<CodeBlock className="language-bash">
{wget https://github.com/questdb/questdb/releases/download/${release.name}/questdb-${release.name}-rt-linux-x86-64.tar.gz tar xzf questdb-${release.name}-rt-linux-x86-64.tar.gz cd questdb-${release.name}-rt-linux-x86-64/bin ./questdb.sh start}
</CodeBlock>
)}
/>
http://<your-vm-ip>:9000<Screenshot alt="QuestDB Web Console running on Azure" src="images/guides/microsoft-azure-ubuntu/web-console.webp" width={450} title="Web Console ready" />
For production deployments, use systemd to manage the QuestDB service.
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
Reduce attack surface by disabling protocols you don't use:
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
Stop QuestDB:
./questdb.sh stop
Back up your data directory
Download and extract the new version:
<InterpolateReleaseData
renderText={(release) => (
<CodeBlock className="language-bash">
{wget https://github.com/questdb/questdb/releases/download/${release.name}/questdb-${release.name}-rt-linux-x86-64.tar.gz tar xzf questdb-${release.name}-rt-linux-x86-64.tar.gz}
</CodeBlock>
)}
/>
cd questdb-*/bin
./questdb.sh start
Health check:
curl http://localhost:9003/status
Prometheus metrics:
curl http://localhost:9003/metrics
Azure Monitor integration:
Use the Azure Monitor agent to collect:
log/ directoryQuestDB Enterprise adds production features for Azure:
For EntraID integration, see the Microsoft EntraID OIDC guide.
See Enterprise Quick Start for setup.