在公司内部做对于docker日志系统,之前调研了logstash,flume,fluentd,logspout等项目,其中logstash,flume是不支持对于docker的日志采集的,后来发现了fluentd最后搭建起来发现fluentd把docker集成起来感觉非常麻烦,远远满足不了现在的业务需求,而且fluentd也安装起来也非常到,也满足不了对于灵活部署更新的需求,后来在github上面发现了logspout这个项目,非常简单只针对docker日志采集,也非常小,基于微镜像打包只有十几兆,后来针对logspout进行了一系列的业务方面的开发,当大规模用到公司内部运维平台上发现还是没有那么稳定,在这种情况下发现了heka。
heka是mozilla开源的一个日志收集工具,提供的功能比较丰富。heka是一个高可扩展的日志收集处理工具,他的高可扩展不但体现在本身可以进行插件开发,而且还可以通过添加机器进行水平扩展。heka是go语言开发的,比较充分的运用的heka的并发机制,从我们对go语言特性了解来看,不用担心它的性能问题,即使如此我们也可以通过快速的水平扩展来满足业务的需求。
heka和logstash一样同样有input进行日志采集,output发送日志,中间同样提供了filter splitters decoders等功能。下面我们就说说如何使用heka:
这里我使用的是机器是ubuntu:14.04环境,首先要安装编译heka的环境。
apt-get update && \
apt-get install -yq --no-install-recommends \
build-essential \
bzr \
ca-certificates \
cmake \
curl \
git \
golang-goprotobuf-dev\
make \
mercurial \
patch \
ruby-dev \
protobuf-compiler \
python-sphinx \
wget \
debhelper \
fakeroot \
libgeoip-dev \
libgeoip1 \
golang-goprotobuf-dev
克隆heka项目 git clone https://github.com/mozilla-services/heka.git
cd heka进入到heka下面执行 source build.sh && make deb && dpkg -i heka_0.11.0_amd64.deb
这里看以看到执行的命令分为三步,我为了快速直接写成了一条命令,第一步是编译heka的代码,第二部是把heka的编译后的文件打包成deb包,第三部大家都明白是把heka安装到机器上。
安装上以后可以发现在机器上有了hekad命令。我建了一个heka的配置文件在/etc/heka/conf.d下面udp.toml
[DockerLogInput]
endpoint = "unix:///var/run/docker.sock"
[RstEncoder]
[PayloadEncoder]
#[LogOutput]
#message_matcher = "TRUE"
#encoder = "PayloadEncoder"
##encoder = "RstEncoder"
[UdpOutput]
message_matcher = "TRUE"
encoder = "PayloadEncoder"
#encoder = "RstEncoder"
address = "10.3.11.19:5506"
这个配置文件可以看到DockerLogInput是通过docker的api采集的docker的日志,UdpOutput是把采集的日志通过udp协议的方式发向一个address,这里heka的采集的信息是非常全的包括container的ID,NAME等信息都有,如果需要所有的信息可以用RstEncoder,如果只需要docker屏幕打印的输出日志可以用PayloadEncoder。
转载于:https://blog.51cto.com/11067470/1729869