暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

支持日志数据写入提升数据处理效率,Grafana 插件使交互更友好 | Greptime 双周精选

GreptimeDB 2024-06-19
100
 

内容概述


作为一个成长中的开源项目,GreptimeDB 的进展离不开来自全球的社区贡献者们,感谢各位!

最近的内容更新如下:
  • 支持日志导入:使用 Elastic Ingest Pipelines 配置来处理和转换日志数据,将带有类型信息的数据通过 Schemaless 的方式导入到数据库表中

  • 实现 SHOW CREATE FLOW:通过支持 SHOW CREATE FLOW,GreptimeFlow 正在逐渐完善生态

  • 简化 Parquet Writer:通过去除 Arrow 与 OpenDAL/S3 之间的冗余 Writer,减少 6% 的 Parquet 文件写入耗时



 

新鲜事


Grafana GreptimeDB 插件发布

我们发布了 Grafana GreptimeDB 插件(基于 Grafana Prometheus 插件修改)。该插件实现了对 GreptimeDB 更友好的交互和功能支持,支持 GreptimeDB 的多值模型。目前可以通过本地安装使用,具体见:

https://github.com/GreptimeTeam/greptimedb-grafana-datasource/





社区贡献者名单


在过去的两周里,GreptimeDB 共合并了 55 个 PR,其中有 5 位独立贡献者,累计 6 个 PR 被成功合并,还有很多待合并的 PR。


祝贺以下各位在过去 2 周内成为我们活跃的贡献者:

@cjwcommuny (db#4117)

@irenjj(db#4040)

@realtaobo (db#4088)

@WL2O2O (dashboard#433)

@yuanbohan (db#4121 db#4123)

注:按照 GitHub 用户名首字母顺序排列
👏 欢迎 @cjwcommuny @WL2O2O 作为新的贡献者加入社区并成功合并了首个 PR,还有更多来自其他独立贡献者的 PR 正在等待合并。


同时衷心感谢我们所有的成员和贡献者!是你们的付出让我们的项目得以成功,也是你们让 GreptimeDB 成为一个更优质的产品。让我们一起努力,建立一个更棒的社区!



PR 亮点


#4014

支持日志导入
本 PR 引入了对日志导入的支持。我们使用 Elastic Ingest Piplines 语法来定义处理和转换行为,我们称之为 Pipelines。将 Pipeline 模型定义上传到数据库后,我们就可以使用该 Pipeline 将日志处理成结构化数据并插入表中。

举例说明,我们可以创建一个如下的 Pipeline:

curl -X "POST" "http://localhost:4000/v1/events/pipelines/test" \
     -H 'Content-Type: application/x-yaml' \
     -d 'processors:
  - date:
      field: time
      formats:
        - "%Y-%m-%d %H:%M:%S%.3f"
      ignore_missing: true

transform:
  - fields:
      - id1
      - id2
    type: int32
  - fields:
      - type
      - log
      - logger
    type: string
  - field: time
    type: time
    index: timestamp
'


该接口同样支持将 Pipeline 内容放到一个文件中并直接上传整个文件。现在一个名为 test 的 Pipeline 在 greptime_private.pipelines 表中就创建好了。然后我们可以在数据库中插入一些日志数据:

curl -X "POST" "http://localhost:4000/v1/events/logs?db=public&table=logs1&pipeline_name=test" \
     -H 'Content-Type: application/json' \
     -d '[
    {
      "id1": "2436",
      "id2": "2528",
      "logger": "INTERACT.MANAGER",
      "type": "I",
      "time": "2024-05-25 20:16:37.217",
      "log": "ClusterAdapter:enter sendTextDataToCluster\\n"
    }
  ]'


该日志数据是 JSON 格式的。新的 /v1/events/logs 接口会查找 pipeline_name 参数指定的 Pipeline 来处理 Payload 数据。可以注意到日志数据的字段和定义的 Pipeline 相互关联。最后一个名为 logs1 的表就创建好了,带有类型信息的数据被插入到了该表中。

mysql> show create table logs1;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                    |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| logs1 | CREATE TABLE IF NOT EXISTS `logs1` (
  `id1` INT NULL,
  `id2` INT NULL,
  `type` STRING NULL,
  `log` STRING NULL,
  `logger` STRING NULL,
  `time` TIMESTAMP(9) NOT NULL,
  TIME INDEX (`time`)
)

ENGINE=mito
WITH(
  append_mode = 'true'
) |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> 
select * from logs1;
+------+------+------+---------------------------------------------+------------------+----------------------------+
| id1  | id2  | type | log                                         | logger           | time                       |
+------+------+------+---------------------------------------------+------------------+----------------------------+
| 2436 | 2528 | I    | ClusterAdapter:enter sendTextDataToCluster
 | INTERACT.MANAGER | 2024-05-25 20:16:37.217000 |
+------+------+------+---------------------------------------------+------------------+----------------------------+
1 row in set (0.03 sec)

#4112
简化 Parquet Writer
最初引入 BufferedWriter 是为了解决 Arrow 的 Parquet Writer 需要 std::io::Write,而 OpenDAL 仅提供实现 tokio::io::AsyncWrite 的异步 S3 Writer 的类型不匹配问题。现在 Arrow 直接提供了 AsyncArrowWriter,我们就可以移除这个用于同步转异步的 BufferedWriter 结构。

通过移除这些冗余结构和额外的代码路径,我们在写入 Parquet 文件时的时间消耗减少了  6%。

#4040

实现 SHOW CREATE FLOW

现在,我们可以在创建 Flow 后使用 SHOW CREATE FLOW。例如,如果我们创建了如下 Flow:

mysql> CREATE FLOW IF NOT EXISTS my_flow
    -> SINK TO my_sink_table
    -> EXPIRE AFTER INTERVAL '1 hour'
    -> AS
    -> SELECT count(1) FROM monitor;
Query OK, 0 rows affected (0.04 sec)


我们可以使用 SHOW CREATE FLOW my_flow 来检查创建的语句:

mysql> SHOW CREATE FLOW my_flow;
+---------+-----------------------------------------------------------------------------------------------------------------------+
| Flow    | Create Flow                                                                                                           |
+---------+-----------------------------------------------------------------------------------------------------------------------+
| my_flow | CREATE OR REPLACE FLOW IF NOT EXISTS my_flow
SINK TO my_sink_table
EXPIRE AFTER 3600
AS SELECT count(1FROM monitor |
+---------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

#4151
GreptimeDB 基准测试指南
现在,用户可以使用修改后版本的 tsbs 按照我们提供的指南去进行基准测试。这份指南也可以用于任何支持 tsbs 的数据库进行基准测试,从而生成比较结果。温馨提示,请确认使用 Release profile 构建的执行文件来运行基准测试。

基准测试指南:

https://github.com/GreptimeTeam/greptimedb/blob/main/docs/benchmarks/tsbs/README.md




邀请大家来做 GreptimeDB 的 Good First Issue 啦!💜
#4157 修复 information_schema.region_peers 返回相同 region_id 的问题

关键词:Information Schema

难度:简单

information_schema.region_peers 中存储了 region_id 的情况下,即使有多个 region peers,似乎只返回了一个 region_id。现在需要查明是否在组装 information_schema.region_peers 的返回值时存在 bug 并修复它。



 



点击下方链接🔗关注 GreptimeDB,了解更多技术干货👇



关于 Greptime

Greptime 格睿科技专注于为物联网(如智慧能源、智能汽车等)及可观测等产生大量时序数据的领域提供实时、高效的数据存储和分析服务,帮助客户挖掘数据的深层价值。目前主要有以下三款产品:


GreptimeDB 是一款用 Rust 语言编写的开源时序数据库,具有云原生、无限水平扩展、高性能和融合分析等特点,帮助企业实时读写、处理和分析时序数据的同时,降低长期存储的成本。我们提供 GreptimeDB 企业版,支持更多企业特性和定制化服务,如有需要欢迎联系我们:15310923206(同微信)。


边云一体方案专为更高效地解决物联网中边缘存储和计算问题而设计,解决了物联网企业数据呈几何倍数增长后的实际业务痛点。它通过将多模式边缘数据库与云端的GreptimeDB 企业版相结合,大幅降低了流量、计算和存储成本,同时提升了数据及时性和商业洞察力。


GreptimeCloud 是一款全托管的云上数据库即服务(DBaaS)解决方案,基于开源时序数据库 GreptimeDB 打造,能够高效支持可观测、物联网、金融等领域的应用。


GreptimeDB 作为开源项目,欢迎对时序数据库、Rust 语言等内容感兴趣的同学们参与贡献和讨论。第一次参与项目的同学推荐先从带有 good first issue 标签的 issue 入手,期待在开源社群里遇见你!扫码添加小助手备注“技术交流群”立即加入讨论吧~


Star us on GitHub Now: 

https://github.com/GreptimeTeam/greptimedb


官网:https://greptime.cn/

文档:https://docs.greptime.cn/

Twitter: https://twitter.com/Greptime

Slack: https://greptime.com/slack

LinkedIn: https://www.linkedin.com/company/greptime/


点击下方链接🔗关注 GreptimeDB,了解更多技术干货👇


往期精彩文章:


👇 点击下方阅读原文,立即体验 GreptimeDB!

文章转载自GreptimeDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论