Grafana: 警报:Elasticsearch 支持

创建于 2016-08-24  ·  97评论  ·  资料来源: grafana/grafana

将前端数据源代码移植到后端 & Go。 包括从内部查询模型构建 ES 查询,并将 ES 响应解析为时间序列。

Grafana 内部查询模型示例:

Elastic query json model: 
{
  "bucketAggs": [
    {
      "field": "@timestamp",
      "id": "2",
      "settings": {
        "interval": "auto",
        "min_doc_count": 0,
        "trimEdges": 0
      },
      "type": "date_histogram"
    }
  ],
  "dsType": "elasticsearch",
  "metrics": [
    {
      "field": "@value",
      "id": "1",
      "meta": {},
      "settings": {},
      "type": "avg"
    }
  ],
  "refId": "A",
  "target": "",
  "timeField": "@timestamp"
}
arealerting aredatasource datasourcElasticsearch

最有用的评论

我刚刚完成了一个 PR #11380 来让 Grafana 支持警报 [Elasticsearch]

与一些早期实现相比,例如 #8943 、 #10343

  • 基于grafana-5.0.0
  • 源代码少于 1000 行(和第三个 lib [leibowitz/moment]~=1000 行,以及一些测试代码)
  • 代码逻辑与前面一致

这周我会继续完善这个PR,更全面的测试,更清晰的抽象模型。
我期待有人可以尝试使用此 PR 并对其进行改进:)

所有97条评论

由于#5948 已合并,此问题是否已关闭?

@luigiberrettini它没有合并到 master 只是到 alerting-elasticsearch 分支。 它远未完成。

不比石墨支撑更远;)
警报中缺少石墨查询功能:

  • 模板变量
  • 引用其他查询的函数(例如 asPercent)

嗨,在 4.0.0 交付(计划于 11 月)之后是否会提供完整的 elasticsearch 支持,因为我看到这个问题标有 4.1.0 里程碑?
如果是这样:4.1.0 计划何时交付?

4.1 还没有发布日期,但会猜测 1 月 / 2 月初。

Elasticsearch 警报可能不会进入 Grafana v4,我们尝试过(工作已经开始),但需要更多的工作才能完成,并且一些更高的优先级问题已将其从 v4 中排除

在这种情况下,是否可以根据组织首选项(或者甚至更好:组织内的个人用户级别定义)启用/禁用警报菜单项和面板选项卡?

这方面有任何进展吗? elasticsearch-alerting分支还活跃吗? 我想知道是否可以开始测试并提供反馈。

期待进入 4.2,这样我们就可以完全转向 grafana + elasticsearch(metricbeat)。

拥有此功能对我的公司来说将是一个巨大的胜利

@andytsnowden足以购买支持计划吗? https://grafana.net/support/plans :stuck_out_tongue_winking_eye:

我们希望有机会尽快继续这方面的工作。

也许很傻(请不要回答“是的,你是”)但是那种功能众筹呢? 肯定很多人会支持

这就是我下载这个工具的全部原因,希望能有弹性警报。

有一个分支至少适用于大多数查询。 但它有点过时了——你需要调整一些东西。

Von meinem Samsung Gerät gesendet。

-------- Ursprüngliche Nachricht --------
冯:wirecutter313 [email protected]
基准:30.01.2017 20:56 (GMT+01:00)
答:grafana/grafana [email protected]
抄送:"A. Binzxxxxxx" [email protected] , Manual [email protected]
Betreff:回复:[grafana/grafana] 警报:Elasticsearch 支持 (#5893)

这就是我下载这个工具的全部原因,希望能有弹性警报。


您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看,或将线程静音。

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/grafana/grafana","title ":"grafana/grafana","subtitle":"GitHub 存储库","main_image_url":" https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png " ,"avatar_image_url":" https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png ","action":{"name":"在GitHub中打开", "url":" https://github.com/grafana/grafana "}},"updates":{"snippets":[{"icon":"PERSON","message":" @wirecutter313 #5893:这就是我下载这个工具的全部原因,希望有弹性警报。"}],"action":{"name":"View Issue","url":" https://github.com/grafana /grafana/issues/5893#issuecomment -276172036"}}}

这是否很有可能成为 4.2.0 的标志? 在我们等待时尝试为警报部分提出临时替代方案。

它看起来不像那样。 据我们所知,没有人正在研究它,我们现在有很多事情要做。

真是太可惜了! 考虑使用 Graphite 作为后端,直到我们可以支持 ES。 但是试图了解在查询(以及警报)等方面的限制,而不是 ES

有没有人知道有什么方法可以在将 ES 作为数据源的同时向 Grafana 发送某种警报? 或者对于在 Grafana 之前也使用 Kibana 可视化数据的任何人,您是否知道在这方面发出警报的任何解决方案?

我们正在这个分支中研究它, https://github.com/grafana/grafana/tree/alerting-elasticsearch

查看实验分支。 你可能需要调整一些东西才能让它再次工作。

Von meinem Samsung Gerät gesendet。

-------- Ursprüngliche Nachricht --------
冯:亚历山大佩恩通知@ github.com
基准:22.02.2017 15:48 (GMT+01:00)
答:grafana/grafana [email protected]
抄送:"A. Binzxxxxxx" [email protected] , Manual [email protected]
Betreff:回复:[grafana/grafana] 警报:Elasticsearch 支持 (#5893)

有没有人知道有什么方法可以在将 ES 作为数据源的同时向 Grafana 发送某种警报? 或者对于在 Grafana 之前也使用 Kibana 可视化数据的任何人,您是否知道在这方面发出警报的任何解决方案?


您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看,或将线程静音。

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/grafana/grafana","title ":"grafana/grafana","subtitle":"GitHub 存储库","main_image_url":" https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png " ,"avatar_image_url":" https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png ","action":{"name":"在GitHub中打开", "url":" https://github.com/grafana/grafana "}},"updates":{"snippets":[{"icon":"PERSON","message":"@Alexander-Payne in # 5893:有没有人知道有什么方法可以在将 ES 作为数据源的情况下将某种警报发送到 Grafana 中?或者对于在 Grafana 之前也使用 Kibana 可视化数据的任何人,您是否知道在这方面发出警报的任何解决方案?"}],"action":{"name":"查看问题","url":" https://github.com/grafana/grafana/issues/5893#issuecomment -281689640"}}}

你对这件事的粗略估计是多少? 50%? 90%?

你好
我们对这个功能非常感兴趣。
有发布日期吗?

谢谢

为这个功能竖起大拇指,干得好!

感谢你们在这方面所做的工作。 准备好后会很大!

非常高兴将 Grafana 升级到 4.1.2 只是为了意识到不支持 ES 数据源:(。我想我现在必须坚持使用 Powershell 脚本进行警报。

伙计们,在 Grafana 中使用 Elastic 警报会很好 - 这就是事实。 但显然,如果每个人都在这里留下完全相同的评论,它不会发生得更快;)
很明显,警报规则将非常简单,至少一开始是这样,就像现在的指标一样。 很可能是简单的阈值。
如果您需要 ElasticSearch 警报 - 使用 ElastAlert。 它存在很长时间,支持所有 Elastic 版本和相当复杂的规则。

不幸的是,ElastAlert 不支持聚合, The only aggregation supported currently is a terms aggregation, by setting use_terms_query.但我很高兴 Alert 终于来到了 Grafana。

你好,请问这个什么时候能完成? 我热切期待从 grafana 中的 elasticsearch 发出警报

各位,请停止用毫无意义的评论在这个问题上发垃圾邮件。 完成后就会完成。 如果您想做出贡献,请务必提交 PR 以改进实施。

如果你想表达你对这个问题的支持,请使用第一篇文章中的反应按钮。 如果您希望在问题完成后收到更新,订阅按钮位于右侧。

在这个问题上发表无用的评论会向 _every_ 订阅者发送垃圾邮件,并且不会导致它更快地得到解决,所以请停止(为我的贡献道歉,大家在这里的噪音!)。

我在 alerting-elasticsearch 分支上收到了“tsdb.HandleRequest() error type assertion to string failed”
(与#7909 相同的问题)
Grafana v4.2.0-pre1
数据源:Elasticsearch 版本 2.x 和 5.x(均错误)

来自查询的json

{"search_type":"count","ignore_unavailable":true,"index":"moa-log-alias"}
{"size":0,"query":{"bool":{"filter":[{"range":{"@timestamp":{"gte":"1492718034259","lte":"1492719834259","format":"epoch_millis"}}},{"query_string":{"analyze_wildcard":true,"query":"type:\"oauth2_request_log\""}}]}},"aggs":{"3":{"terms":{"field":"method","size":500,"order":{"_term":"desc"},"min_doc_count":0},"aggs":{"2":{"date_histogram":{"interval":"1m","field":"@timestamp","min_doc_count":0,"extended_bounds":{"min":"1492718034259","max":"1492719834259"},"format":"epoch_millis"},"aggs":{}}}}}}

测试请求负载

{"dashboard":{"annotations":{"list":[]},"editMode":false,"editable":true,"gnetId":null,"graphTooltip":0,"hideControls":false,"id":15,"links":[],"refresh":"10s","rows":[{"collapse":false,"height":420,"panels":[{"alert":{"conditions":[{"evaluator":{"params":[150],"type":"gt"},"operator":{"type":"and"},"query":{"params":["A","1m","now"]},"reducer":{"params":[],"type":"last"},"type":"query"}],"executionErrorState":"alerting","frequency":"60s","handler":1,"name":"API Requests / Min alert","noDataState":"no_data","notifications":[]},"aliasColors":{},"bars":true,"datasource":"moa-log","decimals":null,"fill":1,"hideTimeOverride":false,"id":1,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":false,"show":true,"sort":"total","sortDesc":true,"total":true,"values":true},"lines":false,"linewidth":1,"links":[{"targetBlank":true,"title":"View Detail","type":"absolute","url":"http://kibana.exe.in.th/goto/ff87151449b8ed32d9492a59701b2a56"}],"nullPointMode":"null","percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"span":6,"stack":true,"steppedLine":false,"targets":[{"bucketAggs":[{"fake":true,"field":"method","id":"3","settings":{"min_doc_count":0,"order":"desc","orderBy":"_term","size":"0"},"type":"terms"},{"field":"@timestamp","id":"2","settings":{"interval":"1m","min_doc_count":0,"trimEdges":0},"type":"date_histogram"}],"dsType":"elasticsearch","metrics":[{"field":"select field","id":"1","type":"count"}],"query":"type:\"oauth2_request_log\"","refId":"A","timeField":"@timestamp"}],"thresholds":[{"colorMode":"critical","fill":true,"line":true,"op":"gt","value":150}],"timeFrom":null,"timeShift":"30s","title":"API Requests / Min","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"ops","label":null,"logBase":1,"max":null,"min":null,"show":false}]}],"repeat":null,"repeatIteration":null,"repeatRowId":null,"showTitle":false,"title":"Dashboard Row","titleSize":"h6"}],"schemaVersion":14,"style":"dark","tags":[],"templating":{"list":[]},"time":{"from":"now-30m","to":"now"},"timepicker":{"refresh_intervals":["1s","5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"test alert","version":0},"panelId":1}

我们也开始使用 alerting- elasticsearch分支测试弹性搜索警报,我们看到了

Grafana v4.2.0
数据源:Elasticsearch 5.x

从日志:

EROR[05-03|23:12:01] 警报规则结果错误 logger=alerting.evalHandler ruleId=1 name="Panel Title alert" error="tsdb.HandleRequest() 错误类型断言到字符串失败"将状态更改为=提醒
EROR[05-03|23:13:01] 警报规则结果错误 logger=alerting.evalHandler ruleId=1 name="Panel Title alert" error="tsdb.HandleRequest() 错误类型断言到字符串失败"将状态更改为=提醒
EROR[05-03|23:14:01] 警报规则结果错误 logger=alerting.evalHandler ruleId=1 name="Panel Title alert" error="tsdb.HandleRequest() 错误类型断言到字符串失败"将状态更改为=提醒
EROR[05-03|23:15:00] 警报规则结果错误 logger=alerting.evalHandler ruleId=0 name=Test error="tsdb.HandleRequest() 错误类型断言到字符串失败”将状态更改为=alerting
EROR[05-03|23:15:01] 警报规则结果错误 logger=alerting.evalHandler ruleId=1 name="Panel Title alert" error="tsdb.HandleRequest() 错误类型断言到字符串失败"将状态更改为=提醒
EROR[05-03|23:16:01] 警报规则结果错误 logger=alerting.evalHandler ruleId=1 name="Panel Title alert" error="tsdb.HandleRequest() 错误类型断言到字符串失败"将状态更改为=提醒
EROR[05-03|23:17:01] 警报规则结果错误 logger=alerting.evalHandler ruleId=1 name="Panel Title alert" error="tsdb.HandleRequest() 错误类型断言到字符串失败"将状态更改为=提醒

screen shot 2017-05-03 at 11 15 06 pm

你好呀,

只是两个问题:

  • 我看到 alerting-elasticsearch 分支中的最后一次提交是从 2017 年 2 月开始的。它是否已经足够成熟以适应 4.4.0?
  • 此警报模块是否需要在 elasticsearch 服务器上使用 X-Pack? 如果是这种情况,我想为支持的警报数据源列表推荐另一个候选者: elastalert
  • 我认为它不成熟(没有太多测试)。
  • 不需要 X-Pack。

我们是否更接近于此?

我们等待这个数字已经好几个月了。 什么时候发布?

我怎么能把它补丁到 grafana_4.3.2 ? 这真的很重要和有用

请不要丢弃此功能。

我们非常期待这个功能。。

https://github.com/grafana/grafana/pull/8934这是我关于这个问题的版本。 希望有帮助

它可以合并到最近的版本之一吗?

还是不支持弹性? @托克洛

我们应该期待尽快发布吗?

为什么没有答案@playqdrew

请将该功能添加到最近的版本中。 真的会很酷!

@lvheyang我已经在本地提取了您的更改,看起来警报不尊重指标查询中设置的大小。 我已将大小设置为无限制,但警报仅评估 10 个对象,并且评估的 10 个对象似乎是随机的,因为我已将查询的顺序设置为底部,显示图例顶部的最低值,但没有这些底部值被评估。 也许,这是一个限制,或者我做错了什么? 你怎么认为?

@dustinvanbuskirk我很乐意帮助您解决这个问题。 也许如果工作_大部分_完成,我们就可以完成

嗨,大家好,
有任何更新吗? 等待此功能已超过一年....

真的很抱歉,这总是最终被推送,有点被其他问题淹没并在 Grafana v5(新网格、用户组和仪表板文件夹)上取得进展。 无法保证我们什么时候可以使用它,希望在 v5.1(2018 年第一季度初)

希望早日拥有。 手指交叉!

我们也会从中受益:)

+1 也缺少此功能

@torkelo
我只是好奇您是否在弹性搜索警报方面取得了任何进展? :)

韩国

+1

Q1快结束了。。
所以等待这个弹性警报准备好

我很好奇 - ELK“观察者”功能是否可以进行弹性警报,这也是付费X-Pack 中的主要功能之一,与拖延此功能的进度有关吗?

@yossiv @MichaelLogutov @vijaychd @Shiinii https://www.bountysource.com/

我还在等待“es 的警报功能”。 它对我来说很重要。但我看不到关于这个问题的更多进展

  • 1 会非常有用

我仍然会为此交换所有这些新奇的仪表板重新排列

我也很想在 Grafana 上看到 ES 警报。

什么时候准备好?

我不会等待这个功能,因为票已经开放了 18 个月,而且似乎没有开发人员在一年多的时间里工作。 如果您需要警报,我建议您考虑迁移到支持它的后端。

所以……对问题点赞完全没用? 这是按票数排序的第三个问题……看到它被忽略令人失望。

imatge

我建议您考虑迁移到支持它的后端。

@HeWhoWas我愿意,但他们都很糟糕。

相反,我们在持久的 azure 函数中创建了自己的警报解决方案,不断轮询日志。

^ 是的,对于基本用例,这绝对不是火箭科学。 只需转到 Kibana 并运行您的查询,然后复制它生成的原始 Elasticsearch 查询。 然后运行一些这样的代码(不完整,但你明白了):

# Get results from ES
result=$(
    curl -sS -X POST \
    "http://${ES_HOST}:9200/logstash-*/_search" \
    -H "cache-control: no-cache" \
    -H "content-type: application/json" \
    -d @/app/es_query.json
)
count=$(echo ${result} | jq -r '.hits.total')
echo "[DEBUG] Found ${count} hits"

# Send alert if necessary
if [ "${count}" -ge "${COUNT_THRESHOLD}" ]; then
    echo "[INFO] Found ${count} hits on search, which is over the threshold"

    alert_text="{\"text\": \"[${APP_NAME}] Found ${count} *${ALERT_TEXT}* events in the last ${REPORTING_PERIOD}. See ${INSPECT_LINK} .\"}"
    echo ${alert_text} | curl "${SLACK_HOOK_URL}" -d @-
fi

从 Elasticsearch 迁移到其他后端系统不是一种选择,也不是一种解决方案。
它是一个核心系统,与 Grafana 警报已经支持的所有其他系统一样熟悉。
他们承诺它会在 5.1 ..
我真的希望它会准时

是的,或者只是使用 x-pack 监控,或者通过 Riemann 传递它们并以这种方式发出警报。

警报不是问题,拥有简洁的 Grafana 可视化和调整功能是我们的愿望。

你上面的所有解决方案基本上都是“忘记grafana”——好吧,这就是grafana项目,这个问题是为了改进它。 因此,让我们专注于做到这一点的解决方案。

这个 PR 很大,部分原因是它包含一个完整的 3rd 方 ElasticSearch 库,并支持 ES 2.x 和 5.x 系列。

如果有人愿意花时间大幅简化这个 PR,它可以从大约 5k 行代码减少到可能的 800-1000 行,这将使其更可行。

据我所知,这个分支基本上是有效的,但是缺少一个聚合函数来阻止某些类型的查询工作,也许这不一定是一个交易破坏者,我们可以相当快地合并支持的基础,然后回想起来修复错误或缺失的功能。

是否有人自愿简化并准备分支,并支持合并?

不知道为什么需要 3rd 方库将 JSON 发送到 HTTP/S 服务。

ES 2.x 应该被丢弃,没有人应该再运行它(我知道很多人都在运行。停止它!)

Grafana 中的 ES 警报是否有可能的解决方法?

谢谢。

我为解决此问题所做的工作是建立一个独立的 InfluxDB 实例,并在那里放置任何我想要提醒的内容而不是 ES。 这还不错,因为 InfluxDB 不是一个资源消耗大户,而且由于您不需要所有数据在那里,您可以通过不保留大量历史数据并仅摄取所需的数据来降低数据使用率需要进去。

这是一个可靠的解决方法

我过去曾对此进行过试验,我从一个小 Windows 环境中获取了所有日志,这些日志已经进入 elasticsearch 并将它们发送到 Telegraf,然后发送到 influxdb。 这非常有效,因为事件日志中的字段变成了 influxdb 中的字段,因此在 grafana 中,我可以查询例如事件 ID、主机名和用户名。

最好的部分是这一切占用的磁盘空间很小,我的意思是非常小。 试图从记忆中记住,但在 elasticsearch 中每天大约 500 mb,在 influxdb 中这变得不到 300 mb ......对于覆盖超过 6 个月的数据。

这只是一个实验,从来没有想过用这个来解决告警问题。

我鼓励每个人都尝试一下。

花了所有时间试图从 logz.io(昂贵的)转移到我工作的公司的 Grafana ......结果发现我无法为我的 elasticsearch 日志设置警报。

我需要一个 ETA 吗? 我正在开发一个需要此功能的项目。

@nikskiz Grafana 是开源项目,每个人都可以为它做出贡献。 你也可以贡献!

许多人在空闲时间免费从事开源项目,我认为粗鲁和批评他们的工作是不好的。

正在进行一个较小的 PR: https :

@nikskiz现在你可以使用 influxdb

@nikskiz或者你可以简单地使用 elastalert

嗨,大家好!

我们都知道 Elasticsearch 的警报是一项了不起的、非常受欢迎且期待已久的功能。
但我认为我们应该尽可能保持这个线程的整洁和有条理

所以,像这样的问题和评论......

有时间表吗?
这将是非常有用的!
等不及了!
这方面有任何进展吗?

无助于功能的发展,为订阅该线程的人生成了大量无用的电子邮件,并使讨论对新参与者来说过于混乱。

即使是关于变通方法和其他警报解决方案(如 ElastAlert)的问题也不应该再在这里发布,因为它已经在之前的评论中讨论了很多。

所以,请不要轻视这个空间! 让我们使用它们来传播有用的评论并分享您在此功能上取得的进展。

我刚刚完成了一个 PR #11380 来让 Grafana 支持警报 [Elasticsearch]

与一些早期实现相比,例如 #8943 、 #10343

  • 基于grafana-5.0.0
  • 源代码少于 1000 行(和第三个 lib [leibowitz/moment]~=1000 行,以及一些测试代码)
  • 代码逻辑与前面一致

这周我会继续完善这个PR,更全面的测试,更清晰的抽象模型。
我期待有人可以尝试使用此 PR 并对其进行改进:)

@ WPH95 - 我这周肯定会尝试你的 PR,如果你没问题的话,我会在你的 repo 中产生问题,并考虑在那里做出贡献。

请合并。 这是一个热门功能。

有什么我们可以帮助促进这一点的吗?

合并它的估计是什么? 我应该等待还是使用 X-Pack?

+1,合并它的估计是什么? 5.2.x?

嗨,我知道我们在这方面对您施加了太多压力,但是这个问题大约在 2 年前(2016 年 8 月)就已公开。
我猜,elasticsearch + Grafana 社区和其他社区一样宽大。
我真的很感谢这个社区为我们所做的出色工作,但似乎这个问题仍然存在:(
我们可以做些什么来促进这一点?

为什么合并 PR 需要这么长时间?

+1

+1

+1

不要只用“+1”写评论,因为你在向其他人发送垃圾邮件。 您没有向主题添加任何内容。 单击主要帖子上的大拇指按钮或单击订阅按钮。

+1

+1

:多田::多田::多田::sparkling_heart:

🎉

哇,它发生了。 老实说,我认为这会走上毁灭公爵的道路。 :+1:

非常感谢您的努力!

此页面是否有帮助?
0 / 5 - 0 等级