亚马逊AWS官方博客
手把手教你玩转 Timestream For influxDB 实现时序数据存储和分析
为满足不断增长的时序数据需求,Amazon 推出了 Timestream for InfluxDB 服务,融合了 Amazon 云原生时序数据库的优势与 InfluxDB 开源生态,为客户提供全托管的高性能和高可用时序数据库解决方案。
Amazon Timestream for InfluxDB 是一个托管的时间序列数据库引擎, 专门设计用于处理时间序列数据。时序数据是按时间顺序排列的数据,通常用于表示 IoT 数据、应用程序指标、金融股票/期货行情、量化交易领域、日志和事件等。Amazon Timestream for InfluxDB 具有高效存储和查询的能力,采用自适应压缩算法和特定的存储引擎,可以高效地存储大量的时序数据,并通过类似 SQL 的查询语言(InfluxQL)和 FLUX 提供丰富的查询功能。它支持高并发写入,适用于处理实时数据流,并可定义数据保留策略自动删除旧数据以控制数据库大小。
Timestream for InfluxDB 的存储架构是基于 Time-Structured Merge Tree(TSM)的设计,数据分片、TSM 存储引擎、索引结构和压缩算法的结合,使得 InfluxDB 能够在保证数据可靠性的同时,提供快速的数据写入和查询性能。
Timestream for InfluxDB 多 AZ 部署支持有一个 Standby。多 AZ 部署支持数据的复制和故障转移,以提供高可用性和容错性,当一个节点发生故障时,复制的数据可以自动切换到其他节点,以保持数据的可用性和连续性,实现企业级数据库高可用性。
Timestream for InfluxDB 的主要优势包括:
- 高效的时序数据处理,采用优化的存储和查询引擎,支持实时及批量写入
- 灵活的数据模型,支持标签和字段,方便数据管理和过滤
- 强大的 InfluxQL(SQL)和 Flux 查询语言,支持时序数据分析和技术指标计算
- 支持数据生命周期管理,高效清理过期数据
- 支持定义 Flux Task,实时数据进行定期计算和统计
- 窗口查询功能,沿时间轴进行灵活的数据查询和聚合
- 支持数据压缩,节省存储成本
- 完全兼容 InfluxDB 最新版本,当前版本是 2.7,借助开源社区的技术支持
本 blog 将手把手教你玩转 Timestream for influxDB,主要会包含以下几个部分:Timestream for InfluxDB 创建、连接、数据插入,如何采用 influxDB UI 连接和管理 Timestream for influxDB;以及我们将以 devops 运维数据为示例场景,介绍如何采用 Timesteram for influxDB 来高效插入、存储时序数据;以及如何采用和集成 grafana,实现时序数据丰富和高效的查询、分析和展现。
部署架构图
其中架构主要分成四大部分:
- 实时时序数据采集:通过安装部署在 EC2 堡垒机的 Python 模拟实现 Devops 运维数据,将数据实时采集数据到 Timestream for influxDB。
- 时序数据存储:通过 Amazon Timestream for influxDB 时序数据库实现时序数据高效存储。
- 实时时序数据分析:通过安装部署在 EC2 堡垒机的 Grafana (内置 influxDB 插件)实时访问 Timestream for influxDB 数据,通过 Grafana 丰富的分析图表形式,结合 Amazon Timestream for InfluxDB 内置的时间序列分析函数,可以实现近乎实时地识别 devops 运维实时数据的趋势和模式。
- 通过 EC2 堡垒机 SSH tunnel, 采用 influxDB UI 访问同一 VPC 内部署的 Timestream for influxDB,实现图像化管理运维工作,例如创建 bucket(database)、创建 Flux Task 和进行实时数据探索(data explorer)。
安装 Timestream for InfluxDB
创建数据库
访问 Timestream for influxDB console(区域选择 us-east-1):https://us-east-1.console.aws.amazon.com/timestream/home?region=us-east-1#influxdb-instances/create-influxdb-instance
输入创建 influxDB 数据库参数:
DB instance name: managed-influxdb-1
Initial username: masteruser
Initial organization name: workshop
Initial bucket name: sampledb
Password: Password1
Instance configuration(保持缺省设置)
DB instance class:db.influx.large
Storage configuration(保持缺省设置)
Storage type:influx IO included(3k)
Allocated storage:400
Availability settings:选择 Single-AZ(生产环境建议选择 Multi-AZ)
Connectivity configuration(保持缺省配置)
Public access:选择 Not publicly accessible
其它配置:Parameter/Log/Tags 均保持缺省配置
点击创建数据库
创建 EC2 堡垒机
访问 EC2 console 区域选择 us-east-1:https://us-east-1.console.aws.amazon.com/ec2/home?region=us-east-1#LaunchInstances:
操作系统:选择 Amazon Linux
版本:选择 Amazon Linux 2
Instance type:选择 C5.large
密钥对:创建访问 EC2 堡垒机的密钥对,并将密钥保存到本地
其它选项:均选择缺省配置
等 EC2 堡垒机创建成功,增加一个安全组 default(前面创建的 Managed influxDB 所对应的 default 安全组)
在 EC2 堡垒机上安装相应软件
设置时区
Install python3
Install python3 pip
pip3 install boto3
pip3 install numpy
install git
安装 influxDB 对应的 python 模块
通过 Influx 客户端连接到 Managed InfluxDB
在 EC2(amazon Linux)上安装 influxDB 客户端
首先确认 EC2 和 InfluxDB 数据库在同一个安全组:default(安全组)安全组内支持任意 TCP/IP 访问
下载 influxDB client(version 2.7)
连接到数据库
创建 influx config(config name 为 workshop)
创建可以进行任何访问的 token
生成的 token 如上图,保持 token 为后续使用
创建新的 influx config workshop-new,并使其成为 active config
测试新创建 influx config workshop-new 是否正确:
执行 create bucket 命令,创建 bucket:test(bucket 相当于 database 概念)
装载本地文件到数据库
装载本地文件到 sampledb
Measure: mem
Tag: host
Field: used_percent
将本地文件导入到 Managed InfluxDB bucket:sampledb
查询刚插入数据(使用 FLUX 语言 – Flux 是 InfluxData 公司专门为 InfluxDB 2.0 及更高版本设计的新型数据脚本语言和查询语言)
将 S3 上数据文件导入到 Managed InfluxDB bucket:test
通过 HTTP API 插入数据
通过 HTTP API 写入单条数据 (注意鉴权,要在 HTTP head 中带 token)
输出结果
表示成功数据插入
通过 HTTP API 查询数据(支持类 InfluxQL 语法)
查询结果
通过 influx V1 Shell 访问数据库
执行下面命令访问 influx v1 shell
查看数据库
切换到要查看数据库
查看指标
查看指标的 tag 定义
查看指标的 field 定义
查询指标中数据
插入新数据
下载 devops 时序数据生成应用
下载 devops 时序数据生成应用, 为后续数据查询等操作使用
运行 devops 时序数据生成应用
–url 是 Managed influxDB URL
–org 是之前创建的 influxDB organization: workshop
–token 是之前创建访问地 influxDB token
–bucket 是之前创建的 influxDB bucket: sampledb
生成的 devops 时序数据描述:
- Devops 时序数据 tag(dimensension)
availability_zone/cell/instance_name/jdk_version/microservice_name/os_version/process_name/region/silo
- Devops 时序数据 Field(measure)
cpu_user/cpu_system/cpu_idle/cpu_iowait/cpu_steal/cpu_nice/cpu_si/cpu_hi
memory_free/memory_used/memory_cached
disk_io_reads/disk_io_writes/latency_per_read/latency_per_write
network_bytes_in/network_bytes_out
disk_used/disk_free/file_descriptors_in_use
task_completed/task_end_state/gc_reclaimed/gc_pause
通过 Influx UI 访问 Managed InfluxDB
通过 EC2 SSH tunnel 访问 Influx UI
(EC2 堡垒机和 Managed influxDB 在同一个 VPC 拥有同一个 default security group)
在 mac client 端 Terminal 中执行 (通过 EC2 SSH tunnel 访问 influx UI)
执行以下命令
其中:
us-east-1.pem – 是访问 EC2 堡垒机的密钥
managed-influxdb-1-5bc2krpa3h3ehv.us-east-1.timestream-influxdb.amazonaws.com:8086 – 是 Managed influxDB 访问 url
ec2-54-237-166-116.compute-1.amazonaws.com – 是 EC2 堡垒机 pubic 访问地址
保持这个 terminal 一直运行
通过 Influx UI 访问 managed InfluxDB
在 mac client 浏览器中输入:https://localhost:8086
输入 Username:masteruser;Password:Password1
创建新的 bucket 并定义 Retention Policy
Bucket Name: aggregate
Bucket Retention Policy: 30 days
Retention Policy: 将 bucket 的 rentention policy 设置为一个月,意味着 InfluxDB 会自动删除超过一个月的”老”数据
Bucket: aggregate 创建成功,并且 retention Policy 为 30 days
创建 Flux Task
Flux Task 是 InfluxDB 2.0 中的一个功能,它允许用户使用 Flux 脚本定义并调度数据处理任务。
创建一下个新的 Flux Task(点击左边导航 Flux TASK 图标),点击 create task 按钮,输入名字:mean_cpu_hi_5m,每 5 分钟执行一次。
把下面 flux task 定义的 flux script 拷贝到右边文本框里,下面定义的 Flux task 会每 5 分钟把 bucket:sampledb Measurement:devops_metrics 的 cpu_hi 指标做汇总(求近 5 分钟的平均值), 然后将汇总信息写到 bucket:aggregate Measurement:mean_cpu_hi(类似数据上卷动作)
点击 save button
新的 task: mean_cpu_hi_5m 创建成功
点击 task mean_cpu_hi_5m,执行 task(run task)
可以看到 task: mean_cpu_hi_5m 被成功执行
登陆到 EC2 堡垒机,运行 devops 时序数据生成应用
通过 data explore 访问刚由 Flux Task 生成的汇总数据
点击 data explore 图标,进入 data explore
Bucket:选择 aggregate
Measurement:选择 mean_cpu_hi
Field:选择 mean
选择不同的维度信息值:Region/AZ/Cell/silo/instance_type/instance_name/microservice_name/os_version
图形选择:Graph
时间选择:近 15 分钟
点击 summit 生成分析
通过 Grafana 访问 Managed InfluxDB
安装 Granfana
登陆到 EC2 堡垒机
For OSS releases(拷贝以下内容到 grafana.repo)
Grafana 的启动
启动 Grafana 服务,并确认服务运转正常
将 Grafana 服务器配置为开机自启动,以便于系统重启时自动运行
Grafana 的访问
第一次登陆到 Grafana(用户名:admin;口令:admin,第一次登陆需要改密码):
- 打开浏览器,访问以下地址:http: //EC2 堡垒机器public ip]:3000(注意登陆 VPN 不能访问此 URL,要退出 VPN)
- 除非您专门配置了其他端口,否则 Grafana 默认监听的 HTTP 端口为 3000
创建访问 InfluxDB 数据源 – 通过 FLUX
在 Grafana 选择 connection / 选择 Add new connection / Connection 类型选择influxDB / 选择 Add data source
查询语言为 Flux data source
输入 data source 名字:influxdb-1
Query language:Flux (选择 Flux)
输入访问 Managed influxDB URL:https: //managed-influxdb-1-5bc2krpa3h3ehv.us-east-1.timestream-influxdb.amazonaws.com:8086
认证方式:选择基本认证
用户名:masteruser
口令:Password1
InfluxDB details
organization:workshop
token:gFN88WQ48L8ZzSRdsfXlGxDiupyuQ4kChVFt-PEiuWZm55K9LyBq7e_qDJ******CCovp4lB88gouQKjig==
Default Bucket:sampledb
选择 Save and test
创建访问 influxDB 数据源 – 通过 InfluxQL
在 Granfana 选择 connection / 选择 Add new connection / Connection 类型选择 influxDB /选择 Add data source
查询语言为 Flux data source
输入 data source 名字:influxdb-2
Query language:InfluxQL(选择 InfluxQL)
输入访问 Managed influxDB URL:https: //managed-influxdb-1-5bc2krpa3h3ehv.us-east-1.timestream-influxdb.amazonaws.com:8086
Auth:选择 with Credentials
Custom HTTP Headers
Header:输入 Authorization
Value 输入(要写 Token 最前面):Token gFN88WQ48L8ZzSRdsfXlGxDiupyuQ4kChVFt-
Database:输入 sampledb
User:输入 masteruser
Password:输入 Password1
登陆到 EC2 堡垒机,运行 devops 时序数据生成应用
创建 Dashboard – 通过 Flux 访问 Managed InfluxDB
New dashboard / Add Visualization / 选择 Flux 数据源(influxdb-1)
在 query editor 里面输入
Panel Title:Mem query
Graph Type:Gauge
点击 Apply button
点击 save 按钮 Save dashboard,dashboard name:influx-flux-dashboard
创建 Dashboard – 通过 InfluxQL 访问 Managed InfluxDB
查询 1:降采样分析,分析可以从 devops_metrics 测量(Measure)中查询指定微服务(zeus)在过去 6 小时内每 15 分钟的 CPU 利用率指标平均值
New dashboard / Add Visualization / 选择 InfluxQL 数据源(influxdb-2)
在 query editor 里面输入:
Panel Title:微服务 Zeus 的平均 CPU
Graph Type:Stat
点击 Apply button
点击 save 按钮 Save dashboard,dashboard name:influxQL-dashboard
创建 Dashboard 查询时,请设定时区为本地浏览器时区
修改 dashboard 为自动刷新 – 每 5 秒刷新一次
查询 2:降采样分析,分析可以从 devops_metrics 测量(Measure)中查询在新加坡区域特定 cell 指定微服务(zeus)在过去 6 小时内每 1 小时的内存使用指标的平均值 /P90/P95/P99 值
New dashboard / Add Visualization / 选择 InfluxQL 数据源(influxdb-2)
在 query editor 里面输入
Panel Title:新加坡区域 cell-1 微服务 zeus 平均/P90/P95/P99 内存使用
Graph Type:Gauge
点击 Apply button
点击 save 按钮 Save dashboard,dashboard name:influxQL-dashboard
查询 3:查询不同主机在过去 5 分钟内的平均 CPU 使用,按照每 1 分钟做统计
New dashboard / Add Visualization / 选择 InfluxQL 数据源(influxdb-2)
在 query editor 里面输入
Panel Title:查询不同主机在过去 5 分钟内的平均 CPU 使用,按照每 1 分钟做统计
Graph Type:Bar Gauge
点击 Apply button
点击 save 按钮 Save dashboard,dashboard name:influxQL-dashboard
查询 4:Top 分析,分析可以从 devops_metrics 测量(Measure)中查询平均 CPU 使用最高的三个微服务
New dashboard / Add Visualization / 选择 InfluxQL 数据源(influxdb-2)
在 query editor 里面输入
Panel Title:CPU 使用最高的 TOP3 微服务
Graph Type:Table
点击 Apply button
点击 save 按钮 Save dashboard,dashboard name:influxQL-dashboard
查询 5:特定主机在最近 5 分钟的 CPU 使用曲线,使用线性插值函数对缺失数据插值
New dashboard / Add Visualization / 选择 InfluxQL 数据源(influxdb-2)
在 query editor 里面输入
Panel Title;主机 apollo-0000 在最近 5 分钟的 CPU 使用曲线,使用线性插值函数对缺失数据进行插值
时间选择:last 5 minutes
Graph Type:Time Series
点击 Apply button
点击 save 按钮 Save dashboard,dashboard name:influxQL-dashboard
查询 6:查询微服务为阿波罗 CPU 使用率较低的主机信息
在 query editor 里面输入
Panel Title:查询微服务为阿波罗 CPU 使用率较低的主机信息
时间选择:last 5 minutes
Graph Type:Stat
点击 Apply button
点击 save 按钮 Save dashboard,dashboard name:influxQL-dashboard
查询 7:查询过去一个小时任务终止状态为 USER_ERROR 的事件数量
在 query editor 里面输入
Panel Title:查询过去一个小时任务终止状态为 USER_ERROR 的事件数量
Graph Type:Stat
点击 Apply button
点击 save 按钮 Save dashboard,dashboard name:influxQL-dashboard
查询 8:CPU_User 和 CPU_IoWait 每 5 分钟变化值
在 query editor 里面输入
Panel Title:CPU_User 和 CPU_IoWait 每 5 分钟变化值
Graph Type:Gauge
点击 Apply button
点击 save 按钮 Save dashboard,dashboard name:influxQL-dashboard
查询 9:5 分钟内新加坡区域 AZ-1-3 微服务为 zeus 的每 1 分钟平均 GC_Pause
在 query editor 里面输入
Panel Title:5 分钟内新加坡区域 AZ-1-3 微服务为 zeus 的每 1 分钟平均 GC_Pause
Graph Type:Time Series
点击 Apply button
点击 save 按钮 Save dashboard,dashboard name:influxQL-dashboard
整体 Dashboard 展示
总结
本 blog 着重介绍通过 Timestream for influxDB 集成 Grafana ,实现 devops 运维时序数据实时采集、存储和分析,其中包含部署架构、环境部署、数据生成、数据存储和分析,希望当您有类似时序数据存储和分析需求的时候有所启发,实现海量时序数据高效管理,挖掘时序数据中蕴含的规律、模式和价值,助力业务发展。