我目前正在重新设计警报管理器的现有警报配置。只有一个小问题,我不完全了解警报管理器。
假设我有以下配置;
routes:
match:
severity:"warning"
receiver: "hipchat-teamX"
match_re:
application:"(foo|bar)"
receiver: "hipchat-teamX"
match_re:
application:"(barfoo.*)"
receiver: "hipchat-teamY"
然后从 Prometheus 发出警报,其中包含以下值,application:"barfooOne" 严重性:“警告”
警报将发送给哪个接收者?为什么?
警报管理器是否处理上下结构?
你什么时候决定声明一个新的子路由(routes)?
最佳答案
在 GitHub 开发人员的帮助下,我找到了解决方案。
您可能会看到配置的处理方式如下,类似于带有 AND 和 OR 声明的 if 语句。
Alertmanager 将配置应用于上下左右原则。其中 up-down 类似于您将在常规 if 语句中使用的 OR 语句。
当你从左到右时,你可以将它与 if 命令中的 AND 语句进行比较。
此外,您应该记住,当第一个语句匹配时,并且没有声明“AND”部分,alertmanager 会将警报推送给接收者,而不会进一步查找任何其他匹配项。因此,在上面的示例中,如果 prometheus 触发带有以下标签的警报 {severity: "warning", application: "barfoo"},警报将发送到 hipchat-teamX。
注意以下几点,application 的标签值与 hipchat-teamY 的路由匹配。那么为什么它不发送到那条路线呢?答案并不难,因为第一个匹配,并且没有声明子路由,所以它将停止寻找任何其他匹配。
但是,如果 alertmanager 具有如下代码的配置,则警报将发送到接收者“hipchat-teamY”。
routes:
match:
severity:"warning"
receiver: "hipchat-teamX"
routes:
match_re:
application:"(barfoo.*)"
receiver: "hipchat-teamY"
match_re:
application:"(foo|bar)"
receiver: "hipchat-teamX"
match_re:
application:"(barfoo.*)"
receiver: "hipchat-teamY"
为了让它更高级一点,假设 prometheus 发送了一个带有以下标签的新警报 {severity: "critical", application: "barfoo"}。使用以下配置,警报将路由到 hipchat-teamX。
并使用标签 {severity: "critical", application: "foo"},将警报发送到 hipchat-teamY。
routes:
match:
severity:"warning"
receiver: "hipchat-teamX"
routes:
match_re:
application:"(barfoo.*)"
receiver: "hipchat-teamY"
match_re:
application:"(foo|bar)"
receiver: "hipchat-teamX"
match:
severity:"critical"
receiver: "hipchat-teamY"
routes:
match_re:
application:"(barfoo.*)"
receiver: "hipchat-teamX"
match_re:
application:"(foo|bar)"
receiver: "hipchat-teamY"
我希望这个解释能帮助遇到同样问题或疑问的其他人。
关于go - Prometheus alertmanager 的处理顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44601971/
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)
我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby-vips的github页面上的链接,我们将不胜感激!如果有ruby-
我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d
我正在构建一个小部件来显示奥运会的奖牌数。我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,以及奖牌计数的“金”、“银”、“铜”。列表应该排序:1.首先是奖牌总数2.如果奖牌相同,按类型分割(金>银>铜,即2金>1金+1银)3.如果奖牌和类型相同,则按字母顺序子排序我正在用ruby做这件事,但我想语言并不重要。我确实找到了一个解决方案,但如果感觉必须有更优雅的方法来实现它。这是我做的:使用加权奖牌总数创建一个虚拟属性。因此,如果他们有2个金牌和1个银牌,加权总数将为“3.020100”。1金1银1铜为“3.010101”由于我们希望将奖牌数排序为最高的,因此列表按降序排
我正在尝试解析网页,但有时会收到404错误。这是我用来获取网页的代码:result=Net::HTTP::getURI.parse(URI.escape(url))如何测试result是否为404错误代码? 最佳答案 像这样重写你的代码:uri=URI.parse(url)result=Net::HTTP.start(uri.host,uri.port){|http|http.get(uri.path)}putsresult.codeputsresult.body这将打印状态码和正文。
我查看了Stripedocumentationonerrors,但我仍然无法正确处理/重定向这些错误。基本上无论发生什么,我都希望他们返回到edit操作(通过edit_profile_path)并向他们显示一条消息(无论成功与否)。我在edit操作上有一个表单,它可以POST到update操作。使用有效的信用卡可以正常工作(费用在Stripe仪表板中)。我正在使用Stripe.js。classExtrasController5000,#amountincents:currency=>"usd",:card=>token,:description=>current_user.email)
我试图在每次运行时以随机顺序将一个名称数组拆分为多个数组。我知道如何拆分它们:name_array=["bob","john","rob","nate","nelly","michael"]array=name_array.each_slice(2).to_a=>[["bob","john"],["rob","nate"],["nelly","michael"]]但是,如果我希望它每次都以随机顺序吐出它们怎么办? 最佳答案 在做同样的事情之前,打乱数组。(Array#shuffle)name_array.shuffle.each_s
当profile为nil时,总是让我感到悲伤...我该怎么办? 最佳答案 在View中使用变量之前,始终检查变量是否为nil。我确信这个问题有更优雅的解决方案,但这应该能让您入门。 关于ruby-on-rails-Rails处理.Erb与Nils,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2709605/