In this post, I’ll show you how to perform a simple installation of Elasticsearch and Kibana on the same VM. Of course, you can create both in Kubernetes, for example, but I prefer to do it in a VM.

Elasticsearch:
Elasticsearch is a distributed search and analytics engine designed to store, search, and analyze large volumes of data in near real-time. It powers fast full-text search, structured queries, and analytics across diverse datasets.

Kibana:
Kibana is a data visualization and exploration tool for Elasticsearch. It allows users to create dashboards, charts, and reports, making it easy to analyze and monitor data stored in Elasticsearch.

The VM I created has 2Gb of memory (Ubuntu), less than that and it gets very busy. It has a fixed IP of 172.21.5.161 and I created a DNS entry for elasticsearch.devops-db.internal.

Installation is super simple. First, I do some basic installations on the VM, as I prefer.

apt update 
apt upgrade -y

apt install -y wget net-tools lsb-release vim curl less iputils-ping ssh dnsutils jq apt-transport-https


wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

sudo apt update
sudo apt install elasticsearch -y

sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

After a while, pay close attention to a “Security Autoconfiguration Information” message. It will contain some important information, most notably the elastic (root) user password.

--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : 3G+oOq0T_9tZ7oZM32d-

If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <token-here>'
after creating an enrollment token on your existing cluster.

You can complete the following actions at any time:

Reset the password of the elastic built-in superuser with
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.

Generate an enrollment token for Kibana instances with
 '/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.

Generate an enrollment token for Elasticsearch nodes with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.

Perfect, in our case the elastic user has the password: 3G+oOq0T_9tZ7oZM32d-

After a few seconds/minutes, we will validate if the elastic is up.

curl -k -u elastic:3G+oOq0T_9tZ7oZM32d- https://elasticsearch.devops-db.internal:9200
{
  "name" : "srv-infrastructure-elastic-master-01",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Pc_atE3YQwezsZ6CUMfvXA",
  "version" : {
    "number" : "8.19.4",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "aa0a7826e719b392e7782716b323c4fb8fa3b392",
    "build_date" : "2025-09-16T22:06:03.940754111Z",
    "build_snapshot" : false,
    "lucene_version" : "9.12.2",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

Before installing Kibana, let’s “create” a password for the user we’ll be using. The kibana_system user is already created automatically when you install Elasticsearch.

curl -k -u elastic:3G+oOq0T_9tZ7oZM32d- -X PUT "https://elasticsearch.devops-db.internal:9200/_security/user/kibana_system/_password" -H "Content-Type: application/json" -d '{
  "password": "1234qwer"
}'

All set, let’s install Kibana:

apt -y install kibana

When the installation is finished, we have to configure kibana, don’t forget that Elasticsearch is using SSL (https) but I don’t have a valid certificate, so I have to use elasticsearch.ssl.verificationMode: none.

vi /etc/kibana/kibana.yml


server.host: "0.0.0.0"
server.port: 5601
elasticsearch.hosts: ["https://elasticsearch.devops-db.internal:9200"]
elasticsearch.ssl.verificationMode: none
elasticsearch.username: "kibana_system"
elasticsearch.password: "1234qwer"

All set, start the service:

sudo systemctl enable kibana
sudo systemctl restart kibana
sudo systemctl status kibana

If you want, follow the log..

sudo journalctl -u kibana -n 50 --no-pager

Giving Elasticsearch as a Kibana has many more configurations, including security, but I leave here only the simple installation.

https://elasticsearch.devops-db.internal:5601

IIn my case, I logged in with the elastic user (root) and immediately created a user for myself. For this lab I’m using the OSS/Basic version and LDAP authentication on those versions doesn’t work: https://www.elastic.co/subscriptions


Stack Management / User / Create:

In the next posts I will show 2 examples of how to export logs to Elastic using Filebeat.