`

使用 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-All.txt

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

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

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

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

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

    kapacitor.tar.gz

    chart for kapacitor

    influxdb-java:InfluxDB的Java客户端

    这是 (1.x)的官方(且由社区维护)Java客户端库,它是TICK(Telegraf,InfluxDB,Chronograf,Kapacitor)堆栈的一部分的开源时间序列数据库。 注意:该库与InfluxDB 1.x一起使用。 要连接到InfluxDB 2.x实例,...

    bitnami-docker-influxdb:Bitnami InfluxDB Docker映像

    它是TICK(Telegraf,InfluxDB(TM),Chronograf,Kapacitor)堆栈的核心组件。 TL; DR $ docker run --name influxdb bitnami/influxdb:latest Docker撰写 $ curl -sSL ...

    kapacitor 1.5.2 TICK监控组件.rar

    软件介绍: kapacitor-1.5.2.x86_64.rpm是学习搭建TICK所需要的组件,这里提供相应的资源包。

    TICK监控-kapacitor-1.5.2

    学习搭建TICK下载该组件费事,因此提供相应的下载方式。

    vsphere-influxdb-go:收集VMware vSphere,vCenter和ESXi性能指标并将其发送到InfluxDB

    资源池,数据存储和虚拟机的所有可能指标,并将它们发送到(一个用Go编写的流行的开源时间序列数据库项目),然后您可以在Grafana中对其进行可视化(链接到示例仪表板)或Chronograf,并使用Grafana,Kapacitor或...

    influxdb-subscription-cleaner:使用命令行工具删除所有 influxdb 订阅

    解决方法 Kapacitor 将自动重新创建其当前使用的订阅。 构建(使用 glide 供应 deps) 去 github.com/jeremyd/influxdb-subscription-cleaner 使用环境变量配置: INFLUXDB_URL=http://myinflux:8086 INFLUXDB_...

    influxdb1.6.2 windows版及其他配套工具

    influxdb-1.6.2_windows_amd64; chronograf-1.6.2_windows_amd64; kapacitor-1.5.1_windows_amd64; telegraf-1.7.4_windows_amd64

    InfluxData.Net:InfluxData TICK堆栈.net库

    InfluxData.Net 与InfluxDB v1.3.x和Kapacitor v1.0.0 API兼容 注意:该库很可能也可以与更新版本的TICK堆栈一样好,但是尚未针对它们进行过测试... Kapacitor是一个数据处理引擎。 它可以处理来自InfluxDB的流(订阅

    可扩展的数据存储,用于指标,事件和实时分析-Golang开发

    InfluxDB InfluxDB是一个开放源代码时间...现在,此存储库上的master分支代表最新的InfluxDB,该数据库现在包含在单个二进制文件中的Kapacitor(后台处理)和Chronograf(UI)功能。 与机智兼容的InfluxDB客户端库列表

    tickscript-studio:基于hacky基于Web的IDE,用于编写kapacitor滴答脚本

    使用docker-compose进行部署 编辑docker-compose.yml文件:为您的influxdb服务器正确设置TICKSCRIPT_STUDIO_INFLUXDB环境变量。 docker-compose up -d 在这个项目上发展 开发先决条件 在您的$PATH上

    chronograf:TICK堆栈的开源监视和可视化UI

    计时表Chronograf是一个用Go和React.js编写的开源Web应用程序,它提供了可视... 使用Chronograf的模板变量可以轻松调整出现在图形中的数据,并获得对数据的更深入了解。Kapacitor用户界面用于警报创建和警报跟踪的UI。

    TICK:TICK(电报,InfluxDB,计时码表,电容器)

    打钩勾号(Telegraf,InfluxDB,Chronograf,Kapacitor)操作系统最后的Debian包含: telegraf_1.5.0-1_amd64 influxdb_1.4.2_amd64.deb chronograf_1.4.0.1_amd64.de kapacitor_1.4.0_amd64.deb

    poolmon:泳池温度监控项目

    它目前由MQTT经纪人(Mosquitto),Telegraf(充当MQTT使用者),InfluxDB,Chronograf和Kapacitor(所谓的堆栈)组成。 Grafana用于仪表板可视化。 在该项目的初始版本中,所需的服务通过Docker在Raspberry Pi 3上...

    自动化安装脚本.zip(适用于ubuntu 16.04及以上版本系统。)

    自动化安装脚本,一键运行,自动安装 grafana-influxdb-kapacitor-mongo-node-npm-pm2-yarn-redis-telegraf等应用和服务,适用于ubuntu 16.04及以上版本系统。 资源介绍链接:...

    docker-configurations

    grafana :Telegraf服务器,其中以Prometheus格式存储,由Prometheus服务器抓取并通​​过Grafana可视化的度量标准telegraf-influxdb-chronograf-kapacitor :TICK堆栈设置,站立在一个Telegraf服务器中,用于在其中...

    vsphere-vcenter-influx-go

    资源池,数据存储和虚拟机的所有可能指标,并将它们发送到(一个用Go编写的流行的开源时间序列数据库项目),然后您可以在Grafana中对其进行可视化(链接到示例仪表板)或Chronograf,并使用Grafana,Kapacitor或...

Global site tag (gtag.js) - Google Analytics