同福

Docker基于8.0.0镜像搭建Logstash微服务环境【20220218】

介绍

介绍

大家根福哥学会了使用Dockerfile创建Docker镜像的技巧了,那么我们现在搭建服务器环境就不需要再去下载软件的源代码了,也不需要编译安装了,更加不用操心软件和操作系统的各种兼容问题了。

今天福哥带着大家来安装Logstash的环境,Logstash是一个用来收集日志、处理日志的工具,它可以对接MySQL、Redis、Elasticsearch等等非常多的数据引擎,将收集到的日志存储到这些数据引擎里面。Logstash通常情况下是结合Filebeat工具协同工作的,Filebeat可以监听日志文件的内容变化将增量日志数据推送给Logstash进行处理。

镜像

tag

福哥选择的是logstash:8.0.0版本,这个版本是比较新的!
home/topic/2022/0218/11/5288519731856f6644bdbecea4a5dc7d.png

结构

照例我们先把镜像拉取下来,然后启动一个容器,看看里面都有什么,弄明白了自己才好捣鼓啊!

拉取镜像

docker pull logstash:8.0.0

启动临时容器

docker run -tid --name logstash8 -h logstash8 --net bridge2 --ip 10.16.1.168 logstash:8.0.0

切入临时容器

docker exec -ti logstash8 "/bin/bash"

查看结构

logstash的版本是8.0.0。
home/topic/2022/0218/11/951aa4a891c260c5a00b5899c1b1ab97.pnglogstash的主目录在/usr/share/logstash下面,真是够BT的!
home/topic/2022/0218/11/fe29fab93a60f8e3231711dad5761e58.png

切出临时容器

exit

手动安装

福哥先在临时容器里面手动安装一遍环境,然后再整理到Dockerfile里面,这样大家会看得比较清楚一些~~

logstash.yml

编辑配置文件

去掉或者注释掉logstash.yml里面的elasticsearch监视插件的配置。

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

福哥的logstash.yml配置文件,内容如下:

http.host: "0.0.0.0"

复制配置文件

通过docker cp将logstash.ym配置文件覆盖容器里面的。

docker cp logstash.yml logstash8:/usr/share/logstash/config/logstash.yml

logstash.conf

编写配置文件

福哥自己写了一个配置文件logstash.conf,内容如下:

input {
  beats {
    port => "5044"
  }
}

output {
  file {
    path => "/usr/share/logstash/tongfunet.log"
    codec => rubydebug
  }
}

复制配置文件

通过docker cp将logstash.conf配置文件放到容器里面。

docker cp logstash.conf logstash8:/usr/share/logstash/pipeline/logstash.conf

重启logstash

现在重新启动服务。

docker stop logstash8
docker start logstash8

home/topic/2022/0218/11/2de1dea734790b310131156ce10a842e.png

验证

安装Filebeat

福哥用Filebeat软件来测试logstash,Filebeat不需要安装直接下载完就可以用。

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-linux-x86_64.tar.gz
tar -xzvf filebeat-7.5.1-linux-x86_64.tar.gz
cd filebeat-7.5.1-linux-x86_64

配置Filebeat

现在福哥建立filebeat的配置文件tongfunet.yml,内容如下:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - tongfunet.log
    
output.logstash:
  hosts: ["10.16.1.168:5044"]

测试Logstash

建立测试日志文件tongfunet.log

touch tongfunet.log

现在福哥启动Filebeat软件,监听tongfunet.log日志文件的变化。

./filebeat -e -c tongfunet.yml -d "publish" > filebeat.log 2>&1 &

福哥向测试日志文件tongfunet.log里面写入一行数据。

echo "msg: hello tongfu.net" >> tongfunet.log

再次切入临时容器。

docker exec -ti logstash8 "/bin/bash"

查看logstash记录的日志文件内容,可以看到它收到了我们通过filebeat推送的日志数据。
这个数据经过rubydebug进行解码得到了一个JSON串,这个JSON串存到ES里面可以方便地进行日志分析。
home/topic/2022/0218/14/2067c2e74c2617a7c465d73761d64225.png

清理

停止Filebeat

home/topic/2022/0218/14/5cfe2539faad0b1452026132d0a0e4df.png

删除Filebeat

rm -rf filebeat-7.5.1-linux-x86_64

停止临时容器

docker stop logstash8

删除临时容器

docker rm logstash8

Dockerfile

最后福哥把前面的设置命令整理到一起写成Dockerfile,这样大家就可以通过Dockerfile安装环境了。
由于在Dockerfile里面通过RUN执行命令的时候,一旦执行过程中出现返回非0结果的情况就会终止创建镜像。所以安装chrome的时候的那些依赖项就不能通过dpkg的特性一并交给apt-get安装了,需要一个一个地整理出来,福哥也是无语了~~

logstash.yml

logstash.yml是logstash的配置文件,福哥把es的配置去掉了。

http.host: "0.0.0.0"

logstash.conf

logstash.conf是logstash的逻辑配置文件,在这里配置日志处理逻辑。

input {
  beats {
    port => "5044"
  }
}

output {
  file {
    path => "/usr/share/logstash/tongfunet.log"
    codec => rubydebug
  }
}

Dockerfile

这个福哥写的Dockerfile配置文件。

FROM logstash:8.0.0

MAINTAINER Andy Bogate
MAINTAINER tongfu@tongfu.net
MAINTAINER http://docker.tongfu.net

EXPOSE 5044

# data
COPY logstash.yml /usr/share/logstash/config/logstash.yml
COPY logstash.conf /usr/share/logstash/pipeline/logstash.conf

6. 总结

今天福哥带着大家使用Dockerfile基于logstash 8镜像搭建了Logstash微服务环境了,可以发现使用Dockerfile方式搭建环境我们真的只需要关心我们需要关心的部分,繁琐的编译参数、依赖库、环境参数等等一系列的问题基础镜像都给我们解决好了。