来自用户的最佳实践分享,如何用阿里开源的Docker日志收集工具fluentd-pilot收集机器上全部Docker应用日志。git
fluentd-pilot是阿里开源的docker日志收集工具,Github项目地址 。你能够在每台机器上部署一个fluentd-pilot实例,就能够收集机器上全部Docker应用日志。github
fluentd-pilot 具备以下特性:docker
咱们既然要用fluentd-pilot,就得先把它启动起来。还要有一个日志系统,日志要集中收集,必然要有一个中间服务去收集和存储,因此要先把这种东西准备好。Rancher中咱们要如何作?如图,首先咱们选择Rancher的应用商店中的Elasticsearch和Kibana。版本没有要求,下面使用Elasticsearch2.X和Kibana4。apache
其次在RancherAgent主机上面部署一个fluentd-pilot容器,而后在容器里面启动的时候,咱们要声明容器的日志信息,fluentd-pilot会自动感知全部容器的配置。每次启动容器或者删除容器的时候,它可以看获得,当看到容器有新容器产生以后,它就会自动给新容器按照你的配置生成对应的配置文件,而后去采集,最后采集回来的日志一样也会根据配置发送到后端存储里面去,这里面后端主要指的elasticsearch或者是SLS这样的系统,接下来你能够在这个系统上面用一些工具来查询等等。json
可根据实际状况,在每台Agent定义主机标签,经过主机标签在每台RancherAgent主机上跑一个pilot容器。用这个命令来部署,其实如今它是一个标准的Docker镜像,内部支持一些后端存储,能够经过环境变量来指定日志放到哪儿去,这样的配置方式会把全部的收集到的日志所有都发送到elasticsearch里面去,固然两个挂载是须要的,由于它链接Docker,要感知到Docker里面全部容器的变化,它要经过这种方式来访问宿主机的一些信息。在Rancher环境下使用如下docker-compose.yml 应用---->添加应用,在可选docker-compose.yml中添加一下内容。后端
version: '2' services: pilot: image: registry.cn-hangzhou.aliyuncs.com/acs-sample/fluentd-pilot:0.1 environment: ELASTICSEARCH_HOST: elasticsearch ELASTICSEARCH_PORT: '9200' FLUENTD_OUTPUT: elasticsearch external_links: - es-cluster/es-master:elasticsearch volumes: - /var/run/docker.sock:/var/run/docker.sock - /:/host labels: aliyun.global: 'true'
配置好以后启动本身的应用(例子:tomcat),咱们看应用上面要收集的日志,我该在上面作什么样的声明?关键的配置有两个,一是label catalina,声明的是要收集容器的日志为何格式(标准格式等,也能够是文件。),全部的名字均可以;二是声明access,这也是个名字,均可以用你喜欢的名字。这样一个路径的地址,当你经过这样的配置来去启动fluentd-pilot容器以后,它就可以感受到这样一个容器的启动事件,它会去看容器的配置是什么,要收集这个目录下面的文件日志,而后告诉fluentd-pilot去中心配置而且去采集,这里还须要一个卷,实际上跟Logs目录是一致的,在容器外面实际上没有一种通用的方式可以获取到容器里面的文件,全部咱们主动把目录从宿主机上挂载进来,这样就能够在宿主机上看到目录下面全部的东西。tomcat
当你经过部署以后,他会本身在elasticsearch建立索引,就能够在elasticsearch的kopf上面看到会生成两个东西,都是自动建立好的,不用管一些配置,你惟一要作的事是什么呢?就能够在kibana上建立日志index pattern了。而后到日志搜索界面,能够看到从哪过来的,这条日志的内容是什么,这些信息都已经很快的出现了。运维
启动tomcat的时候,咱们声明了这样下面两个,告诉fluentd-pilot这个容器的日志位置。elasticsearch
aliyun.logs.tomcat1-access /opt/apache-tomcat-8.0.14/logs/localhost_access_log.*.txt aliyun.logs.catalina stdout
你还能够在应用容器上添加更多的标签工具
aliyun.logs.$name = $path
aliyun.logs.$name.format,日志格式,目前支持
aliyun.logs.$name.tags: 上报日志的时候,额外增长的字段,格式为k1=v1,k2=v2,每一个key-value之间使用逗号分隔,例如
翟坤,随行付支付有限公司资深运维工程师。本文版权归做者全部,转载请后台留言。