架构方案: 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

  • influxDB
  • RRDtool
  • Graphite
  • Kdb
  • Druid
  • KairosDB
  • Prometheus

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架构图

prometheus.png

7.部署和配置

7.1.docker-compose一键部署

  • docker-compose配置地址
  • 默认端口
alertmanager  9093
prometheus    9090
node-exporter 9100
cadvisor      8080
grafana       3000 

7.2.参考配置

  • 个人参考配置
  1. 修改prometheus/prometheus.yml添加本地docker配置中metrics-addr。参考how-to-monitor-docker-for-mac-windows
  2. 修改prometheus/alert.rules触发报警提示信息
  3. 修改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

9.参考资料

  • how-to-monitor-docker-for-mac-windows
  • Prometheus 初探
  • how-to-monitor-your-system-with-prometheus
  • prometheus-alert-slack-receiver