外观
InfluxDB 内部监控
InfluxDB 1.x 内部监控
监控端点
/metrics 端点
- 功能:暴露InfluxDB内部监控指标
- 默认地址:
http://localhost:8086/metrics - 支持的格式:Prometheus格式
- 开启方法:默认开启,无需额外配置
/debug/pprof 端点
- 功能:提供Go语言pprof性能分析数据
- 默认地址:
http://localhost:8086/debug/pprof - 开启方法:默认开启,无需额外配置
监控配置
配置文件修改
toml# /etc/influxdb/influxdb.conf [monitor] # 开启监控 store-enabled = true # 监控数据保留时长 store-database = "_internal" store-interval = "10s" [http] # 开启HTTP日志 log-enabled = true # 开启慢查询日志 log-queries-after = "1000000000"重启InfluxDB服务
bashsystemctl restart influxdb
内部数据库
_internal 数据库
- 功能:存储InfluxDB自身的监控数据
- 默认保留策略:7天
- 包含的测量集:
runtime:运行时指标httpd:HTTP服务指标queryExecutor:查询执行器指标write:写入指标cache:缓存指标tsm1:TSM存储引擎指标
查询内部监控数据
sql-- 查看HTTP请求统计 SELECT count(*) FROM "_internal"."monitor"."httpd" WHERE time > now() - 1h GROUP BY time(5m), "code" -- 查看写入性能 SELECT mean("write_points_ok") FROM "_internal"."monitor"."write" WHERE time > now() - 1h GROUP BY time(5m) -- 查看缓存命中率 SELECT mean("hits") / mean("misses") as "cache_hit_ratio" FROM "_internal"."monitor"."cache" WHERE time > now() - 1h GROUP BY time(5m)
InfluxDB 2.x 内部监控
监控端点
/metrics 端点
- 功能:暴露InfluxDB内部监控指标
- 默认地址:
http://localhost:8086/metrics - 支持的格式:Prometheus格式
- 开启方法:默认开启,无需额外配置
/health 端点
- 功能:提供InfluxDB健康检查
- 默认地址:
http://localhost:8086/health - 返回格式:JSON
- 开启方法:默认开启,无需额外配置
/debug/pprof 端点
- 功能:提供Go语言pprof性能分析数据
- 默认地址:
http://localhost:8086/debug/pprof - 开启方法:默认开启,无需额外配置
监控配置
配置文件修改
toml# /etc/influxdb/influxd.conf [monitor] # 开启监控 enabled = true # 监控数据保留时长 retention = "7d" [http] # 开启HTTP日志 log-enabled = true # 开启慢查询日志 log-queries-after = "1000000000"使用环境变量配置
bash# 启动时设置环境变量 INFLUXD_MONITOR_ENABLED=true INFLUXD_MONITOR_RETENTION=7d influxd
内部监控数据
监控数据存储
- 存储在内部桶
_monitoring和_tasks中 - 默认保留策略:7天
- 包含的测量集:
influxdb:InfluxDB核心指标system:系统资源指标runtime:运行时指标task:任务执行指标
- 存储在内部桶
查询内部监控数据
sql-- 使用InfluxQL查询 SELECT mean("writeBytes"), mean("readBytes") FROM "_monitoring"."autogen"."influxdb" WHERE time > now() - 1h GROUP BY time(5m) -- 使用Flux查询 from(bucket: "_monitoring") |> range(start: -1h) |> filter(fn: (r) => r["_measurement"] == "influxdb") |> filter(fn: (r) => r["_field"] == "writeBytes" or r["_field"] == "readBytes") |> aggregateWindow(every: 5m, fn: mean, createEmpty: false) |> yield(name: "mean")
核心监控指标
运行时指标
| 指标名称 | 描述 | 单位 | 1.x 测量集 | 2.x 测量集 |
|---|---|---|---|---|
alloc | 已分配的内存 | bytes | runtime | runtime |
goroutines | 当前goroutine数量 | 个 | runtime | runtime |
uptime | 服务运行时间 | seconds | runtime | runtime |
heap_inuse | 堆内存使用量 | bytes | runtime | runtime |
gc_pause_total_ns | GC暂停总时间 | nanoseconds | runtime | runtime |
gc_pauses | GC暂停次数 | 次 | runtime | runtime |
HTTP服务指标
| 指标名称 | 描述 | 单位 | 1.x 测量集 | 2.x 测量集 |
|---|---|---|---|---|
req | HTTP请求总数 | 次 | httpd | influxdb |
write_req | 写入请求数 | 次 | httpd | influxdb |
query_req | 查询请求数 | 次 | httpd | influxdb |
ping_req | Ping请求数 | 次 | httpd | influxdb |
status_2xx | 2xx状态码请求数 | 次 | httpd | influxdb |
status_4xx | 4xx状态码请求数 | 次 | httpd | influxdb |
status_5xx | 5xx状态码请求数 | 次 | httpd | influxdb |
query_duration_ms | 查询执行时间 | milliseconds | httpd | influxdb |
write_duration_ms | 写入执行时间 | milliseconds | httpd | influxdb |
写入指标
| 指标名称 | 描述 | 单位 | 1.x 测量集 | 2.x 测量集 |
|---|---|---|---|---|
write_points_ok | 成功写入的点数 | 个 | write | influxdb |
write_points_err | 写入失败的点数 | 个 | write | influxdb |
write_req | 写入请求数 | 次 | write | influxdb |
write_req_bytes | 写入请求大小 | bytes | write | influxdb |
write_req_err | 写入请求失败数 | 次 | write | influxdb |
查询指标
| 指标名称 | 描述 | 单位 | 1.x 测量集 | 2.x 测量集 |
|---|---|---|---|---|
queries_ok | 成功执行的查询数 | 次 | queryExecutor | influxdb |
queries_err | 执行失败的查询数 | 次 | queryExecutor | influxdb |
query_duration_ms | 查询执行时间 | milliseconds | queryExecutor | influxdb |
query_result_bytes | 查询结果大小 | bytes | queryExecutor | influxdb |
query_row_limit | 查询结果行数限制 | 行 | queryExecutor | influxdb |
存储指标
| 指标名称 | 描述 | 单位 | 1.x 测量集 | 2.x 测量集 |
|---|---|---|---|---|
tsm_files | TSM文件数量 | 个 | tsm1 | influxdb |
tsm_file_size_bytes | TSM文件总大小 | bytes | tsm1 | influxdb |
wal_files | WAL文件数量 | 个 | wal | influxdb |
wal_file_size_bytes | WAL文件总大小 | bytes | wal | influxdb |
cache_size | 缓存大小 | bytes | cache | influxdb |
cache_hit_ratio | 缓存命中率 | 百分比 | cache | influxdb |
series_count | 序列数量 | 个 | database | influxdb |
监控工具集成
Telegraf 集成
配置 Telegraf 收集内部监控数据
toml# /etc/telegraf/telegraf.conf [[inputs.influxdb]] urls = ["http://localhost:8086"] timeout = "5s" username = "admin" password = "admin_password" ssl = false ssl_verify = true insecure_skip_verify = false [[inputs.prometheus]] urls = ["http://localhost:8086/metrics"] interval = "10s" [[outputs.influxdb]] urls = ["http://localhost:8086"] database = "monitoring" retention_policy = "" write_consistency = "any" timeout = "5s"重启 Telegraf 服务
bashsystemctl restart telegraf
Prometheus 集成
配置 Prometheus 抓取指标
yaml# prometheus.yml global: scrape_interval: 15s scrape_configs: - job_name: 'influxdb' static_configs: - targets: ['localhost:8086'] metrics_path: '/metrics'重启 Prometheus 服务
bashsystemctl restart prometheus
Grafana 仪表盘
导入官方仪表盘
- InfluxDB 1.x 官方仪表盘 ID:2583
- InfluxDB 2.x 官方仪表盘 ID:13042
配置数据源
- 登录 Grafana
- 点击左侧菜单中的"Configuration" → "Data Sources"
- 点击"Add data source"
- 选择"InfluxDB"
- 配置 InfluxDB 连接信息
- 点击"Save & Test"
健康检查
1.x 版本健康检查
基本健康检查
bash# 使用curl测试 curl -I http://localhost:8086/ping # 预期返回 HTTP/1.1 204 No Content Content-Type: application/json Request-Id: <request-id> X-Influxdb-Build: OSS X-Influxdb-Version: 1.8.10 X-Request-Id: <request-id> Date: <date>深度健康检查
bash# 检查内部数据库 influx -execute "SHOW DATABASES" # 检查内部监控数据 influx -execute "SELECT * FROM _internal.monitor.httpd LIMIT 10" # 检查进程状态 systemctl status influxdb
2.x 版本健康检查
基本健康检查
bash# 使用curl测试 curl -s http://localhost:8086/health | jq # 预期返回 { "status": "pass", "checks": [ { "name": "influxdb", "status": "pass" } ], "version": "2.7.1", "message": "ready for queries and writes" }深度健康检查
bash# 使用influx CLI检查 influx ping # 检查内部桶 influx bucket list # 检查内部监控数据 influx query -q "from(bucket: \"_monitoring\") |> range(start: -1h) |> limit(n: 10)" # 检查进程状态 systemctl status influxdb
监控告警
1.x 版本告警
创建连续查询监控
sql-- 监控HTTP 5xx错误 CREATE CONTINUOUS QUERY cq_http_errors ON _internal BEGIN SELECT count("code") INTO _internal.monitor.http_errors FROM httpd WHERE code = '500' GROUP BY time(5m) END -- 监控写入失败 CREATE CONTINUOUS QUERY cq_write_errors ON _internal BEGIN SELECT sum("write_points_err") INTO _internal.monitor.write_errors FROM write GROUP BY time(5m) END创建告警脚本
bash#!/bin/bash # 检查InfluxDB写入错误 ERROR_COUNT=$(influx -execute "SELECT sum(write_points_err) FROM _internal.monitor.write WHERE time > now() - 5m" -format csv | tail -n 1 | cut -d ',' -f 2) if [ "$ERROR_COUNT" -gt 10 ]; then echo "InfluxDB写入错误过多:$ERROR_COUNT" | mail -s "InfluxDB告警" admin@example.com fi
2.x 版本告警
创建告警任务
bash# 创建写入错误告警任务 influx task create -org my-org -name write_errors_alert -every 5m -query " from(bucket: \"_monitoring\") |> range(start: -5m) |> filter(fn: (r) => r["_measurement"] == \"influxdb\") |> filter(fn: (r) => r["_field"] == \"writePointsErr\") |> sum() |> map(fn: (r) => ({ r with _measurement: \"alert\", _field: \"value\", alert: if r._value > 10 then \"write_errors_high\" else \"ok\" })) |> to(bucket: \"monitoring\", org: \"my-org\") "配置告警通知
bash# 创建Slack通知端点 influx notification-endpoint create -org my-org -name slack -type slack -config '{ "url": "https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ", "channel": "#alerts", "username": "InfluxDB" }' # 创建告警规则 influx notification-rule create -org my-org -name write-errors -endpoint slack -every 5m -query " from(bucket: \"monitoring\") |> range(start: -5m) |> filter(fn: (r) => r["_measurement"] == \"alert\") |> filter(fn: (r) => r["_field"] == \"value\") |> filter(fn: (r) => r["alert"] == \"write_errors_high\") "
监控最佳实践
1. 监控关键指标
必须监控的指标:
- 写入成功率和延迟
- 查询成功率和延迟
- 系统资源使用率(CPU、内存、磁盘、网络)
- TSM和WAL文件使用情况
- 序列数量
- 缓存命中率
建议监控频率:
- 实时指标:1秒
- 性能指标:10秒
- 资源指标:1分钟
- 趋势指标:5分钟
2. 设置合理的告警阈值
基于历史数据:
- 根据历史数据分布设置告警阈值
- 避免过于敏感,导致频繁告警
- 建议使用P95或P99值作为阈值
分级告警:
- 警告:潜在问题,需要关注
- 严重:严重问题,需要立即处理
- 紧急:系统故障,需要立即修复
3. 监控数据保留
设置合理的保留策略:
- 实时监控数据:7天
- 历史趋势数据:30天
- 长期归档数据:1年
使用降采样:
- 对长期数据进行降采样,减少存储占用
- 例如:1分钟数据保留7天,5分钟数据保留30天,1小时数据保留1年
4. 定期分析监控数据
每日分析:
- 查看当天的告警记录
- 检查性能指标变化
- 识别异常模式
每周分析:
- 分析本周的性能趋势
- 比较与上周的差异
- 预测未来趋势
每月分析:
- 进行全面的性能评估
- 识别长期趋势
- 制定优化计划
5. 自动化监控
自动化部署监控:
- 使用配置管理工具(如Ansible)自动化部署监控
- 确保所有环境的监控配置一致
自动化告警处理:
- 实现自动告警升级
- 配置告警静默规则
- 自动化常见问题的处理
常见问题(FAQ)
Q1: 如何开启InfluxDB的内部监控?
A1: 开启内部监控的方法包括:
- 在配置文件中设置
store-enabled = true(1.x)或enabled = true(2.x) - 调整监控数据的保留时长和采集间隔
- 重启InfluxDB服务使配置生效
Q2: InfluxDB的内部监控数据存储在哪里?
A2: 内部监控数据存储位置:
- 1.x版本:存储在
_internal数据库中 - 2.x版本:存储在
_monitoring和_tasks内部桶中
Q3: 如何查看InfluxDB的内部监控数据?
A3: 查看内部监控数据的方法包括:
- 使用InfluxQL或Flux查询内部数据库/桶
- 通过Grafana仪表盘可视化查看
- 使用Prometheus和Alertmanager监控
Q4: 如何监控InfluxDB的慢查询?
A4: 监控慢查询的方法包括:
- 在配置文件中设置
log-queries-after参数 - 查看InfluxDB日志中的慢查询记录
- 使用内部监控数据中的查询执行时间指标
- 在Grafana中创建慢查询仪表盘
Q5: 如何监控InfluxDB的写入性能?
A5: 监控写入性能的方法包括:
- 查看写入成功率和延迟指标
- 监控WAL文件的数量和大小
- 检查磁盘I/O性能
- 分析写入错误率
Q6: 如何监控InfluxDB的内存使用情况?
A6: 监控内存使用情况的方法包括:
- 查看运行时指标中的内存分配和使用情况
- 监控缓存大小和命中率
- 使用系统级监控工具(如top、free)
- 分析内存增长趋势
Q7: 如何设置InfluxDB的告警?
A7: 设置告警的方法包括:
- 1.x版本:使用连续查询和自定义脚本
- 2.x版本:使用任务和告警规则
- 集成第三方监控工具(如Prometheus + Alertmanager)
- 配置邮件、Slack等通知渠道
Q8: 如何优化InfluxDB的监控性能?
A8: 优化监控性能的方法包括:
- 调整监控数据的采集间隔
- 设置合理的保留策略
- 对监控数据进行降采样
- 减少不必要的监控指标
- 确保监控数据的存储和查询性能
Q9: 如何监控InfluxDB集群的健康状态?
A9: 监控集群健康状态的方法包括:
- 检查集群成员状态
- 监控分片分布和状态
- 分析集群复制延迟
- 测试集群写入和查询功能
- 监控集群节点的资源使用率
Q10: 如何使用InfluxDB监控其他应用?
A10: 使用InfluxDB监控其他应用的方法包括:
- 使用Telegraf采集应用指标
- 配置应用直接写入InfluxDB
- 使用Prometheus作为中间层
- 创建自定义监控脚本
- 导入或创建适合的Grafana仪表盘
