监控相关
ZABBIX安装与使用
自动发现与自动注册
配置文件
分布式监控
zabbix_sender安装和使用
zabbix_get安装与使用
自定义监控
自动发现监控json
PERCONA插件
PERCONA多实例
日志监控
相关项目监控
监控MySQL
监控Haproxy
Fluentd日志监控
Grafana(可视化监控指标)
grafana地图插件
添加prometheus模板
开启HTTPS
添加zabbix插件
Grafana模板
正则表达式
Prometheus监控
安装与使用
Prometheus存储
服务发现
Prometheus标签
PromQL查询
PushGateway推送组件
AlertManager告警组件
告警规则rule
K8S监控(kube-state-metric/cadvisor)
探针监控(blackbox_exporter)
Node_export
Mysql_export
Redis-exporter
cloudeye-exporter【华为云监控】
RabbitMQ-exporter
K8S监控
本文档使用MrDoc发布
返回首页
-
+
Prometheus存储
2021年6月29日 09:43
admin
#存储原理 #本地存储 ##容量规划 在一般情况下,Prometheus中存储的每一个样本大概占用1-2字节大小。如果需要对Prometheus Server的本地磁盘空间做容量规划时,可以通过bytes以下公式计算: 内存大小 = 每秒获取样本数 * 样本大小(默认2bytes) * 保留时间(默认2小时) 磁盘大小 = 每秒获取样本数 * 样本大小(默认2bytes * 保留时间(默认15d) ####每秒获取样本数 rate(prometheus_tsdb_head_samples_appended_total[1m]) --- ##存储流程(本地) ![](/media//202106/2021-06-29094919002812.png) #Prometheus按2小时一个block进行存储,每个block由一个目录组成,该目录里包含:一个或者多个chunk文件(保存timeseries数据)、一个metadata文件、一个index文件(通过metric name和labels查找timeseries数据在chunk文件的位置)。 #最新写入的数据保存在内存block中,达到2小时后写入磁盘。为了防止程序崩溃导致数据丢失,实现了WAL(write-ahead-log)机制,启动时会以写入日志(WAL)的方式来实现重播,从而恢复数据。 #删除数据时,删除条目会记录在独立的tombstone文件中,而不是立即从chunk文件删除。 --- ##目录结构(本地) ####block 在这里是一个数据块,每个数据块相对独立,由一个目录组成,该目录里包含:一个或者多个 chunk 文件(保存 timeseries 数据)、一个 metadata 文件、一个 index 文件(通过 metric name 和 labels 查找 timeseries 数据在 chunk 文件的位置)。 ![](/media//202106/2021-06-29095150375456.png) --- ##存储配置(本地) --storage.tsdb.path=/usr/local/prometheus/data 存储数据的目录,默认为安装目录的data目录,如果要挂外部存储,可以指定该目录 --storage.tsdb.retention.time=15d: 数据过期清理时间,存储时间默认是15d(天),单位:y, w, d, h, m, s, ms --storage.tsdb.retention.size: 实验性质,声明数据块的最大值,不包括wal文件,如512MB --- ##存储监控(本地) ####Prometheus将所有当前使用的块保留在内存中。此外,它将最新使用的块保留在内存中,最大内存可以通过storage.local.memory-chunks标志配置。 ####监测当前使用的内存量: prometheus_local_storage_memory_chunks process_resident_memory_bytes ####监测当前使用的存储指标: prometheus_local_storage_memory_series: 时间序列持有的内存当前块数量 prometheus_local_storage_memory_chunks: 在内存中持久块的当前数量 prometheus_local_storage_chunks_to_persist: 当前仍然需要持久化到磁盘的的内存块数量 prometheus_local_storage_persistence_urgency_score: 紧急程度分数 --- #远程存储 ####Prometheus默认是自己带有存储的,保存的时间为15天。但本地存储也意味着Prometheus无法持久化数据,无法存储大量历史数据,同时也无法灵活扩展。 ####为了保证Prometheus的简单性,Prometheus并没有从自身集群的维度来解决这些问题,而是定义了两种接口,remote_write/remote_read,将数据抛出去,你自己处理。 ####Prometheus的remote_storage 其实是一个adapter,至于在adapter的另一端是什么类型的时序数据库它根本不关心,如果你愿意,你也可以编写自己的adpater。 存储的方式为:Prometheus —-发送数据—- > remote_storage_adapter —- 存储数据 —-> influxdb。 ####prometheus通过下面两种方式来实现与其他的远端存储系统对接: Prometheus 按照标准的格式将metrics写到远端存储 Prometheus 按照标准格式从远端的url来读取metrics ![](/media//202106/2021-06-29100819692326.png) ##远程读 在远程读的流程当中,当用户发起查询请求后,Promthues将向remote_read中配置的URL发起查询请求(matchers,ranges),Adaptor根据请求条件从第三方存储服务中获取响应的数据。同时将数据转换为Promthues的原始样本数据返回给Prometheus Server。 当获取到样本数据后,Promthues在本地使用PromQL对样本数据进行二次处理。 ##远程写 用户可以在Promtheus配置文件中指定Remote Write(远程写)的URL地址,一旦设置了该配置项,Prometheus将样本数据通过HTTP的形式发送给适配器(Adaptor)。而用户则可以在适配器中对接外部任意的服务。外部服务可以是真正的存储系统,公有云的存储服务,也可以是消息队列等任意形式。 --- ##配置 ####配置非常简单,只需要在prometheus的配置文件中,将对应的地址配置下就行 remote_write: - url: "http://localhost:9201/write" remote_read: - url: "http://localhost:9201/read" ##现在社区已经实现了以下的远程存储方案 AppOptics: write Chronix: write Cortex: read and write CrateDB: read and write Elasticsearch: write Gnocchi: write Graphite: write InfluxDB: read and write OpenTSDB: write PostgreSQL/TimescaleDB: read and write SignalFx: write ###只读推荐:Elasticsearch ###读写推荐:InfluxDB与PostgreSQL
分享到: