🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 框架概览 ![](http://7xqnvr.com1.z0.glb.clouddn.com/%E5%88%A9%E7%94%A8docker%E5%8F%AA%E9%9C%805%E6%AD%A5%E6%90%AD%E5%BB%BAELK%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90%E7%B3%BB%E7%BB%9FELK-all.png) * ElasticSearch 有强大的搜索功能的无模式数据库,可以简单的很想扩展,索引每一个字段,可以聚合分组数据。 ![](http://7xqnvr.com1.z0.glb.clouddn.com/%E5%88%A9%E7%94%A8docker%E5%8F%AA%E9%9C%805%E6%AD%A5%E6%90%AD%E5%BB%BAELK%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90%E7%B3%BB%E7%BB%9FELK-elasticsearch.png) * Logstash 用Ruby编写的,我们可以使用管道输入和输出数据到任何位置。一个可以抓取,转换,存储事件到ElasticSearch的ETL管道。打包版本在JRuby上运行,并使用几十个线程进行并行的数据处理,利用了JVM的线程功能。 ![](http://7xqnvr.com1.z0.glb.clouddn.com/%E5%88%A9%E7%94%A8docker%E5%8F%AA%E9%9C%805%E6%AD%A5%E6%90%AD%E5%BB%BAELK%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90%E7%B3%BB%E7%BB%9FELK-logstash.png) * Kibana 基于web的数据分析,为ElasticSearch仪表板的工具。充分利用ElasticSearch的搜索功能,以秒为单位可视化数据。支持Lucene的查询字符串的语法和Elasticsearch的过滤功能。 ![](http://7xqnvr.com1.z0.glb.clouddn.com/%E5%88%A9%E7%94%A8docker%E5%8F%AA%E9%9C%805%E6%AD%A5%E6%90%AD%E5%BB%BAELK%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90%E7%B3%BB%E7%BB%9FELK-kibana.png) ## 前提 * 本文中架构基于docker搭建,需要您了解docker的基本概念,基本操作和docker1.9之后的自定义overlay网络 > 本文只介绍了最简化搭建。如果您用于生产,还需要在如下方面完善 1.elastic是有存储目录,需要在docker中进行数据卷映射。配置文件elasticsearch.yml需要根据自己需求自行配置。请参考:https://hub.docker.com/_/elasticsearch/ 2.Dockerhub官方提供的镜像基于不同的基础镜像,不利于网络传输!建议根据自己组织内部镜像重新创建! ## Docker搭建ELK的javaweb应用日志收集存储分析系统 ### 第一步:启动elasticsearch ``` docker run -d --name myes \ --net=multihost --ip=192.168.2.51 \ elasticsearch:2.3 ``` * 采用docker自定义overlay网络multihost,设置容器ip为192.168.2.51 ### 第二步:启动kibana ``` docker run --name mykibana \ -e ELASTICSEARCH_URL=http://192.168.2.51:9200 \ --net=multihost \ -p 5601:5601 \ -d kibana:4.5 ``` * 采用自定义网络multihost,ip随机分配 * 在宿主机启动kibana,容器端口5601映射到宿主机端口5601,可以通过http://<宿主机ip>:5601访问kibana * 参数ELASTICSEARCH_URL指向第一步中启动的elasticsearch ### 第三步:logstash配置文件 * logstash.conf,这个文件名字可以随便起 ``` input { log4j { mode => "server" host => "0.0.0.0" port => 3456 type => "log4j" } } output { elasticsearch { hosts => ["192.168.2.51"] } } ``` * 输入模式log4j的服务,监听于当前容器的3456端口。也就是数据源需要向容器的3456端口发送日志。 ### 第四步:启动logstash ``` docker run -d \ -v "$PWD":/config-dir \ -p 3456:3456 \ --net multihost \ logstash:2.3 \ logstash -f /config-dir/logstash.conf ``` * 采用自定义网络multihost,ip随机分配 * 在宿主机启动logstash,容器端口3456映射到宿主机端口3456.(这么做是假设您的应用不是docker化的,所以ip不在自定义网络multihost内.如果web应用docker化,并与logstash共同使用同一个自定义网络,则端口不需要对外映射) * 容器配置文件/config-dir/logstash.conf映射到宿主机当前目录下面。即你需要将logstash.conf放到当前目录"$PWD"下启动。(这个目录可以调整) ### 第五步:web应用log4j日志TCP输出 * 为log4j.properties添加tcp输出,代码片段如下: ``` log4j.rootLogger = DEBUG,tcp log4j.appender.tcp=org.apache.log4j.net.SocketAppender log4j.appender.tcp.Port=3456 log4j.appender.tcp.RemoteHost=192.168.1.158 log4j.appender.tcp.ReconnectionDelay=10000 log4j.appender.tcp.Application=ssmm ``` * RemoteHost是logstash所在的宿主机ip.如果您的web应用docker化,可以是容器ip * 发送日志到3456端口 > 最重要的事不要忘了,启动您的web应用。日志才能发过去! # 绝不忽悠,看看结果 * 以下为原始日志,您可以用kibana强大的配置来展现您的日志分析 ![](http://7xqnvr.com1.z0.glb.clouddn.com/%E5%88%A9%E7%94%A8docker%E5%8F%AA%E9%9C%805%E6%AD%A5%E6%90%AD%E5%BB%BAELK%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90%E7%B3%BB%E7%BB%9FELK-mykibana.png)