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