pilot配合ELK收集docker日志
log-pilot能够通过配置一定的规则收集单台部署机器的所有容器日志,是一款来自阿里云的类似filebeat的轻量级容器日志收集工具。
log-pilot具有如下特性
- 一个单独log进程,收集机器上所有容器的日志。不需要为每个容器启动一个log进程
- 支持文件日志和stdout。docker log dirver亦或logspout只能处理stdout,log-pilot不光支持收集stdout日志,还可以收集文件日志。
- 声明式配置。当你的容器有日志要收集,只要通过label声明要收集的日志文件的路径,无需改动其他任何配置,log-pilot就会自动收集新容器的日志。
- 支持多种日志存储方式。无论是强大的阿里云日志服务,还是比较流行的elasticsearch组合,甚至是graylog,log-pilot都能把日志投递到正确的地点。
- log-pilot完全开源,github
- 支持fluentd和filebeat各类插件
1. 启动log-pilot
使用docker启动log-pilot
1 | docker run -d \ |
参数解析:
- –privileged: 容器内的root拥有真正的root权限(默认是外部的一个普通用户)
- LOGGING_OUTPUT=logstash: 把日志发送到logstash
- LOGSTASH_HOST=${LOGSTASH_HOST}: logstash的域名
- LOGSTASH_PORT=${LOGSTASH_PORT}: logstash的端口号
也可以直接跳过logstash,将日志输出到elasticsearch,配置详情见log-pilot-docs
2. 启动elasticsearch
设置/etc/sysctl.conf
1 | vm.max_map_count=262144 |
1 | docker run -d \ |
3. 启动logstash
默认的配置文件可以先从logstash测试容器中拷出到/opt/logstash/pipeline/
1 | docker run -d \ |
其中/opt/logstash/pipeline/pipelines.yml
1 | - pipeline.id: main |
/opt/logstash/pipeline/conf.d/elasticsearch.yml
1 | input { |
4. 收集日志
当服务以docker容器方式启动时,需要指定label来让log-pilot自动触发收集,以下以tomcat为例:
1 | docker run -d \ |
启动tomcat的时候,我们声明了这样下面两个,告诉log-pilot这个容器的日志位置,还可以在应用容器上添加更多的标签
aliyun.logs.$name = $path
变量name是日志名称,具体指随便是什么,你高兴就好。只能包含0-9a-zA-Z_和-
变量path是要收集的日志路径,必须具体到文件,不能只写目录。文件名部分可以使用通配符。/var/log/he.log和/var/log/*.log都是正确的值,但/var/log不行,不能只写到目录。stdout是一个特殊值,表示标准输出
aliyun.logs.$name.format:日志格式,目前支持
- none 无格式纯文本
- json: json格式,每行一个完整的json字符串
- csv: csv格式
aliyun.logs.$name.tags: 上报日志的时候,额外增加的字段,格式为k1=v1,k2=v2,每个key-value之间使用逗号分隔,例如
aliyun.logs.access.tags=“name=hello,stage=test”,上报到存储的日志里就会出现name字段和stage字段
如果使用elasticsearch作为日志存储,target这个tag具有特殊含义,表示elasticsearch里对应的index
5. 索引日志
产生的日志都讲发送到elasticsearch里。打开kibana,这时候你应该还看不到新日志,需要先创建index。log-pilot会把日志写到elasticsearch特定的index下,规则如下
1 | 1. 如果应用上使用了标签aliyun.logs.tags,并且tags里包含target,使用target作为elasticsearch里的index,否则 |
- 本文链接:http://www.whyvv.top/pilot.html
- 版权声明:版权所有,转载请注明出处。
分享