Send Email Alerts Using Elastic Stack

In this article, we will learn How to Send Email Alerts Using Elastic Stack. Monitoring your system’s health is very important in today’s IT environments. Elastic Stack, commonly known as ELK Stack, helps collect and visualize logs and metrics. But sometimes, visual dashboards aren’t enough we need alerts when something goes wrong. That’s where email alerts come in. Today we’ll learn how to send email notifications using connectors in the Elastic Stack when critical alerts like high CPU or memory usage are triggered.

Prerequisites

  • AWS Account with Ubuntu 24.04 LTS EC2 Instance.
  • At least 2 CPU cores and 4 GB of RAM for smooth performance.
  • Docker and Docker Compose installed.

Step #1:Install Docker and Docker Compose

First update the package list.

sudo apt update
Send Email Alerts Using Elastic Stack 1

If Docker and Docker Compose are not already installed, you can install them using the following command.

sudo apt install -y docker.io docker-compose
Send Email Alerts Using Elastic Stack 2
  • docker.io: Installs the Docker engine.
  • docker-compose: Installs Docker Compose for managing multi-container applications.

Step #2:Create Docker Compose File

Create a Docker Compose YAML file to define the Elastic Stack services.

sudo nano docker-compose.yml
Send Email Alerts Using Elastic Stack 3

Paste the following content into the file.

version: "3"
services:
  elasticsearch:
    image: "docker.elastic.co/elasticsearch/elasticsearch:8.17.2"
    environment:
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      - "discovery.type=single-node"
    ports:
      - "9200:9200"
    volumes:
      - elasticsearch_data:/usr/share/elasticsearch/data

  kibana:
    image: "docker.elastic.co/kibana/kibana:8.17.2"
    ports:
      - "5601:5601"

  filebeat:
    image: "docker.elastic.co/beats/filebeat:8.17.2"
    user: root
    volumes:
      - /MY_WORKDIR/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
      - /var/lib/docker:/var/lib/docker:ro
      - /var/run/docker.sock:/var/run/docker.sock

  metricbeat:
    image: docker.elastic.co/beats/metricbeat:8.17.2
    user: root
    volumes:
      - /MY_WORKDIR/metricbeat.yml:/usr/share/metricbeat/metricbeat.yml:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - /sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro
      - /proc:/hostfs/proc:ro
      - /:/hostfs:ro

volumes:
  elasticsearch_data:
Observability Dashboard Overview in Elastic Stack (Logs and Infrastructure) – Part 2 4

Step #3:Prepare Configuration Files For Beats

Create a working directory for your configuration files.

sudo mkdir /MY_WORKDIR
Send Email Alerts Using Elastic Stack 4

Inside the directory create a filebeat.yml file.

sudo nano /MY_WORKDIR/filebeat.yml
Send Email Alerts Using Elastic Stack 5

Paste the following config in it.

filebeat.inputs:
- type: container
  paths:
    - '/var/lib/docker/containers/*/*.log'

processors:
- add_docker_metadata:
    host: "unix:///var/run/docker.sock"

- decode_json_fields:
    fields: ["message"]
    target: "json"
    overwrite_keys: true

output.elasticsearch:
  hosts: ["elasticsearch:9200"]
  indices:
    - index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"

logging.json: true
logging.metrics.enabled: false
Observability Dashboard Overview in Elastic Stack (Logs and Infrastructure) – Part 2 7

Create a metricbeat.yml file.

sudo nano /MY_WORKDIR/metricbeat.yml
Send Email Alerts Using Elastic Stack 6

Paste the following config in it.

metricbeat.modules:
- module: system
  metricsets:
    - cpu
    - memory
    - network
    - filesystem
    - process
    - process_summary
  enabled: true
  period: 10s
  processes: ['.*']
  hostfs: "/hostfs"

- module: docker
  metricsets:
    - container
    - cpu
    - diskio
    - healthcheck
    - info
    - memory
    - network
  hosts: ["unix:///var/run/docker.sock"]
  period: 10s
  enabled: true

output.elasticsearch:
  hosts: ["http://elasticsearch:9200"]

monitoring:
  enabled: true
Observability Dashboard Overview in Elastic Stack (Logs and Infrastructure) – Part 2 9

Step #4:Start the Elastic Stack using Docker Composer

Start the services using Docker Compose.

sudo docker-compose up -d
Send Email Alerts Using Elastic Stack 7

Verify that the containers are running.

sudo docker ps -a
Observability Dashboard Overview in Elastic Stack (Logs and Infrastructure) – Part 2 11

Step #5:Set Password for Elastic User

Elasticsearch 8.x enables security by default. Reset the password for the elastic user using following command.

sudo docker exec -it ubuntu_elasticsearch_1 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i
Send Email Alerts Using Elastic Stack 8

Update the Filebeat configuration to include the Elasticsearch credentials.

sudo nano /MY_WORKDIR/filebeat.yml
Send Email Alerts Using Elastic Stack 9

Add the username and password fields under output.elasticsearch.

output.elasticsearch:
  hosts: ["elasticsearch:9200"]
  username: "elastic"
  password: "devopshint"
  indices:
    - index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
Observability Dashboard Overview in Elastic Stack (Logs and Infrastructure) – Part 2 14

Save and exit the file.

Update the Metricbeat configuration to include the Elasticsearch credentials.

sudo nano /MY_WORKDIR/metricbeat.yml
Send Email Alerts Using Elastic Stack 10

Add the username and password fields under output.elasticsearch.

output.elasticsearch:
  hosts: ["elasticsearch:9200"]
  username: "elastic"
  password: "devopshint"
Observability Dashboard Overview in Elastic Stack (Logs and Infrastructure) – Part 2 16

Restart the containers. First shut down the containers.

sudo docker-compose down
Send Email Alerts Using Elastic Stack 11

Then start them again.

sudo docker-compose up -d
Send Email Alerts Using Elastic Stack 12

Step #6:Secure Kibana with Service Token

To securely connect Kibana to Elasticsearch, generate a service account token.

curl -u elastic:devopshint -X POST "http://localhost:9200/_security/service/elastic/kibana/credential/token/my-token"; echo
Send Email Alerts Using Elastic Stack 13

Save the value field from the response.

Generate an encryption key.

openssl rand -hex 32
Send Email Alerts Using Elastic Stack 14

Save the generated encryption key.

Update the docker-compose.yml file to include the service account token and encryption keys.

sudo nano docker-compose.yml
Send Email Alerts Using Elastic Stack 15

Add the following environment variables to the kibana service.

kibana:
  image: "docker.elastic.co/kibana/kibana:8.17.2"
  ports:
    - "5601:5601"
  environment:
    - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    - ELASTICSEARCH_SERVICEACCOUNTTOKEN=AAEAAWVsYXN0aWMva2liYW5hL215LXRva2VuOnEwby1YUGlyU1JhZnFxaEozS012aVE
    - XPACK_SECURITY_ENCRYPTIONKEY=2145ee3c3cc4e7853c77e96a7cd7e0fe102ea5ffa948e368132b525af018db0c
    - XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=2145ee3c3cc4e7853c77e96a7cd7e0fe102ea5ffa948e368132b525af018db0c
    - XPACK_REPORTING_ENCRYPTIONKEY=2145ee3c3cc4e7853c77e96a7cd7e0fe102ea5ffa948e368132b525af018db0c
    - XPACK_SECURITY_SECURE_COOKIES=true
  depends_on:
    - elasticsearch
Observability Dashboard Overview in Elastic Stack (Logs and Infrastructure) – Part 2 23

Save and exit the file.

Restart the services.

sudo docker-compose down
Send Email Alerts Using Elastic Stack 16
sudo docker-compose up -d
Send Email Alerts Using Elastic Stack 17

Verify that the containers are running.

sudo docker ps -a
Observability Dashboard Overview in Elastic Stack (Logs and Infrastructure) – Part 2 26

Step #7:Access Kibana Observability

Open your browser and navigate to http://<EC2-PUBLIC-IP>:5601. Log in using the elastic username and the password you set earlier.

Send Email Alerts Using Elastic Stack 18

Click on Explore on my own.

Observability Dashboard Overview in Elastic Stack (Logs and Infrastructure) – Part 2 28

Go to Observability.

Send Email Alerts Using Elastic Stack 19

You will see the Overview there.

Send Email Alerts Using Elastic Stack 20

Now lets go to Infrastructure Inventory to see the metrics.

Send Email Alerts Using Elastic Stack 21

Step #8:Create a Email Alert

Next lets set up alert for that go to Alerts as shown below and click on Manage Rules.

Send Email Alerts Using Elastic Stack 22

Click on Create rule to create a rule for alert.

Send Email Alerts Using Elastic Stack 23

We will create a Metric threshold rule.

Send Email Alerts Using Elastic Stack 24

Write a Name for your rule. As conditions as

  • WHEN Average
  • OF system.cpu.total.pct
  • IS ABOVE 0.9 %

And click on Save.

Send Email Alerts Using Elastic Stack 25

You can see the rule created successfully. Now go back to Alerts.

Send Email Alerts Using Elastic Stack 26

As you can see below alert is triggered.

Send Email Alerts Using Elastic Stack 27

Now go to Stack Management Under the Kibana Section.

Send Email Alerts Using Elastic Stack 28

Go to the Connectors.

Send Email Alerts Using Elastic Stack 29

Click on Create connector.

Send Email Alerts Using Elastic Stack 30

To set up an Email connector you need to upgrade your license so go to Manage license.

Send Email Alerts Using Elastic Stack 31

Select Start trial to Start a 30-day trial.

Send Email Alerts Using Elastic Stack 32

Click on Start my trial.

Send Email Alerts Using Elastic Stack 33

Now you can see Our Trial license is active.

Send Email Alerts Using Elastic Stack 34

Now again go back to connectors and select Email as a connector.

Send Email Alerts Using Elastic Stack 35

Enter the relative fields as shown below,

  • Connector name: Alert Email Connector
  • Sender: sender-email-id
  • Service: Gmail
  • Username: your-email-id
  • Password: App Password (Generated from Google Account)

Click on Save & test.

Send Email Alerts Using Elastic Stack 36

Now enter the email id in To field where you want to send the email. Then Subject like High CPU Usage and Message along with it CRITICAL: High CPU Usage !! and click on Run to Run the test.

Send Email Alerts Using Elastic Stack 37

In Results you can see the Test is successful message

Send Email Alerts Using Elastic Stack 38

Now check your Gmail to see if it has send an alert.

Send Email Alerts Using Elastic Stack 39

And you can see the alert below.

Send Email Alerts Using Elastic Stack 40

Conclusion:

Using email alerts in Elastic Stack helps you stay informed when system issues happen even if you’re not watching dashboards 24/7. With the help of connectors, it’s easy to configure alert rules that notify you immediately via email. Whether it’s high CPU usage or low disk space, timely alerts can help prevent downtime and fix problems faster. By setting up connectors and alert rules, you’ve made your monitoring setup much more powerful and proactive.

Related Articles:

Observability Dashboard Overview in Elastic Stack

Observability Dashboard Overview in Elastic Stack (Logs and Infrastructure) – Part 2

Send Java Gradle App Logs to Elastic Stack

Reference:

Elastic Stack official page

Prasad Hole

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Share via
Copy link
Powered by Social Snap