内置时序库与外部存储
夜莺自带一个时序库让你零依赖起步;这页讲它的边界,以及什么时候必须换成 Prometheus 或 VictoriaMetrics。
夜莺要存两类东西,它们的去处完全不同:
- 元数据——用户、业务组、告警规则、仪表盘、通知配置。存在 SQLite / MySQL / PostgreSQL 里;
- 指标——时序数据。默认存在内置时序库,生产上通常换成外部时序库。
搞混这两个,就会出现「我明明配了 VictoriaMetrics,为什么还要 MySQL」这类困惑。
元数据:SQLite 只够测试
默认 DBType = "sqlite",数据在二进制同级目录的 n9e.db。
好处是零依赖,代价是没有第二份数据、多实例没法共享。
生产换成 MySQL 或 PostgreSQL:
[DB]
DBType = "mysql"
DSN = "root:<password>@tcp(localhost:3306)/n9e_v6?charset=utf8mb4&parseTime=True&loc=Local"
Redis 同理:默认 RedisType = "miniredis" 是进程内的假 Redis,
生产要换成 standalone / cluster / sentinel。
内置时序库:为「开箱」而生
默认开启:
[EmbeddedTSDB]
Enable = true
Dir = "data/tsdb"
RetentionDuration = "15d"
MaxBytes = "10GiB"
打开时,Categraf 推过来的指标存在本地,不需要任何外部时序库就能看图和告警。
启动时它还会自动注册一个名叫 embedded-tsdb 的 Prometheus 类型数据源,
指向 http://127.0.0.1:17000/prometheus,所以你装完就能直接建规则。
它的两条硬边界:
- 数据在单个 Center 进程的本地磁盘上。 多副本部署时每个副本只有一部分数据——所以做高可用就必须关掉它。
- 适合小规模,大致 10 万活跃序列以内。再往上要换外部时序库。
什么时候换,怎么换
出现下面任何一条,就该换了:
- 要跑多个 Center 实例做高可用;
- 活跃序列数往 10 万以上走;
- 数据要保留超过内置库的保留期,或者要和别的系统共用同一份指标。
换的做法是双写过渡,不用停机:
# 先加上外部时序库,两边同时写
[[Pushgw.Writers]]
Url = "http://victoriametrics:8428/api/v1/write"
# 等外部库攒够了历史数据,再关掉内置的
[EmbeddedTSDB]
Enable = false
内置库和 Pushgw.Writers 可以同时生效,这就是迁移窗口。
详见外部时序库与双写迁移。
注意:edge / alert / pushgw 不看这段配置
[EmbeddedTSDB] 只有 Center 进程会处理。n9e-edge、n9e-alert、n9e-pushgw
读同一个 etc 目录,但会忽略这一段。