上篇(spring mvc+ELK从头开始搭建日志平台)分享了从头开始搭建基于spring mvc+redis+logback+logstash+elasticsearch+kibana的分布式日志平台,是在windows平台下操作的,这篇主要是将这些软件环境全部在linux+docker折腾一遍。

我们的目的是需要在docker中安装像resis,elk这些软件环境,由于我是windows平台,搜索一把找到了boot2docker,但在安装时提示需要用dockermachine来安装,dockermachine与Oracle VM VirtualBox配合来完成,在创建一个docker时会自动创建一个linux虚似机。经过对比,我最终决定按传统的方式来做,在linux系统中去安装docker.虚似机我选择了VMware Workstation Pro,操作系统选择最新的ubantu,,安装好之后,还需要做很多操作,比如:磁盘映射,窗口大小分辨率,粘贴复制的支持等等这些方便使用虚似机的设置。

有了虚似机,就可以开始搞docker了,安装docker环境这个操作比较简单,我们只需要按照这个链接(Installation on Ubuntu)中的操作一步一步就可以了,虽然有些操作命令你不一定熟悉,但也不需要过份紧张,我们只求安装成功,有兴趣的可细研究每条命令的用途。文章中需要根据自己安装的ubuntu版本来执行相应的命令,新版本反而更加简单些,安装成功了也附加了测试方式。我们执行下docer version,如果看到如下图所示说明已经安装成功。

安装软件,安装软件一种是直接去下载压缩包,解压来安装,这种自控能力比较强,但相对麻烦,这里我们可以选择已经做好的image文件方式来安装,所有的image都可以在hub.docker中查找到,其中包含了详细的操作步骤,下面主要分享在安装过程中遇到的一些问题。

在执行时,如果发现有些命令不清楚,第一个方法是去官网上查,第二个就是利用-h或者--help在命令中查看。
 

  • redis
docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf

我按上面的命令写出了下面的版本:

docker run -dit --name redis  --hostname  redis-host  -v /data:/data -p 6379:6379 redis redis-server /data/redis.conf

上面的指令导致docker执行异常,问题出在配置文件的指定上,修改了加载配置文件的路径,改成下面的可正常运行,不知道是否是配置文件的路径不支持随意修改的原因,下面的命令没有指定redis-server以及配置文件,初步看来默认会加载配置文件,有待后续验证。

docker run -dit --name redis  --hostname  redis-host  -v /data:/data -v /data/redis.conf:/usr/local/etc/redis/redis.conf -p : redis
    • -p是端口映射,docker内部的端口映射到host的端口,比如安装了多个resis时,这个端口映射就必备设置,否则会出现host上的端口被占用的情况。
    • --name,这个是为了方便根据docker的名称来操作docker,否则只能根据生成的ID来操作,不直观,比如我们可以 docker start redis来启动。

    • --hostname,这个是进入docker后的一个显示名称,比如执行docker exec -it redis bash后出现的名称

    • -v是磁盘路径映射,docker与host主机之间的路径关系
    • -d是机后台方式运行,其它的i与t可以查文档
    • 如果不指定image的版本,它会自动寻找最新的版本来安装。
  • logstash
docker run -dit --name logstash  --hostname  logstash-host -v /data:/data logstash logstash -f /data/logstash.conf

logstash的安装没有出现redis的一波三折,配置文件的路径可直接指定,问题出在配置文件的配置上,下面是运转正常的配置

input {

    redis {
data_type => "list"
key => "logstash"
host => "192.168.21.128"
port => 6379
threads => 5
codec => "json"
}
}
filter { }
output {
elasticsearch {
hosts => ["192.168.21.128"]
} stdout{}
}

之前的windows版本有介绍配置,但在docker下配置有所不同,直接将windows版的配置文件拿过来,出现了logstash无法将redis中的日志输出到elastcsearch中,输出配置如下:

output {

    elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
workers => 1
flush_size => 20
idle_flush_time => 1
template_overwrite => true
}
stdout{}
}

这里从两方面分析:
    input:确认logback是否将日志持久化到redis,可使用key *来查看是否有我们专门为日志配置的logstash这个key,然后使用llen logstash来测试日志有没有随程序的执行而增加,确认的结果是可以查到logstash这个key,而且长度随程序的执行而增加,那现在的问题就在 于logstash并没有将redis中的日志取走去执行并输出到elasticsearch中,将output中的elasticsearch的配置删 除,只保留stdout,结果发现logstash可以正常的取走日志。

output: input的排查说明问题出在output,然后采取最少配置方法,只配置最重要的属性,按文档中配置hosts再运行,结果程序运转正常。
    我们按照https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html文章中说的来配置,注意hosts属性,之前配置的某些属性可能有问题,这里采取优先级最少配置法来排查问题。

  • elasticsearch
docker run -dit --name elasticsearch  --hostname  elasticsearch-host  -v /data:/data -p : -p : elasticsearch:latest

elasticsearch的安装比较奇怪,按上面的命令安装后,在客户端访问http9200端口,提示拒绝访问,端口显示为tcp,后经过无数次安装,无意中一次安装成功了,正常的映射了端口,目前详细的问题还没有找到,等后续有机会再研究。我们看docker ps后显示的结果,目前正常的情况下那个端口显示为如下图,之前出现问题时端口显示不是:0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp而是9200/tcp, 9300/tcp。

  • kibana
docker run -dit --name kibana  --hostname  kibana-host  -v /data:/data -p : -e ELASTICSEARCH_URL=http://192.168.21.128:  kibana:latest

kibana的执行命令也是遇到配置文件指定的问题,后来将属性直接放在命令上了,这也是后续需要解决的问题。

上面四项都成功安装后,我们的日志就可以成功的采集到elasticsearch中了。
    
 
    上面的docker在启动后,并不具备自启功能,做也是可以做到的。如果没有做成自启功能,我们也不能一个命令一个命令去重新启动,这里有一个命令可以一次性全部启动docker,非常实用。

docker start `docker -ps -a -q`

从头开始搭建分布式日志平台的docker环境的更多相关文章

  1. ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台

    一.前言 1.ELK简介 ELK是Elasticsearch+Logstash+Kibana的简称 ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进 ...

  2. Elasticsearch+Logstash+Kibana搭建分布式日志平台

    一.前言 编译安装 1.ELK简介 下载相关安装包地址:https://www.elastic.co/cn/downloads ELK是Elasticsearch+Logstash+Kibana的简称 ...

  3. C#采用rabbitMQ搭建分布式日志系统

    网上对于java有很多开源的组件可以搭建分布式日志系统,我参考一些组件自己开发一套简单的分布式日志系 全部使用采用.NET进行开发,所用技术:MVC.EF.RabbitMq.MySql.Autofac ...

  4. 基于Kafka+ELK搭建海量日志平台

    早在传统的单体应用时代,查看日志大都通过SSH客户端登服务器去看,使用较多的命令就是 less 或者 tail.如果服务部署了好几台,就要分别登录到这几台机器上看,等到了分布式和微服务架构流行时代,一 ...

  5. Log4net快速配置使用指南。(快速搭建log4net日志平台手册)

    每做一个新项目,都会用到log4net,但总是忘记如何快速配置.有时在网上搜半天也找不到好的模板,大都在介绍参数的使用,在此做下总结,争取下次用时仅10分钟就可搭建好log4net. 直接上介绍的步骤 ...

  6. 使用 Loki 搭建个人日志平台

    文章转载自:https://blog.kelu.org/tech/2020/01/31/grafana-loki-for-logging-aggregation.html 背景 Loki的第一个稳定版 ...

  7. 基于ELK搭建MySQL日志平台的要点和常见错误

    第一部分 概括 ELK是集分布式数据存储.可视化查询和日志解析于一体的日志分析平台.ELK=elasticsearch+Logstash+kibana,三者各司其职,相互配合,共同完成日志的数据处理工 ...

  8. SpringBoot非官方教程 | 第二十六篇: sprinboot整合elk,搭建实时日志平台

    转载请标明出处: 原文首发于https://www.fangzhipeng.com/springboot/2017/07/11/sprinboot25-elk/ 本文出自方志朋的博客 这篇文章主要介绍 ...

  9. Spring Boot (日志篇):Log4j2整合ELK,搭建实时日志平台

    一.安装JDK1.8以上版本 1.从Oracle官网上下载Linux x64版本的 下载地址: http://www.oracle.com/technetwork/java/javase/downlo ...

随机推荐

  1. 在互联网公司参与拍卖是一种怎样的感觉?part 1

    拍卖在中国是不太流行的一件事,为什么呢?说不太出.当初在外国火的不得了的ebay在交易时采用的就是拍卖出价的模式,但进入中国后这种方式就是玩不转,不得以后来也变成了跟淘宝一样的一口价方式. 话说现在每 ...

  2. 【原】Python 用例:二进制写入和读取文件内容

    import pickle as p shoplistfile='shoplist.data' shoplist=['apple','carrot'] # because the dump opera ...

  3. UIColor 使用起来的坑

    我们一般会用 UIColor 的RGB来生成颜色: [UIColor colorWithRed:220/255 green:220/255 blue:220/255 alpha:1.0];//这样生成 ...

  4. Spring学习记录(二)---容器和bean属性配置

    下载spring包,在eclipse搭建spring环境. 这步我在eclipse中无法导入包,看网上的: http://sishuok.(和谐)com/forum/blogPost/list/242 ...

  5. ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介

    概述 ASP.NET Core 1.0是ASP.NET的一个重要的重新设计. 例如,在ASP.NET Core中,使用Middleware编写请求管道. ASP.NET Core中间件对HttpCon ...

  6. jQuery对象与DOM对象之间的转换方法

    刚开始学习jquery,可能一时会分不清楚哪些是jQuery对象,哪些是DOM对象.至于DOM对象不多解释,我们接触的太多了,下面重点介绍一下jQuery,以及两者相互间的转换. 什么是jQuery对 ...

  7. MongoDB 创建 Database 和 Collection

    在开始使用MongoDB(Version:3.2.9)之前,必须首先在MongoDB中创建 Database 和 Collection.Database是相互独立的,每个Database都有自己的Co ...

  8. SQL Server 更改跟踪(Chang Tracking)监控表数据

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 主要区别与对比(Compare) 实现监控表数据步骤(Process) 参考文献(Refere ...

  9. LINQ系列:LINQ to SQL Take/Skip

    1. Take var expr = context.Products .Take(); var expr = (from p in context.Products select p) .Take( ...

  10. 传智播客--高级控件--showdialog关闭(小白内容)

    以往我在WPF里,用ShowDialog展示出一个页面,一般都是用Close()进行关闭. 今天看传智播客的视频时,了解到还能直接给DialogResult一个TRUE或者false的属性,使页面关闭 ...