Posted on:
Last modified:
与安全性一样,监控也应该是应用程序的核心功能。
如果应用程序在你没有注意到的情况下发生了故障,那么及时进行了监控,你也需要考虑下正在 监控的内容是否合理。
应该监控业务事务的内容或速率,而不是监控运行它的 Web 服务器的运行时间这种意义不大的值。
静态阈值几乎总是错误的,比如说只监控 CPU 超过 80% 的情况
监控的两种机制:
显然,应该优先采用内省来监控。但是如果应用程序由第三方提供,并且你没有深入了解其内部 操作的时候。从外部查看应用程序以了解某些网络、安全性或可用性问题通常也很有帮助。
指标是一个组件属性的度量,对这个指标持续跟踪,观察的集合称为时间序列。
单一指标和聚合指标的组合可以提供最佳的健康视图:前者可深入到某个特定问题,而后者可以查看更高阶的状态。
使用平均值描述事件序列是非常危险的。有个笑话是:一位统计学家跳进平均深度只有 25 厘米的湖中,然后差点被 淹死,因为湖中有深达十米的大洞,虽然大部分水面深度只有 10cm
平局值的坏处就在于高峰和低谷可能被平均值所掩盖。百分位数才是识别异常值的理想选择。
Gregg 的 USE 指标:
Google 的四个黄金指标
Weaveworks 的 RED 指标
实际上已经被包含在 Google 的四个指标中了
通知的信息应该包含以下几方面:
可视化系统最终要的在于:突出重点而不仅是提升视觉效果。
大多数监控查询和警报都是从最近(通常是一天内)的数据产生的。
Prometheus 的高可用架构建议:
强烈建议不要单独配置每个服务的指标抓取间隔,这样能够确保你的所有时间序列具有相同的粒度。
即使向量 (Instant Vector): 一组包含每个时间序列的单个样本的时间序列集合
cAdvisor 作为容器运行,可以用来监控 Docker
如何设定标签体系?
url_path
, error_code
等在这里书中有一处错误,书中说可以使用 user 作为标签,实际上绝对不要用 user 作为标签,这会让时间序列的 rank 直接爆炸
TODO avg(rate()) 是啥意思
predict_linear
这个函数非常有用,可以用来回答:"考虑到现在磁盘使用情况,以及他的增长速率,我们会在什么时候耗尽磁盘空间?
对于向量匹配运算,在多数情况下,一对一匹配就足够了。
最常见的错误是发送过多的警报。
应该针对症状而不是原因发出警报,又人类来判断造成问题的具体原因。
Alertmanger 的 route 块配置警报如何处理。receivers 配置警报的目的地。在规则中 expr 配置触发警报的规 则,而 for 指定在触发警报之前,测试表达式必须为 true 的时长,annotations 用于指定展示更多信息的标签。
警报一共有三个状态:
如果不指定 for 子句,那么警报会直接由 Inactive 转为 Firing.
在 annotation 中还可以使用模板,其中有一些变量,和 humanize 等等函数。
routes 是树形的,在 Yaml 配置中直接嵌套。
routes:
- match:
severity: critical
receiver: pager
routes:
- match:
servrity: application
receiver: support_team
Alert 的 silence 也很重要,可以通过
Prometheus 认为实现集群所投入的成本要高于数据本身的价值,所以 Prometheus 不用集群,直接两个配置走起。
为应用程序添加监控,从以下入口和出口做起:
应用程序的指标又分为两大类
业务指标通常是应用程序指标的更进一步,他们通常与技术指标同义。一个技术性指标可能是交易服务的延迟, 而业务性指标可能是每个交易的价值
另外,对于长期业务指标来说,不要用监控系统了,一般来说还是用基于事件的统计系统。
mtail 用于从日志中抽取并发送时间序列
当目标端点没有可以抓取的端点,比如批处理作业,可以使用 push gateway
Push Gateway 开箱即用,没有什么配置。
© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.
友情链接: MySQL 教程站