HeartBeat - Envio de alerta de UPTIME por email

Olá a todos!
É uma grande satisfação fazer parte deste fórum.

Configurei o heartbeat com a imagem docker.elastic.co/beats/heartbeat:7.5.1 rodando em um container em docker, onde verifico o UPTIME de algumas URLs. Somente verificação simples de UP ou DOWN.

Eu verifico do uptime pelo dashboard padrão do kibana 7.4, onde consigo monitorar em tempo real as URLS sem problemas.

Minha grande questão está no envio de alertas por email!
Eu utilizo o ElastAlert para enviar alertas de erros das minhas aplicações e agora configurei para enviar alertas de UP e DOWN do monitoramento do HeartBeat. Através da configuração de regras do ElastAlert, escrevi um filtro que me traz a query relativa ao UPTIME da URL. Se o filtro for verdadeiro, ele envia o alerta para o email configurado.

A grande dúvida:
De acordo com as configurações na pasta de regras e na pasta de configurações de frequência, um email é enviado corretamente quando o filtro encontra o status em DOWN ou UP, no entanto, esse email é enviado a cada 1 minuto, gerando um grande volume de alertas caso o sistema fique indisponível por vários minutos.

Eu preciso que ele envie um alerta apenas da primeira verificação do filtro (DOWN ou UP). Ou Seja, que eu reeba um email de DOWN quando a chamada não receber resposta e um email de UP quando a chamada receber a primeira resposta. Não consegui configurar de acordo com minha necessidade. Tentei de várias maneiras e todas sem sucesso.

Agradeço qualquer informação!

Seguem arquivos e configurações que eu utilizo:

Configuração Heartbeat:

heartbeat.yml

heartbeat.monitors:
- type: http
  name: ...
  enable: true
  schedule: '@every 60s'
  urls: ["..."]
  ipv4: true
  ipv6: true
  mode: any

setup.template.name: "heartbeat-%{[agent.version]}"
setup.template.pattern: "heartbeat-%{[agent.version]}-*"
setup.template.settings:
  index.number_of_shards: 1
  index.codec: best_compression

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
  - add_observer_metadata: ~

logging.level: debug
logging.to_files: true
logging.files:

output.elasticsearch:
  hosts: ["localhost:9211"]
  username: "elastic"
  password: "changeme"

setup.kibana:
  host: "localhost:5611"

docker-compose.yml

version: '3'
services:

  heartbeat:
        image: docker.elastic.co/beats/heartbeat:7.5.1
        container_name: heartbeat
        user: root
        entrypoint: "heartbeat -e -strict.perms=false"
        #command: --strict.perms=false -e
        environment:
        - setup.kibana.host=localhost:5611
        - output.elasticsearch.hosts=["localhost:9211"]
        - TZ=Etc/GMT+3
        volumes:
        - ~/heartbeat.yml:/usr/share/heartbeat/heartbeat.yml

Configuração ElastAlert:

regra_down.yml

name: "### DOWN ###"
type: frequancy
index: heartbeat-*
num_events: 1
timeframe:
 hours: 4

filter:
- query:
   query_string:
           query: "monitor.name:exemplo AND monitor.status:down"

alert:
- "email"

email:
 - "meuemail@gmail.com"

smtp_host: "smtp.gmail.com"
smtp_port: 465
smtp_ssl: true
from_addr: "meuemail@gmail.com"
smtp_auth_file: "/opt/elastalert/smtp_auth_user.yaml"

regra_up.yml

name: "### UP ###"
type: frequancy
index: heartbeat-*
num_events: 1
timeframe:
 hours: 4

filter:
- query:
   query_string:
           query: "monitor.name:exemplo AND monitor.status:up"

alert:
- "email"

email:
 - "meuemail@gmail.com"

smtp_host: "smtp.gmail.com"
smtp_port: 465
smtp_ssl: true
from_addr: "meuemail@gmail.com"
smtp_auth_file: "/opt/elastalert/smtp_auth_user.yaml"

elastalert.yaml

rules_folder: rules
run_every:
  minutes: 1
buffer_time:
  minutes: 60
es_host: localhost
es_port: 9211
es_username: elastic
es_password: changeme
writeback_index: elastalert_status
alert_time_limit:
  days: 2

docker-compose.yaml

version: '3'
services:

  elastalert:
    image: bitsensor/elastalert:3.0.0-beta.0
    container_name: alerts_test
    restart: always
    volumes:
    - ./config/smtp_auth_user.yaml:/opt/elastalert/smtp_auth_user.yaml
    - ./config/elastalert.yaml:/opt/elastalert/config.yaml:ro
    - ./config/config.json:/opt/elastalert-server/config/config.json:ro
    - ./rules:/opt/elastalert/rules:rw
    - ./elastalert/rule_templates:/opt/elastalert/rule_templates:ro
    - /etc/timezone:/etc/timezone:ro
    ports:
    - 3030:3030
    environment:
    - TZ=America/Sao_Paulo

Hi! Unfortunately ElasticAlert isn't a product of Elastic's so I can't speak to its usage.

Good news however, our upcoming 7.7 release will support alerts as a built-in feature in kibana, though you for your use case you may need a commercial license for some functionality.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.