1、什么是 ELK Stack?

那么,ELK 到底是什么呢? “ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。

Elastic Stack 是 ELK Stack 的更新换代产品。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LyMVuef2-1678518175643)(null)]

Elasticsearch:这个开源的分布式搜索引擎基于 JSON 开发而来,具有 RESTful 风格。它使用简单,可缩放规模,十分灵活,因此受到用户的热烈好评,而且如大家所知,围绕这一产品还形成了一家专门致力于搜索的公司。

**Logstash和Kibana:**Elasticsearch 的核心是搜索引擎,所以用户开始将其用于日志用例,并希望能够轻松地对日志进行采集和可视化。有鉴于此,我们引入了强大的采集管道 Logstash 和灵活的可视化工具 Kibana。

**Beats:**我们向 ELK Stack 中加入了一系列轻量型的单一功能数据采集器,并把它们叫做 Beats。

官网:https://www.elastic.co/cn/what-is/elk-stack

2、ELK常见的几种架构体系

2.1、Elasticsearch + Logstash + Kibana

此架构由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置Kibana Web方便的对日志查询,并根据数据生成报表。

这是最简单的一种ELK架构方式。优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。

2.2、Elasticsearch + Logstash + Filebeat + Kibana

与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,此种架构将收集端logstash替换为beats,更灵活,消耗资源更少,扩展性更强。同时可配置Logstash 和Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。但是这种架构有一个缺点,没有消息队列缓存,当logstash出现故障,会造成日志的丢失。

2.3、Elasticsearch + Logstash + Filebeat + Redis(Kafka)+ Kibana

logstash节点和elasticsearch节点可以根据日志量伸缩节点数量, filebeat部署在每台需要收集日志的服务器上。

此种架构引入了消息队列机制,位于各个节点上的beats先将数据/日志传递给消息队列(kafka、redis、rabbitMQ等),logstash从消息队列取数据进行过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志和数据呈现给用户。因为引入了Kafka(或者Redis),所以即使远端Logstash server因故障停止运行,数据将会先被存储下来,从而避免数据丢失。

工作流程:Filebeat采集—>发到kafka—> logstash处理从kafka缓存的数据进行分析—> 输出到es—> 显示在kibana

这种模式特点:这种架构适合于日志规模比较庞大的情况。但由于 Logstash 日志解析节点和 Elasticsearch 的负荷比较重,可将他们配置为集群模式,以分担负荷。引入消息队列,均衡了网络传输,从而降低了网络闭塞,尤其是丢失数据的可能性。

3、Docker部署ELK日志监控分析系统

3.1、下载需要的镜像

docker pull elasticsearch:7.17.7

docker pull logstash:7.17.7

docker pull kibana:7.17.7

3.2、下载docker-compose命令

下载dokcer-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

给dokcer-compose权限

sudo chmod +x /usr/local/bin/docker-compose

3.3、编写配置文件

# 系统下创建目录架构

opt

elk

elasticsearch

data #必须拥是777权限

elasticsearch.yml

kibana

kibana.yml

logstash

pipeline

logstash.conf

logstash.yml

docker-compose.yml

touch -p /opt/elk/docker-compose.yml

mkdir -p /opt/elk/elasticsearch/data

touch -p /opt/elk/elasticsearch/elasticsearch.yml

sudo chmod 777 /opt/elk/elasticsearch/data

touch -p /opt/elk/kibana/kibana.yml

touch -p /opt/elk/logstash/pipeline/logstash.conf

touch -p /opt/elk/logstash/logstash.yml

elasticsearch.yml内容如下

## Default Elasticsearch configuration from Elasticsearch base image.

### https://github.com/elastic/elasticsearch/blob/master/distribution/docker/src/docker/config/elasticsearch.yml

cluster.name: "docker-cluster"

network.host: 0.0.0.0

### X-Pack settings

### see https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-xpack.html

xpack.license.self_generated.type: trial

xpack.security.enabled: true

xpack.monitoring.collection.enabled: true

kibana.yml内容如下

## Default Kibana configuration from Kibana base image.

### https://github.com/elastic/kibana/blob/master/src/dev/build/tasks/os_packages/docker_generator/templates/kibana_yml.template.js

server.name: kibana

server.host: 0.0.0.0

i18n.locale: "zh-CN"

elasticsearch.hosts: [ "http://192.168.56.103:9200" ]

monitoring.ui.container.elasticsearch.enabled: true

### X-Pack security credentials

elasticsearch.username: elastic

elasticsearch.password: elk123456

logstash.yml内容如下

## Default Logstash configuration from Logstash base image.

### https://github.com/elastic/logstash/blob/master/docker/data/logstash/config/logstash-full.yml

http.host: "0.0.0.0"

xpack.monitoring.elasticsearch.hosts: [ "http://192.168.56.103:9200" ]

### X-Pack security credentials

xpack.monitoring.enabled: true

xpack.monitoring.elasticsearch.username: elastic

xpack.monitoring.elasticsearch.password: elk123456

logstash.conf内容如下

input {

tcp {

port => 5000

}

}

filter {}

### Add your filters / logstash plugins configuration here

output {

elasticsearch {

hosts => "192.168.56.103:9200"

user => "elastic"

password => "elk123456"

### 日志索引名称

index => "elk"

}

}

docker-compose.yml内容如下

version: "2.2"

services:

###配置elasticsearch

es:

image: elasticsearch:7.8.0

container_name: elasticsearch

ports:

- "9200:9200"

- "9300:9300"

environment:

discovery.type: single-node

###es的密码

ELASTIC_PASSWORD: elk123456

ES_JAVA_OPTS: "-Xmx256m -Xms256m"

volumes:

# 这里注意一下 如果你想吧docker中es的数据 映射出来 你本地的 /opt/elk/elasticsearch/data 必须拥有 777权限

- /opt/elk/elasticsearch/data:/usr/share/elasticsearch/data

- /opt/elk/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

network_mode: host

###配置Logstash

ls:

image: logstash:7.8.0

container_name: logstash

ports:

- "5000:5000/tcp"

- "5000:5000/udp"

- "9600:9600"

network_mode: host

environment:

discovery.type: single-node

ES_JAVA_OPTS: "-Xmx256m -Xms256m"

volumes:

###将本机目录/opt/elk/logstash/pipeline下的文件映射到docker容器里面

- /opt/elk/logstash/pipeline:/usr/share/logstash/pipeline

- /opt/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml

depends_on:

- es

###配置Kibana

kb:

image: kibana:7.8.0

container_name: kibana

ports:

- "5601:5601"

volumes:

###将本机目录/opt/elk/kibana/kibana.yml下的文件映射到docker容器里面

- /opt/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml

network_mode: host

depends_on:

- es

discovery.type:表示这是单机启动

ES_JAVA_OPTS:配置该容器占用主机的内存等等

network_mode:设置docker容器的网络模式

depends_on:指必须后面的服务启动以后 这个才启动

3.4、部署完成启动

cd /opt/elk

docker-compose up

3.5、访问kibana(记得打开个工具端口)

http://192.168.56.103:5601/

用户名:elastic

密码:elk123456

4、Springboot集成Logstash

在pom文件中添加以下依赖 让springboot的日志集成logstash

net.logstash.logback

logstash-logback-encoder

7.2

在resources下添加logback和logstash集成的文件

logback-spring.xml配置如下

192.168.56.103:5000

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

UTF-8

application.properties配置如下

logging.config= classpath:logback-spring.xml

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: