镜像
1 | docker pull docker.elastic.co/logstash/logstash:7.10.2
启动
1 | docker run docker.elastic.co/logstash/logstash:7.10.2
管道配置
如果您不向Logstash提供管道的配置,它将使用最小配置运行,该配置侦听来自Beats输入插件的消息 并输出到
stdout
1. 可以将本地的含有配置文件的整个目录以 bind-mounts 的方式和容器内的目录 /usr/share/logstash/pipeline/ 进行映射。
1 | docker run --rm -it --mount type=bind,src=/logstash/pipeline/,dst=/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:7.10.2
2. 也可以将具体的管道配置文件映射到容器中。
以下示例显示的是,如何配置Logstash
以侦听本机的 5044
端口来获取由任何 Beats
插件(比如: filebeat
)发送来的事件,并输出到标准输出的。
logstash_stdout.conf
1 | mkdir Logstash
2 | cd Logstash
3 | vim logstash_stdout.conf
input {
beats {
port => 5044 # 监听的端口
host => "0.0.0.0" # 监听的本地 ip 地址,这里是全部地址
}
}
output {
stdout { codec => rubydebug }
}
运行容器
1 | docker run -itd --rm --name=logstash71 --mount type=bind,src=$(pwd)/logstash_stdout.conf,dst=/usrl/share/logstash/pipeline/logstash.conf docker.elastic.co/logstash/logstash:7.10.2
登录容器
1 | docker exec -it logstash71 bash
简单介绍
[官网]
(https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html)
Filebeat
是一个轻量级的托运人,用于转发和集中日志数据。Filebeat作为代理安装在服务器上,监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch
或 Logstash进行索引。
以下是 Filebeat
的工作原理:启动Filebeat
时,它会启动一个或多个输入,这些输入将查找您指定的位置的日志数据。
对于Filebeat
找到的每个日志,Filebeat
启动一个收集器。每个收集器为新内容读取单个日志,并将新日志数据发送到 libbeat,libbeat
聚合事件并将聚合数据发送到您为 Filebeat
配置的输出。
获取镜像
1 | docker pull docker.elastic.co/beats/filebeat:7.10.2
配置输入和输出
容器内的配置文件位置是 /usr/share/filebeat/filebeat.yml
Filebeat
容器默认没有配置输入,默认的输出目标是 elasticsearch:9200
为了调试目的,下面的示例是配置输入为本地的某一个 Nginx
日志格式的日志文件,输出是 console
, 就是输出到屏幕终端。
1 | vi filebeat.yml
filebeat.inputs:
- type: log
paths:
- /*.log
output.console:
pretty: true
假如你的文件的编码不是 utf-8, 这可能会导致乱码的现象,解决办法是使用配置项 encoding 指定具体的编码。比如 encoding: gbk
。
如果pretty设置为true,则写入stdout的事件将被很好地格式化。默认值为false。
运行容器
1、准备日志文件
1 | vim sky.log
95.213.177.126 - - [18/Jul/2017:00:01:09 +0800] "POST http://check.proxyradar.com/azenv.php HTTP/1.1" 404 326 "https://proxyradar.com/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" "-"
202.108.211.56 - - [18/Jul/2017:00:03:23 +0800] "GET http://1.1.1.1/ HTTP/1.1" 200 6228 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21" "-"
221.228.109.90 - - [18/Jul/2017:01:52:17 +0800] "GET http://www.sharkyun.com/ HTTP/1.1" 200 6228 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" "119.61.20.114"
221.228.109.90 - - [18/Jul/2017:01:52:17 +0800] "GET http://www.sharkyun.com/css/style_eeoweb.css HTTP/1.1" 200 11988 "https://www.sharkyun.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" "119.61.20.114"
221.228.109.90 - - [18/Jul/2017:01:52:18 +0800] "GET http://www.sharkyun.com/mobile/js/deviceType.js HTTP/1.1" 200 1055 "https://www.sharkyun.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" "119.61.20.114"
221.228.109.90 - - [18/Jul/2017:01:52:18 +0800] "GET http://www.sharkyun.com/js/jplayer/skin/black/css/style.css HTTP/1.1" 200 3339 "https://www.sharkyun.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" "119.61.20.114"
221.228.109.90 - - [18/Jul/2017:01:52:18 +0800] "GET http://www.sharkyun.com/js/index_eeoweb.js HTTP/1.1" 200 910 "https://www.sharkyun.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" "119.61.20.114"
221.228.109.90 - - [18/Jul/2017:01:52:18 +0800] "GET http://www.sharkyun.com/js/easySlider.js HTTP/1.1" 200 2431 "https://www.sharkyun.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" "119.61.20.114"
221.228.109.90 - - [18/Jul/2017:01:52:18 +0800] "GET http://www.sharkyun.com/js/require_eeoweb.js HTTP/1.1" 200 7161 "https://www.sharkyun.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" "119.61.20.114"
221.228.109.90 - - [18/Jul/2017:01:52:18 +0800] "GET http://www.sharkyun.com/js/jquery.js HTTP/1.1" 200 46467 "https://www.sharkyun.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" "119.61.20.114"
2、使用自定义的配置文件运行容器
我们上面的配置文件是输入到标准输出的,要想看到效果就不能让容器在后台运行了。
1 | docker run -it --rm -v $PWD/sky.log:/skysky.log -v $PWD/filebeat.yml:/usr/share/filebeat/filebeat.yml docker.elastic.co/beats/filebeat:7.10.2