无法访问 elastalert 的警报部分内的数据
Unable to access data inside alert section of elastalert
我一直在尝试在我的 ELK 堆栈上设置 elastalert
监控。一开始我想设置一个简单的规则,如果文件系统上的任何磁盘使用率达到 80%,该规则将生成一个通知。该规则似乎工作正常,但在 alert
部分我无法将数据传递给 python 脚本。 alert
部分中未注释的命令给出以下错误
ERROR:root:Error while running alert command: Error formatting command: 'system.filesystem.mount_point'
错误。
这是我的规则文件。请原谅 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"]
一些观察:
在使用命令 python -m elastalert.test_rule rules/high_fs.yaml
测试规则文件时,我得到输出
Successfully loaded Metricbeat high FS percentage
Got 149161 hits from the last 1 day
Available terms in first hit:
tags
beat.hostname
beat.name
beat.version
type
@timestamp
system.filesystem.available
system.filesystem.files
system.filesystem.mount_point
system.filesystem.free_files
system.filesystem.free
system.filesystem.device_name
system.filesystem.used.bytes
system.filesystem.used.pct
system.filesystem.total
host
@version
metricset.rtt
metricset.name
metricset.module
我应该能够访问上述任何字段。当我 运行 这个规则使用 python -m elastalert.elastalert --verbose --rule rules/high_fs.yaml
时,屏幕上会打印一个列表
@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
我能够访问此列表中的所有键值对。列表之外的任何内容都会因 formatting
错误而失败。被困在这个问题上很久了。任何帮助表示赞赏。
更新: elastalert 的 github 存储库中针对相同问题的 reply 说某些查询类型不包含完整的字段数据。
虽然我不确定这是否是实现我正在寻找的目标的正确方法,但我能够使用规则类型 any
并编写我自己的过滤器来获得所需的输出。这是我的一个规则文件当前的样子。
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
希望对大家有所帮助。
我一直在尝试在我的 ELK 堆栈上设置 elastalert
监控。一开始我想设置一个简单的规则,如果文件系统上的任何磁盘使用率达到 80%,该规则将生成一个通知。该规则似乎工作正常,但在 alert
部分我无法将数据传递给 python 脚本。 alert
部分中未注释的命令给出以下错误
ERROR:root:Error while running alert command: Error formatting command: 'system.filesystem.mount_point'
错误。
这是我的规则文件。请原谅 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"]
一些观察:
在使用命令 python -m elastalert.test_rule rules/high_fs.yaml
测试规则文件时,我得到输出
Successfully loaded Metricbeat high FS percentage
Got 149161 hits from the last 1 day
Available terms in first hit:
tags
beat.hostname
beat.name
beat.version
type
@timestamp
system.filesystem.available
system.filesystem.files
system.filesystem.mount_point
system.filesystem.free_files
system.filesystem.free
system.filesystem.device_name
system.filesystem.used.bytes
system.filesystem.used.pct
system.filesystem.total
host
@version
metricset.rtt
metricset.name
metricset.module
我应该能够访问上述任何字段。当我 运行 这个规则使用 python -m elastalert.elastalert --verbose --rule rules/high_fs.yaml
时,屏幕上会打印一个列表
@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
我能够访问此列表中的所有键值对。列表之外的任何内容都会因 formatting
错误而失败。被困在这个问题上很久了。任何帮助表示赞赏。
更新: elastalert 的 github 存储库中针对相同问题的 reply 说某些查询类型不包含完整的字段数据。
虽然我不确定这是否是实现我正在寻找的目标的正确方法,但我能够使用规则类型 any
并编写我自己的过滤器来获得所需的输出。这是我的一个规则文件当前的样子。
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
希望对大家有所帮助。