数字化转型背景下,随着轻量化的容器化技术和微服务应用的深度融合,业务复杂度随之上升。基于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