66)prometheus 入门应用【1】
1- 监控分类
1.1- 监控对象
- 网络
- 存储
- 服务器
- 应用
1-2- 程序设计角度
- 基础资源
- 中间件
- 应用程序
- 日志
**建议: **
- 选择开源监控优先选择社区活跃度较高,落地案例较多,容器扩展的项目
- 没有必要采集所有监控指标
2- 基础资源监控
- 网络监控
- 存储监控
- 服务器监控
2.1- 网络监控
- 监控内容:
- 数据中心内的网络流量
- 网络拓扑发现和网络设备
- 网络性能和对网络攻击的探测
- 监控方向:
- 网络性能:监测,实时流量,历史数据,汇总,历史数据分析
- 网络攻击检查: 内外网的DDoS攻击
- 设备: 路由器,交换机,防火墙
- 监控方式:
- snmp
- npm
2.2- 存储监控
- 云存储: 构成存储资源池的存储设备(ISCSI, NFS等)
- 存储性能: 读写速率,IOPS,读写延迟,磁盘用量,文件系统Inode,目录权限
- 存储系统: 例如ceph---OSD,MON,各种状态PG的数量,集群IOPS
- 存储设备:例如服务器---磁盘,SSD,网卡,容量,运行状态
- 分布式存储: HDFS,日志存储
2.3- 服务器监控
- 物理机
- 虚拟机
- 容器
2.3.1- 兼容性
- 硬件: 不同厂商服务器
- 操作系统:windows,linux
- 虚拟化环境: kvm. vmware, xen, docker, rkt
2.3.2- 采集方式
- 内置客户端: agent
- 外部收集: API, master
2.3.3- 指标
- CPU: 整体使用量, 用户态百分比,内核百分比,每个CPU的使用量,等待队列的长度, I/O等待百分比, CPU消耗最多的进程, 上下文切换次数,缓存命中率
- 内存: 使用量,剩余量,占用率最高的进程,交换分区大大小,缺页异常数
- 网络I/O: 每个网口的上下行流量,网络延迟,丢包率
- 磁盘I/O: 读写速率,IOPS,磁盘用量,读写延迟
- 物理硬件: IPMI方式-- 风扇,温度,电压
2.4- 中间件
中间件是指系统软件和应用软件之间连接的软件。
2.4.1- 种类
- 消息类: RabbitMQ, Kafka
- web 服务: Tomcat, jetty. apache, nginx
- 缓存: Redis, Memcached
- 数据库: Mysql, PostgreSQL, oracle
2.4.2- 采集指标
目前没有统一的标准和规范。不同中间件有不同的采集项。
- Kafka
- 集群的Topic个数
- Broker数据分区数量
- 日志Offset值
- 生产消费流量
- Redis
- 内存使用量
- 连接数
- 缓存命中率
2.5- 应用程序(APM)
一般使用agent程序。
- 运行状态
- 性能
- 日志
- 调用链: 追踪整个请求过程
2.6- 日志监控
采集日志数据(文本类型)并汇总到日志存储和搜索引擎中,提供日志搜索的Web接入。
黄金案例
Fluentd ---> Kafka ---> Logstash ---> Elasticsearch ---> Kibana
- Fulentd: 日志采集
- Kafka: 数据整流合并,避免日志流量直接冲击。
- Logstash: 日志整理,日志过滤,日志修改
- Elasticsearch: 日志存储和搜索,自带分布式存储,进行日志分片存储,引入多副本,通过Lucene实现日志索引和查询
- Kibana: 日志查询和展现
2.7- 监控架构
2.7.1 实现方式
- 数据采集: 主动采集,被动采集,主被兼有
- 数据传输: Socket,HTTP
- 数据存储: mysql, MongoDB, OpenTSDB, InfluxDB
2.7.2 总体架构
核心: 数据采集和数据整理
- 采集系统: 信息采集,过滤,汇总,存储
- 处理系统: 数据分析,展现,预警,告警动作出发,告警
2.7.3 指标采集
数据采集、数据传输、过滤、数据存储
- 数据采集
- 客户端采集
- 标准协议: SNMP, JMX, IPMI
- 数据传输和过滤
- http
- socket
- rabbitmq,kafka
- 数据存储
- 时序数据库(TSDB)
- 关系型数据库
2.7.3.1- 数据采集
- 客户端采集
- 针对制定的设备和系统开发的采集器,在部署时也和监控对象绑定部署
- 将采集数据上报到监控中心节点进行汇聚。
- 中继节点完成数据清理、过滤和转发。
- 标准数据协议
- 数据规范统一,普适性更广。
2.7.3.2 - 数据传输和过滤
- http协议
- agent是一个http服务端----pull
- agent是一个客户端---push
- socket
- TCP/IP传输通道,传输更高效
- 消息中间件
- 数据一定程度持久化
- 数据整流
- 多个接收消息,均衡流量
- 强依赖中间件
- 部署和运维复杂
2.7.3.3- 数据存储
- 时序数据库
- 时间属性
- 一次性写入多次读取
- 数据流持续平稳
- 一时间维度查询存储量大,数据只读及压缩比
2.7.4-数据处理
数据查询、数据分析、基于规则告警
2.7.4.1- 数据查询
- 折线图: 数据变化
- 饼图: 占比
- 柱状图: 对比
展现工具:
- grafana
- kibana
2.7.4.2- 数据分析
用户或者其他系统对监控数据的性能分析、关联分析和趋势分析
- 性能分析: 分析某个应用在特定时间内的资源消耗情况
- 关联分析: 不同维度数据之间的关联
- 趋势分析: 对采集数据指标进行分析,结合平局数算法,指数平滑算法,Holt线性趋势算法,机器学习模型等,分析数据内在周期规律,得出未来变化趋势。
2.7.4.3- 基于规则告警
利用已经采集的监控数据,匹配用户自定义的多维度告警规则。
- 触发告警规则
- 告警后的恢复脚本
2.8- 智能监控
- 传统监控:性能监控、健康状态、应用监控
- 智能监控:机器学习,自动化运维,智能分析,故障处理
特点:
- 通过多维度的指标分析定位问题。
- 故障风险预测:对过去故障的学习,预测未来的故障时间
- 智能处理: 专家系统(机器提供一些处理意见),基于机器的自动化运维
2.9- prometheus简介
由SoundCloud开发的开源监控告警系统,自带时序数据库,基于go语言编写。
2.9.1- 优点
- 多维度的数据模型和灵活的查询方式
- -监控指标多个Tag
- 简单的PromSQL语法
- HTTP查询接口
- 支持本地节点本地存储,同时支持第三方时序数据库
- 基于HTTP的Pull方式采集和Push方式向中间网关推送数据
- 静态文件和动态发现机制发现监控对象
- 维护简单,支持二进制直接启动,和容器化部署镜像
- 数据分区采样和联邦部署,支持大规模集群
2.9.2- 架构
- prometheus server: 定时在目标上抓取metric数据
- metric: 暴露一个http接口用于prometheus server 抓取
- storage: 一定规则清理和整理数据
- 本地存储:自带的时序数据库保存到本地磁盘
- 远端存储:远端时序数据库。
- 图表数据化:Grafana,PromDash
- PushGateway: 系统主动推送metric到pushgateway, server定时去Gateway抓取数据
- AlertManager:邮件等告警方式
专注运维开发和开源技术!!