一 下载logstash镜像

可以在www.docker.elastic.co 查看logstash的版本,这里选择7.16.3。

# 拉取logstash镜像
docker pull docker.elastic.co/logstash/logstash:7.16.3

二 启动logstash,复制config文件夹到宿主机

# 创建并启动容器
docker run -itd --name logstash docker.elastic.co/logstash/logstash:7.16.3
# 复制config文件夹到宿主机
docker cp logstash:/usr/share/logstash/config/ /opt/logstash

三 停止并删除原容器

# 停掉已启动的logstash容器
docker stop logstash
# 删除logstash容器
docker rm logstash

四 修改配置文件

1. 进入config文件夹

cd /opt/logstash/config

config文件夹下有如下6个文件:

  • jvm.options
  • log4j2.properties
  • logstash-sample.conf
  • logstash.yml
  • pipelines.yml
  • startup.options

本次需要修改logstash.ymlpipelines.ymllogstash-sample.conf

2. 修改logstash.yml

修改logstash.yml

vim logstash.yml

i进入编辑模式,将xpack.monitoring.elasticsearch.hosts注释掉,修改完成后按Esc,输入:wq保存并退出:

http.host: "0.0.0.0"
# xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]

3. 修改pipelines.yml

修改pipelines.yml

vim pipelines.yml

i进入编辑模式,修改path.config/usr/share/logstash/config/logstash-sample.conf,如下所示,修改完成后按Esc,输入:wq保存并退出:

pipeline.id: main
path.config: "/usr/share/logstash/config/logstash-sample.conf"

4. 修改logstash-sample.conf

修改logstash-sample.conf

vim logstash-sample.conf

i进入编辑模式,将内容修改为如下所示,修改完成后按Esc,输入:wq保存并退出:

input {
tcp {
# host修改为当前宿主机服务器的ip
host => "0.0.0.0"
port => 4560
codec => "json"
}
}
output {
elasticsearch {
# hosts 修改为es地址,多个地址以逗号分割,http://可以省略,端口号为9200时也可以省略,例如["10.0.0.1", "10.0.0.2"]
hosts => ["http://localhost:9200"]
# 这里es索引可以自行根据实际情况定义,下述示例中的type为applicationName-profile(服务名-环境),既一个服务一个环境一天创建一个索引
index => "%{[type]}-%{+YYYY.MM.dd}"
# user修改为es用户名
user => "elastic"
# password修改为es密码
password => "password"
}
}

五 重新创建并启动logstash容器

docker run -itd \
--name logstash \
--restart=always \
-p 5044:5044 \
-p 9600:9600 \
-v /opt/logstash/config:/usr/share/logstash/config \
docker.elastic.co/logstash/logstash:7.16.3

  • --name logstash: 定义容器名称;
  • --restart=always: 定义总是自动重启,容易意外停止时可进行自动重启;
  • -p 5044:5044: 端口映射,将宿主机的5044映射到5044端口;
  • -p 9600:9600: 端口映射,将宿主机的9600映射到9600端口;
  • -v /opt/logstash/config:/usr/share/logstash/config: 文件夹映射,将宿主机的/opt/logstash/config映射到容器的/usr/share/logstash/config目录;

六 检查4560端口判断logstash是否已启动

lsof -i:4560
# 显示如下表示logstash已启动
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 24915 appuser 122u IPv6 54032655 0t0 TCP *:4560 (LISTEN)