上篇(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. 自定义view(二)

    1.View 的绘制 通过继承View 并重写它的onDraw()来完成绘制. onDraw()有一个参数,就是Canvas对象.使用这个Canvas就可以绘制图像了,Canvas canvas = ...

  2. SQL Server 错误日志过滤(ERRORLOG)

    一.背景 有一天我发现SQL Server服务器的错误日志中包括非常多关于sa用户的登陆错误信息:“Login failed for user 'sa'. 原因: 评估密码时出错.[客户端: XX.X ...

  3. jQuery控制tabs打开的数量

  4. java泛型上下限

    前言: java的泛型上下限不是很好理解,尤其像我这种菜鸡.反反复复看了好几遍了...,真是... 一.简单的继承体系 class Person{} class Student extends Per ...

  5. Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)

    上一节我们讨论了 attach volume 操作中 cinder-api 的工作,本节讨论 cinder-volume 和 nova-compute 如何将 volume attach 到 Inst ...

  6. FragmentPagerAdapter+ViewPager实现Tab切换效果

    1.Activity  加载布局文件,获取Viewpager控件   给ViewPager填充适配器. import android.app.ActionBar; import android.app ...

  7. MVVM 开发的几种模式讨论(WPF)

    在WPF系(包括SL,WP或者Win8)应用开发中,MVVM是个老生常谈的问题.初学者可能不会有感觉,但当你写一个核心逻辑能在各种平台上无缝移植,而只需改改UI的时候,那种快感是无法用语言来形容的. ...

  8. YII 的源码分析(-)

    做为源码分析的首秀,我就挑了yii(读作歪依依而不是歪爱爱):它的赞美之词我就不多说了,直接入正题.先准备材料,建议直从官网下载yii的源码包(1.1.15). 在demos里边有一个最简单的应用—h ...

  9. c# 实现简单的socket通信

    服务端 using System.Net.Sockets; using System.Net; using System.Threading; namespace SocketServer { cla ...

  10. ZOJ Problem Set - 1201 Inversion

    题目:这道题目的意思让人猛地一读有点反应不过来,简单解释下: 给定序列A:a1,a2,a3....,an,如果i<j且ai>aj则(ai,aj)称为序列A的一个倒置. 之后引出了序列的倒置 ...