本地存储配置
prometheus默认是在本地集成了一个tsdb数据库,用来做本地存储。采用自定义格式将数据保存在本地磁盘当中。按照2个小时为一个时间窗口,将两个小时内产生的数据存储在一个Block块中,每一个快中包含该时间窗口内的所有样本数据chunks,元数据文件meta.json,以及索引文件index
当前时间窗口内正在收集的样本数据,Prometheus则会直接将数据保存在内存当中。为了确保此期间如果Prometheus发生崩溃或者重启时能够恢复数据,Prometheus启动时会从写入日志(WAL)进行重播,从而恢复数据。此期间如果通过API删除时间序列,删除记录也会保存在单独的逻辑文件当中(tombstone)。
在文件系统中这些块保存在单独的目录当中,Prometheus保存块数据的目录结构如下所示,默认是安装之后保存在data目录下
通过时间窗口的形式保存所有的样本数据,可以明显提高Prometheus的查询效率,当查询一段时间范围内的所有样本数据时,只需要简单的从落在该范围内的块中查询数据即可。
同时该存储方式可以简化历史数据的删除逻辑。只要一个块的时间范围落在了配置的保留范围之外,直接丢弃该块即可。
当然,这些逻辑数据能够使用命令直接删除的。删除之后,收集的样本自然就不存在了。
在promethesu启动参数里面,有很多参数可以直接配置
以下是常用参数说明
参数 | 默认值 | 含义 |
--storage.tsdb.path | data/ | 日志存储的路径 |
--storage.tsdb.retention | 15d | 样本保存的时间 |
--storage.tsdb.min-block-duration | 2h | 头部块是时间戳 范围 |
--storage.tsdb.max-block-duration | 36h | 压缩块的最大时间戳范围,它是任何持久化块的最小持续时间。 |
--storage.tsdb.no-lockfile | fasle | .不要在数据目录中创建锁定文件 |
在一般情况下,Prometheus中存储的每一个样本大概占用1-2字节大小
远端存储
适用于大量历史监控数据的存储和查询。通过中间层的设配器的转化,实现将数据保存到远端。
适配器实现了prometheus存储的remote write和remote reade接口,并把数据转化为远端存储支持的数据格式。
存储设配器:
prometheus通过下面的两种方式来实现与其他远端存储系统对接
- 按照标准格式将metrics写到远端存储
- 按照标准格式从远端的url来读取metrics
配置远端存储infuxdb
InfluxDB是一个由InfluxData开发的开源时序型数据库,专注于海量时序数据的高性能读、高性能写、高效存储与实时分析等,在DB-Engines Ranking时序型数据库排行榜上排名第一,广泛应用于DevOps监控、IoT监控、实时分析等场景。
InfluxDB是一种时序数据高效读写、压缩存储、实时计算能力为一体的数据库服务,除了具有成本优势的高性能读、高性能写、高存储率,InfluxDB还具有如下特点:
- 无系统环境依赖,部署方便。
- 无结构化(SchemaLess)的数据模型,灵活强大。
- 原生HTTP管理接口,免插件配置和免第三方依赖。
- 强大的类SQL查询语句的操作接口,学习成本低,上手快。
- 丰富的权限管理功能,精细到“表”级别。
- 丰富的时效管理功能,自动删除过期数据,自定义删除指标数据。
- 低成本存储,采样时序数据,压缩存储。
- 丰富的聚合函数,支持AVG、SUM、MAX、MIN等聚合函数。
influxdb安装使用
influxdb默认使用如下的网络端口:
TCP:8086 客户端和服务端的http api通信
TCP:8088 备份和恢复数据的RPC服务使用
另外,Influxdb提供了都中可能需要自定义的端口插件,默认配置文件为/etc/influxdb/influxdb.conf
1 配置yum源
cat >/etc/yum.repos.d/influxdb.repo <<EOF
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
2 安装并启动
sudo yum install influxdb -y && systemctl start influxdb
3 相关配置文件
启动指定配置文件
influxde -config /etc/influxdb/influxdb.conf
4 创建prometheus数据库
influx
create database prometheus;
show database;
5 修改prometheus的配置文件,增加远程配置
#vim prometheus.yaml
remote_write:
- url: "http://192.168.85.6:8086/api/v1/prom/write?db=prometheus"
remote_read:
- url: "http://192.168.85.6:8086/api/v1/prom/read?db=prometheus"
重启prometheus
6 验证是否有数据写入
> use prometheus;
> select * from prometheus_http_requests_total limit 10;
当数据写入成功后,停止Prometheus服务。同时删除Prometheus的data目录,模拟Promthues数据丢失的情况后重启Prometheus。打开Prometheus UI如果配置正常,Prometheus可以正常查询到本地存储以删除的历史数据记录。