InfluxDB 是一款开源的时间序列数据库,专为处理高写入和查询负载而设计,特别适合运维监控场景中的指标收集和分析。
docker run -p 8086:8086 \
-v $PWD:/var/lib/influxdb \
influxdb
[meta]
dir = "/var/lib/influxdb/meta"
[data]
dir = "/var/lib/influxdb/data"
wal-dir = "/var/lib/influxdb/wal"
series-id-set-cache-size = 100
[http]
enabled = true
bind-address = ":8086"
auth-enabled = false # 生产环境建议开启
-- 创建数据库
CREATE DATABASE monitor_db
-- 查看数据库
SHOW DATABASES
-- 使用数据库
USE monitor_db
# 使用HTTP API写入
curl -i -XPOST "http://localhost:8086/write?db=monitor_db" \
--data-binary "cpu_load,host=server01 value=0.64 1434055562000000000"
-- 基本查询
SELECT * FROM cpu_load WHERE time > now() - 1h
-- 聚合查询
SELECT MEAN(value) FROM cpu_load
WHERE time > now() - 1h GROUP BY time(5m)
-- 多条件查询
SELECT * FROM cpu_load
WHERE host='server01' AND value > 0.8
-- 创建保留策略(30天数据,1个副本)
CREATE RETENTION POLICY "30_days"
ON "monitor_db"
DURATION 30d REPLICATION 1 DEFAULT
-- 修改保留策略
ALTER RETENTION POLICY "30_days"
ON "monitor_db"
DURATION 60d
CREATE CONTINUOUS QUERY "cq_5m_cpu"
ON "monitor_db"
BEGIN
SELECT MEAN(value) INTO "cpu_load_5m"
FROM "cpu_load"
GROUP BY time(5m),*
END
系统指标采集示例:
cpu,host=server01,region=us-west usage=0.64,idle=0.36
memory,host=server01 used=64,free=32
disk,host=server01,path=/ used_percent=78.3
合理使用Tag和Field:
批量写入:每次写入尽量批量提交(5000-10000点/批)
调整时间精度:写入时统一使用纳秒时间戳
Series设计:避免高基数series(过多唯一tag组合)
硬件配置建议:
问题1:写入速度慢 - 检查批量写入大小 - 检查网络延迟 - 检查磁盘IO性能
问题2:查询超时 - 优化查询语句,限制时间范围 - 添加适当的tag索引 - 考虑使用连续查询预聚合数据
问题3:磁盘空间增长过快 - 检查保留策略设置 - 检查series基数是否过高 - 启用数据压缩
-- 查看series基数
SHOW SERIES CARDINALITY
-- 查看存储统计
SHOW STATS
-- 查看诊断信息
SHOW DIAGNOSTICS
# Telegraf配置示例
[[outputs.influxdb]]
urls = ["http://localhost:8086"]
database = "monitor_db"
timeout = "5s"
Type: InfluxDB
URL: http://localhost:8086
Database: monitor_db
User: admin (生产环境)
Password: *****
启用认证
[http]
auth-enabled = true
创建专用用户
CREATE USER admin WITH PASSWORD 'complexpassword' WITH ALL PRIVILEGES
CREATE USER grafana WITH PASSWORD 'readonlypass' WITH PRIVILEGES
网络隔离:限制访问IP
定期备份元数据和数据文件
掌握这些InfluxDB核心知识,您将能够高效地构建和维护运维监控系统,在关键时刻快速定位和解决问题。