基于Docker搭建ELK(Elasticsearch、Logstash、Kibana)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: ELK是一套强大的开源工具组合,可以帮助我们采集、存储、分析和可视化大量的日志数据,本文通过简明清晰的步骤指导,帮助读者快速搭建起基于Docker的ELK日志分析平台,为日志数据的收集、存储、分析和可视化提供了一种高效可靠的解决方案。

Docker简介

Docker 是一个被广泛使用的开源容器引擎,是一种操作系统级别的虚拟化技术,它以一种特殊进程的方式运行于宿主机上,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,它依赖于liunx内核特性:namespace(名字空间进行资源的隔离)和cgroups(限制、记录任务组所使用的物理资源)

image.png

一个完整的Docker有以下几个部分组成:

  1. DockerClient客户端

  2. Docker Daemon守护进程

  3. Docker Image镜像

  4. DockerContainer容器

话不多说,先简要介绍到这里,还想了解更多的小伙伴可自行百度搜索,这里重点介绍实操内容。


Docker安装

安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

当看到complete时代表安装完成。

image.png

添加aliyun docker-ce yum源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

image.png

重建yum缓存

yum clean all

image.png

yum makecache

image.png

查看可用的docker版本

yum list docker-ce.x86_64 --showduplicates | sort -r

image.png

这里建议根据实际情况,选择较新的稳定版本,我这里选择的是docker-ce-20.10.6

yum install -y docker-ce-20.10.6-* docker-ce-cli-20.10.6-*.x86_64

等待安装ing。。。

image.png

安装完成后,执行命令查看docker版本,有如下回显代表安装成功

docker -v

image.png


Docker启动

临时启动Docker

systemctl start docker

设置开机自动启动

systemctl enable docker

image.png

查看Docker运行状态

systemctl status docker

image.png

查看Docker容器版本信息

docker version

image.png

接下来要配置镜像加速器。这一步是很有必要的。

一是可以提升镜像下载速度:默认情况下,Docker从官方镜像仓库(Docker Hub)下载镜像。但是由于网络的限制或地理位置的原因,有时候从官方仓库下载镜像的速度可能会较慢。配置镜像加速器可以将镜像下载源切换到国内的镜像站点,从而加快镜像下载速度,提高开发和部署效率。

二是解决访问限制问题:有些时候,访问官方仓库可能会受到网络的限制,例如在某些特殊环境下无法正常访问国外网站。配置镜像加速器可以解决这样的问题,通过使用国内的镜像站点,避免了对官方仓库的直接访问,确保能够正常下载和使用镜像。

配置Docker镜像加速器非常简单,只需要将加速器的地址添加到Docker配置文件中即可,这里我们选择阿里云的加速器地址。

先创建目录/etc/docker

sudo mkdir -p /etc/docker

将文本内容写入指定文件的常用命令

sudo tee /etc/docker/daemon.json <<-'EOF'

image.png

写入镜像加速器配置

{
   
   
"registry-mirrors": ["https://e7n1ndig.mirror.aliyuncs.com"]
}
EOF

image.png

然后重新启动Docker服务,配置即可生效。

sudo systemctl daemon-reload //重载配置
sudo systemctl restart docker //重启服务

image.png


准备ELK镜像

拉取elasticsearch镜像

docker pull elasticsearch

时间较长,慢慢等待

image.png

拉取kibana镜像

docker pull kibana

image.png

拉取logstash镜像

docker pull logstash

image.png

拉取nginx镜像

docker pull nginx

这里为什么还需要部署nginx呢?因为Nginx在ELK部署中具有以下几个重要的作用:

(1)SSL/TLS加密和访问控制:通过使用Nginx作为反向代理,可以配置SSL/TLS证书以启用加密通信,确保数据在网络传输过程中的安全性。此外,Nginx还可以实施访问控制策略,例如基于IP地址的白名单/黑名单,提供对ELK堆栈的授权访问。

(2)负载均衡:当ELK集群规模扩大时,可能需要在多个Elasticsearch节点之间进行负载均衡,以提高性能和可扩展性。Nginx作为反向代理可以帮助实现负载均衡,将请求分发到不同的Elasticsearch节点,从而平衡负载并优化性能。

(3)静态资源缓存和压缩:Kibana作为ELK堆栈的前端可视化工具,可能包含大量的静态资源文件(例如JavaScript、CSS和图像等)。Nginx可以通过实施缓存策略和启用压缩,提高这些静态资源的加载速度,从而改善用户体验。

(4)改善网络安全性:将ELK堆栈直接暴露在公共网络中可能会带来一些潜在的安全风险。通过使用Nginx作为反向代理,可以将ELK堆栈隐藏在内部网络中,只暴露Nginx的端口给外部访问,从而提高网络安全性。

image.png

查看docker镜像

docker images

image.png


部署Elasticsearch

修改JVM堆大小

默认情况下,Elasticsearch的JVM使用的堆大小为2GB,可以修改ES的jvm默认参数

find /var/lib/docker/overlay2/ -name jvm.options

这个路径下的jvm文件

image.png

进去修改

vi /var/lib/docker/overlay2/53d11f269e179358229b5468f4580f3bc506cde5443f1c2087c3b5e4b1c70372/diff/etc/elasticsearch/jvm.options

修改红框处

-Xms2g 改为 -Xms1g

-Xmx2g 改为 -Xmx1g

image.png

image.png

调整vm.max_map_count大小

vim /etc/sysctl.conf

image.png

在尾行增加如下:

vm.max_map_count=262144

这是一个设置内核参数的语法,vm.max_map_count 是内核参数的名称。它用于控制单个进程能够拥有的虚拟内存区域(即映射区域)的最大数量。

Elasticsearch使用了大量的内存映射文件来存储数据索引和缓存。为了保证Elasticsearch正常运行,在某些操作系统中需要增加 vm.max_map_count 的值。

通过将该参数设置为较大的值(例如262144),可以确保操作系统能够提供足够的虚拟内存区域供Elasticsearch使用,从而避免潜在的性能问题或错误。

image.png

保存退出,查看配置是否生效

sysctl -p

image.png


启动elasticsearch容器

docker run --name elasticsearch -v "$PWD/esdata":/usr/share/elasticsearch/data -p 9200:9200 -d elasticsearch

image.png

docker logs elasticsearch  //查看Docker容器日志的命令

image.png

curl http://localhost:9200

回显如下表示服务正常

image.png


部署logstash

创建logstash配置文件

mkdir -p /docker/config/logstash/
vim /docker/config/logstash/logstash.conf

在/docker/config/logstash/目录下创建配置文件logstash.conf,内容如下:

input {
   
   
     beats {
   
   
         port => 5044
         type => beats
     }
}

output {
   
   
     elasticsearch {
   
   
         hosts => ["elasticsearch:9200"]
     }
}

启动logstash容器

docker run --name logstash --link elasticsearch:elasticsearch -p 5044:5044 -d -v /docker/config/logstash:/config-dir logstash -f /config-dir/logstash.conf

image.png

docker logs logstash

image.png


部署nginx应用

docker run -e TZ="Asia/Shanghai" -d -p 80:80 -v "$PWD/logs":/var/log/nginx --name nginx nginx

image.png

直接本地访问IP

image.png


部署filebeat

Filebeat是Elasticsearch公司提供的一个轻量级日志收集器,用于从各种源(例如日志文件、系统日志等)抓取数据,并将其传输到Elasticsearch或Logstash等数据处理和分析工具。Filebeat的轻量级特性使其适用于各种规模的环境,并且与Elastic Stack(如Elasticsearch、Logstash和Kibana)的其他组件集成紧密,提供了一个强大的日志分析解决方案。

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm

image.png

rpm -ivh filebeat-7.4.2-x86_64.rpm

image.png

vim /etc/filebeat/filebeat.yml

image.png

image.png

修改完毕保存退出,再查看相关配置内容

grep -Ev '#|^$' /etc/filebeat/filebeat.yml

image.png

检查无误,重载并启动

systemctl restart filebeat
systemctl enable filebeat

image.png


部署kibana

docker run --name kibana --link elasticsearch:elasticsearch -p 5601:5601 -d kibana

image.png

docker ps -a

image.png

访问IP加端口

image.png

创建Index pattern

image.png

查看采集到的日志信息

image.png


kibana基础使用

image.png

进入Discover页面

image.png

image.png

1.选择查询的服务和日志文件

选择对应的应用

image.png

选择对应的应用下的日志文件

image.png

2.查询错误日志

Search框输入error -> Refresh

image.png

3.精确搜索完整短句“this is my words”(带空格)【ps:需要加引号】

image.png

相关实践学习
利用Elasticsearch实现地理位置查询
本实验将分别介绍如何使用Elasticsearch7.10版本进行全文检索、多语言检索和地理位置查询三个Elasticsearch基础检索子场景的实现。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
24天前
|
Docker 容器
docker 运行 elasticsearch + kibana + head 集群
docker 运行 elasticsearch + kibana + head 集群
|
2月前
|
监控 应用服务中间件 nginx
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
ELK的架构有多种,本篇分享使用的架构如图所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生产环境一天几千万的日志,内存占用大概 10G
71 4
|
2月前
|
Linux Docker 容器
使用Docker来安装ElasticSearch,并且配置ik分词器
使用Docker来安装ElasticSearch,并且配置ik分词器
70 0
|
2月前
|
Java Maven 开发工具
【ElasticSearch 】IK 分词器安装
【ElasticSearch 】IK 分词器安装
51 1
|
2月前
|
Java Windows
windows下 安装 Elasticsearch报错warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
windows下 安装 Elasticsearch报错warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
171 0
|
18天前
Elasticsearch安装配置文件
Elasticsearch安装配置文件
15 0
|
2月前
|
存储 数据可视化 数据挖掘
【ElasticSearch】ElasticSearch安装
【ElasticSearch】ElasticSearch安装
39 2
|
4天前
|
自然语言处理 搜索推荐
在Elasticsearch 7.9.2中安装IK分词器并进行自定义词典配置
在Elasticsearch 7.9.2中安装IK分词器并进行自定义词典配置
7 1
|
19天前
|
安全
【Elasticsearch6】安装笔记
【Elasticsearch6】安装笔记
15 2
|
18天前
|
网络协议 Java
elasticsearch7.1 安装启动报错
elasticsearch7.1 安装启动报错
16 1