4

Telegraf & Kapacitor, 来自Influxdata的套路

InfluxDB推出了的正式版V1.0版本(最新版本为1.1),随之而来还有Telegraf、Chronograf、Kapacitor等多个产品。InfluxDB也推出了企业版,并推出了InfluxCloud的云服务,这阵势,是要承包指标采集、分析、画图等时序数据库上下游的生意,有点模仿ELK套件的意思,今天我们就来说一下这里面的套路。

Telegraf

Telegraf是一个数据采集套件,使用起来跟Collectd、Statsd、Logstash等软件很像。通过plugin来实现数据的input和output。

看着下面长长的一串plugin,感觉非常强大有没有。

Input Plugins

  • aws cloudwatch

  • aerospike

  • apache

  • bcache

  • cassandra

  • ceph

  • chrony

  • consul

  • conntrack

  • couchbase

  • couchdb

  • disque

  • dns query time

  • docker

  • dovecot

  • elasticsearch

  • exec (generic executable plugin, support JSON, influx, graphite and nagios)

  • filestat

  • haproxy

  • hddtemp

  • http_response

  • httpjson (generic JSON-emitting http service plugin)

  • influxdb

  • ipmi_sensor

  • iptables

  • jolokia

  • leofs

  • lustre2

  • mailchimp

  • memcached

  • mesos

  • mongodb

  • mysql

  • net_response

  • nginx

  • nsq

  • nstat

  • ntpq

  • phpfpm

  • phusion passenger

  • ping

  • postgresql

  • postgresql_extensible

  • powerdns

  • procstat

  • prometheus

  • puppetagent

  • rabbitmq

  • raindrops

  • redis

  • rethinkdb

  • riak

  • sensors

  • snmp

  • snmp_legacy

  • sql server (microsoft)

  • twemproxy

  • varnish

  • zfs

  • zookeeper

  • win_perf_counters (windows performance counters)

  • sysstat

  • system

  • cpu

  • mem

  • net

  • netstat

  • disk

  • diskio

  • swap

  • processes

  • kernel (/proc/stat)

  • kernel (/proc/vmstat)

Service plugins:

  • http_listener

  • kafka_consumer

  • mqtt_consumer

  • nats_consumer

  • nsq_consumer

  • logparser

  • statsd

  • tail

  • tcp_listener

  • udp_listener

  • webhooks

  • filestack

  • github

  • mandrill

  • rollbar

Processor Plugins

  • printer

Aggregator Plugins

  • minmax

Output Plugins

  • influxdb

  • amon

  • amqp

  • aws kinesis

  • aws cloudwatch

  • datadog

  • file

  • graphite

  • graylog

  • instrumental

  • kafka

  • librato

  • mqtt

  • nats

  • nsq

  • opentsdb

  • prometheus

  • riemann

安装与使用

安装

笔者使用了最简单的RPM方式安装

curl -LO https://dl.influxdata.com/telegraf/releases/telegraf-1.1.1.x86_64.rpm
rpm ivh telegraf-1.1.1.x86_64.rpm

启动

standalone方式启动,可以指定需要的plugin,是不是有点像logstash呢?

telegraf --config telegraf.conf -input-filter cpu:mem -output-filter influxdb

或者以后台Deamon方式启动。
首先编辑默认的配置文件

vim /etc/telegraf/telegraf.conf 

设置好plugin之后,就可以启动服务了


service telegraf start

Chronograf

Chronograf是一款画图软件,整体风格与Grafana十分相似,来贴几张界面的图

当然比起已经比较成熟的Grafana来说,还差一些。

Kapacitor

Kapacitor是一款时序数据分析、处理的软件。可以周期性将InfluxDB中的数据汇总、处理后再输出到InfluxDB当中,或者告警(支持Email、HTTP、TCP、 HipChat, OpsGenie, Alerta, Sensu, PagerDuty, Slack等多种方式)

Kapacitor的配置可以使用一种叫做 TICKscript 的DSL语言来书写,下面是一个配置的例子

stream
    |from()
        .measurement('cpu_usage_idle')
        .groupBy('host')
    |window()
        .period(1m)
        .every(1m)
    |mean('value')
    |eval(lambda: 100.0 - "mean")
        .as('used')
    |alert()
        .message('{{ .Level}}: {{ .Name }}/{{ index .Tags "host" }} has high cpu usage: {{ index .Fields "used" }}')
        .warn(lambda: "used" > 70.0)
        .crit(lambda: "used" > 85.0)

        // Send alert to hander of choice.

        // Slack
        .slack()
        .channel('#alerts')

        // VictorOps
        .victorOps()
        .routingKey('team_rocket')

        // PagerDuty
        .pagerDuty()

我们就以上例来讲解配置

stream

stream,一段配置的开始,相当于function,也可以用来赋值

var errors = stream
    |from()
        .measurement('errors')

from

from, 定义数据的来源,也可用QUERY来直接书写SQL

|query('''
         SELECT mean("value")
         FROM "telegraf"."default".cpu_usage_idle
         WHERE "host" = 'serverA'
     ''')

windows

window, 定义时序数据的时间范围

    |window()
        .period(10m)
        .every(1m)

表示每分钟执行一次,取10分钟内的指标,也可以使用cron来指定执行时间

mean

mean表示取中位数,当然还有Derivative(增值)、Difference(差值)等很多方法,用过Grafana的同学应该比较熟悉

eval

eval可以通过自定义的函数对数据进行加工,这里将100 - "mean"的结果定义为used

    |eval(lambda: 100.0 - "mean")
        .as('used')

alert

alert就是告警的方法了。

id、message分别是告警的标题和内容

可以设置多个级别的告警阀值(OK、INFO、WARNING、CRITICAL)

   stream
           .groupBy('service')
       |alert()
           .id('kapacitor/{{ index .Tags "service" }}')
           .message('{{ .ID }} is {{ .Level }} value:{{ index .Fields "value" }}')
           .info(lambda: "value" > 10)
           .warn(lambda: "value" > 20)
           .crit(lambda: "value" > 30)
           .post("http://example.com/api/alert")
           .post("http://another.example.com/api/alert")
           .tcp("exampleendpoint.com:5678")
           .email('oncall@example.com')

最后就是设置报警的方式了,部分参数可以配置在启动配置文件中

启动

写完TICKscript后,将之保存到文件,例如cpu_alert.tick
之后用以下命令启动程序


# Define the task (assumes cpu data is in db 'telegraf')
kapacitor define \
    cpu_alert \
    -type stream \
    -dbrp telegraf.default \
    -tick ./cpu_alert.tick
# Start the task
kapacitor enable cpu_alert

爱点赞的胖虎
329 声望19 粉丝

引用和评论

0 条评论