Elastic Stack (cluster)
Deploy Elastic Stack, a unified observability platform for collecting, indexing, searching, and visualizing logs and operational data. It combines Elasticsearch, Logstash, and Kibana to ingest, analyze, and visualize operational data for monitoring, troubleshooting, and security analysis.
The app deploys a multi-node Elastic Stack cluster using an automated deployment script configured by Akamai.
1. Deploy Elastic Stack
Larger clusters may take longer to provision.
Follow the deployment instructions from the Get started section to configure the app, deploy it, and verify software installation.
For information on the app-specific configurations, see the Configuration options section.
Base distribution
- Supported distribution: Ubuntu 24.04 LTS
Configuration options
Configure the required options to deploy your instance. For additional customization, add advanced options.
The table maps the Cloud Manager UI fields to their corresponding API/CLI keys (stackscript_data) required for automated deployments.
StackScript ID: 1966222
| UI field | API/CLI key | Description |
|---|---|---|
| Required options | ||
| Linode API token | token_password | Applies to a custom domain. The Linode API token if you want to use Linode's DNS Manager to manage DNS records for your custom domain. It's also required to deploy additional Linode instances as part of this cluster. Follow Manage personal access tokens to get your token on your account with Read/Write access to Domains and Linodes.
|
| Email address (for the Let's Encrypt SSL certificate) | soa_email_address | The email used to receive notifications about the renewal of the Let's Encrypt SSL certificate. |
| Limited sudo user | user_name | Your preferred username for the limited sudo user, entered without any capital letters, spaces, or special characters. When adding a limited sudo user, the user is created with a strong generated password for your new Linode instance, and the account is assigned to the sudo group, which provides elevated permissions when running commands with the sudo prefix.Note: For easier and more secure access with the sudo user, add an account SSH key for the Cloud Manager user during deployment and select that user as an |
| SSL Information | sslheader | Set to Yes by default. This requires providing details for a self-signed TLS/SSL certificate, like country, town, organization, and email address. |
| Country or region | country_name | Applies to a TLS/SSL certificate. The country or region for you or your organization. When using the API/CLI, specify it as a two-letter ISO country or region code. |
| State or province | state_or_province_name | Applies to a TLS/SSL certificate. The state or province for you or your organization. |
| Locality | locality_name | Applies to a TLS/SSL certificate. The town or other locality for you or your organization. |
| Organization | organization_name | Applies to a TLS/SSL certificate. The name of your organization. |
| Email address | email_address | Applies to a TLS/SSL certificate. The email address you want to use for your certificate file. This email address may receive notifications about the state of your certificate, including when it's expired. |
| CA Common Name | ca_common_name | Applies to a TLS/SSL certificate. The common name for the self-signed Certificate Authority (CA). |
| Advanced options | ||
| Disable root access over SSH | disable_root | Applies to a limited sudo user. To block the root user from logging in over SSH, select Yes. Defaults to No. Note: When you disable the root user from logging in over SSH and don't provide a valid Account SSH Key assigned to the |
| Subdomain | subdomain | Applies to a custom domain. The subdomain you want to use, like blog for blog.example.com. Use it only if you specify a Domain. |
| Domain | domain | Applies to a custom domain. The domain name you want to use, like example.com. Use it only if you specify a Linode API token. |
| Cluster Settings | clusterheader | Set to Yes by default. This is to provide details for your cluster settings, like its name, size, and more. |
| Cluster Name | cluster_name | Applies to cluster settings. A descriptive name for your cluster. |
| Kibana Size | cluster_size | Applies to cluster settings. A single Kibana instance created with Let’s Encrypt certificates. Defaults to 1. It can't be changed. Note: To choose the Kibana instance, you first need to select a deployment region and then a plan for your Linode instance. |
| Elasticsearch Cluster Size | elasticsearch_cluster_size | Applies to cluster settings. The total number of nodes in your Elasticsearch cluster. Possible values are:
|
| Logstash Cluster Size | logstash_cluster_size | Applies to cluster settings. The total number of nodes in your Logstash cluster. Possible values are:
|
| Elasticsearch Instance Type | elasticsearch_cluster_type | Applies to cluster settings. The plan type for your Elasticsearch cluster. Possible values are:
|
| Logstash Instance Type | logstash_cluster_type | Applies to cluster settings. The plan type for your Logstash cluster. Possible values are:
|
| Filebeat IP addresses | beats_allow | Applies to cluster settings. Filebeat IP addresses allowed to access Logstash. If you have Filebeat agents already installed, you can provide their IP addresses for an allowlist. The IP addresses must be comma-separated. |
| Logstash username | logstash_ingest_username | Applies to cluster settings. A Logstash username to be created to access the specified index. When it's created, you can begin ingesting logs after deployment. |
| Elasticsearch index | elasticsearch_index_name | Applies to cluster settings. A name for the Elasticsearch index to be created for log ingestion. This lets you start ingesting logs. Edit the index name for your specific use case. For example, if you have a WordPress application you want to perform log aggregation for, the index name wordpress-logs would be appropriate. |
Notes:
- After the app deployment completes, the password for your limited sudo user is generated and stored in the
.credentialsfile in the home directory, along with application-specific passwords. Log in to your instance asrootthrough the Lish console or SSH, then runcat /home/$USERNAME/.credentialsto view its contents.- You can automatically configure a custom domain (optional) during deployment. To do that:
- First, configure your domain to use Linode’s name servers via your registrar. See Configure your domain's authoritative name servers for details.
- Once you complete that, specify the Linode API token, subdomain, and domain for the app in Cloud Manager or via API/CLI/Terraform.
Use API, CLI, or Terraform
In addition to deploying the app to a new Linode instance via Cloud Manager, you can also use the Linode API, CLI, or Terraform. When running the operation, you need to provide the StackScript ID, supported Linux distribution, and app-specific fields along with the standard Linode deployment configurations.
Note: Generate a personal access token to authenticate your API, CLI, or Terraform requests.
curl --location 'https://api.linode.com/v4/linode/instances' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer abc123def456hij789klm' \
--data-raw '{
"region": "us-east",
"type": "g6-standard-2",
"image": "linode/ubuntu24.04",
"label": "my-elastic-search-cluster-one-click-app",
"root_pass": "@C0mpl3x#P@ssw0rd",
"stackscript_id": 1966222,
"stackscript_data": {
"token_password": "abc123def456hij789klm",
"soa_email_address": "jsmith@example.com",
"user_name": "jsmith",
"country_name": "US",
"state_or_province_name": "Massachusetts",
"locality_name": "Cambridge",
"organization_name": "Akamai Technologies",
"email_address": "jsmith-other@example.com",
"ca_common_name": "Elasticsearch CA"
}
}'linode-cli linodes create \
--region us-east \
--type g6-standard-2 \
--label my-elastic-search-cluster-one-click-app \
--image linode/ubuntu24.04 \
--root_pass @C0mpl3x#P@ssw0rd \
--stackscript_id 1966222 \
--stackscript_data '{"token_password": "abc123def456hij789klm", "soa_email_address": "jsmith@example.com", "user_name": "jsmith", "country_name": "US", "state_or_province_name": "Massachusetts", "locality_name": "Cambridge", "organization_name": "Akamai Technologies", "email_address": "jsmith-other@example.com", "ca_common_name": "Elasticsearch CA"}'resource "linode_instance" "my-linode" {
region = "us-east"
type = "g6-standard-2"
label = "my-elastic-search-cluster-one-click-app"
image = "linode/ubuntu24.04"
root_pass = "@C0mpl3x#P@ssw0rd"
stackscript_id = 1966222
stackscript_data = {
"token_password" = "abc123def456hij789klm"
"soa_email_address" = "jsmith@example.com"
"user_name" = "jsmith"
"country_name" = "US"
"state_or_province_name" = "Massachusetts"
"locality_name" = "Cambridge"
"organization_name" = "Akamai Technologies"
"email_address" = "jsmith-other@example.com"
"ca_common_name" = "Elasticsearch CA"
}
}2. Access Elastic Stack
Once the Elastic Stack cluster is deployed, log in to it using your browser.
-
Log in to the provisioner node as your limited sudo user by running
ssh USER@IP_ADDRESS. ReplaceUSERwith the sudo username you created, andIP_ADDRESSwith the instance’s IPv4 address.Note: Your provisioner node is the first Linode created in your cluster and is also the instance running Kibana. To identify the node in your list of Linodes, look for the node appended with the name kibana. For example,
kibana-1a2bc34d5. -
Open the
.credentialsfile with thesudo cat /home/USER/.credentialscommand. ReplaceUSERwith your sudo username. -
In the
.credentialsfile, locate the Kibana URL. After pasting the URL into your browser, you're redirected to the Elastic login page. -
Provide
elasticas the username along with the password retrieved from the.credentialsfile.A successful login redirects you to the homepage. From there, you can add integrations, visualizations, and make other configuration changes.
Configure Filebeat (optional)
If you already have Filebeat on your system, follow these steps to configure it:
-
Create a backup of your
/etc/filebeat/filebeat.ymlconfiguration.cp /etc/filebeat/filebeat.yml{,.bak} -
Update your Filebeat inputs.
filebeat.inputs: # Each - is an input. Most options can be set at the input level, so # you can use different inputs for various configurations. # Below are the input-specific configurations. # filestream is an input for collecting log messages from files. - type: filestream # Unique ID among all inputs, an ID is required. id: web-01 # Change to true to enable this input configuration. #enabled: false enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - /var/log/apache2/access.logIn this example, the
idmust be unique to the instance so you know the source of the log. Ideally, this should be the instance’s hostname. This example uses the valueweb-01. Updatepathsto the log that you want to send to Logstash. -
While in
/etc/filebeat/filebeat.yml, update the Filebeat output directive.output.logstash: # Logstash hosts hosts: ["logstash-1.example.com:5044", "logstash-2.example.com:5044"] loadbalance: true # List of root certificates for HTTPS server verifications ssl.certificate_authorities: ["/etc/filebeat/certs/ca.pem"]The
hostsparam can be the IP addresses of your Logstash host or an FQDN. In this example,logstash-1.example.comandlogstash-2.example.comare added to the/etc/hostsfile. -
Add a Certificate Authority (CA) certificate by adding the contents of
ca.crtto your/etc/filebeat/certs/ca.pemfile.To get your
ca.crt, open a separate terminal session and log in to your Kibana node. Navigate to the/etc/kibana/certs/cadirectory, and view the file contents with thecatcommand.cd /etc/kibana/certs/ca sudo cat ca.crt -
Copy the file contents and add it to your
ca.pemfile on your Filebeat system. -
Restart the Filebeat service.
systemctl start filebeat systemctl enable filebeatOnce complete, you should be able to start ingesting logs into your cluster using the index you created.
Additional resources
For more information about the installed packages, see their official documentation.
Note that we can't vouch for the accuracy or timeliness of externally hosted resources.
Updated about 11 hours ago
