详解使用Docker快速部署ELK环境(最新5.5.1版本)

详解使用Docker快速部署ELK环境(最新5.5.1版本)

本篇文章将详细介绍如何使用Docker快速部署ELK(Elasticsearch,Logstash,Kibana)环境,供大家参考和学习。

确认环境

在开始之前,您需要安装好Docker和Docker Compose,如果您还没有安装,请先完成这一步。同时,您的电脑需要支持64位操作系统和虚拟化技术。

下载docker-compose.yml文件

首先,您需要在您的电脑上创建一个文件夹,用于存放docker-compose.yml文件。然后,在命令行中进入该文件夹,使用curl命令下载docker-compose.yml文件,您可以在文末找到该文件的下载链接。

curl -L https://raw.githubusercontent.com/deviantony/docker-elk/master/docker-compose.yml -o docker-compose.yml

下载完成后,使用ls命令可以看到docker-compose.yml文件已经放在该文件夹中。

启动ELK容器

在确认您的电脑上已经安装好Docker和Docker Compose,并且已经下载完成docker-compose.yml文件之后,您需要执行以下命令,启动ELK容器。

docker-compose up

如果您看到以下的输出,说明ELK容器已经启动成功,并且Elasticsearch已经准备好接受请求了。

elasticsearch_1  | [2017-07-31T12:09:17,517][INFO ][o.e.n.Node               ] [] initializing ...
elasticsearch_1  | [2017-07-31T12:09:17,615][INFO ][o.e.e.NodeEnvironment    ] [5Sul-z9] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/vda3)]], net usable_space [45gb], net total_space [49.2gb], spins? [possibly], types [ext4]
elasticsearch_1  | [2017-07-31T12:09:17,615][INFO ][o.e.e.NodeEnvironment    ] [5Sul-z9] heap size [989.8mb], compressed ordinary object pointers [true]
elasticsearch_1  | [2017-07-31T12:09:17,617][INFO ][o.e.n.Node               ] [5Sul-z9] node name [5Sul-z9] derived from node ID [5Sul-z96TwG7W4W2shD4g]; set [node.name] to override
elasticsearch_1  | [2017-07-31T12:09:17,619][INFO ][o.e.n.Node               ] [5Sul-z9] version[5.5.1], pid[1], build[19c13d0/2017-07-18T20:44:24.823Z], OS[Linux/4.9.38-linuxkit-aufs/amd64], JVM[Oracle Corporation/OpenJDK 64-Bit Server VM/1.8.0_131/25.131-b11]
elasticsearch_1  | [2017-07-31T12:09:17,619][INFO ][o.e.n.Node               ] [5Sul-z9] JVM arguments [-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -Djdk.io.permissionsUseCanonicalPath=true, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.io.tmpdir=/tmp/elasticsearch-11217345152283664836, -XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=data, -XX:ErrorFile=logs/hs_err_pid%p.log, -XX:+PrintGCDetails, -XX:+PrintGCDateStamps, -XX:+PrintTenuringDistribution, -XX:+PrintGCApplicationStoppedTime, -Xloggc:logs/gc.log, -XX:+UseGCLogFileRotation, -XX:NumberOfGCLogFiles=32, -XX:GCLogFileSize=64m, -Des.path.home=/usr/share/elasticsearch]
elasticsearch_1  | [2017-07-31T12:09:19,223][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [aggs-matrix-stats]
elasticsearch_1  | [2017-07-31T12:09:19,223][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [ingest-common]
elasticsearch_1  | [2017-07-31T12:09:19,223][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [lang-expression]
elasticsearch_1  | [2017-07-31T12:09:19,223][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [lang-groovy]
elasticsearch_1  | [2017-07-31T12:09:19,223][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [lang-mustache]
elasticsearch_1  | [2017-07-31T12:09:19,223][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [lang-painless]
elasticsearch_1  | [2017-07-31T12:09:19,224][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [parent-join]
elasticsearch_1  | [2017-07-31T12:09:19,224][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [percolator]
elasticsearch_1  | [2017-07-31T12:09:19,224][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [reindex]
elasticsearch_1  | [2017-07-31T12:09:19,224][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [transport-netty3]
elasticsearch_1  | [2017-07-31T12:09:19,224][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded module [transport-netty4]
elasticsearch_1  | [2017-07-31T12:09:19,225][INFO ][o.e.p.PluginsService     ] [5Sul-z9] loaded plugin [repository-s3]
elasticsearch_1  | [2017-07-31T12:09:19,235][INFO ][o.e.n.Node               ] [5Sul-z9] initialized
elasticsearch_1  | [2017-07-31T12:09:19,235][INFO ][o.e.n.Node               ] [5Sul-z9] starting ...

接下来,您可以访问http://localhost:5601/来访问Kibana Web界面。默认情况下,用户名和密码均为“elastic”。

示例1:创建自定义镜像

有时候,Docker官方提供的镜像并不能完全满足我们的需求。这时,我们可以通过自定义镜像的方式,来达到我们想要的效果。

编写自定义Dockerfile

我们以安装中文分词插件为例,来演示如何创建自定义镜像。首先,我们需要编写一个Dockerfile,如下所示。

FROM docker.elastic.co/elasticsearch/elasticsearch:5.5.1
MAINTAINER Your Name <your.name@example.com>

RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.1/elasticsearch-analysis-ik-5.5.1.zip

其中,我们使用了Dockerfile的继承特性,继承了Elasticsearch 5.5.1官方镜像。然后,使用elasticsearch-plugin安装中文分词插件。

构建自定义镜像

编写完Dockerfile之后,我们需要使用Docker命令构建镜像。在命令行中,进入存放Dockerfile的目录,使用以下命令。

docker build -t my-elasticsearch:5.5.1 .

其中,my-elasticsearch是我们指定的镜像名称,5.5.1是我们要继承的官方镜像的版本号(对应Dockerfile中的FROM语句)。最后的点号(.)表示要在当前目录下查找Dockerfile。

构建自定义镜像需要耗费一些时间,等待命令执行完毕即可。

使用自定义镜像启动ELK容器

自定义镜像构建完成后,我们可以修改docker-compose.yml文件,来使用这个新的镜像启动ELK容器。

elasticsearch:
  image: my-elasticsearch:5.5.1
  container_name: elasticsearch
  environment:
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    - "cluster.name=docker-cluster"
    - "bootstrap.memory_lock=true"
    - "ES_HEAP_SIZE=512m"
    - "http.cors.enabled=true"
    - "http.cors.allow-origin=/*"
  ulimits:
    memlock:
      soft: -1
      hard: -1
  volumes:
    - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    - ./elasticsearch/data:/usr/share/elasticsearch/data
    - ./elasticsearch/plugins:/usr/share/elasticsearch/plugins
  ports:
    - "9200:9200"
    - "9300:9300"

将原先的“docker.elastic.co/elasticsearch/elasticsearch:5.5.1”替换为“my-elasticsearch:5.5.1”,同时增加了一些Elasticsearch的配置项,来开启跨域访问和中文分词插件。

使用相同的命令“docker-compose up”启动容器即可。

示例2:使用Logstash采集日志

除了Elasticsearch和Kibana之外,ELK还包括了一个非常重要的角色,就是Logstash。Logstash是一个强大的工具,可以用来采集各种类型的日志,并将其转换成Elasticsearch所需的格式。

在实际的生产环境中,日志采集、存储和分析是非常重要的一部分,大家也都知道Elasticsearch在这方面有非常强大的功能。现在,我们将演示如何使用Logstash采集一个简单的日志,并存储到Elasticsearch中。

编写Logstash配置文件

首先,我们要编写一个Logstash配置文件,用来定义我们要采集和哪些日志文件,将采集到的日志如何处理,以及存储到Elasticsearch之前需要进行的一些转换操作。

我们创建一个文件夹,用于存放我们的配置文件、日志文件和其他相关文件。然后,我们创建一个名为“logstash.conf”的文件,内容如下所示。

input {
  file {
    path => [ "/log/test.log" ]
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{IP:client} - - \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:action} %{NOTSPACE:url}\" %{INT:code} %{NOTSPACE:body}|-)" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

output {
  elasticsearch {
    hosts => "elasticsearch:9200"
    index => "logstash-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}

该配置文件定义了一个file类型的输入,来采集路径为“/log/test.log”的日志文件。接着,在filter中使用grok模块来匹配日志中的信息,并在date模块中转换时间格式。最后,在output中,我们使用elasticsearch模块将日志存储到Elasticsearch中,使用stdout将日志输出到控制台。

启动Logstash容器

在Logstash的配置文件和日志文件都已经准备好之后,我们需要启动一个Logstash容器,来执行我们的配置文件。

我们修改docker-compose.yml文件,来启动一个Logstash容器,并在elasticsearch容器和该Logstash容器之间建立连接。

logstash:
  image: docker.elastic.co/logstash/logstash-oss:5.5.1
  container_name: logstash
  volumes:
    - ./logstash/config:/usr/share/logstash/config
    - ./logstash/pipeline:/usr/share/logstash/pipeline
  environment:
    - "ES_HOST=elasticsearch"
    - "ES_PORT=9200"
  depends_on:
    - elasticsearch

该配置文件定义了一个名为logstash的容器,继承了Logstash的官方镜像。我们将配置文件和日志文件都放在了./logstash/config和./logstash/pipeline目录下,通过volumes来与Logstash容器关联起来。在environment中,我们指定了Elasticsearch的地址和端口,以便Logstash可以将采集到的日志存储到Elasticsearch中。最后,我们使用depends_on来定义了elasticsearch容器,来建立连接。

使用相同的命令“docker-compose up”启动容器即可。

总结

通过本教程,您可以快速了解Docker的基本使用方法,并在该基础上,学习如何使用Docker快速部署ELK环境。同时,我们也提供了两个示例,在第一个示例中,演示了如何通过自定义镜像来满足特定需求;在第二个示例中,演示了如何使用Logstash采集日志。

希望本教程对您有所帮助,如果有任何疑问或建议,请在评论区中提出。谢谢!

docker-compose.yml下载链接

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解使用Docker快速部署ELK环境(最新5.5.1版本) - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Ubuntu 20.04 上安装和使用 Docker的详细过程(安装包)

    下面是一份关于“Ubuntu 20.04 上安装和使用 Docker的详细过程”的攻略,我们将在安装包的基础上,安装并使用 Docker,并分别给出两个示例: Ubuntu 20.04 上安装和使用 Docker的详细过程 安装Docker 在Ubuntu 20.04上安装Docker需要执行以下步骤: 更新 apt 包: sudo apt update 安…

    Docker 2023年5月16日
    00
  • centos7 安装docker及Hyperf

    安装docker: 用yum源安装-查看是否已安装docker列表: yum list installed | grep docker 安装docker: yum -y install docker   启动docker systemctl start docker  查看docker服务状态 systemctl status docker         …

    Docker 2023年4月11日
    00
  • 详解Docker镜像的基本操作方法

    下面就给你详细讲解“详解Docker镜像的基本操作方法”的完整攻略,共分为以下几个部分: 基础概念 在讲解Docker镜像的基本操作方法之前,我们需要先了解一些基础概念: Docker:一个开源的应用容器引擎,可以让开发者打包应用及其依赖包到一个易于移植、可拓展的容器中。 镜像(Image):Docker镜像就是一个只读的模板,它包含了运行Docker容器所…

    Docker 2023年5月16日
    00
  • 使用docker部署dubbo项目的方法步骤

    下面是使用docker部署dubbo项目的方法步骤攻略。 准备工作 在使用docker部署dubbo项目之前,需要保证以下几个工具已经准备就绪: docker:一个用来快速构建,发布和运行分布式应用程序的开源容器化平台。 docker-compose:一个支持定义和运行多个docker容器的工具。 maven:Java项目构建工具。 步骤一:编写Docker…

    Docker 2023年5月16日
    00
  • 使用docker mediawiki,搭建网页wiki

      我只是想做一个大家都能访问的wiki,用于成员间共享和维护一些文档。找到了docker的mediawiki,这里记录一下我怎么搭的吧。   首先,如果你在一个局域网里,有公用的可以访问的服务器,那可以直接在那上面搭建,比如我们实验室的服务器,只要在校园网下,都可以访问。不过这篇博客是在我的阿里云的服务器上实现的,我租的是阿里云轻量应用型服务器,原因是便宜…

    Docker 2023年4月11日
    00
  • Docker数据存储总结

    Docker 数据存储总结 为什么需要 Docker 数据存储? Docker 容器是临时性的,每次启动一个容器时,它都会从零开始创建一个全新的环境。容器间的状态不会共享,当容器被删除时,所有容器中存储的状态和数据都会被永久删除。 在许多情况下,需要在多个容器间共享数据和状态。这就需要使用 Docker 数据存储来解决问题。 存储类型 Docker 提供了多…

    Docker 2023年5月16日
    00
  • Docker开启远程访问的实现方式

    下面是Docker开启远程访问的实现方式的完整攻略,包括两条示例说明。 1. Docker开启远程访问的实现方式 Docker是容器技术的代表,可以通过Docker快速、简便地创建容器并部署应用程序。然而,Docker默认是本地访问的,如果想从其他地方访问Docker,就需要开启Docker的远程访问。 Docker的远程访问有多种实现方式,常见的方法有以下…

    Docker 2023年5月16日
    00
  • 解决docker run中使用 ./ 相对路径挂载文件或目录失败的问题

    在 Docker 中使用相对路径挂载本地文件或目录时,可能会遇到无法挂载的问题。这通常是由于 Docker 容器并不知道上层目录中相对路径的存在而造成的。 以下是如何解决这个问题的完整攻略: 问题描述 在 Docker 中使用 docker run 命令时,使用相对路径挂载本地文件或目录时可能会提示文件不存在或权限不足等错误,如下: docker run -…

    Docker 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部