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

一、监控对象

Prometheus监控范围覆盖IT基础设施层通用的服务器、中间件、数据库、容器/集群、服务可用性的指标,根据实际生产业务场景需要选择IaaS层、PaaS层、SaaS层监控指标包含但不限于以下内容。

监控对象 类型 监控内容 采集频率
IaaS层 物理机 服务器状态
主机/内存可用/使用率
CPU空闲/负载率
磁盘读写/IO/空间使用
文件系统空间/使用
带宽利用率
网络流量/重传/丢包/拥塞
网络时延等 秒级/分钟级
虚拟机 秒级/分钟级
PaaS层 数据库 集群状态
连接数(活跃/最大/当前/)
数据实例/对象/表空间/慢查询
Buffer/死锁
内存使用
负载 分钟级
中间件 状态
连接/请求数
会话数 分钟级
容器 运行时间
集群状态/网络流量
Node数量/状态/利用率
Pod数量/状态/重启次数等
Container数量/状态/利用率
资源对象使用情况 秒级
SaaS层 应用服务 服务可用性(http/https/tcp探测)
会话数/连接数/请求数
应用响应时间
进程状态
4XX/5XX 状态码占比 秒级/分钟级

1、采集探针

根据采集对象区分,需要在不同节点上部署采集探针,根据采集对象的不同需要在各节点上部署的探针也会有所区别;其中服务器是每个节点需要部署,其它采集对象如数据库、中间件、进程、容器等根据各节点上实际情况部署对应采集探针。

常见采集探针部署实例:

2、采集指标

以服务器基础资源采集node_exporter为例,采集探针通过标准的http协议暴露指定端口9100,通过pull或者pushgateway模式拉取、推送指标数据至Prometheus Server层。

基础资源指标示例:curl localhost:9100/metrcis

# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 5.76669737e+06
node_cpu_seconds_total{cpu="0",mode="iowait"} 4.48
node_cpu_seconds_total{cpu="0",mode="irq"} 0
node_cpu_seconds_total{cpu="0",mode="nice"} 1055.58
node_cpu_seconds_total{cpu="0",mode="softirq"} 2413.11
# TYPE node_disk_info gauge
node_disk_info{device="dm-0",major="252",minor="0"} 1
node_disk_info{device="nbd0",major="43",minor="0"} 1
node_disk_info{device="nbd1",major="43",minor="32"} 1
node_disk_info{device="nbd10",major="43",minor="320"} 1
node_disk_info{device="nbd11",major="43",minor="352"} 1
node_disk_info{device="nbd12",major="43",minor="384"} 1
node_disk_info{device="nbd13",major="43",minor="416"} 1

MySQL 数据库指标实例:curl localhost:9104/metrics

TYPE mysql_global_variables_sync_master_info gauge
mysql_global_variables_sync_master_info 10000
# TYPE mysql_global_variables_sync_relay_log gauge
mysql_global_variables_sync_relay_log 10000
# TYPE mysql_global_variables_sync_relay_log_info gauge
mysql_global_variables_sync_relay_log_info 10000
# TYPE mysql_global_variables_table_definition_cache gauge
mysql_global_variables_table_definition_cache 1400
# TYPE mysql_global_variables_table_open_cache gauge
mysql_global_variables_table_open_cache 2000
# TYPE mysql_global_variables_table_open_cache_instances gauge
mysql_global_variables_table_open_cache_instances 16
# TYPE mysql_global_variables_thread_cache_size gauge
mysql_global_variables_thread_cache_size 9
# TYPE mysql_global_variables_thread_stack gauge
mysql_global_variables_thread_stack 262144
# TYPE mysql_global_variables_tmp_table_size gauge
mysql_global_variables_tmp_table_size 1.6777216e+07
# TYPE mysql_global_variables_transaction_alloc_block_size gauge
mysql_global_variables_transaction_alloc_block_size 8192

3、Prometheus Server 服务端配置

1)服务器监控

- job_name: 'node'
   metric_path:/metrics
   scheme: http
   scrape_interval: 30s
   scrape_timeout: 20s
    file_sd_configs:
     - files: ['/prom/targets/node.yml']
      refresh_interval: 30s

配置说明:其中Job_name代表一系列采集 target 集合,scrape_timeout表示抓取超时判断,它的设定应小于scrape_interval,否则会报逻辑错误。抓取对象采用基于文件的服务发现机制file_sd_configs,其中files表示文件内容如下,refresh_interval表示刷新频率。

- labels:
    system: 演示平台
    serverType: 虚拟机
  targets: 
  - 192.168.0.1:9100
  - 192.168.0.2:9100
  - 192.168.0.3:9100
  - 192.168.0.4:9100