java 压制警报

1.简介

在本教程的最后一部分中,我们将讨论所有可观察性Struts都聚集在一起的主题:监视和警报。 对于许多人来说,该主题严格地属于操作,并且您知道它以某种方式起作用的唯一方式是当您待命并加入时。

目录

1.简介 2.监测和预警哲学 3.基础架构监控 4.应用监控
4.1。 普罗米修斯和警报经理 4.2。 滴答堆栈:Chronograf 4.3。 Netfix图集 4.4。 鹰形 4.5。 舞台监控器 4.6。 格拉法纳 4.7。 自适应警报
5.编排 6.云 7.无服务器 8.警报不仅涉及指标 9.结论 10.最后

我们讨论的目的是至少使监视的某些方面神秘化,了解警报,并了解如何使用度量 , 分布式跟踪甚至日志来连续观察系统状态并通知即将发生的问题,异常,潜在的中断或行为异常。

2.监测和预警哲学

在运行或多或少切合实际的软件系统时,可以(并且应该)收集大量不同的指标 ,其特殊性是根据微服务架构原理设计的。 在这种情况下,用于收集和存储这种状态数据的过程通常称为监视。

那么,您到底应该监视什么? 公平地说,要预先了解系统的所有可能方面,并且决定要收集哪些指标 (和其他信号)而不必收集哪些指标 ,这并不容易,但是“多多有多”的黄金法则在这里肯定适用。 最终目标是当出现问题时,监视子系统应立即通知您。 这就是警报的全部内容。

警报消息(或警报通知)是重要的或时间敏感的人机通信。

https://zh.wikipedia.org/wiki/Alert_messaging

显然,您可以发出任何警报,但是在定义自己的警报时,建议您遵循某些规则。 这些出色的文章中有关警报哲学的最佳总结是Netflix的 警报哲学和Rob Ewaschuk的 关于警报的我的哲学 。 请尝试寻找时间来浏览这些资源,其中提供的见解是无价的。

总结一些最佳实践,当警报触发时,应该很容易理解原因,因此,使警报规则尽可能简单是一个好主意。 警报触发后,应立即通知某人并进行调查。 因此,警报应指示出真正的原因,是可行的和有意义的,应不惜一切代价避免产生嘈杂的警报(无论如何,它们都将被忽略)。

最后但并非最不重要的一点是,无论您收集了多少个指标,配置了多少个仪表板和警报,总会遗漏一些东西。 请认为此过程是一个持续改进,请定期重新评估您的监视,日志记录,分布式跟踪,指标收集和警报决策。

3.基础架构监控

对基础结构组件和层的监视在某种程度上是一个已解决的问题。 从开源的角度来看,像Nagios , Zabbix , Riemann , OpenNMS和Icinga之类的知名公司正在那里统治,您的运营团队很可能已经押注其中之一。

4.应用监控

基础设施当然属于“必须监视”类别,但是可以说监视的应用程序方面更加有趣并且更接近主题。 因此,让我们直接进行对话。

4.1 Prometheus和Alertmanager

我们已经讨论过Prometheus ,主要是作为指标存储,但是事实是它还包含称为AlertManager的警报组件,可以使它回来。

AlertManager 把手警报发送客户端应用程序,如普罗米修斯服务器。 它负责将重复数据删除,分组和路由到正确的接收者集成,例如电子邮件,PagerDuty或OpsGenie。 它还负责沉默和禁止警报。 https://prometheus.io/docs/alerting/alertmanager/

实际上, AlertManager是一个独立的二进制进程,用于处理Prometheus服务器实例发送的警报。 由于JCG租车平台选择了 Prometheus作为指标和监视平台,因此也成为管理警报的合理选择。

基本上,有几个步骤可以遵循。 该过程包括配置和运行AlertManager实例,配置Prometheus与该AlertManager实例进行对话以及最终在Prometheus中定义警报规则。 一次采取一个步骤,让我们首先开始使用AlertManager配置。

global:resolve_timeout: 5msmtp_smarthost: 'localhost:25'smtp_from: 'alertmanager@jcg.org'
route:receiver: 'jcg-ops'group_wait: 30sgroup_interval: 5mrepeat_interval: 1hgroup_by: [cluster, alertname]routes:- receiver: 'jcg-db-ops'group_wait: 10smatch_re:service: postgresql|cassandra|mongodb
receivers:
- name: 'jcg-ops'email_configs:- to: 'ops-alerts@jcg.org'
- name: 'jcg-db-ops'email_configs:- to: 'db-alerts@jcg.org'

如果我们将此配置代码段提供给AlertManager进程(通常通过将其存储在alertmanager.yml ),则它应该成功启动,并将其Web前端暴露在端口9093

AlertManager Web前端

太好了 ,现在我们必须告诉Prometheus在哪里寻找AlertManager实例。 和往常一样,它是通过配置文件完成的。

rule_files:- alert.rules.ymlalerting:alertmanagers:- static_configs:- targets:- 'alertmanager:9093'

上面的代码段还包括最有趣的部分,即警报规则,这就是我们接下来要讨论的内容。 那么,在JCG租车平台下,有意义警报的一个好,简单和有用的例子是什么? 由于大多数JCG租车服务都是在JVM上运行的,因此首先想到的是堆使用情况:太接近限制了就很好地表明了故障和可能的内存泄漏。

groups:
- name: jvmrules:- alert: JvmHeapIsFillingUpexpr: jvm_memory_used_bytes{area="heap"} / jvm_memory_max_bytes{area="heap"} > 0.8for: 5mlabels:severity: warningannotations:description: 'JVM heap usage for {{ $labels.instance }} of job {{ $labels.job }} is close to 80% for last 5 minutes.'summary: 'JVM heap for {{ $labels.instance }} is filling up'

在Prometheus中使用“ 警报”视图可以看到相同的警报规则,确认已正确选择配置。

普罗米修斯的警报视图

警报触发后,它将立即显示在AlertManager中 ,同时通知所有受影响的接收者(接收者)。 在下面的图片上,您可以看到触发的JvmHeapIsFillingUp警报的示例。

AlertManager中的触发警报

正如您在此时可能会同意的那样, Prometheus确实是一个完善的监视平台,不仅从度量收集角度涵盖了您,而且还提供了警报。

4.2 Tick Stack:Chronograf

如果您对TICK堆栈感到熟悉,那是因为在本教程的上一部分中, 它在我们的雷达中弹出 。 Tron堆栈的组成部分之一(对应于缩写C )是Chronograf 。

Chronograf Kapacitor 提供了一个用户界面, Kapacitor 是一个本地数据处理引擎,可以处理来自 InfluxDB的 流数据和批处理数据 您可以使用简单的分步UI创建警报,并在 Chronograf中 查看警报历史记录

https://www.influxdata.com/time-series-platform/chronograf/

InfluxDB 2.0 (仍处于alpha版本),通常是InfluxDB和TICK堆栈的未来,会将Chronograf纳入其时间序列平台。

4.3 Netfix图集

Netflix Atlas是我们之前讨论过的老用户中的最后一个,它也支持内置在平台中的警报 。

4.4鹰派

从红帽社区项目之一的Hawkular开始,我们正在关闭专用于多合一的专用开源监视解决方案的设备。

Hawkular 是一组开源项目(Apache许可证v2),旨在作为常见监视问题的通用解决方案。 Hawkular 项目提供可用于各种监控需要REST服务。

https://www.hawkular.org/overview/

Hawkular组件列表包括对警报,度量标准收集和分布式跟踪的支持(基于Jaeger )。

4.5舞台监控器

Stagemonitor是专用于基于Java的服务器应用程序的监视解决方案的示例。

Stagemonitor 是一个Java监视代理,它与时间序列数据库(例如 Elasticsearch Graphite InfluxDB) 紧密集成 以分析图形化指标,而 Kibana则 可以分析请求和调用栈。 它包括 可以自定义的 预配置 Grafana Kibana 仪表板。

https://github.com/stagemonitor/stagemonitor

与Hawkular相似 ,它具有开箱即用的分布式跟踪,指标和警报支持。 另外,由于它仅针对Java应用程序,因此许多特定于Java的见解也都被支持到平台中。

4.6格拉法纳

听起来似乎没什么好料的,但是Grafana不仅是一个很棒的可视化工具,而且从4.0版开始,它带有自己的警报引擎和警报规则。 Grafana中的警报可在每个仪表板级别使用(目前仅图形),并且保存后,警报规则将被提取到单独的存储中并计划进行评估。 老实说,有一些限制使Grafana警惕使用受限。

4.7自适应警报

到目前为止,我们已经讨论了基于度量,规则,标准或/和表达式的或多或少的传统警报方法。 但是,诸如异常检测之类的更先进的技术正逐渐进入监视系统。 该领域的先驱之一是Expedia的 Adaptive Alerting 。

自适应警报 的主要目标 是帮助降低平均检测时间(MTTD)。 它通过侦听流指标数据,识别候选异常,对其进行验证以避免误报,最后将它们传递给下游的浓缩和响应系统来实现。 https://github.com/ExpediaDotCom/adaptive-alerting/wiki/Architectural-Overview

自适应警报位于Haystack异常检测子系统的后面,该子系统是我们在本教程的上一部分中谈到的一种灵活,可扩展的跟踪和分析系统。

5.编排

服务网格所统治的容器协调器可能是当今最广泛的微服务部署模型。 实际上,服务网格扮演着负责并了解一切的“影子红衣主教”的角色。 通过从服务网格中提取所有这些知识,将展现出微服务架构的完整图景。 决定追求这个简单而强大的想法的第一个项目是Kiali 。

Kiali 是可观测控制台 Istio 与服务网格配置功能。 它可以通过推断拓扑来帮助您了解服务网格的结构,还可以提供网格的运行状况。 Kiali提供了详细的指标,并且基本的 Grafana 集成可用于高级查询。 通过集成 Jaeger 提供分布式跟踪

Kiali将大多数可观察性Struts整合在一处,并将其与您的微服务机群的实时拓扑视图结合在一起。 如果您不使用Istio , 那么Kiali可能对您没有太大帮助,但是其他服务网格正在赶上,例如Linkerd还具有遥测和监视功能。

那么警报呢? 似乎目前还没有警报功能,您可能需要亲自连接Prometheus或/和Grafana才能配置警报规则。

6.云

警报的云故事是我们在讨论指标时已经开始的讨论的逻辑延续。 负责收集操作数据的相同产品是管理警报的产品。

在使用AWS的情况下, Amazon CloudWatch可以基于预定义的阈值或基于机器学习算法(例如异常检测)来设​​置警报( AWS警报概念)和自动操作。

Azure Monitor支持Microsoft Azure中的指标和日志收集,它可以基于日志,指标或活动配置不同类型的警报。

同样, Google Cloud将警报捆绑到Stackdriver Monitoring中 ,该驱动程序提供了定义警报策略的方式:要警告的情况以及如何通知。

7.无服务器

在无服务器世界中,警报与其他地方一样重要。 但是,正如我们已经意识到的那样,例如与主机相关的警报肯定不在您的视线范围内。 那么在无服务器领域中有关警报的情况如何?

实际上,这不是一个容易回答的问题。 显然,如果您使用的是云提供商的无服务器产品,那么他们的工具应该足以覆盖(或限制?)。 另一方面,我们有独立的框架可以自己选择。

例如, OpenFaas使用Prometheus和AlertManager,因此您几乎可以自由定义所需的任何警报。 同样, Apache OpenWhisk公开了许多指标,这些指标可以发布到Prometheus ,并由警报规则进一步修饰。 无服务器框架附带了一组预配置的警报,但是与它们的免费层相关联。

8.警报不仅涉及指标

在大多数情况下, 指标是输入到警报规则的唯一输入。 总的来说,这是有道理的,但是您可能还需要利用其他信号。 让我们以日志为例。 如果日志中出现某种特定类型的异常,您想获得警报怎么办?

不幸的是, Prometheus或Grafana , Netfix Atlas , Chronograf或Stagemonitor都不会对您有所帮助。 令人欣慰的是,我们拥有Hawkular ,它能够检查存储在Elasticsearch中的日志并使用模式匹配来触发警报。 此外, Grafana Loki在支持基于日志的警报方面也取得了不错的进展 。 作为最后的手段,您可能需要推出自己的解决方案。

9.微服务:监视和警报–结论

在本教程的最后部分中,我们讨论了警报,即可观察性讨论的高潮。 如我们所见,创建警报非常容易,但是要提出好的和可行的警报却非常困难。 如果您在晚上被传呼,那应该是一个真正的原因。 您不应花费数小时来尝试了解此警报的含义,触发该警报的原因以及如何处理。

10.最后

诚然,这是一段漫长的旅程! 一路上,我们讨论了许多不同的主题,您可能会害怕微服务体系结构 。 不用担心,它带来了巨大的好处,但是它也需要您以不同的方式考虑正在构建的系统。 希望本教程的结尾仅仅是您进入微服务体系结构令人兴奋的世界的开始。

但是,请保持警惕。 是的, 微服务架构不是万灵丹 。 请不要购买它作为销售宣传或陷入炒作陷阱。 它解决了真正的问题,但是在选择微服务作为解决方案之前,您应该实际解决它们。 请不要反转这个简单的公式。

祝您好运,微服务愉快!

翻译自: https://www.javacodegeeks.com/microservices-for-java-developers-monitoring-and-alerting.html

java 压制警报

java 压制警报_适用于Java开发人员的微服务:监视和警报相关推荐

  1. 适用于Java开发人员的微服务:管理安全性和机密

    关于麦洛 麦洛是 Java 开发者和技术爱好者. 对 Java 相关技术特别感兴趣,包括 javaee. Spring系列. 微服务等 作者:Andrey Redko 原文:Microservices ...

  2. 适用于Java开发人员的微服务:Monoglot还是Polyglot?

    1.简介 在本教程的前面部分中,我们已经讨论了很多有关微服务架构的好处. 它本质上是一个松耦合的分布式系统,它提供了特别重要的能力,可以为工作选择合适的工具. 这可能不仅意味着不同的框架,协议或库,而 ...

  3. Java开发人员的微服务:Monoglot还是Polyglot?

    1.简介 在本教程的前面部分中,我们已经讨论了很多有关微服务架构的好处. 它本质上是一个松耦合的分布式系统,它提供了特别重要的能力,可以为工作选择合适的工具. 这可能不仅意味着不同的框架,协议或库,而 ...

  4. java 扫描文件测试_适用于Java开发人员的微服务:安全测试和扫描

    java 扫描文件测试 1.简介 本教程的这一部分专门讨论安全性测试,将围绕被证明在软件开发领域(包括微服务 )中无价的测试策略进行总结. 尽管软件项目中的安全方面每天都变得越来越重要,但是令人惊讶的 ...

  5. java 服务编排_适用于Java开发人员的微服务:部署和编排

    java 服务编排 在这篇文章中,我们拥有一个全面的文章微服务针对Java开发:部署和协调. 1.简介 如今,越来越多的组织依靠云计算和托管服务产品来托管其服务. 这种策略有很多好处,但是您仍然必须为 ...

  6. java服务负载均衡_适用于Java开发人员的微服务:配置,服务发现和负载平衡

    java服务负载均衡 1.配置,服务发现和负载平衡–简介 我们正在缓慢但稳定地朝着准备好将微服务部署到生产中的方向发展. 在本教程的这一部分中,我们将讨论三个主要主题:配置,服务发现和负载平衡. 我们 ...

  7. 适用于Java开发人员的微服务:持续集成和持续交付

    1.简介 如果我们回顾与微服务体系结构相关的众多挑战,确保每个微服务都能够与每个对等方说正确的语言可能是最困难的挑战之一. 我们最近谈论了很多关于测试的话题,但是总是有机会让bug潜入.也许是合同的最 ...

  8. Java开发人员的微服务:微服务通信

    1.简介 微服务架构本质上是进入分布式系统工程的旅程. 随着越来越多的微服务正在开发和部署,它们很有可能必须以某种方式彼此对话. 这些通信方式不仅会因传输方式和协议而异,而且也会以同步或异步方式发生变 ...

  9. javascript工具_适用于JavaScript开发人员的10个有用工具

    javascript工具 JavaScript已经证明必须认真对待它,因为它可以真正改善Web! 人们开始看到,它的价值不是提供便宜的效果,而是真正的Web解决方案. 在本文中,我为所有JavaScr ...

  10. sketch插件开发_适用于Web开发人员的10个免费Sketch插件

    Sketch在Web设计师和开发人员中越来越受欢迎 . 这可能是因为它直观,易学并且具有许多功能,使创建网站原型变得容易得多 . 也可能是因为该应用程序是可扩展的,即您可以借助插件轻松地向该应用程序添 ...

最新文章

  1. Microsoft公司的匈牙利法命名规则
  2. MOSS 2007基础:WSS 3.0 中的母版页(Master Pages)和内容页(Content Pages)
  3. 博客开通了....激动 呵呵
  4. express-generator——Express应用生成器贼快!
  5. Linux+.NetCore+Nginx搭建集群
  6. 16、React Native实战之TextInput组件
  7. Hbase如何实现增删查改?
  8. python socket实现浏览器访问本地文件资源即静态网页(TCP)
  9. java阳历转阴历_java,阳历转阴历(农历)
  10. html中用form单选框右侧提示汗字,HTML表单(Forms)解析
  11. 应用程序0xc000007b无法正常启动,win10系统亲测有效
  12. 20年半年总结—默默的活着真是快活极了
  13. php 利用phpmailer 发送邮件
  14. 传奇GeeM2引擎配置生成登陆器配置详细图文教程
  15. c语言找出最大的偶数,查找最大值和最小值为偶数和奇数
  16. 爬虫初级二(爬中国古诗文网)
  17. 关于计算1+1=2,电脑到底经历了什么?底层到底是如何工作的?
  18. Artisteer 3.1
  19. varnish的安装
  20. 【Wu的课堂】《运筹学》单纯形法中文讲解笔记

热门文章

  1. 如何用开源软件办一场技术大会?
  2. 引用与取地址符的区别
  3. 搜狗推送工具之泛站程序实现泛收录
  4. 安卓连接mysql数据库_Android客户端怎么与服务器数据库连接?
  5. 遍历数组-forEach
  6. 触摸世界:10年前我写下这些诗歌,10年后我也不讨厌它们
  7. 【自我】自我训练-改变焦虑和抑郁的习惯
  8. 《菜鸟教程》C语言学习
  9. 数据表多次更新插入重复数据去重SQL
  10. 算法:(1)确定字符互异