你驻足于春色中,于那独一无二的春色之中.
一次Docker项目需求构架的尝试
当我们的Docker部署完成后,为了能够掌握Docker的状态,除了使用logs、event、diff等实时运维命令查看外,我们还存在需要对Docker产生的日志进行收集整理分析的必要。
网上能找到的日志收集系统有很多,例如Flume、Fluentd、Logstash等等。经过一段时间的摸索搭建,个人最容易搭建成功的是Logstash,而且整个ELK体系也提供一套完整的日志收集、存储、查找、可视化流程,可以省去很多编写中间件的精力。
所以最终我的整体架构如下:
docker1\
\
docker2——————>docker-logstash————>任意机器(可以不是宿主机)
/
docker3/
ELK一整套工具可以很方便的从Elastic的官网上下到,在这里就不在赘述。在任意一台主机上安装Elasticsearch和Kibana,在宿主机上安装不同的Docker以及一个Logstash的Docker。这里我使用我在上一篇博客中编译好的Wordpress的Docker。不同的是我需要将WP中记录日志的文件夹挂载到logstash-docker上。命令如下:
1 | docker run -d -v /var/log/nginx/ --name wordpress -p 0.0.0.0:80:80 long/wordpress |
简单解释一下这条命令,我们运行了之前编译好的Wordpress,将其中的Nginx下的日志挂载出来。
接下来,我们再从官网仓库中pull下Docker版的Logstash,使用如下命令开启:
1 | docker run -it --rm --volumes-from wordpress -v "$PWD":/home logstash logstash -f /home/test.conf |
这里有几个坑要事先声明一下,一个是这里我使用了Logstash的配置文件,而这个配置文件我是从宿主机挂载到容器的home文件夹下,另一个点就是Logstash容器从Wordpress中接手之前挂载的文件夹,从里面实时增量读取日志,但是两个容器的权限不对应,所以要注意在Wordpress容器对相应的文件夹做权限变更。
Logstash的配置文件我写法如下:
1 | input { |
从日志中读取信息,打印在标准输出中。
这一步调试成功后,我们接着调试Elastic的部分,Elastic+Kibana我是运行在一台Windows的主机上的,运行前调整Elastic的配置文件中的,使得宿主机可以访问到它,当然这里的访问是没有任何认证的,但是作为测试,我们先不讨论安全问题。
通过windows主机访问宿主机上的Wordpress-docker,然后访问
此时,宿主机中容器的日志已经显示在了Windows的主机中。
利用这种方式,我们实现了容器日志传输到任意主机上存储的目的,而日志传输则是通过在多个容器之间挂载目录实现。这样做,可以很好的实现应用、日志(或数据)之间的解耦合,将重要日志存储在更安全的实体主机上,便于实现中心对应分布的日志分析。