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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。