Skip to main content
Version: 0.5.4

Graylog on Aruba Cloud

Deploy Graylog — centralized log management with search and alerting — on Aruba Cloud using Terraform and cloud-init. Deployed via Docker Compose with MongoDB and OpenSearch co-located on a single node.

Provider version: arubacloud/arubacloud ~> 0.5 | Terraform: ≥ 1.9


Introduction​

Graylog provides a powerful log aggregation platform with structured search, dashboards, alerting, and stream processing. It requires MongoDB (metadata) and OpenSearch (log index). This example provisions:

  • Graylog via the official Docker image
  • MongoDB 6 for configuration storage
  • OpenSearch 2 for log indexing and search
  • Web UI on port 9000, Syslog input on 1514, GELF input on 12201

Architecture Overview​


Infrastructure Created​

ResourceName patternDescription
arubacloud_projectgl-prodProject container
arubacloud_vpcgl-prod-vpcVirtual Private Cloud
arubacloud_subnetgl-prod-subnetBasic subnet
arubacloud_securitygroupgl-prod-vm-sgSecurity group
arubacloud_securityrulegl-prod-vm-sshSSH ingress
arubacloud_securityrulegl-prod-vm-webuiGraylog web UI TCP 9000
arubacloud_securityrulegl-prod-vm-syslogSyslog TCP/UDP 1514
arubacloud_securityrulegl-prod-vm-gelfGELF UDP 12201
arubacloud_elasticipgl-prod-vm-eipVM public IP
arubacloud_blockstoragegl-prod-boot100 GB boot disk (Performance)
arubacloud_keypairgl-prod-keypairSSH public key
arubacloud_cloudservergl-prod-vmCloudServer VM

Estimated Monthly Cost​

ResourceSpecEst. cost/mo
CloudServer VMCSO4A8 — 4 vCPU / 8 GB~€35
Boot disk100 GB Performance~€15
Elastic IP—~€3
Total~€53/mo

For production log volumes, upgrade to CSO8A16 (8 vCPU / 16 GB, ~€95/mo).


Requirements​

  • Terraform ≥ 1.9
  • ArubaCloud Terraform Provider ~> 0.5
  • An ArubaCloud account with OAuth2 API credentials
  • An SSH key pair

Variables​

Required​

VariableDescription
arubacloud_client_idArubaCloud OAuth2 client ID
arubacloud_client_secretArubaCloud OAuth2 client secret
ssh_public_keySSH public key content
graylog_admin_passwordGraylog admin password (min 8 chars)
graylog_secretGraylog password secret (min 16 chars — generate with pwgen -N 1 -s 96)

Optional​

VariableDefaultDescription
app_name"gl"Short name used in all resource names
environment"prod"Environment label
location"ITBG-Bergamo"ArubaCloud region
zone"ITBG-1"Availability zone
billing_period"Hour""Hour" or "Month"
vm_flavor"CSO4A8"CloudServer flavor
vm_image"LU22-001"Boot disk image (Ubuntu 22.04 LTS)
vm_disk_size_gb100Boot disk size in GB (min 50 GB)
ssh_cidr"0.0.0.0/0"CIDR for SSH
admin_cidr"0.0.0.0/0"CIDR for web UI port 9000
syslog_cidr"0.0.0.0/0"CIDR for syslog/GELF inputs
graylog_version"6"Graylog Docker image tag

Outputs​

OutputDescription
graylog_urlGraylog web UI URL
vm_public_ipPublic IP address of the VM
ssh_commandSSH command to connect to the VM
syslog_endpointSyslog TCP/UDP endpoint
gelf_endpointGELF UDP endpoint

Deployment Instructions​

1. Clone and navigate​

git clone https://github.com/arubacloud/terraform-arubacloud-examples.git
cd terraform-arubacloud-examples/graylog

2. Configure variables​

cp terraform.tfvars.example terraform.tfvars

Generate a strong secret:

pwgen -N 1 -s 96

3. Deploy​

terraform init
terraform plan
terraform apply

Bootstrap takes approximately 5–10 minutes (OpenSearch initialisation is the slowest step).

4. Access the UI​

Navigate to http://<IP>:9000 and log in as admin with your graylog_admin_password.

5. Configure an input​

In the web UI: System → Inputs → Launch new input. Select Syslog UDP and bind to port 1514.


Sending Logs​

# rsyslog: add to /etc/rsyslog.d/90-graylog.conf
*.* @<graylog-ip>:1514;RSYSLOG_SyslogProtocol23Format

# filebeat: in filebeat.yml
output.logstash:
hosts: ["<graylog-ip>:5044"]

References​