外观
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_bytes | Go 堆内存分配大小 | 字节 | 高 |
go_memstats_sys_bytes | Go 系统内存使用大小 | 字节 | 中 |
go_memstats_heap_inuse_bytes | Go 堆内存使用大小 | 字节 | 高 |
监控方法
使用 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 等待时间 | 500ms | 1000ms |
| 磁盘写入延迟 | 100ms | 500ms |
| 磁盘读取延迟 | 50ms | 200ms |
网络指标
指标说明
| 指标名称 | 描述 | 单位 | 重要性 |
|---|---|---|---|
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_total | HTTP 请求数总计 | 请求数 | 高 |
监控方法
使用 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 请求延迟 | 1000ms | 5000ms |
InfluxDB 内部指标
写入相关指标
指标说明
| 指标名称 | 描述 | 单位 | 重要性 |
|---|---|---|---|
points_written_ok | 成功写入的数据点数 | 点数 | 高 |
points_written_fail | 写入失败的数据点数 | 点数 | 高 |
write_requests_total | 写入请求总数 | 请求数 | 中 |
write_requests_error_total | 写入请求错误总数 | 错误数 | 高 |
write_requests_duration_seconds | 写入请求持续时间 | 秒 | 中 |
wal_write_duration_seconds | WAL 写入持续时间 | 秒 | 高 |
监控方法
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_size | WAL 文件大小 | 字节 | 中 |
监控方法
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
创建系统资源监控仪表盘
- 登录 InfluxDB UI
- 导航到 Dashboards 页面
- 点击 Create Dashboard
- 添加面板:
- 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 数据源
- 登录 Grafana UI(默认地址:http://localhost:3000,默认用户名/密码:admin/admin)
- 导航到 Configuration > Data Sources
- 点击 Add data source
- 选择 InfluxDB
- 配置数据源:
- URL:http://localhost:8086
- Organization:myorg
- Token:my-token
- Default Bucket:monitoring
- Min time interval:10s
- 点击 Save & Test
导入预定义仪表盘
- 导航到 Dashboards > Import
- 输入仪表盘 ID:13289(InfluxDB 2.0 监控仪表盘)
- 选择 InfluxDB 数据源
- 点击 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 使用率告警
- 登录 InfluxDB UI
- 导航到 Alerts > Notification Endpoints
- 创建通知端点(如 Slack、Email、Webhook)
- 导航到 Alerts > Checks
- 点击 Create Check
- 配置检查:
- Name:High CPU Usage
- Type:Threshold
- Bucket:monitoring
- Measurement:cpu
- Field:usage_system
- Condition:> 80
- Window Period:5m
- Every:1m
- Notification Endpoints:选择之前创建的端点
- 点击 Save
Grafana 告警
创建内存使用率告警
- 导航到 Grafana 仪表盘
- 编辑内存使用率面板
- 切换到 Alert 标签页
- 点击 Create Alert
- 配置告警规则:
- 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%
- 配置通知渠道
- 点击 Save
最佳实践
监控频率
| 指标类型 | 建议监控频率 |
|---|---|
| CPU 指标 | 10s |
| 内存指标 | 10s |
| 磁盘指标 | 30s |
| 网络指标 | 30s |
| 写入指标 | 10s |
| 查询指标 | 10s |
| 存储指标 | 5m |
指标保留策略
| 指标类型 | 建议保留时间 | 采样频率 |
|---|---|---|
| 实时指标 | 7 天 | 10s |
| 小时级指标 | 30 天 | 1h |
| 天级指标 | 1 年 | 1d |
| 月级指标 | 5 年 | 1M |
告警最佳实践
- 设置合理的告警阈值:根据实际业务需求调整
- 使用多级告警:警告(Warning)、严重(Critical)
- 配置告警抑制:避免告警风暴
- 设置告警通知渠道:多种渠道确保通知送达
- 定期测试告警:确保告警机制正常工作
- 记录告警处理过程:持续优化告警策略
性能优化最佳实践
- 基于指标进行优化:避免盲目优化
- 逐步调整参数:每次只调整一个参数
- 监控优化效果:比较优化前后的指标变化
- 记录优化过程:便于回滚和经验积累
- 定期审查配置:根据业务变化调整配置
- 关注趋势变化:及时发现潜在问题
常见问题(FAQ)
Q1: 如何降低 InfluxDB 的 CPU 使用率?
A1: 可以采取以下措施:
- 优化查询语句,减少复杂查询
- 调整
max-concurrent-queries参数,限制并发查询数 - 启用查询缓存,减少重复查询计算
- 增加 CPU 核心数,提升处理能力
- 分离查询节点和数据节点,分担负载
Q2: 如何解决 InfluxDB 内存使用率过高的问题?
A2: 可以采取以下措施:
- 调整
cache-max-memory-size参数,限制缓存大小 - 减少序列数量,优化数据模型设计
- 调整
max-series-per-database参数,限制每个数据库的序列数 - 增加系统内存,提升硬件资源
- 调整
GOMEMLIMIT环境变量,限制 Go 进程内存使用
Q3: 如何优化 InfluxDB 的磁盘 I/O 性能?
A3: 可以采取以下措施:
- 使用 SSD 存储,提升磁盘读写速度
- 优化 WAL 设置,调整
wal-fsync-delay参数 - 调整
cache-snapshot-memory-size参数,减少磁盘写入频率 - 配置合理的保留策略,及时清理过期数据
- 使用 RAID 配置,提升磁盘吞吐量
Q4: 如何监控 InfluxDB 集群的资源使用情况?
A4: 可以采取以下措施:
- 在每个节点上部署 Telegraf,收集节点资源指标
- 配置中央监控数据库,集中存储所有节点的指标
- 创建集群级别的监控仪表盘,统一查看所有节点的资源使用情况
- 配置集群级别的告警规则,及时发现集群级别的问题
- 使用 InfluxDB 企业版的集群监控功能
Q5: 如何使用内置指标监控 InfluxDB 性能?
A5: 可以采取以下步骤:
- 确保内置监控已启用(
store-enabled = true) - 使用
influx query命令查询内置指标 - 创建基于内置指标的监控仪表盘
- 配置基于内置指标的告警规则
- 定期分析内置指标,优化 InfluxDB 性能
Q6: 如何处理 InfluxDB 指标数据量过大的问题?
A6: 可以采取以下措施:
- 调整监控频率,降低指标采集频率
- 配置合理的保留策略,及时清理过期指标数据
- 使用连续查询(CQ)将高频指标降采样为低频指标
- 分离监控数据和业务数据,使用独立的数据库存储监控指标
- 考虑使用专门的监控系统(如 Prometheus)存储指标数据
Q7: 如何监控 InfluxDB 的慢查询?
A7: 可以采取以下措施:
- 启用慢查询日志,配置
log-queries-after参数 - 监控
slow_queries_total指标 - 创建慢查询监控仪表盘,显示慢查询数量和详细信息
- 配置慢查询告警规则,及时发现慢查询问题
- 分析慢查询日志,优化慢查询语句
Q8: 如何监控 InfluxDB 的写入性能?
A8: 可以采取以下措施:
- 监控
points_written_ok和points_written_fail指标 - 监控
write_requests_duration_seconds指标,了解写入延迟 - 监控
wal_write_duration_seconds指标,了解 WAL 写入性能 - 创建写入性能监控仪表盘,实时查看写入性能
- 配置写入失败告警规则,及时发现写入问题
Q9: 如何使用指标预测 InfluxDB 资源需求?
A9: 可以采取以下措施:
- 收集长期的资源使用指标数据
- 分析资源使用趋势,了解资源增长规律
- 使用趋势分析算法(如线性回归、指数平滑)预测未来资源需求
- 结合业务增长计划,调整资源预测模型
- 定期更新资源预测,确保预测准确性
Q10: 如何集成 InfluxDB 指标到企业监控系统?
A10: 可以采取以下措施:
- 使用 Telegraf 收集 InfluxDB 指标,并发送到企业监控系统
- 使用 InfluxDB API 导出指标数据,集成到企业监控系统
- 使用 Prometheus 作为中间件,收集 InfluxDB 指标并转发到企业监控系统
- 开发自定义集成插件,实现 InfluxDB 与企业监控系统的集成
- 利用监控系统的 Webhook 功能,接收 InfluxDB 的告警通知
