Installing the Wazuh indexer step-by-step
Install and configure the Wazuh indexer as a single-node or multi-node cluster by following these step-by-step instructions. The Wazuh indexer is a scalable search and analytics engine. It stores and indexes the events that the Wazuh manager forwards, so you can analyze them in near real time.
Before you start, choose a name and an IP address for every Wazuh indexer, manager, and dashboard node. You create the certificates and passwords for all nodes on the first Wazuh indexer node. Then you copy one archive to each of the other nodes. The archive also holds each Wazuh manager node's agent listener and Wazuh manager API certificates, issued from the same root CA.
For an all-in-one deployment, see All-in-one deployment before you start.
The installation process is divided into four stages:
Note
Run every command on these pages in a root shell, for example sudo -i, and from the same working directory, for example /root. Paste the wazuh_generate_password function and the command after it into the same shell.
Wazuh indexer nodes installation
Run this stage on every Wazuh indexer node. Install the package only on the first node at this stage, as it generates the certificates and passwords for the entire deployment. Install the package on the remaining nodes later, in Deploying certificates, after you place the root CA and the passwords. A node that installs the package with nothing placed creates its own root CA and passwords. Its certificate then does not chain to the cluster's root CA, and placing files afterwards does not reconfigure it.
Installing package dependencies
Run the following command to install the following packages if missing:
# apt-get install -y iproute2 openssl passwd
# yum install -y iproute openssl shadow-utils
# dnf install -y iproute openssl shadow-utils
Adding the Wazuh repository
Install the following packages if missing:
# apt-get update && apt-get install -y gnupg apt-transport-https curl
Install the GPG key:
# curl -s https://packages-staging.xdrsiem.wazuh.info/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg
Add the repository:
# echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages-staging.xdrsiem.wazuh.info/pre-release/5.x/apt/ unstable main" | tee /etc/apt/sources.list.d/wazuh.list
Update the package information:
# apt-get update
Import the GPG key:
# rpm --import https://packages-staging.xdrsiem.wazuh.info/key/GPG-KEY-WAZUH
Add the repository:
# echo -e '[wazuh]\ngpgcheck=1\ngpgkey=https://packages-staging.xdrsiem.wazuh.info/key/GPG-KEY-WAZUH\nenabled=1\nname=EL-$releasever - Wazuh\nbaseurl=https://packages-staging.xdrsiem.wazuh.info/pre-release/5.x/yum/\nprotect=1' | tee /etc/yum.repos.d/wazuh.repo
Import the GPG key:
# rpm --import https://packages-staging.xdrsiem.wazuh.info/key/GPG-KEY-WAZUH
Add the repository:
# echo -e '[wazuh]\ngpgcheck=1\ngpgkey=https://packages-staging.xdrsiem.wazuh.info/key/GPG-KEY-WAZUH\nenabled=1\nname=EL-$releasever - Wazuh\nbaseurl=https://packages-staging.xdrsiem.wazuh.info/pre-release/5.x/yum/\npriority=1' | tee /etc/yum.repos.d/wazuh.repo
Creating the passwords
On the first Wazuh indexer node only, create the five deployment passwords before installing the package. The Wazuh indexer uses three of these passwords instead of generating its own. In the next stage, all five passwords are packaged into wazuh-certificates.tar for use on the other nodes. The assisted method uses wazuh-install-files.tar instead.
Create the five passwords in
credentials.env, in your working directory. A password must be 12 to 64 characters long and use onlyA-Z a-z 0-9 . , _ + : @ % ^ = ~ -. It must contain at least one uppercase letter, one lowercase letter, one digit, and one symbol. You can choose them yourself, or run the following command to generate them with this function:wazuh_generate_password() { local password while :; do password=$(LC_ALL=C tr -dc 'A-Za-z0-9.,_+:@%^=~-' < /dev/urandom | head -c 32) [[ $password =~ [A-Z] && $password =~ [a-z] && $password =~ [0-9] && $password =~ [.,_+:@%^=~-] ]] && break done printf '%s\n' "$password" }
# install -m 0600 /dev/null credentials.env # cat > credentials.env <<EOF WAZUH_INDEXER_ADMIN_PASSWORD="$(wazuh_generate_password)" WAZUH_INDEXER_KIBANASERVER_PASSWORD="$(wazuh_generate_password)" WAZUH_INDEXER_MANAGER_PASSWORD="$(wazuh_generate_password)" WAZUH_MANAGER_API_PASSWORD="$(wazuh_generate_password)" WAZUH_MANAGER_WUI_PASSWORD="$(wazuh_generate_password)" EOF
WAZUH_MANAGER_API_PASSWORDis the password of thewazuhuser of the Wazuh manager API, the one you use in API requests.WAZUH_MANAGER_WUI_PASSWORDis the password ofwazuh-internal-client, the user that the Wazuh dashboard uses.Copy the Wazuh indexer passwords from
credentials.envto/etc/wazuh-indexer/local.envon this node. The following commands create the directory and file with the required permissions, then copy only the Wazuh indexer credentials:# install -d -m 0750 /etc/wazuh-indexer # install -m 0600 /dev/null /etc/wazuh-indexer/local.env # grep '^WAZUH_INDEXER_' credentials.env > /etc/wazuh-indexer/local.env
Important
Keep credentials.env in the working directory until the installation is finished. It is the only file that holds all five passwords.
Installing the Wazuh indexer
Important
Install the package only on the first Wazuh indexer node. On all other Wazuh indexer nodes, install the package after completing the Deploying certificates step and after placing the deployment passwords and certificates.
On the first Wazuh indexer node, install the Wazuh indexer package:
# apt-get -y install wazuh-indexer=5.0.0-1
# yum -y install wazuh-indexer-5.0.0-1
# dnf -y install wazuh-indexer-5.0.0-1
Release candidate packages carry the version of the final release,
5.0.0-1. Only their file names show the RC stage, for examplewazuh-indexer_5.0.0-rc2_amd64.deb, sodpkg -landrpm -qshow5.0.0-1.
Checking the passwords
On the first Wazuh indexer node, the package uses the three passwords created in Creating the passwords instead of generating new ones. The package publishes the passwords of its three users in /etc/wazuh-indexer/export/credentials.env, readable by root only. Run the following command to verify that each variable contains the value you created. The output shows three lines, one per variable.
# grep '^WAZUH_INDEXER_' /etc/wazuh-indexer/export/credentials.env | sort -u
The other Wazuh indexer nodes get the same three passwords from wazuh-certificates.tar in Deploying certificates, before their package is installed. So they never generate their own. Keep the file until all components are installed and running, then remove it as described in Securing your Wazuh installation.
Passwords are generated once. Reinstalling, restarting, or upgrading the Wazuh indexer does not change them, and neither does removing this file. To change a password after installation, see the password management documentation.
Certificate creation
Wazuh uses certificates to establish confidentiality and encrypt communications between its central components. The Wazuh indexer package issues its own certificates from a root certificate authority (CA) it creates in /etc/wazuh-indexer/ca, and ships the certificates tool in /usr/share/wazuh-indexer/tools/.
Run this stage once, on the first Wazuh indexer node, after its package is installed. It creates the certificates of every node and packs them, with the passwords every node needs, into wazuh-certificates.tar.
For an all-in-one installation, skip this stage and Deploying certificates. The Wazuh indexer package already issued its certificates.
Generating the SSL certificates
Edit
/usr/share/wazuh-indexer/tools/config.ymland replace the node names and IP values with the corresponding names and IP addresses. You need to do this for all Wazuh manager, Wazuh indexer, and Wazuh dashboard nodes. Add as many node fields as needed. If there is more than one Wazuh manager node, each one must have anode_type:nodes: # Wazuh indexer nodes indexer: - name: indexer ip: "<indexer-node-ip>" #- name: indexer-2 # ip: "<indexer-node-ip>" #- name: indexer-3 # ip: "<indexer-node-ip>" # Wazuh manager nodes # If there is more than one Wazuh manager # node, each one must have a node_type manager: - name: manager ip: "<wazuh-manager-ip>" # node_type: master #- name: manager-2 # ip: "<wazuh-manager-ip>" # node_type: worker #- name: manager-3 # ip: "<wazuh-manager-ip>" # node_type: worker # Wazuh dashboard nodes dashboard: - name: dashboard ip: "<dashboard-node-ip>" # ip and dns both accept a list, for a node reachable at more than one address. # Every item reaches the certificate of the node; the first one is the address # the components are configured with. #- name: manager-2 # ip: # - "<wazuh-manager-ip>" # - "<wazuh-manager-second-ip>" # dns: # - "<wazuh-manager-name>" # Optional. Only for a proxy that TERMINATES the agents' TLS session: it issues the # certificate that proxy serves, from the same root-ca the agents pin. A layer 4 # passthrough load balancer terminates nothing and needs --agent-san with its # address instead, so that address reaches the listener certificate of every # manager node. #load_balancer: # - name: lb # dns: # - "<load-balancer-name>" # ip: # - "<load-balancer-ip>"
For a Wazuh manager cluster, uncomment
node_typein every manager entry. Setmasteron one node andworkeron all others. For a single Wazuh manager, leavenode_typecommented. When two components share a host, give both entries that host's IP address.Each node needs an
ip, adns, or both, and each accepts a list. The node's certificate includes its name and everyipanddnsvalue. For a Wazuh manager node, this applies to its agent listener and Wazuh manager API certificates. If a node has only adnsname, use that name wherever these sections ask for its address, for examplenetwork.host.The shipped file also has commented examples for a node with several addresses and for a TLS-terminating load balancer. For more about certificates, see Certificates deployment.
Run the tool to create the certificates.
WAZUH_CA_DIRmakes it sign them with the root CA that the package created in/etc/wazuh-indexer/ca. Without it, the tool creates a second root CA, which the Wazuh manager and Wazuh dashboard don't trust. The tool writes the certificates towazuh-certificates/, beside it:# WAZUH_CA_DIR=/etc/wazuh-indexer/ca bash /usr/share/wazuh-indexer/tools/wazuh-certs-tool.sh -A
To add another address that agents use to reach a Wazuh manager, add
-as <ALTERNATE_ADDRESS>to the command. Examples are a public IP, a NAT address, a load balancer, or the address of each Wazuh manager worker node that agents will use. Each-astakes one address. To add several, repeat it, for example-as 203.0.113.10 -as wazuh.example.com. Pass every address in the same run, because the certificate holds only the-asvalues of that run.Note
The root CA private key,
root-ca.key, stays in/etc/wazuh-indexer/caon this node and is not inwazuh-certificates.tar. Back up/etc/wazuh-indexer/ca: you need it to add nodes or renew certificates.
Adding the passwords
Add the five passwords from Creating the passwords to the certificates. Each Wazuh manager node reads its Wazuh indexer password and two Wazuh manager API passwords from
/etc/wazuh-manager/local.env. You write that file in Deploying certificates and passwords. The Wazuh dashboard receivesWAZUH_MANAGER_WUI_PASSWORDin the same archive:# install -m 0600 credentials.env /usr/share/wazuh-indexer/tools/wazuh-certificates/credentials.env
Packing and copying the archive
Compress all the necessary files and make the archive readable by
rootonly:# tar -cvf ./wazuh-certificates.tar -C /usr/share/wazuh-indexer/tools/wazuh-certificates/ . # chmod 600 ./wazuh-certificates.tar # rm -rf /usr/share/wazuh-indexer/tools/wazuh-certificates
Copy
wazuh-certificates.tarto the working directory of each remaining Wazuh indexer, manager, and dashboard node. Transfer it asroot, or stage it as your login user with permissions set to0600and remove it after use. For example, to copy it withscp, run the following commands on this node. Replace<USER>with a login user on this node,<REMOTE_USER>with one on the other node, and<NODE_IP>with the other node's IP address.<USER>must be able to sign in to the other node over SSH as<REMOTE_USER>. The first connection asks you to confirm the host key.# install -m 0600 -o <USER> ./wazuh-certificates.tar /home/<USER>/ # sudo -u <USER> scp /home/<USER>/wazuh-certificates.tar <REMOTE_USER>@<NODE_IP>: # rm -f /home/<USER>/wazuh-certificates.tar
If the nodes cannot sign in to each other, replace the
scpline with the following command. Run it on a workstation that can sign in to both nodes, before you run thermline. Replace<FIRST_NODE_IP>with this node's IP address.$ scp -3 <USER>@<FIRST_NODE_IP>:/home/<USER>/wazuh-certificates.tar <REMOTE_USER>@<NODE_IP>:
Then run the following command on the other node, from its working directory:
# install -m 0600 /home/<REMOTE_USER>/wazuh-certificates.tar ./ && rm -f /home/<REMOTE_USER>/wazuh-certificates.tar
Important
The wazuh-certificates.tar holds the private key of every node, admin-key.pem included, and all five passwords of the deployment. Each node extracts only what it needs. Remove the archive from every node once that node is installed, as each section describes.
Wazuh indexer nodes configuration
Follow these steps on every Wazuh indexer node.
Deploying certificates
Note
Make sure that a copy of
wazuh-certificates.tar, created in the previous stage of the installation process, is placed in your working directory.
Run the following commands in the directory that holds
wazuh-certificates.tar. Replace<INDEXER_NODE_NAME>with this node's name inconfig.yml. For example,indexeron the first node andindexer-2on the second node:# NODE_NAME=<INDEXER_NODE_NAME> # umask 022 # mkdir wazuh-certificates # tar -xf wazuh-certificates.tar -C wazuh-certificates
On every Wazuh indexer node except the first, place the passwords and the root CA certificate of the deployment. The first node already has both, and its
/etc/wazuh-indexer/caalso holds the root CA private key, which must stay there:# install -d -m 0750 /etc/wazuh-indexer /etc/wazuh-indexer/ca # install -m 0644 wazuh-certificates/root-ca.pem /etc/wazuh-indexer/ca/root-ca.pem # install -m 0600 /dev/null /etc/wazuh-indexer/local.env # grep '^WAZUH_INDEXER_' wazuh-certificates/credentials.env > /etc/wazuh-indexer/local.env
Place this node's certificates using the filenames expected by the package. On the first node, they replace the certificates that the package created:
# install -d -m 0750 /etc/wazuh-indexer # install -d -m 0750 /etc/wazuh-indexer/certs # install -m 0400 wazuh-certificates/$NODE_NAME.pem /etc/wazuh-indexer/certs/indexer.pem # install -m 0400 wazuh-certificates/$NODE_NAME-key.pem /etc/wazuh-indexer/certs/indexer-key.pem # install -m 0400 wazuh-certificates/admin.pem /etc/wazuh-indexer/certs/admin.pem # install -m 0400 wazuh-certificates/admin-key.pem /etc/wazuh-indexer/certs/admin-key.pem # rm -rf wazuh-certificates
On the first node, give the certificates the owners and modes the package uses. The directory must stay owned by
root, or the Wazuh indexer refuses to start withUNSAFE /etc/wazuh-indexer/certs. On the other nodes, the package does this when you install it in step 4.# chown root:wazuh-indexer /etc/wazuh-indexer/certs && chmod 0750 /etc/wazuh-indexer/certs # chown root:wazuh-indexer /etc/wazuh-indexer/certs/indexer.pem /etc/wazuh-indexer/certs/indexer-key.pem # chmod 0640 /etc/wazuh-indexer/certs/indexer.pem /etc/wazuh-indexer/certs/indexer-key.pem # chown root:root /etc/wazuh-indexer/certs/admin.pem /etc/wazuh-indexer/certs/admin-key.pem # chmod 0600 /etc/wazuh-indexer/certs/admin.pem /etc/wazuh-indexer/certs/admin-key.pem
The certificates tool issues each certificate with the node name from
config.ymlas CN. Run the following command to display the certificate subject in the format thatplugins.security.nodes_dnexpects:# openssl x509 -noout -subject -nameopt RFC2253 -in /etc/wazuh-indexer/certs/indexer.pem
On every Wazuh indexer node except the first, install the Wazuh indexer package now. The package uses the passwords and certificates you placed and generates nothing. It gives the certificates to the
wazuh-indexergroup and keeps the admin certificate pair owned byroot.# apt-get -y install wazuh-indexer=5.0.0-1
# yum -y install wazuh-indexer-5.0.0-1
# dnf -y install wazuh-indexer-5.0.0-1
Recommended action: If no other Wazuh components will be installed on this node, run the following command to remove the
wazuh-certificates.tarfile.# rm -f ./wazuh-certificates.tar
Configuring the Wazuh indexer
Edit
/etc/wazuh-indexer/opensearch.ymland replace the following values:The package ships a working single-node configuration: one node named
node-1, listening on all interfaces. On a single node, these values are optional. Setnetwork.hostto listen on one address only, and if you rename the node, changecluster.initial_cluster_manager_nodesto match. A multi-node cluster needs every value, on every node.network.host: Sets the address of this node for both HTTP and transport traffic. The node will bind to this address and will also use it as its publish address. Accepts an IP address or a hostname.Use the same node address set in
config.ymlto create the SSL certificates.node.name: Name of the Wazuh indexer node as defined in theconfig.ymlfile. For example,indexer. The package setsnode-1on every node, so change it on every node to that node's name inconfig.yml. List the same names incluster.initial_cluster_manager_nodes.cluster.initial_cluster_manager_nodes: List of the names of the master-eligible nodes. Use names defined in theconfig.ymlfile, for example,indexer. For a multi-node cluster, uncomment thenode-2andnode-3lines, change the names, or add more lines, according to yourconfig.ymldefinitions. For high availability, use at least three master-eligible nodes. With two, the cluster can stop when one of them stops.cluster.initial_cluster_manager_nodes: - "indexer" #- "node-2" #- "node-3"
discovery.seed_hosts: List of the addresses of the master-eligible nodes. Each element can be either an IP address or a hostname. You may leave this setting commented if you are configuring the Wazuh indexer as a single-node. For multi-node configurations, uncomment this setting and set the addresses of each master-eligible node.discovery.seed_hosts: # - "<WAZUH_INDEXER_1_ADDRESS>" # - "<WAZUH_INDEXER_2_ADDRESS>" # - "<WAZUH_INDEXER_3_ADDRESS>"
plugins.security.nodes_dn: the Distinguished Names (DNs) of the certificates of all Wazuh indexer nodes. The package writes this node's DN, so a single node needs no change. In a multi-node cluster, each node knows only its own DN. On every node, list one line per Wazuh indexer node inconfig.yml. On the first node, also replace the line with the host name that the package wrote. Each entry isC=US,L=California,O=Wazuh,OU=Wazuh,CN=followed by the node's name inconfig.yml. Keep the fields in this order, because the Security plugin compares each entry as an exact string. Theopensslcommand in Deploying certificates prints this node's subject in that form, so you can check it:plugins.security.nodes_dn: - "C=US,L=California,O=Wazuh,OU=Wazuh,CN=<NODE_1_NAME>" - "C=US,L=California,O=Wazuh,OU=Wazuh,CN=<NODE_2_NAME>"
Note
Firewalls can block communication between Wazuh components on different hosts. Refer to the Required ports section and make sure the necessary ports are open.
Set the heap size in
/etc/wazuh-indexer/jvm.optionsbefore you start the service. The package default is 1 GB. With 1 GB, the Wazuh dashboard can fail its first start withcircuit_breaking_exception. Use half of the system RAM when the Wazuh indexer runs alone on the host. Use a quarter when the Wazuh manager or Wazuh dashboard also runs there. For example, use-Xms4gand-Xmx4gon a dedicated node with 8 GB of RAM or a shared host with 16 GB. On an all-in-one host with 8 GB, use-Xms2gand-Xmx2g. For a size that is not a whole number of gigabytes, use megabytes, for example-Xms1536mand-Xmx1536m:-Xms4g -Xmx4g
Where the total heap space:
-Xms4gsets the initial size to 4 GB of RAM.-Xmx4gsets the maximum size to 4 GB of RAM.
Note
To prevent performance degradation due to JVM heap resizing at runtime, the minimum (Xms) and maximum (Xmx) size values must be the same.
Starting the service
Enable and start the Wazuh indexer service. The package neither enables nor starts it, and it has already reloaded systemd:
# systemctl enable --now wazuh-indexer
Choose one option according to the operating system used.
RPM-based operating system:
# chkconfig --add wazuh-indexer # service wazuh-indexer start
Debian-based operating system:
# update-rc.d wazuh-indexer defaults 95 10 # service wazuh-indexer start
Repeat this stage of the installation process for every Wazuh indexer node in your multi-node cluster. Then proceed with initializing your single-node or multi-node cluster in the next stage.
Before each start, the Wazuh indexer checks its passwords, certificates, owners, and modes. If one is wrong, it does not start, and it writes one line per problem, starting with MISSING, INVALID, or UNSAFE, to its journal. To read them:
# journalctl -u wazuh-indexer --no-pager | grep -E 'MISSING|INVALID|UNSAFE|resolve-credentials'
To run the same checks without starting the service:
# /usr/share/wazuh-indexer/bin/resolve-credentials.sh --check
Cluster initialization
The final stage of installing the Wazuh indexer single-node or multi-node cluster consists of running the security admin script.
Note
You only have to initialize the cluster once, there is no need to run this command on every node.
Before you initialize the cluster, check on every Wazuh indexer node that its certificate chains to the root CA of the deployment:
# openssl verify -CAfile /etc/wazuh-indexer/certs/root-ca.pem /etc/wazuh-indexer/certs/indexer.pem
The command prints /etc/wazuh-indexer/certs/indexer.pem: OK. If it prints verification failed, the certificate comes from another root CA. Create the certificates again as described in Generating the SSL certificates.
Run the Wazuh indexer
indexer-security-init.shscript on any Wazuh indexer node to load the new certificate information and start the single-node or multi-node cluster:# /usr/share/wazuh-indexer/bin/indexer-security-init.shRun the command as root. It loads the passwords in
/etc/wazuh-indexer/export/credentials.envof the node where it runs. Any node works, because you placed the first node's passwords on the other nodes before installing them.The command output looks similar to this:
Security Admin v7 Will connect to 192.168.33.135:9200 ... done Connected as "C=US,L=California,O=Wazuh,OU=Wazuh,CN=admin" OpenSearch Version: 3.6.0 Contacting opensearch cluster 'opensearch' and wait for YELLOW clusterstate ... Clustername: wazuh-cluster Clusterstate: GREEN Number of nodes: 1 Number of data nodes: 1 .opendistro_security index does not exists, attempt to create it ... done (0-all replicas) Populate config from /etc/wazuh-indexer/opensearch-security/ Will update '/config' with /etc/wazuh-indexer/opensearch-security/config.yml SUCC: Configuration for 'config' created or updated Will update '/roles' with /etc/wazuh-indexer/opensearch-security/roles.yml SUCC: Configuration for 'roles' created or updated Will update '/rolesmapping' with /etc/wazuh-indexer/opensearch-security/roles_mapping.yml SUCC: Configuration for 'rolesmapping' created or updated Will update '/internalusers' with /etc/wazuh-indexer/opensearch-security/internal_users.yml SUCC: Configuration for 'internalusers' created or updated Will update '/actiongroups' with /etc/wazuh-indexer/opensearch-security/action_groups.yml SUCC: Configuration for 'actiongroups' created or updated Will update '/tenants' with /etc/wazuh-indexer/opensearch-security/tenants.yml SUCC: Configuration for 'tenants' created or updated Will update '/nodesdn' with /etc/wazuh-indexer/opensearch-security/nodes_dn.yml SUCC: Configuration for 'nodesdn' created or updated Will update '/audit' with /etc/wazuh-indexer/opensearch-security/audit.yml SUCC: Configuration for 'audit' created or updated Will update '/allowlist' with /etc/wazuh-indexer/opensearch-security/allowlist.yml SUCC: Configuration for 'allowlist' created or updated SUCC: Expected 9 config types for node {"updated_config_types":["allowlist","tenants","rolesmapping","nodesdn","audit","roles","actiongroups","config","internalusers"],"updated_config_size":9,"message":null} is 9 Done with successThe output includes the line
Done with success. The lastSUCCline can end withdue to: null. Lines withjava.nio.channels.ClosedSelectorException, or a line ending inhttpclient-dispatch-2 ERROR null, can followDone with success. None of these lines means that the initialization failed.
Testing the cluster installation
On the node where you ran
indexer-security-init.sh, run the following command to print the Wazuh indexer admin user password. Every Wazuh indexer node holds the same value.# grep '^WAZUH_INDEXER_ADMIN_PASSWORD=' /etc/wazuh-indexer/export/credentials.env | cut -d= -f2-
Run the following commands to confirm that the installation is successful. Replace
<WAZUH_INDEXER_ADDRESS>with the IP address of the Wazuh indexer. When prompted, enter the password that step 1 printed:# curl --cacert /etc/wazuh-indexer/export/ca.pem -u admin https://<WAZUH_INDEXER_ADDRESS>:9200
The output is similar to the following. The
build_typevalue isrpmordeb, depending on the package.{ "name" : "indexer", "cluster_name" : "wazuh-cluster", "cluster_uuid" : "89AmEmB8QImyIJFFxkYaBQ", "version" : { "distribution" : "opensearch", "number" : "3.6.0", "build_type" : "rpm", "build_hash" : "1b0a897cd71105595b450b48b591581865f8b46b", "build_date" : "2026-10-01T01:51:00.589932681Z", "build_snapshot" : false, "lucene_version" : "10.4.0", "minimum_wire_compatibility_version" : "2.19.0", "minimum_index_compatibility_version" : "2.0.0" }, "tagline" : "The OpenSearch Project: https://opensearch.org/" }Run the following command to check if the cluster is working correctly. Replace
<WAZUH_INDEXER_ADDRESS>with the IP address of the Wazuh indexer. When prompted, enter the password that step 1 printed:# curl --cacert /etc/wazuh-indexer/export/ca.pem -u admin https://<WAZUH_INDEXER_ADDRESS>:9200/_cat/nodes?v
The command produces output similar to the following:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role node.roles cluster_manager name 192.168.33.135 30 57 16 1.50 1.30 0.69 dimr cluster_manager,data,ingest,remote_cluster_client * indexer
Run the following command to confirm that every node joined and that the cluster status is green:
# curl --cacert /etc/wazuh-indexer/export/ca.pem -u admin https://<WAZUH_INDEXER_ADDRESS>:9200/_cluster/health?pretty
The output shows
"status" : "green"andnumber_of_nodesequal to your number of Wazuh indexer nodes.
Disable Wazuh updates
After all Wazuh components on this host are installed, disable the Wazuh repository to prevent accidental upgrades. If you will also install another component on this host, do this after installing it:
# sed -i "s/^deb /#deb /" /etc/apt/sources.list.d/wazuh.list
# apt update
# sed -i "s/^enabled=1/enabled=0/" /etc/yum.repos.d/wazuh.repo
# sed -i "s/^enabled=1/enabled=0/" /etc/yum.repos.d/wazuh.repo
Next steps
The Wazuh indexer is now successfully installed on your single-node or multi-node cluster, and you can proceed with installing the Wazuh manager. To perform this action, see the Installing the Wazuh manager step-by-step section.
A Wazuh manager on the first Wazuh indexer node gets the Wazuh indexer password and certificates from /etc/wazuh-indexer/export when you install it. Its two Wazuh manager API passwords come from local.env, as the Wazuh manager section describes. A Wazuh dashboard on a host with the Wazuh indexer and Wazuh manager gets its passwords and certificates from their export directories. Install the Wazuh indexer first, and keep /etc/wazuh-indexer/export until the Wazuh manager and Wazuh dashboard on the host are installed. On other hosts, they take them from wazuh-certificates.tar, as their sections describe.
To uninstall the Wazuh indexer, see Uninstall the Wazuh indexer.