docker-statsd-influxdb

本文介绍如何用docker封装一个支持graphite和influxdb作为后端数据存储的statsd image。

最近折腾监控系统
选用statsd作为数据代理,用于接收各种agent发来的读数,然后存到influxdb中。
statsd 目前在github上star有7500+。

注意:
使用statsd数据刷到influxdb中有10秒钟延迟,这是由于statsd的机制。

git clone https://github.com/etsy/statsd.git

Dockerfile

# cat Dockerfile
FROM arkii/node:slim
MAINTAINER Arkii sqy6@163.com
COPY ./statsd /statsd
ADD config.js /statsd/config.js
RUN echo 'Asia/Shanghai' > /etc/timezone && /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && cd /statsd && npm install statsd-influxdb-backend
CMD /statsd/bin/statsd "${CONFIG_PATH:=/statsd/config.js}"
EXPOSE 8125/udp 8126/tcp

docker-compose/fig 配置文件

# cat fig.yml
statsd:
image: arkii/statsd:influxdb
dns: 172.17.42.1
ports:
- "8125:8125/udp"
- "8126:8126/tcp"
environment:
- PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
- INFLUXDB_HOST=10.21.9.61
- STATSD_DEBUG=true

启动脚本

# cat service.sh
#!/bin/bash
sysctl -w net.nf_conntrack_max=655360
sysctl -w vm.max_map_count=262144
ulimit -n 65536
/usr/bin/fig up -d --allow-insecure-ssl

statsd配置文件,支持启动时指定变量

# cat config.js
{
// graphitePort: 2003,
// graphiteHost: "graphite.example.com",
port: 8125,
// backends: [ "./backends/graphite", "statsd-influxdb-backend" ],
debug: process.env.STATSD_DEBUG || false,
backends: [ "statsd-influxdb-backend" ],
influxdb: {
host: process.env.INFLUXDB_HOST || '127.0.0.1', // InfluxDB host. (default 127.0.0.1)
port: process.env.INFLUXDB_PORT || 8086, // InfluxDB port. (default 8086)
version: 0.8, // InfluxDB port. (default 0.8)
ssl: false, // InfluxDB is hosted over SSL. (default false)
database: process.env.INFLUXDB_DB || "statsd", // InfluxDB database instance. (required)
username: process.env.INFLUXDB_USER || "root", // InfluxDB database username. (required)
password: process.env.INFLUXDB_PASS || "root", // InfluxDB database password. (required)
flush: {
enable: true // Enable regular flush strategy. (default true)
},
proxy: {
enable: false, // Enable the proxy strategy. (default false)
suffix: 'raw', // Metric name suffix. (default 'raw')
flushInterval: 1000 // Flush interval for the internal buffer.
// (default 1000)
},
includeStatsdMetrics: false, // Send internal statsd metrics to InfluxDB. (default false)
includeInfluxdbMetrics: false // Send internal backend metrics to InfluxDB. (default false)
// Requires includeStatsdMetrics to be enabled.
}
}

启动容器

./service.sh

查看容器日志和debug信息

fig logs

直接使用我的镜像

docker pull arkii/statsd:influxdb

statsd项目地址

statsd-influxdb-backend项目地址