Ingester

Ingester负责将写入的指标数据存储到长期存储后端,在查询时返回内存中的短期指标数据。

写入的指标数据不会立即写入到存储中而是驻留在内存中,并周期性地刷写到存储中(在默认情况下使用chunks存储会驻留12小时,block存储会驻留2小时)。因此,querier在查询时需要同时从Ingester中和长期存储后端中获取短期数据和长期数据。

Ingester中包含了一个生命周期管理器用于管理Ingester的生命周期并且将其状态同步到哈希环中。有以下几种状态:

  • PENDING

  • JOINING

  • ACTIVE

  • LEAVING

  • UNHEALTHY

ingester是有状态服务,需要使用独立的存储。通过两种方式保证了数据的持久可靠性:

  • replication(多副本)。Distributor会写入多个副本(默认为3)的指标数据到多个Ingester上,在个别Ingester出现故障时,其余的Ingester仍然可以继续将其内存中的冗余副本数据写入到长期存储后端。

  • WAL(预写日志)。还未刷写到长期存储后端的指标数据会以文件形式记录在本地。当Ingester发生故障后重启时,会从WAL中将数据再次加载回内存中。WAL目前对于chunks存储仍然是实验性功能,默认情况下为关闭状态。而在blocks存储中则默认开启。

避免写放大

ingester没有采取实时写入数据到存储后端的方式,目的是减轻频繁写入对长期存储后端产生的压力。并且,ingester还会对驻留在内存中的数据进行分批和压缩,周期性地刷写数据到长期存储后端。

最后更新于