Skip to content

InfluxDB 系统资源指标

核心系统指标

CPU 指标

指标说明

指标名称描述单位重要性
process_cpu_seconds_total进程 CPU 时间总计
system_cpu_usage系统 CPU 使用率百分比
process_cpu_percent进程 CPU 使用率百分比
cpu每个 CPU 核心的使用率百分比

监控方法

使用 InfluxDB 内置监控

bash
# 查询进程 CPU 使用率
influx query -o myorg -t my-token "from(bucket: \"_internal\") |> range(start: -1h) |> filter(fn: (r) => r._measurement == \"runtime\" and r._field == \"go_threads\")"

使用 Telegraf 监控

toml
[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false

告警阈值

指标警告阈值critical阈值
进程 CPU 使用率70%90%
系统 CPU 使用率80%95%
单个 CPU 核心使用率85%98%

内存指标

指标说明

指标名称描述单位重要性
process_resident_memory_bytes进程常驻内存大小字节
process_virtual_memory_bytes进程虚拟内存大小字节
system_memory_usage系统内存使用率百分比
go_memstats_alloc_bytesGo 堆内存分配大小字节
go_memstats_sys_bytesGo 系统内存使用大小字节
go_memstats_heap_inuse_bytesGo 堆内存使用大小字节

监控方法

使用 InfluxDB 内置监控

bash
# 查询 Go 内存统计
influx query -o myorg -t my-token "from(bucket: \"_internal\") |> range(start: -1h) |> filter(fn: (r) => r._measurement == \"runtime\" and r._field =~ /go_memstats.*/)"

使用 Telegraf 监控

toml
[[inputs.mem]]
  # 无需额外配置

告警阈值

指标警告阈值critical阈值
进程常驻内存使用率75%90%
系统内存使用率80%95%
Go 堆内存使用率85%95%

磁盘指标

指标说明

指标名称描述单位重要性
disk_usage磁盘使用率百分比
disk_free磁盘可用空间字节
disk_reads_total磁盘读取次数总计次数
disk_writes_total磁盘写入次数总计次数
disk_read_bytes_total磁盘读取字节数总计字节
disk_written_bytes_total磁盘写入字节数总计字节
disk_io_time_seconds_total磁盘 I/O 时间总计

监控方法

使用 InfluxDB 内置监控

bash
# 查询 WAL 写入指标
influx query -o myorg -t my-token "from(bucket: \"_internal\") |> range(start: -1h) |> filter(fn: (r) => r._measurement == \"write\" and r._field == \"points_written_ok\")"

使用 Telegraf 监控

toml
[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlayfs", "aufs", "squashfs"]

[[inputs.diskio]]
  # 无需额外配置

告警阈值

指标警告阈值critical阈值
磁盘使用率80%95%
磁盘 I/O 等待时间500ms1000ms
磁盘写入延迟100ms500ms
磁盘读取延迟50ms200ms

网络指标

指标说明

指标名称描述单位重要性
network_transmit_bytes_total网络发送字节数总计字节
network_receive_bytes_total网络接收字节数总计字节
network_transmit_packets_total网络发送数据包数总计数据包
network_receive_packets_total网络接收数据包数总计数据包
network_transmit_errors_total网络发送错误数总计错误数
network_receive_errors_total网络接收错误数总计错误数
http_requests_totalHTTP 请求数总计请求数

监控方法

使用 InfluxDB 内置监控

bash
# 查询 HTTP 请求指标
influx query -o myorg -t my-token "from(bucket: \"_internal\") |> range(start: -1h) |> filter(fn: (r) => r._measurement == \"httpd\" and r._field =~ /request.*/)"

使用 Telegraf 监控

toml
[[inputs.net]]
  # 无需额外配置

[[inputs.netstat]]
  # 无需额外配置

告警阈值

指标警告阈值critical阈值
网络发送错误率0.1%1%
网络接收错误率0.1%1%
HTTP 请求错误率5%20%
HTTP 请求延迟1000ms5000ms

InfluxDB 内部指标

写入相关指标

指标说明

指标名称描述单位重要性
points_written_ok成功写入的数据点数点数
points_written_fail写入失败的数据点数点数
write_requests_total写入请求总数请求数
write_requests_error_total写入请求错误总数错误数
write_requests_duration_seconds写入请求持续时间
wal_write_duration_secondsWAL 写入持续时间

监控方法

bash
# 查询写入指标
influx query -o myorg -t my-token "from(bucket: \"_internal\") |> range(start: -1h) |> filter(fn: (r) => r._measurement == \"write\")"

查询相关指标

指标说明

指标名称描述单位重要性
queries_total查询总数查询数
queries_error_total查询错误总数错误数
queries_duration_seconds查询持续时间
slow_queries_total慢查询总数查询数
active_queries活跃查询数查询数

监控方法

bash
# 查询查询指标
influx query -o myorg -t my-token "from(bucket: \"_internal\") |> range(start: -1h) |> filter(fn: (r) => r._measurement == \"query\")"

存储相关指标

指标说明

指标名称描述单位重要性
shard_count分片总数数量
series_count序列总数数量
measurement_count测量值总数数量
disk_bytes磁盘使用字节数字节
cache_size缓存大小字节
wal_sizeWAL 文件大小字节

监控方法

bash
# 查询存储指标
influx query -o myorg -t my-token "from(bucket: \"_internal\") |> range(start: -1h) |> filter(fn: (r) => r._measurement == \"storage\")"

复制相关指标

指标说明

指标名称描述单位重要性
replication_lag复制延迟纳秒
replication_queue_length复制队列长度数量
replication_writes_ok复制写入成功数数量
replication_writes_fail复制写入失败数数量

监控方法

bash
# 查询复制指标
influx query -o myorg -t my-token "from(bucket: \"_internal\") |> range(start: -1h) |> filter(fn: (r) => r._measurement == \"replication\")"

指标收集与存储

内置指标收集

配置内置监控

修改 influxdb.conf 文件

txt
[monitor]
  store-enabled = true
  store-database = "_internal"
  store-interval = "10s"
  store-errors = true

使用环境变量配置

bash
export INFLUXD_MONITOR_STORE_ENABLED=true
export INFLUXD_MONITOR_STORE_DATABASE="_internal"
export INFLUXD_MONITOR_STORE_INTERVAL="10s"

内置指标保留策略

bash
# 查看内置指标保留策略
influx -database _internal -execute "SHOW RETENTION POLICIES"

# 修改保留策略
influx -database _internal -execute "ALTER RETENTION POLICY autogen ON _internal DURATION 30d REPLICATION 1 DEFAULT"

使用 Telegraf 收集指标

安装 Telegraf

bash
# Ubuntu/Debian 系统
apt-get update && apt-get install -y telegraf

# CentOS/RHEL 系统
yum install -y telegraf

# 启动并启用 Telegraf
systemctl start telegraf && systemctl enable telegraf

配置 Telegraf 收集 InfluxDB 指标

创建 telegraf.conf 配置文件

toml
[agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = ""
  hostname = ""
  omit_hostname = false

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "my-token"
  organization = "myorg"
  bucket = "monitoring"

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false

[[inputs.mem]]
  # 无需额外配置

[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlayfs", "aufs", "squashfs"]

[[inputs.diskio]]
  # 无需额外配置

[[inputs.net]]
  # 无需额外配置

[[inputs.netstat]]
  # 无需额外配置

[[inputs.processes]]
  # 无需额外配置

[[inputs.influxdb]]
  urls = ["http://localhost:8086/metrics"]
  timeout = "5s"
  username = ""
  password = ""
  ssl_verify = true
  insecure_skip_verify = false

指标分析与可视化

使用 InfluxDB Dashboards

创建系统资源监控仪表盘

  1. 登录 InfluxDB UI
  2. 导航到 Dashboards 页面
  3. 点击 Create Dashboard
  4. 添加面板
    • CPU 使用率面板
    • 内存使用率面板
    • 磁盘使用率面板
    • 网络流量面板
    • 写入指标面板
    • 查询指标面板

示例查询

CPU 使用率面板

txt
from(bucket: "monitoring")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "cpu")
  |> filter(fn: (r) => r["_field"] == "usage_system" or r["_field"] == "usage_user")
  |> filter(fn: (r) => r["cpu"] == "cpu-total")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

内存使用率面板

txt
from(bucket: "monitoring")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mem")
  |> filter(fn: (r) => r["_field"] == "used_percent")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

使用 Grafana

安装 Grafana

bash
# Ubuntu/Debian 系统
apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | tee -a /etc/apt/sources.list.d/grafana.list
apt-get update && apt-get install -y grafana

# CentOS/RHEL 系统
cat <<EOF | tee /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
EOF
yum install -y grafana

# 启动并启用 Grafana
systemctl start grafana-server && systemctl enable grafana-server

配置 InfluxDB 数据源

  1. 登录 Grafana UI(默认地址:http://localhost:3000,默认用户名/密码:admin/admin)
  2. 导航到 Configuration > Data Sources
  3. 点击 Add data source
  4. 选择 InfluxDB
  5. 配置数据源
    • URLhttp://localhost:8086
    • Organization:myorg
    • Token:my-token
    • Default Bucket:monitoring
    • Min time interval:10s
  6. 点击 Save & Test

导入预定义仪表盘

  1. 导航到 Dashboards > Import
  2. 输入仪表盘 ID:13289(InfluxDB 2.0 监控仪表盘)
  3. 选择 InfluxDB 数据源
  4. 点击 Import

性能优化基于指标

CPU 优化

基于指标的优化策略

指标异常优化策略
进程 CPU 使用率持续高于 80%1. 增加 CPU 核心数
2. 优化查询语句
3. 调整并行查询数
4. 启用查询缓存
系统 CPU 使用率持续高于 90%1. 增加系统 CPU 资源
2. 限制其他进程资源使用
3. 优化 InfluxDB 配置
查询 CPU 使用率高1. 优化查询语句
2. 增加查询节点
3. 调整 max-concurrent-queries 参数

配置优化

txt
[coordinator]
  max-concurrent-queries = 100
  query-cache-enabled = true
  query-cache-size-mb = 256

[query]
  parallelism = 4

内存优化

基于指标的优化策略

指标异常优化策略
进程常驻内存持续增长1. 调整 Go 内存限制
2. 优化缓存设置
3. 减少序列数量
4. 调整 cache-max-memory-size 参数
Go 堆内存使用率高于 90%1. 增加系统内存
2. 调整 GOMEMLIMIT 环境变量
3. 优化数据模型设计
内存使用峰值高1. 调整批处理大小
2. 优化写入模式
3. 配置内存监控告警

配置优化

txt
[data]
  cache-max-memory-size = 10737418240  # 10GB
  cache-snapshot-memory-size = 268435456  # 256MB
  max-series-per-database = 1000000
  max-values-per-tag = 10000

[coordinator]
  write-buffer-size = 10000

磁盘优化

基于指标的优化策略

指标异常优化策略
磁盘使用率高于 80%1. 增加磁盘容量
2. 调整保留策略
3. 启用数据压缩
4. 归档旧数据
磁盘 I/O 等待时间高1. 使用 SSD 存储
2. 优化 WAL 设置
3. 调整 wal-fsync-delay 参数
4. 减少写入频率
磁盘写入吞吐量低1. 优化批处理大小
2. 调整 batch-size 参数
3. 启用写入缓存
4. 增加磁盘数量(RAID 配置)

配置优化

txt
[data]
  wal-dir = "/path/to/fast/storage/wal"
  wal-fsync-delay = "0s"
  compact-full-write-cold-duration = "4h"
  cache-snapshot-write-cold-duration = "10m"

[retention]
  enabled = true
  check-interval = "30m"

网络优化

基于指标的优化策略

指标异常优化策略
网络错误率高1. 检查网络连接
2. 优化网络配置
3. 启用 TLS 优化
4. 调整 MTU 大小
HTTP 请求延迟高1. 增加协调节点
2. 优化查询语句
3. 调整 http-read-timeout 参数
4. 启用 HTTP 压缩
网络带宽使用率高1. 增加网络带宽
2. 优化数据传输
3. 启用数据压缩
4. 配置流量控制

配置优化

txt
[http]
  read-timeout = "10s"
  write-timeout = "10s"
  max-body-size = 25000000
  enable-pprof = false
  debug-pprof-enabled = false

[coordinator]
  write-timeout = "10s"

告警配置

InfluxDB 内置告警

创建 CPU 使用率告警

  1. 登录 InfluxDB UI
  2. 导航到 Alerts > Notification Endpoints
  3. 创建通知端点(如 Slack、Email、Webhook)
  4. 导航到 Alerts > Checks
  5. 点击 Create Check
  6. 配置检查
    • Name:High CPU Usage
    • Type:Threshold
    • Bucket:monitoring
    • Measurement:cpu
    • Field:usage_system
    • Condition:> 80
    • Window Period:5m
    • Every:1m
    • Notification Endpoints:选择之前创建的端点
  7. 点击 Save

Grafana 告警

创建内存使用率告警

  1. 导航到 Grafana 仪表盘
  2. 编辑内存使用率面板
  3. 切换到 Alert 标签页
  4. 点击 Create Alert
  5. 配置告警规则
    • Condition:Average of query(A, 5m, now) > 90
    • Evaluate every:1m
    • For:5m
    • Labels:severity=critical
    • Annotations:Summary=High memory usage, Description=Memory usage is above 90%
  6. 配置通知渠道
  7. 点击 Save

最佳实践

监控频率

指标类型建议监控频率
CPU 指标10s
内存指标10s
磁盘指标30s
网络指标30s
写入指标10s
查询指标10s
存储指标5m

指标保留策略

指标类型建议保留时间采样频率
实时指标7 天10s
小时级指标30 天1h
天级指标1 年1d
月级指标5 年1M

告警最佳实践

  1. 设置合理的告警阈值:根据实际业务需求调整
  2. 使用多级告警:警告(Warning)、严重(Critical)
  3. 配置告警抑制:避免告警风暴
  4. 设置告警通知渠道:多种渠道确保通知送达
  5. 定期测试告警:确保告警机制正常工作
  6. 记录告警处理过程:持续优化告警策略

性能优化最佳实践

  1. 基于指标进行优化:避免盲目优化
  2. 逐步调整参数:每次只调整一个参数
  3. 监控优化效果:比较优化前后的指标变化
  4. 记录优化过程:便于回滚和经验积累
  5. 定期审查配置:根据业务变化调整配置
  6. 关注趋势变化:及时发现潜在问题

常见问题(FAQ)

Q1: 如何降低 InfluxDB 的 CPU 使用率?

A1: 可以采取以下措施:

  1. 优化查询语句,减少复杂查询
  2. 调整 max-concurrent-queries 参数,限制并发查询数
  3. 启用查询缓存,减少重复查询计算
  4. 增加 CPU 核心数,提升处理能力
  5. 分离查询节点和数据节点,分担负载

Q2: 如何解决 InfluxDB 内存使用率过高的问题?

A2: 可以采取以下措施:

  1. 调整 cache-max-memory-size 参数,限制缓存大小
  2. 减少序列数量,优化数据模型设计
  3. 调整 max-series-per-database 参数,限制每个数据库的序列数
  4. 增加系统内存,提升硬件资源
  5. 调整 GOMEMLIMIT 环境变量,限制 Go 进程内存使用

Q3: 如何优化 InfluxDB 的磁盘 I/O 性能?

A3: 可以采取以下措施:

  1. 使用 SSD 存储,提升磁盘读写速度
  2. 优化 WAL 设置,调整 wal-fsync-delay 参数
  3. 调整 cache-snapshot-memory-size 参数,减少磁盘写入频率
  4. 配置合理的保留策略,及时清理过期数据
  5. 使用 RAID 配置,提升磁盘吞吐量

Q4: 如何监控 InfluxDB 集群的资源使用情况?

A4: 可以采取以下措施:

  1. 在每个节点上部署 Telegraf,收集节点资源指标
  2. 配置中央监控数据库,集中存储所有节点的指标
  3. 创建集群级别的监控仪表盘,统一查看所有节点的资源使用情况
  4. 配置集群级别的告警规则,及时发现集群级别的问题
  5. 使用 InfluxDB 企业版的集群监控功能

Q5: 如何使用内置指标监控 InfluxDB 性能?

A5: 可以采取以下步骤:

  1. 确保内置监控已启用(store-enabled = true
  2. 使用 influx query 命令查询内置指标
  3. 创建基于内置指标的监控仪表盘
  4. 配置基于内置指标的告警规则
  5. 定期分析内置指标,优化 InfluxDB 性能

Q6: 如何处理 InfluxDB 指标数据量过大的问题?

A6: 可以采取以下措施:

  1. 调整监控频率,降低指标采集频率
  2. 配置合理的保留策略,及时清理过期指标数据
  3. 使用连续查询(CQ)将高频指标降采样为低频指标
  4. 分离监控数据和业务数据,使用独立的数据库存储监控指标
  5. 考虑使用专门的监控系统(如 Prometheus)存储指标数据

Q7: 如何监控 InfluxDB 的慢查询?

A7: 可以采取以下措施:

  1. 启用慢查询日志,配置 log-queries-after 参数
  2. 监控 slow_queries_total 指标
  3. 创建慢查询监控仪表盘,显示慢查询数量和详细信息
  4. 配置慢查询告警规则,及时发现慢查询问题
  5. 分析慢查询日志,优化慢查询语句

Q8: 如何监控 InfluxDB 的写入性能?

A8: 可以采取以下措施:

  1. 监控 points_written_okpoints_written_fail 指标
  2. 监控 write_requests_duration_seconds 指标,了解写入延迟
  3. 监控 wal_write_duration_seconds 指标,了解 WAL 写入性能
  4. 创建写入性能监控仪表盘,实时查看写入性能
  5. 配置写入失败告警规则,及时发现写入问题

Q9: 如何使用指标预测 InfluxDB 资源需求?

A9: 可以采取以下措施:

  1. 收集长期的资源使用指标数据
  2. 分析资源使用趋势,了解资源增长规律
  3. 使用趋势分析算法(如线性回归、指数平滑)预测未来资源需求
  4. 结合业务增长计划,调整资源预测模型
  5. 定期更新资源预测,确保预测准确性

Q10: 如何集成 InfluxDB 指标到企业监控系统?

A10: 可以采取以下措施:

  1. 使用 Telegraf 收集 InfluxDB 指标,并发送到企业监控系统
  2. 使用 InfluxDB API 导出指标数据,集成到企业监控系统
  3. 使用 Prometheus 作为中间件,收集 InfluxDB 指标并转发到企业监控系统
  4. 开发自定义集成插件,实现 InfluxDB 与企业监控系统的集成
  5. 利用监控系统的 Webhook 功能,接收 InfluxDB 的告警通知