Promtheus监控体系

Promtheus存储基础

Prometheus是一款面向云原生应用程序的开源监控工具。以时间序列的方式保存在内存(TSDB 时序数据库)中,并定时保存到硬盘。默认保留15天,设置数据保存时长“storage.tsdb.retention.time=365d”

Prometheus按照block块的方式来存储数据,每2小时为一个时间单位,首先会存储到内存中,当到达2小时后,会自动写入磁盘中。block的目录结构如下:

drwxr-xr-x   6   staff    192  6  2 13:00 01F75HFHHTB8H2MFVJP6Y4ADEB
drwxr-xr-x   6   staff    192  6  2 15:00 01F75RBFAKZ5RY6CYMBQNJN5AC
drwxr-xr-x   6   staff    192  6  2 17:00 01F75Z6YFVHVDMMRK350Q77MGM
-rw-r--r--   1   staff      0  5 24 10:03 lock
-rw-r--r--   1   staff  20001  5 31 14:47 queries.active
drwxr-xr-x   8   staff    256  6  2 17:00 wal
  • chunks:保存timeseries数据
  • meta.json:配置文件,包含起止时间、包含哪些block
  • index:通过metric名和labels查找时序数据在chunk文件中的位置
  • tombstones:删除操作会首先记录到这个文件

为防止程序异常而导致数据丢失,采用了WAL机制,即2小时内记录的数据存储在内存中的同时,还会记录一份日志,存储在block下的wal目录中。当程序再次启动时,会将wal目录中的数据写入对应的block中,从而达到恢复数据的效果。当删除数据时,删除条目会记录在tombstones 中,而不是立刻删除。

Prometheus采用的存储方式称为“时间分片”,每个block都是一个独立的数据库。优势是可以提高查询效率,查哪个时间段的数据,只需要打开对应的block即可,无需打开多余数据。

Prometheus的存储层使用了全文检索中的“倒排索引”概念,将每个时间序列视为一个小文档。而metric和label对应的是文档中的单词。

Promtheus监控架构

官网

  1. Prometheus server:采集存储监控数据
  2. Prometheus targets:采集对象主要分为两类
    2.1 各种资源或服务exporters。
    2.2 Pushgateway,一些短作业将监控数据推送至Pushgateway。
    Prometheus server均采取pull模式主动采集对象的指标数据。
  3. 服务自发现机制:如通过访问Kubernetes集群API Server端点,就可以动态发
    现和监控集群内资源和服务。
  4. Alertmanager:Prometheus server定义告警规则并应用于采集到的监控数据,
    触发告警之后推送告警信息至Alertmanager,由Alertmanager进行告警处理和
    路由(支持邮件、webhook等方式)。
  5. 数据可视化和导出:Prometheus web控制台和Grafana,以及API客户端。
    在这里插入图片描述

Operator Prometheus是啥?

官网
在这里插入图片描述
上图中的Operator作为控制器会去创建Prometheus、ServiceMonitor、PodMonitor、
AlertManager以及PrometheusRule等多个CRD(CustomResourceDefinitions)资
源。

  1. Prometheus:作为Prometheus Server存在。
  2. ServiceMonitor:以声明方式指定应如何监视service组。自动关联service对应的pod,并持续监控pod节点。Operator根据定义自动生成
    Prometheus采集配置。实际上就是exporter的各种抽象,提供metrics数据接口。
    Prometheus就是通过ServiceMonitor提供的metrics数据接口去 pull 数据。
  3. PodMonitor:以声明方式指定应如何监视Pod组。Operator根据定义自动生成
    Prometheus采集配置。
  4. AlertManager:作为AlertManager存在。
  5. PrometheusRule:Prometheus实例使用的报警规则文件。

总结一下就是,Prometheus Operator自动检测Kubernetes API服务器对上述任何对象的更改,并确保匹配的部署和配置保持同步。

Kube-Prometheus(部署集群)

项目给我们提供了一份默认的 Prometheus 配置文件内容,对于自定义的配置项和新增的监控项需要新增CRD资源进行,Kube-Prometheus 是一个更全的生产级别监控套件,包括以下组件:

  • The Prometheus Operator
  • Highly available Prometheus
  • Highly available Alertmanager
  • Prometheus node-exporter
  • Prometheus Adapter for Kubernetes Metrics APIs
  • kube-state-metrics
  • Grafana

监控分类

主机监控

node_exporter
CPU(使用率、负载)
内存(使用率、total、free、buffer、cache)
磁盘(使用率、IO负载)
网络(流入流出的流量、tcp连接数等)
主机存活状态(0/1)
进程状态(docker、kubelet等)

容器监控

CPU
内存
事件 kube-eventer
参考kube-eventer部署文档

应用监控

blackbox_exporter 用于监控http、tcp、dns、icmp、证书过期等进行探测,也常用于第三方接口响应时间、成功率
jmx_exporter用于java程序监控,有GC、线程池状态等
actuator micrometer:参考https://blog.csdn.net/aixiaoyang168/article/details/100866159
jvm grafana:12856

业务监控

主要针对一些业务关键数据展示,如PV、新注册用户、交易数等。
需要应用结合埋点

HPA

k8s本身的HPA比较弱,可以结合prometheus-adapter实现指标自定义HPA

混合云监控方案

prometheus集群联邦

集群联邦允许 Prometheus 从另一个 Prometheus 抓取选定的时间序列。仍然使用prometheus本地存储。从架构而言还是有些不足

Thanos

最大的特点就是使用了兼容s3协议的远程存储。
在这里插入图片描述
官网
thanos dashboard
helm

VictoriaMetrics

VictoriaMetrics是一个快速、经济、可扩展的时间序列数据库。它可以用作普罗米修斯的长期远程存储。
官网

告警通知

基于PromQL定义报警触发条件,可以按组分类,进行聚合,条件满足则向Alertmanager发送报警信息,再通知到邮件、钉钉、企业微信、webhook等。

告警规则集合

https://awesome-prometheus-alerts.grep.to/

故障处理/复盘

参考文献:
https://github.com/prometheus-operator/kube-prometheus
https://github.com/prometheus/jmx_exporter
https://grafana.com/grafana/dashboards/8563
https://www.jianshu.com/p/7fb9e68a5a6c
https://www.it610.com/article/1288617417697730560.htm

转载请注明出处。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值