2017-10-18 12 views
2

J'ai essayé de configurer la surveillance elastalert sur ma pile ELK. Pour le début je veux mettre en place une règle simple qui va générer une notification si n'importe quel disque sur le système de fichiers a atteint 80% d'utilisation. La règle semble fonctionner correctement mais dans la section alert je ne suis pas en mesure de transmettre les données au script python. La commande non commentée dans la section alert donne l'erreur suivanteImpossible d'accéder aux données dans la section d'alerte d'elastalert

ERROR:root:Error while running alert command: Error formatting command: 'system.filesystem.mount_point' erreur.

Voici mon fichier de règles. Veuillez excuser le formatage du yaml.

name: Metricbeat high FS percentage 
type: metric_aggregation 

es_host: localhost 
es_port: 9200 

index: metricbeat-* 

buffer_time: 
minutes: 1 

metric_agg_key: system.filesystem.used.pct 
metric_agg_type: max 
query_key: beat.name.keyword 
doc_type: metricsets 

bucket_interval: 
    minutes: 1 

realert: 
    minutes: 2 

sync_bucket_interval: true 
#allow_buffer_time_overlap: true 
#use_run_every_query_size: true 

max_threshold: 0.8 

filter: 
- query: 
    query_string: 
     query: "system.filesystem.device_name: dev" 
     analyze_wildcard: true 
- term: 
    metricset.name: filesystem 

# (Required) 
# The alert is use when a match is found 

alert: 
    - debug 
    - command 
command: ["/home/ubuntu/sendToSlack.py","beat-name","%(beat.name.keyword)s","used_pc","%(system.filesystem.used.pct_max)s","mount_point","%(system.filesystem.mount_point)s"] 
# command: ["/home/ubuntu/sendToSlack.py","--beat-name","{match[beat.name.keyword]}","--mount_point","{match[system.filesystem.mount_point]}"] 
# command: ["/home/ubuntu/sendToSlack.py","--beat-name","{match[beat][name]}","--mount_point","{match[system][filesystem][mount_point]}"] 
#pipe_match_json: true 
#- command: 
# command: ["/home/ubuntu/sendToSlack.py","%(system.filesystem.used.bytes)s"] 

Quelques observations: sur le test du fichier de règles en utilisant la commande python -m elastalert.test_rule rules/high_fs.yaml je reçois la sortie

Je devrais être en mesure d'accéder à des domaines mentionnés ci-dessus. Quand je lance cette règle à l'aide une liste est imprimée à l'écran

@timestamp: 2017-10-18T17:15:00Z 
beat.name.keyword: my_server_name 
num_hits: 98 
num_matches: 5 
system.filesystem.used.pct_max: 0.823400020599 

Je suis en mesure d'accéder à toutes les paires de valeurs clés dans cette liste. Tout ce qui est en dehors de la liste échoue avec l'erreur formatting. Été bloqué sur cela pour longtemps. Toute aide est appréciée.

Répondre

0

MISE À JOUR: Un reply pour le même problème sur le référentiel github d'elastalert indique que certains types de requête ne contiennent pas les données de champ complet. Bien que je ne suis pas sûr si c'est la bonne façon d'obtenir ce que je cherchais, mais j'ai été en mesure d'obtenir la sortie souhaitée en utilisant le type de règle any et en écrivant mes propres filtres. Voici comment se présente actuellement l'un de mes fichiers de règles.

name: High CPU percentage 
type: any 

es_host: localhost 
es_port: 9200 

index: consumer-* 
query_key: 
    - beat.name 

filter: 
- range: 
    system.cpu.total_norm_pct: 
     from: 0.95 
     to: 10.0 

realert: 
    minutes: 60 

alert: 
- command: 
    command: ["/home/ubuntu/slackScripts/sendCPUDetails.py","{match[beat][name]}","{match[system][cpu][total_norm_pct]}"] 
new_style_string_format: true 

Espérons que ça aide quelqu'un.