Skip to content

InfluxDB CLI 诊断命令

InfluxDB 1.x 诊断命令

influxd check

  • 功能:检查InfluxDB数据库的完整性

  • 语法

    bash
    influxd check -dbpath <data-dir> [options]
  • 参数说明

    • -dbpath:数据目录路径(必填)
    • -rp:指定保留策略(可选)
    • -series-id:检查特定系列ID(可选)
    • -skip-index:跳过索引检查(可选)
    • -v:详细输出(可选)
  • 使用场景

    • 检查数据库完整性
    • 发现损坏的TSM文件
    • 验证数据一致性
  • 示例

    bash
    # 检查所有数据库
    influxd check -dbpath /var/lib/influxdb/data -v
    
    # 检查特定保留策略
    influxd check -dbpath /var/lib/influxdb/data -rp autogen

influxd inspect

  • 功能:检查、修复和优化TSM文件

  • 子命令

    • verify:验证TSM文件完整性
    • repair:修复损坏的TSM文件
    • optimize:优化TSM文件结构
    • dump:打印TSM文件内容
    • export:导出TSM文件为Line Protocol
    • buildtsi:构建TSI索引
  • 示例

    bash
    # 验证TSM文件完整性
    influxd inspect verify -datadir /var/lib/influxdb/data
    
    # 修复损坏的TSM文件
    influxd inspect repair -datadir /var/lib/influxdb/data
    
    # 优化TSM文件
    influxd inspect optimize -datadir /var/lib/influxdb/data -db mydb
    
    # 导出TSM文件
    influxd inspect export /var/lib/influxdb/data/mydb/autogen/1/000000001-000000001.tsm

influxd backup/restore

  • 功能:备份和恢复InfluxDB数据

  • 语法

    bash
    # 备份
    influxd backup -portable -database <db> <backup-dir>
    
    # 恢复
    influxd restore -portable -database <db> <backup-dir>
  • 示例

    bash
    # 备份单个数据库
    influxd backup -portable -database mydb /path/to/backup
    
    # 恢复数据库
    influxd restore -portable -database mydb /path/to/backup
    
    # 备份所有数据库
    influxd backup -portable /path/to/backup

InfluxDB 2.x 诊断命令

influx check

  • 功能:检查InfluxDB配置和状态

  • 子命令

    • health:检查InfluxDB服务健康状态
    • setup:检查初始设置状态
    • config:检查配置文件
  • 示例

    bash
    # 检查服务健康状态
    influx check health
    
    # 检查配置文件
    influx check config

influxd inspect

  • 功能:检查、修复和优化InfluxDB数据

  • 子命令

    • verify:验证TSM文件完整性
    • repair:修复损坏的TSM文件
    • compact:压缩TSM文件
    • build-tsi:构建TSI索引
    • dump:打印TSM文件内容
    • export:导出数据
    • report:生成诊断报告
  • 示例

    bash
    # 验证TSM文件完整性
    influxd inspect verify -engine-path /var/lib/influxdb2/engine
    
    # 压缩TSM文件
    influxd inspect compact -engine-path /var/lib/influxdb2/engine
    
    # 生成诊断报告
    influxd inspect report -engine-path /var/lib/influxdb2/engine -json > diagnostics.json
    
    # 导出数据
    influxd inspect export -engine-path /var/lib/influxdb2/engine -bucket-id <bucket-id> -out export.txt

influx backup/restore

  • 功能:备份和恢复InfluxDB 2.x数据

  • 语法

    bash
    # 备份
    influx backup <backup-dir>
    
    # 恢复
    influx restore <backup-dir>
  • 示例

    bash
    # 备份所有数据
    influx backup /path/to/backup
    
    # 备份特定桶
    influx backup -b my-bucket /path/to/backup
    
    # 恢复数据
    influx restore /path/to/backup

日志分析命令

实时查看日志

  • 功能:实时查看InfluxDB日志
  • 示例
    bash
    # 实时查看InfluxDB日志
    tail -f /var/log/influxdb/influxdb.log
    
    # 查看错误日志
    tail -f /var/log/influxdb/influxdb.log | grep -i error
    
    # 查看慢查询日志
    tail -f /var/log/influxdb/influxdb.log | grep -i slow
    
    # 查看认证日志
    tail -f /var/log/influxdb/influxdb.log | grep -i auth

日志分析工具

  • 功能:使用日志分析工具分析InfluxDB日志
  • 示例
    bash
    # 使用grep统计错误数量
    grep -i error /var/log/influxdb/influxdb.log | wc -l
    
    # 使用awk分析慢查询
    awk '/slow query/ {print $0}' /var/log/influxdb/influxdb.log | sort -nrk 10 | head -20
    
    # 使用journalctl查看日志
    journalctl -u influxdb.service
    
    # 使用journalctl查看特定时间段的日志
    journalctl -u influxdb.service --since "2023-01-01 00:00:00" --until "2023-01-02 00:00:00"

性能诊断命令

查看进程状态

  • 功能:查看InfluxDB进程状态
  • 示例
    bash
    # 查看InfluxDB进程
    ps aux | grep influxd
    
    # 查看进程资源使用情况
    top -p $(pgrep influxd)
    
    # 查看进程打开的文件
    lsof -p $(pgrep influxd)
    
    # 查看进程网络连接
    netstat -tulpn | grep influxd

监控系统资源

  • 功能:监控InfluxDB使用的系统资源
  • 示例
    bash
    # 查看CPU使用率
    mpstat 1
    
    # 查看内存使用率
    free -h
    
    # 查看磁盘I/O
    iostat -x 1
    
    # 查看磁盘空间使用情况
    df -h
    
    # 查看磁盘空间使用情况(按目录)
    du -h /var/lib/influxdb | sort -rh | head -20

使用strace诊断

  • 功能:跟踪InfluxDB进程的系统调用
  • 示例
    bash
    # 跟踪InfluxDB进程
    strace -p $(pgrep influxd) -o influxd.strace
    
    # 跟踪特定系统调用
    strace -p $(pgrep influxd) -e trace=open,read,write -o influxd.io.strace
    
    # 统计系统调用次数
    strace -c -p $(pgrep influxd)

网络诊断命令

检查端口监听

  • 功能:检查InfluxDB端口监听情况
  • 示例
    bash
    # 检查端口监听
    netstat -tulpn | grep influxd
    
    # 使用ss命令检查
    ss -tulpn | grep influxd
    
    # 检查特定端口
    lsof -i :8086

测试连接

  • 功能:测试InfluxDB连接
  • 示例
    bash
    # 测试HTTP连接
    curl -v http://localhost:8086/ping
    
    # 测试API连接
    curl -v -G http://localhost:8086/query -u admin:password --data-urlencode "q=SHOW DATABASES"
    
    # 测试写入连接
    curl -i -X POST http://localhost:8086/write?db=mydb -d 'measurement,tag=value field=1 1577836800000000000'

网络性能测试

  • 功能:测试网络性能
  • 示例
    bash
    # 使用ping测试网络延迟
    ping -c 10 localhost
    
    # 使用traceroute测试路由
    traceroute localhost
    
    # 使用tcpdump捕获网络流量
    tcpdump -i lo port 8086 -w influxdb.pcap
    
    # 使用curl测试响应时间
    curl -w "%{time_total}" -o /dev/null -s http://localhost:8086/ping

数据诊断命令

查看数据库信息

  • 功能:查看InfluxDB数据库信息
  • 示例
    bash
    # 1.x 查看数据库
    influx -execute "SHOW DATABASES"
    
    # 1.x 查看保留策略
    influx -execute "SHOW RETENTION POLICIES ON mydb"
    
    # 1.x 查看测量集
    influx -execute "SHOW MEASUREMENTS ON mydb"
    
    # 2.x 查看桶
    influx bucket list
    
    # 2.x 查看组织
    influx org list

查看序列和标签

  • 功能:查看InfluxDB序列和标签信息
  • 示例
    bash
    # 1.x 查看序列数量
    influx -execute "SHOW SERIES CARDINALITY ON mydb"
    
    # 1.x 查看标签键
    influx -execute "SHOW TAG KEYS ON mydb FROM measurement"
    
    # 1.x 查看字段键
    influx -execute "SHOW FIELD KEYS ON mydb FROM measurement"
    
    # 2.x 使用Flux查询序列数量
    influx query -q "from(bucket: \"my-bucket\") |> range(start: -1h) |> group(columns: [\"_measurement\", \"tag\"]) |> distinct(column: \"_field\") |> count()"

数据采样

  • 功能:采样InfluxDB数据
  • 示例
    bash
    # 1.x 采样数据
    influx -execute "SELECT * FROM mydb.autogen.measurement LIMIT 10"
    
    # 1.x 采样特定时间范围的数据
    influx -execute "SELECT * FROM mydb.autogen.measurement WHERE time > now() - 1h LIMIT 10"
    
    # 2.x 采样数据
    influx query -q "from(bucket: \"my-bucket\") |> range(start: -1h) |> limit(n: 10)"

集群诊断命令

1.x 集群诊断

  • 功能:诊断InfluxDB 1.x集群
  • 示例
    bash
    # 查看集群状态
    influx -execute "SHOW STATS"
    
    # 查看节点状态
    influx -execute "SHOW DIAGNOSTICS"
    
    # 查看分片状态
    influx -execute "SHOW SHARDS"
    
    # 查看集群成员
    influx -execute "SHOW SERVERS"

2.x 集群诊断

  • 功能:诊断InfluxDB 2.x集群
  • 示例
    bash
    # 查看集群状态
    influx ping
    
    # 查看节点信息
    influxd inspect report -engine-path /var/lib/influxdb2/engine
    
    # 查看Raft状态
    curl -s http://localhost:8086/debug/raft/stats | jq

诊断脚本示例

1.x 诊断脚本

  • 功能:自动化诊断InfluxDB 1.x
  • 示例
    bash
    #!/bin/bash
    
    # InfluxDB 1.x 诊断脚本
    
    OUTPUT_FILE="influxdb_diagnostics_$(date +%Y%m%d_%H%M%S).txt"
    
    echo "=== InfluxDB 诊断报告 ===" > $OUTPUT_FILE
    echo "生成时间: $(date)" >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 系统信息
    echo "=== 系统信息 ===" >> $OUTPUT_FILE
    uname -a >> $OUTPUT_FILE
    uptime >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # InfluxDB 版本
    echo "=== InfluxDB 版本 ===" >> $OUTPUT_FILE
    influx -version >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 进程状态
    echo "=== 进程状态 ===" >> $OUTPUT_FILE
    ps aux | grep influxd >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 端口监听
    echo "=== 端口监听 ===" >> $OUTPUT_FILE
    netstat -tulpn | grep influxd >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 数据库信息
    echo "=== 数据库信息 ===" >> $OUTPUT_FILE
    influx -execute "SHOW DATABASES" >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 资源使用情况
    echo "=== 资源使用情况 ===" >> $OUTPUT_FILE
    top -bn1 | grep -E "(Cpu|Mem|influxd)" >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 磁盘空间
    echo "=== 磁盘空间 ===" >> $OUTPUT_FILE
    df -h /var/lib/influxdb >> $OUTPUT_FILE
    du -h /var/lib/influxdb | sort -rh | head -10 >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 日志错误统计
    echo "=== 日志错误统计 ===" >> $OUTPUT_FILE
    grep -i error /var/log/influxdb/influxdb.log | wc -l >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    echo "诊断报告已生成: $OUTPUT_FILE"

2.x 诊断脚本

  • 功能:自动化诊断InfluxDB 2.x
  • 示例
    bash
    #!/bin/bash
    
    # InfluxDB 2.x 诊断脚本
    
    OUTPUT_FILE="influxdb2_diagnostics_$(date +%Y%m%d_%H%M%S).txt"
    
    echo "=== InfluxDB 2.x 诊断报告 ===" > $OUTPUT_FILE
    echo "生成时间: $(date)" >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 系统信息
    echo "=== 系统信息 ===" >> $OUTPUT_FILE
    uname -a >> $OUTPUT_FILE
    uptime >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # InfluxDB 版本
    echo "=== InfluxDB 版本 ===" >> $OUTPUT_FILE
    influx version >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 进程状态
    echo "=== 进程状态 ===" >> $OUTPUT_FILE
    ps aux | grep influxd >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 端口监听
    echo "=== 端口监听 ===" >> $OUTPUT_FILE
    netstat -tulpn | grep influxd >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 服务健康状态
    echo "=== 服务健康状态 ===" >> $OUTPUT_FILE
    influx check health >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 桶信息
    echo "=== 桶信息 ===" >> $OUTPUT_FILE
    influx bucket list >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 资源使用情况
    echo "=== 资源使用情况 ===" >> $OUTPUT_FILE
    top -bn1 | grep -E "(Cpu|Mem|influxd)" >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 磁盘空间
    echo "=== 磁盘空间 ===" >> $OUTPUT_FILE
    df -h /var/lib/influxdb2 >> $OUTPUT_FILE
    du -h /var/lib/influxdb2 | sort -rh | head -10 >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    # 日志错误统计
    echo "=== 日志错误统计 ===" >> $OUTPUT_FILE
    grep -i error /var/log/influxdb/influxdb.log | wc -l >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
    
    echo "诊断报告已生成: $OUTPUT_FILE"

诊断最佳实践

1. 定期运行诊断

  • 建议频率

    • 日常监控:每小时
    • 深度诊断:每天
    • 全面审计:每周
  • 自动化

    • 使用cron定期运行诊断脚本
    • 集成到监控系统
    • 配置告警触发诊断

2. 诊断数据管理

  • 存储诊断报告

    • 保留诊断报告至少30天
    • 使用版本控制系统管理
    • 定期归档旧报告
  • 分析诊断趋势

    • 比较不同时间的诊断报告
    • 识别性能下降趋势
    • 预测潜在问题

3. 诊断结果分析

  • 关注关键指标

    • 错误日志数量
    • 慢查询数量
    • 系统资源使用率
    • 数据增长速率
  • 优先级排序

    • 紧急:服务不可用、数据丢失
    • 高:性能严重下降、频繁错误
    • 中:性能下降、偶尔错误
    • 低:配置问题、优化建议

4. 诊断工具选择

  • 根据问题类型选择工具

    • 性能问题:top, iostat, vmstat
    • 网络问题:netstat, ss, tcpdump
    • 日志问题:grep, awk, journalctl
    • 数据问题:influxd check, influxd inspect
  • 使用组合工具

    • 结合多个工具的输出
    • 交叉验证诊断结果
    • 综合分析问题

常见问题(FAQ)

Q1: 如何诊断InfluxDB写入性能问题?

A1: 诊断写入性能问题的方法包括:

  • 查看写入延迟指标
  • 分析写入错误日志
  • 检查磁盘I/O性能
  • 监控WAL文件使用情况
  • 分析写入流量模式

Q2: 如何诊断InfluxDB查询性能问题?

A2: 诊断查询性能问题的方法包括:

  • 查看慢查询日志
  • 使用EXPLAIN分析查询计划
  • 监控查询执行时间
  • 检查索引使用情况
  • 分析查询模式

Q3: 如何诊断InfluxDB内存使用率高的问题?

A3: 诊断内存使用率高的方法包括:

  • 查看进程内存使用情况
  • 分析内存相关指标
  • 检查序列数量
  • 查看缓存使用情况
  • 使用内存分析工具(如pprof)

Q4: 如何诊断InfluxDB磁盘空间不足的问题?

A4: 诊断磁盘空间不足的方法包括:

  • 查看磁盘空间使用情况
  • 分析数据增长趋势
  • 检查TSM文件大小和数量
  • 查看保留策略配置
  • 识别异常大的测量集或标签

Q5: 如何诊断InfluxDB集群问题?

A5: 诊断集群问题的方法包括:

  • 查看集群状态和成员
  • 检查分片分布和状态
  • 分析集群日志
  • 监控网络连接
  • 测试集群复制

Q6: 如何使用CLI工具修复损坏的TSM文件?

A6: 修复损坏TSM文件的方法包括:

  • 使用influxd inspect verify检查损坏的TSM文件
  • 使用influxd inspect repair修复损坏的TSM文件
  • 如果修复失败,从备份恢复数据
  • 考虑使用influxd inspect export导出可用数据

Q7: 如何使用CLI工具优化InfluxDB性能?

A7: 使用CLI工具优化性能的方法包括:

  • 使用influxd inspect optimize优化TSM文件
  • 调整保留策略和连续查询
  • 优化数据模型,减少序列数量
  • 调整配置参数
  • 监控和分析性能指标

Q8: 如何诊断InfluxDB连接问题?

A8: 诊断连接问题的方法包括:

  • 检查InfluxDB服务状态
  • 检查端口监听情况
  • 测试网络连接
  • 查看认证日志
  • 检查防火墙配置

Q9: 如何使用CLI工具备份和恢复InfluxDB数据?

A9: 备份和恢复数据的方法包括:

  • 使用influxd backup命令备份数据
  • 使用influxd restore命令恢复数据
  • 定期测试备份的可恢复性
  • 考虑使用增量备份策略

Q10: 如何自动化InfluxDB诊断?

A10: 自动化诊断的方法包括:

  • 编写诊断脚本
  • 使用cron定期运行
  • 集成到监控系统
  • 配置告警触发诊断
  • 自动生成和归档诊断报告