今天,我们将隆重介绍一款新的docker日志收集工具:fluentd-pilot。你可以在每台机器上部署一个fluentd-pilot实例,就可以收集机器上所有Docker应用日志。fluentd-pilot具有如下特性
快速启动下面我们先演示一个最简单的场景:我们先启动一个fluentd-pilot,再启动一个tomcat容器,让fluentd-pilot收集tomcat的日志。为了简单起见,这里先不涉及sls或者elk,如果你想在本地玩玩,只需要有一台运行docker的机器就可以了。 首先启动fluentd-pilot。要注意的是,以这种方式启动,由于没有配置后端使用的日志存储,所有收集到的日志都会直接输出到控制台,所以主要用于调试。 打开终端,输入命令: docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v /:/host registry.cn-hangzhou.aliyuncs.com/acs-sample/fluentd-pilot:0.1
你会看到fluentd-pilot启动的日志。别关终端。新开一个终端启动tomcat。tomcat镜像属于少数同时使用了stdout和文件日志的docker镜像,非常适合这里的演示。 docker run -it --rm -p 10080:8080 -v /usr/local/tomcat/logs \
--label aliyun.logs.catalina=stdout \
--label aliyun.logs.access=/usr/local/tomcat/logs/localhost_access_log.*.txt \
tomcat
先解释下这里的配置。 如果你在本地部署tomcat,而不是在阿里云容器服务上, fluentd-pilot会监控Docker容器事件,发现带有
使用Elasticsearch Kibana首先我们要部署一套Elastichsearch Kibana,前面的文章里介绍过如何在阿里云容器服务里部署ELK,你可以参照文章在容器服务上直接部署,或者按照Elasticsearch/Kibana的文档直接在机器上部署,这里不再赘述。假设已经部署好了这两个组件。 如果你还在运行刚才启动的 docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v /:/host -e FLUENTD_OUTPUT=elasticsearch -e ELASTICSEARCH_HOST=${ELASTICSEARCH_HOST} -e ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT}
registry.cn-hangzhou.aliyuncs.com/acs-sample/fluentd-pilot:0.1
相比前面启动
继续运行前面的tomcat,再次访问,让tomcat产生一些日志,所有这些新产生的日志都讲发送到elasticsearch里。打开kibana,这时候你应该还看不到新日志,需要先创建index。fluentd-pilot会把日志写到elasticsearch特定的index下,规则如下 1. 如果应用上使用了标签aliyun.logs.tags,并且tags里包含target,使用target作为elasticsearch里的index,否则
2. 使用标签aliyun.logs.XXX里的XXX作为index
在前面tomcat里的例子里,没有使用 创建好index就可以查看日志了。 在阿里云容器服务里使用fluentd-pilot容器服务是最适合fluentd-pilot运行的地方,专门为fluentd-pilot做了优化。要在容器服务里运行fluentd-pilot,你需要做的仅仅是使用下面的编排文件创建一个新应用。 pilot:
image: registry.cn-hangzhou.aliyuncs.com/acs-sample/fluentd-pilot:0.1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /:/host
environment:
FLUENTD_OUTPUT: elasticsearch #按照你的需要替换
ELASTICSEARCH_HOST: ${elasticsearch} #按照你的需要替换
ELASTICSEARCH_PORT: 9200
labels:
aliyun.global: true
接下来,你就可以在要收集日志的应用上使用 Label说明启动tomcat的时候,我们声明了这样下面两个,告诉 --label aliyun.logs.catalina=stdout
--label aliyun.logs.access=/usr/local/tomcat/logs/localhost_access_log.*.txt
你还可以在应用容器上添加更多的标签
扩展fluent-pilot对于大部分用户来说,
|
|