服务监控prometheus
架构方案: node-exporter + cAdvisor + alertmanager + prometheus + Grafana
1.服务介绍
- node-exporter
Exporter是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。
与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取,默认的抓取地址为http://CURRENT_IP:9100/metrics
Prometheus提供多种类型的Exporter用于采集各种不同服务的运行状态。Node Exporter顾名思义,主要用于采集底层服务器的各种运行参数。
目前Node Exporter支持几乎所有常见的监控点,比如conntrack,cpu,diskstats,filesystem,loadavg,meminfo,netstat等。
- cAdvisor
cAdvisor 是谷歌公司用来分析运行中的 Docker 容器的资源占用以及性能特性的工具。
cAdvisor 是一个运行中的守护进程用来收集、聚合、处理和导出运行容器相关的信息,每个容器保持独立的参数、历史资源使用情况和完整的资源使用数据。当前支持 lmctfy 容器和 Docker 容器。
- Alertmanager
官方提供的 alertmanager 实现告警通知。Alertmanager处理由类似Prometheus服务器等客户端发来的警报,之后需要删除重复、分组,并将它们通过路由发送到正确的接收器,比如电子邮件、Slack等。Alertmanager还支持沉默和警报抑制的机制。
- prometheus
Prometheus是一个开源监控系统,它前身是SoundCloud的警告工具包。从2012年开始,许多公司和组织开始使用Prometheus。该项目的开发人员和用户社区非常活跃,越来越多的开发人员和用户参与到该项目中。
目前它是一个独立的开源项目,且不依赖与任何公司。 为了强调这点和明确该项目治理结构,Prometheus在2016年继Kurberntes之后,加入了Cloud Native Computing Foundation。
- Grafana
Grafana是一个开源的指标量监测和可视化工具。常用于展示基础设施的时序数据和应用程序运行分析。Grafana的dashboard展示非常炫酷,是运维利器。
根据查询条件设置聚合规则,在合适的图表上进行展示,多个图表共同组建成一个dashboard.
2.TSDB(Time Series Database)
一个优化后用来处理时间序列数据的软件,并且数据中的数组是由时间进行索引的.
时间序列数据库的特点:
- 大部分时间都是写入操作
- 写入操作几乎是顺序添加;大多数时候数据到达后都以时间排序.
- 写操作很少写入很久之前的数据,也很少更新数据.大多数情况在数据被采集到数秒或者数分钟后就会被写入数据库.
- 删除操作一般为区块删除,选定开始的历史时间并指定后续的区块.很少单独删除某个时间或者分开的随机时间的数据.
- 数据一般远远超过内存大小,所以缓存基本无用.系统一般是 IO 密集型
- 读操作是十分典型的升序或者降序的顺序读,
- 高并发的读操作十分常见.
3.部分常见 TSDB
4.Prometheus特征
- 多维度数据模型(时序列数据由metric名和一组key/value组成)
- 在多维度上灵活的查询语言(PromQl)
- 不依赖分布式存储,单个服务器节点是自主的
- 以HTTP方式,通过pull模型采集时间序列数据
- 也通过中间网关支持push模型
- 通过服务发现或者静态配置,来发现目标服务对象
- 支持多种多样的图表和界面展示,grafana也支持它
5.prometheus 相关组件
Prometheus生态系统由多个组件组成,其中许多是可选的:
- Prometheus 主服务,用来抓取和存储时序数据
- client library 用来构造应用或 exporter 代码 (go,java,python,ruby)
- push 网关可用来支持短连接任务
- 可视化的dashboard (两种选择,promdash 和 grafana.目前主流选择是 grafana.)
- 一些特殊需求的数据出口(用于HAProxy, StatsD, Graphite等服务)
- 实验性的报警管理端(alartmanager,单独进行报警汇总,分发,屏蔽等 )
- promethues 的各个组件基本都是用 golang 编写,对编译和部署十分友好.并且没有特殊依赖.基本都是独立工作.
6.prometheus架构图
7.部署和配置
7.1.docker-compose一键部署
- docker-compose配置地址
默认端口
alertmanager 9093 prometheus 9090 node-exporter 9100 cadvisor 8080 grafana 3000
7.2.参考配置
- 修改prometheus/prometheus.yml添加本地docker配置中metrics-addr。参考how-to-monitor-docker-for-mac-windows
- 修改prometheus/alert.rules触发报警提示信息
- 修改alertmanager/config.yml关于slack配置信息。包括username channel api_url。参考prometheus-alert-slack-receiver
8.Dashboards
- dashboards下载
- 推荐:Docker and system monitoring
- 推荐:Docker Dashboard
- 推荐:Docker monitoring
- 推荐:Docker-Swarm-Monitor