InfluxDB部署和使用
InfluxDB的安装方式非常简单,直接从官网下载rpm包后,安装就行
# influxdb时序数据库安装包 wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.0.x86_64.rpm # 采集和上报工具 wget https://dl.influxdata.com/telegraf/releases/telegraf-1.14.5-1.x86_64.rpm # 图形化管理系统 wget https://dl.influxdata.com/chronograf/releases/chronograf-1.8.4.x86_64.rpm # 实时数据分析和处理 wget https://dl.influxdata.com/kapacitor/releases/kapacitor-1.5.5-1.x86_64.rpm
InfluxDB软件包提供的几个程序
influx:命令行工具 infulxd:服务器程序 influx_inspect:数据检查工具 influx_stress:压力测试工具 influx_tsm:数据库格式转换工具
Influx命令参数
# 显示程序版本 -version # 指定要连接主机的地址/主机名 -host 'host name' # 指定连接主机的端口号 -port 'port #' # 以socket方式连接influxdb -socket 'unix domain socket' # 指定要连接的数据库名 -database 'database name' # 认证密码 -password 'password' # 认证用户 -username 'username' # 启用https连接 -ssl # 当使用https连接到集群时,不使用ssl验证 -unsafeSsl # 直接执行命令 -execute 'command' # 指定调用REPL时使用的查询语言 -type 'influxql|flux' # 指定服务器响应数据的格式 -format 'json|csv|column' # 指定时间戳格式,支持rfc3339、h、m、s、ms、u、ns -precision 'rfc3339|h|m|s|ms|u|ns' # 指定写入一致性级别 -consistency 'any|one|quorum|all' # 以友好的方式显示JSON -pretty # 从之前的备份文件中还原备份数据 -import # 设置数据导入时每秒允许导入多少条时序数据,默认0,不做限制 -pps # 需要还原的备份文件存储路径 -path # 设置为true时,表示支持导入压缩格式的备份文件 -compressed
Influxd命令参数
# 数据备份 backup #显示influxd的默认配置信息 config #显示帮助信息 help #还原之前通过backup命令备份的数据 restore #运行程序,默认参数 run #显示influxd的版本信息 version
InfluxDB配置文件
# 配置是否上报influxdb使用信息到usage.influxdata.com,默认false reporting-disabled = false # RPC服务监听地址,用于数据备份通信等,默认监听8088端口 bind-address = "127.0.0.1:8088" # META节点配置信息如下 [meta] # META数据和raft数据库的存储目录 dir = "/data/influxdb/meta" # 是否在创建数据库时创建默认保留策略autogen,默认true retention-autocreate = true # 是否开启META日志,默认true logging-enabled = true # DATA节点配置信息如下 [data] # TSM文件存储目录 dir = "/data/influxdb/data" # 分片索引类型 index-version = "inmem" # WAL文件存储目录 wal-dir = "/data/influxdb/wal" # 在同步写入之前等待的总时间,默认0秒 wal-fsync-delay = "0s" # 检查写请求中的表名、标签键、标签值是否具有有效的UNICODE字符,会影响性能,默认false validate-keys = false # 是否开启日志查询,默认true query-log-enabled = true # 分片缓存最大值,超过该值时拒绝写入,默认1G,单位byte cache-max-memory-size = 1073741824 # 设置快照大小,超过该值会写入到TSM格式的文件中,默认25MB cache-snapshot-memory-size = 26214400 # TSM引擎快照写入磁盘延时,默认10分钟 cache-snapshot-write-cold-duration = "10m0s" # TSM文件在压缩前可以存储的最大时间,默认4小时 compact-full-write-cold-duration = "4h0m0s" # TSM压缩写入磁盘的速率限制(字节/秒) compact-throughput = 50331648 # TSM压缩写入磁盘的峰值速率限制(字节/秒) compact-throughput-burst = 50331648 # 设置数据库的时间序列最大值,0不限制,默认100000 max-series-per-database = 1000000 # 设置一个标签键对应标签值的最大数量,0不限制,默认100000 max-values-per-tag = 100000 # TSM压缩的最大并发数,默认0 max-concurrent-compactions = 0 # WAL文件压缩到TSI索引文件的阀值,默认1M,字节 max-index-log-file-size = 1048576 # TSI索引引擎用于存放处理后的时序结果的内部缓存大小 series-id-set-cache-size = 100 # TSM引擎和WAL模块的调试日志记录,提供了更详细的输出,默认false trace-logging-enabled = false # 如果为true,MMAP的建议值MADV_WILLNEED会提供给内核 tsm-use-madv-willneed = false # Coordinator配置信息如下 [coordinator] # 写超时阈值,默认值为10秒 write-timeout = "10s" # 最大并发查询数,默认0,不限制 max-concurrent-queries = 0 # 查询操作超时阈值,默认0,不限制 query-timeout = "0s" # 慢查询超时阈值,超时后生成一条慢查询日志,默认0秒,禁用该功能 log-queries-after = "0s" # 一次select操作可以处理的最大时序数据记录条数,默认0,不限制 max-select-point = 0 # 一次select操作可以处理的最大时间序列线数量,默认0,不限制 max-select-series = 0 # 一次select操作可以创建的group by时间段的最大数量,默认0,不限制 max-select-buckets = 0 # 保留策略配置信息如下 [retention] # 是否开启保留策略功能,默认为true enabled = true # 检查时间间隔,默认30分钟 check-interval = "30m0s" # 分片预创建配置信息如下 [shard-precreation] # 是否开启分片预创建服务,默认true enabled = true # 检查时间间隔,默认10分钟 check-interval = "10m0s" # 创建分片组的最大提前时间间隔,默认30分钟 advance-period = "30m0s" # Monitor配置信息如下 [monitor] # 是否开启monitor功能,默认true store-enabled = true # 默认数据库名 store-database = "_internal" # 统计时间间隔,默认10秒 store-interval = "10s" # subscriber配置信息如下 [subscriber] # 是否开启subcriber服务,默认true enabled = true # HTTP通信超时阈值,默认时间30秒 http-timeout = "30s" # 是否准许接入自签名证书的HTTPS连接,默认false insecure-skip-verify = false # 设置CA证书的存储目录 ca-certs = "" # 设置并发数,默认40 write-concurrency = 40 # 设置写缓存大小,默认1000 write-buffer-size = 1000 # HTTP服务配置信息如下 [http] # 是否开启HTTP服务 enabled = true # HTTP服务绑定地址端口 bind-address = ":8086" # 是否开启认证,默认false auth-enabled = true # 是否开启http请求日志,默认true log-enabled = true # 当启用HTTP请求日志时,是否关闭HTTP写请求日志 suppress-write-log = false # 是否开启写操作日志,如果打开,每一次写操作都会打开日志,默认false write-tracing = false # 是否开启flux查询协议,默认false flux-enabled = false # 是否开启flux查询日志,默认false flux-log-enabled = false # 是否开启pprof,默认true pprof-enabled = true # 是否开启pprof并绑定localhost:6060,默认false debug-pprof-enabled = false # 是否启用HTTPS功能,默认false https-enabled = false # 设置HTTPS证书的路径 https-certificate = "/etc/ssl/influxdb.pem" # 设置HTTPS私钥的存储路径 https-private-key = "" # 配置查询返回最大行数,默认0,不限制 max-row-limit = 0 # 配置最大连接数,默认0,不限制 max-connection-limit = 0 # 用于JWT签名的共享秘钥,无默认值 shared-secret = "" # 配置realm,默认值为InfluxDB realm = "InfluxDB" # 是否启用socket通信,默认false unix-socket-enabled = false # socket权限 unix-socket-permissions = "0777" # socket路径 bind-socket = "/var/run/influxdb.sock" # 客户端请求主体的最大值,以字节为单位 max-body-size = 25000000 # HTTP请求日志的存储目录 access-log-path = "" # 并发处理的写请求的最大数量,默认0,不限制 max-concurrent-write-limit = 0 # 排队等待处理的写请求的最大数量,默认0,不限制 max-enqueued-write-limit = 0 # 在队列中等待处理的写请求超时阈值,单位秒 enqueued-write-timeout = 30000000000 # logging配置信息如下 [logging] # 日志格式,默认auto,其他可选格式logfmt和json format = "auto" # 日志级别,默认info,其他可选级别error、warn、debug level = "info" # 当程序启动时,是否禁用打印LOGO信息,默认false suppress-logo = false #Graphite接入配置信息如下 [[graphite]] # 是否启用该模块,默认false enabled = false # 绑定地址 bind-address = ":2003" # 数据库名称 database = "graphite" # 配置保留策略 retention-policy = "" # 通信协议 protocol = "tcp" # 批处理阈值,默认值5000 batch-size = 5000 # 在内存中等待批处理的最大数 batch-pending = 10 # 批处理等待阈值,默认1秒 batch-timeout = "1s" # 一致性级别 consistency-level = "one" # 多个表名间的连接符 separator = "." # UDP读缓存的大小,0表示使用操作系统提供的值 udp-read-buffer = 0 # CollectD接入配置信息如下 [[collectd]] # 是否启用该模块,默认false enabled = false # 绑定地址 bind-address = ":25826" # 数据库名 database = "collectd" # 配置保留策略 retention-policy = "" # 批处理阈值,默认5000 batch-size = 5000 # 在内存中等待处理的阈值,默认10 batch-pending = 10 # 批处理等待阈值,默认10秒 batch-timeout = "10s" # UDP读缓存的大小,默认0,使用操作系统提供的值 read-buffer = 0 # DB文件存放的位置 typesdb = "/usr/share/collectd/types.db" # 安全级别,默认none security-level = "none" # 认证文件存放位置 auth-file = "/etc/collectd/auth_file" # 处理方式split和join parse-multivalue-plugin = "split" # OPENTSDB配置信息如下 [[opentsdb]] # 是否启用该模块 enabled = false # 绑定地址 bind-address = ":4242" # 存储数据库名 database = "opentsdb" # 保留策略 retention-policy = "" # 一致性级别,默认one consistency-level = "one" # 是否开启TLS,默认false tls-enabled = false # 证书存放路径 certificate = "/etc/ssl/influxdb.pem" # 批处理阈值,默认1000 batch-size = 1000 # 在内存中等待批处理的最大数 batch-pending = 5 # 批处理等待阈值,默认1秒 batch-timeout = "1s" # 当检测到数据格式异常时,输出错误日志,默认true log-point-errors = true # UDP配置信息如下 [[udp]] # 是否启用该模块,默认false enabled = true # 绑定地址 bind-address = ":8089" # 数据库名称 database = "udp" # 保留策略 retention-policy = "" # 批处理阈值,默认5000 batch-size = 5000 # 在内存中等待批处理的最大数,默认10 batch-pending = 10 # UDP读缓存的大小,默认0,使用操作系统提供的值 read-buffer = 0 # 批处理等待阈值,默认1秒 batch-timeout = "1s" # 解析时间戳的精确值,默认纳秒 precision = "" # 连续查询配置信息如下 [continuous_queries] # 是否开启日志,默认true log-enabled = true # 是否启用该模块,默认true enabled = true # 是否记录连续查询执行的统计信息,默认false query-stats-enabled = false # 连续查询定是运行的时间间隔,默认1秒 run-interval = "1s" # TLS配置信息如下 [tls] # 支持TLS协议的最低版本 min-version = "" # 支持TLS协议的最高版本 max-version = ""
线上配置
[meta] dir = "/data/influxdb/meta" logging-enabled = true [data] dir = "/data/influxdb/data" wal-dir = "/data/influxdb/wal" series-id-set-cache-size = 100 [coordinator] query-timeout = "10s" log-queries-after = "10s" [retention] [shard-precreation] [monitor] [http] enabled = true flux-enabled = true flux-log-enabled = true bind-address = ":18086" auth-enabled = true log-enabled = false access-log-path = "" [logging] format = "auto" level = "warn" suppress-logo = true [subscriber] [[graphite]] [[collectd]] [[opentsdb]] [[udp]] enabled = true bind-address = ":8089" database = "udp" retention-policy = "" [continuous_queries] [tls]
认证授权
# 开启认证需要在配置文件中开启 [http] auth-enabled = true # 创建管理员账户 > create user admin with password '123456' with all privileges > show users # 创建普通用户 > create user tony with password '1234556' # 授权 # GRANT [READ,WRITE,ALL] [ON <DATABASE>] TO <USERNAME> # 赋予读、写权限时必须指定数据库 # ALL表示所有权限,如果不指定数据库表示赋予超级管理员权限,如果指定数据库,表示赋予数据库的所有权限 # 赋予tony超级管理员权限 > GRANT ALL TO 'tony' # 赋予tony对influx数据库的读权限 > GRANT READ ON 'influx' TO 'tony' # 查看授权 > SHOW GRANTS FOR tony # 取消授权 # REVOKE [READ,WRITE,ALL] [ON <DATABASE>] FROM <USERNAME> # 取消tony的超级管理员权限 > REVOKE ALL FROM 'tony' # 修改密码 > SET PASSWORD FRO 'tony' = '123456' # 删除用户 > DROP USER 'tony'
influxdb运行日志
systemctl方式启动的influxdb,运行日志是由journalctl接管,想要查看日志可以使用journalctl -u influxdb查看
命令行执行SQL
#查询 $ influx -port 18086 -host 127.0.0.1 -username admin -password 123456 -database 'jiande' -execute 'SELECT * FROM machine_alert_log' #插入 #what:表名 #machine_id,msg_code:带索引的键 #create_time,id,msg_value,serial_num:不带索引的键 $ influx -port 18086 -host 127.0.0.1 -username admin -password 123456 -database 'jiande' -execute 'insert what,machine_id=110,msg_code=yes create_time=1587214268123,id=666,msg_value=0,serial_num=0'
备份恢复
# 备份 influxd backup # -portable:在线备份 # -database:指定数据备份 # PATH:备份文件的目录 $ influxd backup -portable -database jiande /data/backup/ #恢复 influxd restore # -portable:在线恢复 # -database:指定数据库 # PATH:恢复文件的目录 $ influxd restore -portable -database jiande /data/back/
数据保留策略(注意:删除之前的保留策略会一并删除之前保留策略下的数据,如果不想删除之前的数据要使用alter修改策略)
# https://cloud.tencent.com/developer/article/1546922 # 查看数据库的保留策略 > show retention policies on telegraf name duration shardGroupDuration replicaN default ---- -------- ------------------ -------- ------- autogen 0s 168h0m0s 1 true name 策略名称:默认autogen duration 持续时间: 0s 代表无限制 shardGroupDuration shardGroup数据存储时间:shardGroup是InfluxDB的一个基本存储结构, 应该大于这个时间的数据在查询效率上应该有所降低。 replicaN 副本个数:1 代表只有一个副本 default 是否默认策略:true 代表设置为该数据库的默认策略 # 查看保留策略下的数据 > select * from "autogen".cpu limit 2; # 新建一个策略 CREATE RETENTION POLICY "策略名称" ON 数据库名 DURATION 时长 REPLICATION 副本个数; # 新建一个策略并且直接设置为默认策略 CREATE RETENTION POLICY "策略名称" ON 数据库名 DURATION 时长 REPLICATION 副本个数 DEFAULT; > CREATE RETENTION POLICY "role_01" ON telegraf DURATION 1h REPLICATION 1 DEFAULT; # 修改策略 ALTER RETENTION POLICY "策略名称" ON "数据库名" DURATION 时长 SHARD DURATION 时长 ALTER RETENTION POLICY "策略名称" ON "数据库名" DURATION 时长 SHARD DURATION 时长 DEFAULT # 删除策略 drop retention POLICY "策略名" ON "数据库名"
初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!