Prometheus Monitoring System & Time Series Database
什么是 TSDB (Time Series Database):
我们可以简单的理解为.一个优化后用来处理时间序列数据的软件,并且数据中的数组是由时间进行索引的.
时间序列数据库的特点:
- 大部分时间都是写入操作
- 写入操作几乎是顺序添加;大多数时候数据到达后都以时间排序.
- 写操作很少写入很久之前的数据,也很少更新数据.大多数情况在数据被采集到数秒或者数分钟后就会被写入数据库.
- 删除操作一般为区块删除,选定开始的历史时间并指定后续的区块.很少单独删除某个时间或者分开的随机时间的数据.
- 数据一般远远超过内存大小,所以缓存基本无用.系统一般是 IO 密集型
- 读操作是十分典型的升序或者降序的顺序读,
- 高并发的读操作十分常见.
因此非常适用于用来存储和处理监控数据。
什么是Prometheus
Prometheus是SoundCloud发布的一个开源的系统监控和报警工具。自2012成立以来,许多公司和组织都采用了普罗米修斯,该项目拥有一个非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,并且独立于任何公司。为了强调这一点,并明确项目的治理结构,Prometheus在2016年加入了Cloud Native Computing Foundation,作为在 kubernetes之后的第二个由基金会主持的项目。
Prometheus是一个强大的监控平台,提供了监控数据搜集、存储、处理、可视化和告警一套完整的解决方案。
官方网站:https://prometheus.io
Features
prometheus主要的特性:
- 多维数据模型(时序列数据由metric名和一组key/value组成)
- 在多维度上灵活的查询语言(PromQl)
- 不依赖分布式存储,单主节点工作.
- 通过基于HTTP的pull方式采集时序数据
- 可以通过中间网关进行时序列数据推送(pushing)
- 目标服务器可以通过发现服务或者静态配置实现
- 多种可视化和仪表盘支持
Components
prometheus生态系统由多个组件组成,其中许多是可选的:
- the main Prometheus server which scrapes and stores time series data
- client libraries for instrumenting application code
- a push gateway for supporting short-lived jobs
- special-purpose exporters for services like HAProxy, StatsD, Graphite, etc.
- an alertmanager to handle alerts
- various support tools
Most Prometheus components are written in Go, making them easy to build and deploy as static binaries.
Architecture
从这个架构图,也可以看出 Prometheus 的主要模块包含, prometheus server, exporters, pushgateway, PromQL, Alertmanager, WebUI 等。下面我就简单介绍各个组件实现的功能:
1. prometheus server: 定期从静态配置的 targets 或者服务发现(主要是DNS、consul、k8s、mesos等)的 targets 拉取数据。
2. exporters:负责向prometheus server做数据汇报的程序统。而不同的数据汇报由不同的exporters实现,比如监控主机有node-exporters,mysql有MySQL server exporter,更多请参考链接。
3. pushgateway:主要使用场景为:
Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙原因,导致 Prometheus 无法直接拉取各个 target 数据。在监控业务数据的时候,需要将不同数据汇总, 由 Prometheus 统一收集。
总结:实现类似于zabbix-proxy功能;
4. Alertmanager:实现prometheus的告警功能。
5. webui:主要通过grafana来实现webui展示。
环境搭建
Prometheus Server
Prometheus Server 本身也将以容器的方式运行。
Exporter
Prometheus 有很多现成的 Exporter,完整列表请参考 https://prometheus.io/docs/instrumenting/exporters/
我们将使用:
-
Node Exporter,负责收集 host 硬件和操作系统数据。它将以容器方式运行在所有 host 上。
-
cAdvisor,负责收集容器数据。它将以容器方式运行在所有 host 上。