我们正在为我们的应用程序构建一个(基于Zabbix的)监视系统;但是,我在定义要监视的内容时遇到了困难?

到目前为止,我提出了以下一般类别:数据:cpu,ram,swap等。

中间件数据:MySQL实例,Tomcat实例,JVM等的性能/运行状况。

逻辑或应用程序数据:当前系统的状态/运行状况,例如有效用户数,页面请求等。

kpi数据:业务数据,例如用户注册随着时间的推移。

仪表盘:系统的快速概览(例如,微服务是否正在运行)。

是否还有其他基本类别要监视?还是要使用其他类别的系统?

UPDATE:监视的目的是


,以查看系统是否正常运行(在较高级别,例如,没有服务中断等-非常像冒烟测试)
,如果有任何指示,则表明系统很可能崩溃(例如,历史数据预测我们将耗尽磁盘空间)
如果发生任何此类情况,请向适当的人员发送警告(例如,通过电子邮件) );另外,我们在本地/本地云基础架构中运行,因此应用程序的成本无关紧要-但是可能有一天:-)

评论

此监视活动的目的是什么?正在生成报告?实时状态/仪表板? SLA?触发自动动作?有任何规格/要求吗?恕我直言,为了进行监视或选中某个框而进行监视的效率不是很高(但有时授予它使管理感到高兴)。

这是什么样的系统?一个大应用?数百种微服务?您将需要监视完全不同的事物。

该系统包含多个微服务

#1 楼

我喜欢这个视频:GOTO 2016•监控微服务•Tom Wilkie应用程序监视。基本上,主机监视会告诉您现在有致命的错误,但是应用程序监视应该能够通过检测更高的错误率来预测问题,或者请求所花费的时间更长,因此您可以在用户注意到它们之前解决问题。

(我不隶属于weaveworks或goto会议,我只是喜欢其中的内容,并认为有一些有趣的想法。请使用downvote按钮让我知道此答案不好:))) />

评论


不用担心,仅视频链接是不够的,但是当您(至少)逐字总结自己的想法时,一切都很好。

–滕西拜
17年7月18日在7:24

好主意,谢谢!我在相关视频下发现了另一个有用的视频:youtu.be/qeVhFyqDbJs?t=354主要思想是可以将监视项目分为3 * 3个不同类别(区域-基础结构,应用程序,业务;关注-健康,性能) ,容量和交互-被动,主动,重新激活),并且这些类别的任何组合都是可行的(例如“我还剩多少CPU?”->基础架构,容量,被动)

– krisy
17年7月20日在15:37



#2 楼

我很惊讶没有人明确提到四个黄金信号作为答案,因此我将其添加。建议直接从Google关于监视分布式系统的SRE图书一章中删除,建议至少收集有关“四个黄金信号”的度量标准:
服务请求所花费的时间。区分成功请求的延迟和失败请求的延迟非常重要。例如,由于与数据库或其他关键后端的连接断开而触发的HTTP 500错误可能很快得到解决。但是,由于HTTP 500错误表示请求失败,因此将500s计入您的整体延迟可能会导致误导计算。另一方面,慢速错误甚至比快速错误更糟糕!因此,重要的是跟踪错误延迟,而不是仅过滤掉错误。

流量:
从高层次上衡量系统上有多少需求系统特定指标。对于网络服务,此衡量标准通常是每秒HTTP请求数,可能会因请求的性质(例如,静态内容与动态内容)而中断。对于音频流系统,此度量可能集中在网络I / O速率或并发会话上。对于键值存储系统,此度量可能是每秒的事务和取回。

错误:
显式(例如,HTTP 500),隐式(例如,HTTP 200成功响应,但错误的内容)失败的请求率,或者根据策略(例如“如果您承诺一秒钟响应时间,一秒钟内的任何请求都是错误”)。如果协议响应代码不足以表示所有故障情况,则可能需要使用辅助(内部)协议来跟踪部分故障模式。监视这些情况可能截然不同:在负载平衡器上捕获HTTP 500可以很好地捕获所有完全失败的请求,而只有端到端系统测试才能检测到您提供了错误的内容。 >
饱和度:
您的服务有多“充实”。衡量系统分数的指标,强调最受约束的资源(例如,在内存受限的系统中显示内存;在I / O受限的系统中显示I / O)。请注意,许多系统在达到100%利用率之前会降低性能,因此,必须达到利用率目标。在复杂的系统中,可以通过更高级别的负载测量来补充饱和度:您的服务能否正确处理两倍的流量,仅处理10%的流量或处理比当前接收的流量少的流量?对于非常简单的服务,这些服务没有会改变请求复杂性的参数(例如,“给我一个随机数”或“我需要一个全局唯一的单调整数”),而很少更改配置,那么来自负载测试的静态值可能已足够。但是,如前一段所述,大多数服务需要使用具有已知上限的间接信号,例如CPU利用率或网络带宽。延迟增加通常是饱和的主要指标。在一些小的窗口(例如一分钟)内测量您的第99个百分位响应时间,可以非常早地发出饱和信号。
最后,饱和度还与即将到来的饱和度有关,例如“看起来您的数据库将在4小时内填满硬盘。”一个信号有问题(或者在饱和的情况下几乎有问题),您的服务至少会受到监视的合理覆盖。


#3 楼

这在很大程度上取决于您的基础架构情况。如果您要进行自动缩放,则各个实例的运行状况几乎无关紧要。重要指标是总成本和每单位工作成本(例如,每个请求)。就我个人而言,如果可以避免的话,我不喜欢监视单个实例的状态-我尝试将重点更多地放在更广泛的服务级别和应用程序级别指标上:


每个服务的总体正常运行时间(至少一个实例运行状况良好并且能够立即响应新请求的时间的百分比)
最终用户总正常运行时间(用户认为产品可用的时间的百分比-如果有一些核心服务发生故障,这可能是面向用户的停机时间,但可能不是使用较少的服务或后台工作人员)
每个服务的响应时间第95个百分点/>每个队列的消费者计数
每个队列的平均完成时间(不仅是队列中的时间,而是消息从排队到完成工作的时间)
每个服务的错误率
每个服务的工作单位
对于每个服务器角色,平均CPU利用率与平均内存利用率之比是多少?这对于确定我们的伸缩性是否有帮助-如果CPU使用率为70%,而内存为20%,则我们为实例分配了过多的内存,反之亦然。
相同的峰值CPU /内存利用率
部署的交付时间

我列出的一些指标,例如随着时间的推移的用户注册,对我而言,不属于Zabbix这样的基础架构监视系统。有人看着Zabbing的注册减少了10%怎么办?没有。这是业务报告数据,应通过报告数据库将其暴露给任何需要的人,这些数据可能呈现在一个漂亮的仪表板中,因为尖顶的上司喜欢仪表板。

评论


尽管这些是值得关注的指标,但其中大多数都没有监控。这些代表报告和商业智能-可以(通常)从您的监视系统中聚合,挑选和处理数据。

–詹姆斯·谢威(James Shewey)
17年7月11日在19:26

这可能不符合您对监视的个人定义,但绝对是监视,并且数据水平对于在自动扩展环境中管理基础结构和服务很重要。

–阿德里安
17年7月11日在19:30

这不是我的个人定义,监控与报告不同。监视生成警报以响应原始数据。报告会汇总原始数据,以生成诸如SLA指标,利用率报告等内容。例如,N-able以此方式定义并销售(或出售-至少在被SolarWinds收购之前)两种单独的产品:用于监视的N-able和用于报告的N-Compass

–詹姆斯·谢威(James Shewey)
17年7月11日在19:40



这是监视的一个定义,但不是唯一的定义,无论您是否自己提出,这都是您个人采用的定义。仅使用更高级别的聚合并不能使其不受监视。我不建议您不应基于我列出的任何指标的阈值来触发警报。根据您链接的定义,触发警报是监视的定义质量。

–阿德里安
17年7月11日在20:01

是的(就我而言),报告可以与监控数据分开;不这样做的原因是我们的系统不是那么复杂,而添加其他报表应用程序将导致管理起来更加复杂的基础架构。但是,我喜欢监视系统成本的想法,谢谢(用此信息更新了我的问题)。

– krisy
17年7月12日在6:16



#4 楼

对于任何给定节点,都有4个基本资源,需要监视以下项目:


CPU




每核


存储


可用空间
可用的inodes
吞吐量
备份



内存


免费
交换
缓冲区


网络


延迟
吞吐量
抖动



这四个基本资源将为您的应用程序或服务的每一层提供支持你的申请。根据您的环境,此架构最多可分为5层,您将希望在每一层对其进行监视。可能如下所示:



这可能会根据环境的架构而改变。例如,如果您从NFS挂载中运行所有数据,则存储层将位于计算旁边而不是后面。如果您有工作站连接到的基于C ++的应用程序,则可能没有前端层。如果您的应用程序使用平面文件,则您可能没有数据库层。如果您不使用虚拟机或容器,而是使用本地存储,则可能没有计算和存储层。您将希望在每一层监视以上4种基本资源。

这表示您的供应商,软件和硬件可以提供的基本监视。在每一层覆盖这四个基本资源应该是您的首要目标。一旦达到100%的覆盖率,您就可以在应用程序中另外构建钩子以报告其他健康状况,但是从本质上来说,这些钩子通常是作为对故障的响应而构建的,因此您必须与内部开发人员一起构建这些类型

监视这4个基本资源应该可以捕获可能导致断电的80%问题,然后可以开始处理剩余的20%。

评论


如果您使用的是自动缩放比例,则列出的所有指标在大多数情况下都无法根据实例进行监控。我不在乎任何一个实例的CPU使用率是多少,因为如果负载足够高,则将添加实例,而如果负载足够低,则实例将被终止。监视非常有情境。

–阿德里安
17年7月11日在19:31

您应该在意-它可以带来更好的产品和客户体验。如果您不监视集群中的每个特定实例,那么如何知道单个节点是否不正常?如果单个节点出现故障,但如何防止局部中断和客户影响,但两个节点之间的平均值隐藏了问题?您甚至如何确定平均值,以便在不监视每个实例的情况下扩大或缩小群集?

–詹姆斯·谢威(James Shewey)
17年7月11日在19:44

如果单个节点发生故障,则应自动终止并更换它,因此我不需要了解它。监视实例级别的指标以进行自动伸缩是由伸缩控制器完成的,而不是由IT监视系统完成的。

–阿德里安
17年7月11日在19:52

谢谢;是的,这些数据至关重要-但我认为它不够/完整(它涵盖了我在问题中提到的硬件数据层)

– krisy
17年7月12日在6:10