`

使用 Kapacitor 对 InfluxDB 数据进行统计处理

阅读更多

      InfluxDB + Telegraf + Grafana 算是一套不错的数据收集、视觉化工具,相比于更为常见的 ELK 架构,它有着自己的特点。查询功能总得来说虽不如 ES 强大,但是优点是——已经够用了,而且它的性能不错,存储的数据占用空间也相比 ES 小。

简单介绍这三个工具:

  • InfluxDB 是 InfluxData 的一款时序数据库,它是这套工具的核心;
  • Telegraf 则是 InfluxData 自己开发的一个数据收集工具,相比于 Logstash 或者 Mozilla 的 Heka,它有了更多的内置实用 input 插件,例如 sysstat, Mongodb, MySQL, 日志文件 grok 和跟踪 … 使用 Telegraf 可以非常容易的监控起系统和各种常见服务的各种参数,基本无需再安装其它专用工具。
  • Grafana 则是一个数据视觉化工具(“画图”的),支持多种数据后端,包括 InfluxDB,Elasticsearch,Zabbix 等。

实际上,InfluxData 是有一个自己的 TICK 架构的(Telegraf + InfluxDB + Chronograf + Kapacitor),其中 Chronograf  是用来画图的,但是看起来似乎还不成熟,不如使用 Grafana 好。Kapacitor 则是一个专门处理 InfluxDB 里面的数据的工具,用它可以对收集到的数据进行统计、触发报警等。。。

好了,说了这么多,其实是想借一个实例说下怎样用 InfluxData 的 Kapacitor 来对 InfluxDB 的数据进行加工处理。

假设:已经搭建好了 InfluxDB + Telegraf + Grafana 这套工具,web 日志收集存储在了 InfluxDB,我们想查看一些统计数值,比如每日独立访问 IP 这样的有价值的数据,我们现在该怎么做?

一般来说,有以下几个选项:

  1. 在 Grafana 里面,我们新建一个图表,每次查看时实时统计出所有的每日独立 IP。但是这个方法实在不妥,web 日志量很大,如果每次一查看那个图表就把 InfluxDB 里面的数据全部过一遍,还要计算、分组,实在太低效,性能太糟糕。对于每日独立 IP 这种数据来说,我们其实并不需要它是实时的,只要每天统计一次即可。
  2. 我们写个 Shell 或者强大一点,Python 脚本去从 InfluxDB 查询出独立 IP 数,再把结果存回 InfluxDB,再把它放到 crontab 里面每天运行,然后 Grafana 建立的图表可以直接查这个新的 measurement。这种方法远比第一种要好很多,但是仍然是需要写脚本的。
  3. 我们可以利用专门的工具——Kapacitor 来做这件事。下面就详细说下如何取每日独立 IP 数。

按照官方的简介,Kapacitor 是一款“Time-Series Data Processing, Alerting and Anomaly Detection”,也就是说——数据处理、报警、异常探测它都能做。

Kapacitor 的安装、配置都很简单,推荐从官网下载 rpm/deb 包安装,然后修改 /etc/kapacitor/kapacitor.conf 文件,在 InfluxDB 连接配置里面设置好账号、密码,就可以启动 kapacitor 服务了。

Kapacitor 有一个后台服务,用户需要做的事就是编写 TICKscript 脚本,然后把这个脚本加载。

来看这个计算每日独立 IP 的脚本,ip.tick:

batch
    |query('''
        SELECT count(distinct(clientip)) AS uip
        FROM "telegraf"."retentionPolicy"."log_measurement"
    ''')
        .period(1d)
        .cron('0 0 * * *')
    |influxDBOut()
        .database('logstats')
        .measurement('site_uip')
        .tag('kapacitor', 'true')

其中,batch 指令表示这是一个对数据进行一次批量处理的任务; |query() 表示这是数据查询的处理节点,我们在 query() 里面直接写入 InfluxDB 的类SQL 查询语句即可,但并没有加入 WHERE 条件对查询时间进行限定,这是为何?因为后面的 .period() 指定了查询范围为一天;然后再利用 .cron() 这个属性,我们可以告诉 Kapacitor 每天零点都执行一次这个查询。|influxDBOut() 则是将查询出来的数据存入 InfluxDB,它的几个属性也比较好理解,不再详说。

保存文件后,执行以下命令:

$ kapacitor define log_uip -tick ip.tick -type batch \
   -dbrp telegraf.retentionPolicy
$ kapacitor enable log_uip

就定义和启用了这个 Kapacitor 任务。接下来还可以用 kapacitor show log_uip 或者 kapacitor list tasks 等命令查看任务状态。看到了吧,这样比脚本加 crontab 还是要简单不少的。(kapacitor 命令的参数含义可以用 help 子命令或者这个文档链接查看。)

在它运行过后,我们就可以在 Grafana 里面取 logstats 数据库里面 site_uip 的 uip 出来进行画图了。

总结:这篇文章只是用一实例展示了 Kapacitor 的功能之一,实际上 Kapacitor 的功能远不止这些,(报警等功能,因为我的环境早有这种功能,没有使用过。)tick 脚本的语法也比上面展示出来的部分强大很多,其数据处理节点也很丰富。总得来说,InfluxData 的这套 TICK 架构似乎还在快速发展的起步阶段(尤其是除 InfluxDB 外的那三部分),但是其实用性已经有一定吸引力了。

 

转自:

https://dislic.net/tag/kapacitor/

分享到:
评论

相关推荐

    influxDB 1.8.4 + Tick 全栈 + C# 客户端 Window 版本

    Kapacitor 1.5.7版本可以创建复杂的警报规则,对数据进行流式处理和分析。 4. **Chronograf**:是一个用户界面工具,用于可视化数据、管理InfluxDB实例以及配置Kapacitor。Chronograf 1.8.10版本可能包含了新的仪表...

    kapacitor 1.5.2 TICK监控组件.rar

    3. **数据处理**:通过 UDF(用户定义的函数)支持对数据进行复杂的转换和计算,例如滑动窗口统计、差分计算等。 4. **数据重采样**:将高频率数据重新采样为低频率,以便进行长期存储或分析。 5. **数据路由**:将...

    kapacitor.tar.gz

    kapacitor是InfluxDB生态系统中的一个组件,用于处理时间序列数据的警报、处理和分析。InfluxDB是一款开源的时序数据库,专门设计用于处理大量来自IoT(物联网)、监控系统、性能指标和其他时间戳相关的数据。而...

    influxdb-handbook-master

    3. 内置数据压缩:InfluxDB自动对存储的数据进行压缩,节省存储空间。 4. 查询语言:InfluxDB拥有自己的查询语言InfluxQL,支持复杂的时序数据查询和分析。 5. 批量写入:通过批量写入API,可以高效地一次性写入大量...

    influxdb1.6.2版本 windows 64bit环境

    4. Kapacitor:用于处理InfluxDB中的数据流,实现警报、数据处理和聚合等功能。 五、使用InfluxDB 1. 创建数据库:在InfluxDB Shell中使用`CREATE DATABASE <database_name>`命令创建数据库。 2. 写入数据:使用`...

    influxdb2-2.0.6-windows-amd64.zip

    Organizations代表不同的用户或团队,Buckets是存储时间序列数据的容器,而Labels则提供了元数据,方便对数据进行分类和搜索。 7. **安全性和权限管理**:2.0.6版本继续强化了安全性和权限控制,支持身份验证、角色...

    数据架构设计与实践时序数据库InfluxDB在微服务建设中的实践V2.pdf

    在实践中,可能会采用自研和第三方工具的结合,比如使用statsd进行数据聚合,通过Telegraf进行数据收集,利用InfluxDB进行存储和查询,并可能结合其他工具如Kafka或Nginx进行数据流的管理和优化。 总结来说,...

    InfluxDB v1.8 中文文档

    3. **查询语言**:InfluxDB使用自定义的查询语言InfluxQL,类似于SQL,但针对时间序列数据进行了优化。InfluxQL允许用户执行复杂的时序分析,如滑动窗口、时间聚合和趋势分析。 4. **数据模型**:InfluxDB的数据...

    influxdb-1.8.10-windows-amd64

    不过,需要注意的是,InfluxDB 1.8.10已是较旧的版本,新用户可能考虑使用更现代的InfluxDB v2.x,它引入了更多改进和新特性,如Kapacitor被替换为更强大的Alerting功能,以及引入了新的数据模型和API。

    chronograf-1.6.2-windows

    6. **Kapacitor集成**:Chronograf可以与Kapacitor无缝配合,Kapacitor是InfluxDB的处理引擎,负责数据处理和警报定义,两者结合能实现更复杂的数据分析和自动化操作。 7. **轻量级与高性能**:Chronograf设计为轻...

    influxdb-1.7.5-1.7.7_windows_amd64.zip

    2. **灵活的数据模型**:InfluxDB使用简单且强大的数据模型,数据以时间戳、测量名、标签集和字段集的形式存储,便于快速查询和分析。 3. **内置数据可视化**:InfluxDB自带一个Web界面——Chronograf,可以用于...

    influxDb-All.txt

    截止 2019-06-28,influxDB全家桶最新版(windows+linux)。包括:Telegraf(收集数据) —> InfluxDB(存储数据) —> Chronograf(显示数据) —>Kapacitor(处理数据)

    InfluxDB Chronograf 1.8.10

    2. **数据压缩**: 自动对时间序列数据进行压缩,减少存储空间需求。 3. **灵活的数据模型**: 使用时间戳、测量、标签和字段来组织数据。 4. **强大的查询语言**: InfluxQL支持复杂的查询操作,如聚合、窗口函数等。 ...

    awesome-influxdb:与InfluxDB相关的精选项目,库,工具等的精选列表

    3. Kapacitor:InfluxDB的实时数据处理引擎,用于处理警报、流式计算和数据备份等任务,通过定义“ TICKscript”来定义处理流程。 三、第三方库与API 1. Golang库:如`influxdb-client-go`,是官方提供的Go语言...

    InfluxDB 的 Java 客户端.zip

    InfluxDB 的 Java 客户端influxdb-java 这是InfluxDB (1.x)的官方(和社区维护)Java 客户端库,InfluxDB 是 TICK(Telegraf、InfluxDB、Chronograf、Kapacitor)堆栈的一部分的开源时间序列数据库。对于 InfluxDB ...

    kapacitor:用于处理,监视和警告时间序列数据的开源框架

    开源框架,用于处理,监视和预警时间序列数据 安装 Kapacitor具有两个二进制文件: kapacitor –一个用于调用Kapacitor API的CLI程序。 kapacitord – Kapacitor服务器守护程序。 您可以直接从页面下载二进制...

    InfluxDB简介

    它作为TICK堆栈(Telegraf、InfluxDB、Chronograf、Kapacitor)的一部分,提供了一整套解决方案来管理和分析时间序列数据。时间序列数据通常涉及对随着时间变化的度量或事件的跟踪,如服务器性能指标、应用监控数据...

    阿里巴巴 Sentinel + InfluxDB + Chronograf 实现监控大屏

    2. InfluxDB 是一款时序数据库,用于存储和处理大量时间序列数据。 3. Chronograf 是一款展示控制台,用于展示监控数据和实现预警功能。 4. 使用 Docker 安装 Chronograf,可以快速部署和配置展示控制台。 5. 在监控...

    influxdays:各种用例的脚本

    TICKscript是InfluxDB的Kapacitor组件所使用的编程语言,用于处理数据流、执行警报、分析和处理时序数据。 TICKstack是InfluxData公司提出的全栈时序数据库解决方案,由以下四个组件组成: 1. **InfluxDB**:这是...

    influxdb:可扩展的数据存储,用于指标,事件和实时分析

    现在,此仓库中的master分支代表最新的InfluxDB,该数据库现在在单个二进制文件中包含针对Kapacitor(后台处理)和Chronograf(UI)的功能。 与最新版本兼容的InfluxDB客户端库列表可以在找到。 如果您正在寻找1.x...

Global site tag (gtag.js) - Google Analytics