运维

数字化转型背景下,随着轻量化的容器化技术和微服务应用的深度融合,业务复杂度随之上升。基于Prometheus的容器云监控体系成为目前主流容器监控事实标准,本文主要介绍Prometheus云原生监控体系,涵盖指标采集、数据存储、可视化展示,告警入库等功能,结合生产实践供大家参考。

一、监控对象

Prometheus监控范围覆盖IT基础设施层通用的服务器、中间件、数据库、容器/集群、服务可用性的指标,根据实际生产业务场景需要选择IaaS层、PaaS层、SaaS层监控指标包含但不限于以下内容。
监控对象
类型
监控内容
采集频率
IaaS层
物理机
服务器状态 主机/内存可用/使用率 CPU空闲/负载率 磁盘读写/IO/空间使用 文件系统空间/使用 带宽利用率 网络流量/重传/丢包/拥塞 网络时延等
秒级/分钟级
虚拟机
秒级/分钟级
PaaS层
数据库
集群状态 连接数(活跃/最大/当前/) 数据实例/对象/表空间/慢查询 Buffer/死锁 内存使用 负载
分钟级
中间件
状态 连接/请求数 会话数
分钟级
容器
运行时间 集群状态/网络流量 Node数量/状态/利用率 Pod数量/状态/重启次数等 Container数量/状态/利用率 资源对象使用情况
秒级
SaaS层
应用服务
服务可用性(http/https/tcp探测) 会话数/连接数/请求数 应用响应时间 进程状态 4XX/5XX 状态码占比
秒级/分钟级
1、采集探针
根据采集对象区分,需要在不同节点上部署采集探针,根据采集对象的不同需要在各节点上部署的探针也会有所区别;其中服务器是每个节点需要部署,其它采集对象如数据库、中间件、进程、容器等根据各节点上实际情况部署对应采集探针。
常见采集探针部署实例:
notion image
2、采集指标
以服务器基础资源采集node_exporter为例,采集探针通过标准的http协议暴露指定端口9100,通过pull或者pushgateway模式拉取、推送指标数据至Prometheus Server层。
基础资源指标示例:curl localhost:9100/metrcis
MySQL 数据库指标实例:curl localhost:9104/metrics
3、Prometheus Server 服务端配置
1)服务器监控
配置说明:其中Job_name代表一系列采集 target 集合,scrape_timeout表示抓取超时判断,它的设定应小于scrape_interval,否则会报逻辑错误。抓取对象采用基于文件的服务发现机制file_sd_configs,其中files表示文件内容如下,refresh_interval表示刷新频率。
说明:labels 字段用键值对形式标识时序数据,便于后续检索使用,targets 字段是实际监控对象集合,暴露端口默认为9100,可根据情况在采集侧指定为任何合法端口。

二、监控可视化

Grafana 作为 Prometheus 的可视化组件,提供了丰富的客户化面板,如时序面板(折线图、散点图、面积图等)、表格、仪表板、链路图、统计数据、柱状图、饼状图等多维度呈现监控指标。
1、数据源
对接 prometheus 数据源
2、资源概览图
基础资源概览图呈现当前监控对象整体概览,CPU负载,内存使用率,磁盘使用率等核心关键指标信息
notion image
notion image
K8s 的 pod 资源概览信息
notion image
基于命名空间的资源对象统计信息
notion image
支持基于时间范围的检索
notion image
3、用户权限管理
notion image
notion image
Grafana用户权限部分有 user,team,role,org的概念,
  • org 对应类似租户的概念,可以对接不同数据源,是一个比较大的概念。
  • role 根据需要分为admin,editor,viewer 三种不同操作权限。
  • team 是用户组的概念,一组相同权限用户组成的概念组。
  • user 是基本用户概念,与team、role、org 关联

三、告警管理

1、告警规则
示例:内存使用率过高
  • alert 为告警名称
  • expr 为告警表达式,就是具体的规则定义
  • for 为告警等待时长,多久判定为告警
  • lables 是自定义告警标签,如本例中告警级别和告警类型,可以通过路由机制,过滤不同标签发送指定组接收
  • annotations 告警描述,发送告警的具体信息
2、告警状态
notion image
Prometheus 告警状态有三种状态:Inactive、Pending、Firing。
  • Inactive:非活动状态,表示正在监控,但是还未有任何警报触发。
  • Pending:表示这个警报必须被触发。由于警报可以被分组、压抑/抑制或静默/静音,所以等待验证,一旦所有的验证都通过,则将转到 Firing 状态。
  • Firing:将警报发送到 AlertManager,它将按照配置将警报的发送给所有接收者。一旦警报解除,则将状态转到 Inactive,如此循环。
3、告警发送
Promehteus支持多种主流类型告警媒介,如邮箱、钉钉、企业微信、运营商短信等,也可以使用webhook自定义接口来实现。
告警信息示例如下:
Loading...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP