热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker入门到实战教程(十二)ELK+Filebeat搭建日志分析系统

为什么用到ELK:一般我们需要进行日志分析场景:直接在日志文件中grep、awk就可以获得自己想要的信息。但在规模较大的场景中,此方法效率

为什么用到ELK:

一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

收集-能够采集多种来源的日志数据 传输-能够稳定的把日志数据传输到中央系统 存储-如何存储日志数据 分析-可以支持 UI 分析 警告-能够提供错误报告,监控机制 ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

ELK+Filebeat简介

ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件实现日志采集、分析、展示,但并非全部。

Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

Filebeat隶属于Beats。目前Beats包含四种工具:

Packetbeat(搜集网络流量数据) Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据) Filebeat(搜集文件数据) Winlogbeat(搜集 Windows 事件日志数据)

先看下效果

file

下面开始搭建

一. 架构图

图片来源于网络

二. Docker安装ElasticSearch

2.1 官网安装

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.1

2.2 设置参数

在elasticsearch的docker版本文档中,官方提到了vm.max_map_count的值在生产环境最少要设置成262144。设置的方式有两种

永久性的修改,在/etc/sysctl.conf文件中添加一行:grep vm.max_map_count /etc/sysctl.conf # 查找当前的值。

vm.max_map_count=262144 # 修改或者新增

file

正在运行的机器:

sysctl -w vm.max_map_count=262144

2.3 创建本地挂载数据与配置文件

数据储存路径

mkdir -p /usr/local/src/docker/es/data

配置文件路径

/usr/local/elk/es/config/elasticsearch.yml

2.3 修改配置文件

elasticsearch.yml

# 配置es的集群名称
cluster.name: "docker-cluster"
# 0.0.0.0为不限制,生产环境请设置为固定IP
network.host: 0.0.0.0
# 开启x-pack安全验证 访问时需要密码
xpack.security.enabled: true
# 关闭跨域验证(可以不开启)
http.cors.enabled: true
http.cors.allow-origin: "*"

参数说明:

  • xpack.security.enabled: truees从6.3之后内置了xpack模块,但是是默认关闭的

2.4 启动命令

docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /usr/local/src/elk/es/data:/usr/share/elasticsearch/data -v /usr/local/src/elk/es/config/elasticsearch.yml://usr/share/elasticsearch/config/elasticsearch.yml --privileged=true docker.elastic.co/elasticsearch/elasticsearch:7.3.1

file

把宿主机es挂载的data目录的权限开启就行了
chmod 777 /usr/local/src/elk/es/data

2.5 设置密码

# docker 进入容器
docker exec -it es /bin/bash
# 修改密码
[root@g50 elasticsearch]# bin/elasticsearch-setup-passwords interactive

elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user 等密码是一起修改的

2.6 测试是否成功

访问前,确保防火墙或安全组已经设置好

打开浏览器输入ip:9200即可

file

可以看到需要验证用户密码,输入刚刚设置的密码即可

用户名: elastic
密码: xxxx

成功后会看到以下内容

file

OK! es安装完毕

三. 安装Logstsh

3.1 拉取官方镜像

docker pull docker.elastic.co/logstash/logstash:7.6.1

file

3.2 创建挂载数据与配置文件

mkdir -p /usr/local/src/elk/logstash/config
touch /usr/local/src/elk/logstash/config/logstash.conf
touch /usr/local/src/elk/logstash/config/logstash.yml

3.3 修改配置文件

  • logstash.conf

logstash pipeline 包含两个必须的元素:input和output,和一个可选元素:filter。

从input读取事件源,(经过filter解析和处理之后),从output输出到目标存储库(elasticsearch或其他)

file
logstash.conf配置详情
file

我这里配置的是要处理logback日志文件

input {beats {port => 5044ssl => false}
}filter {grok {# 筛选过滤match => {"message" => "(?\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3}) %{GREEDYDATA:thread} %{LOGLEVEL:level} %{GREEDYDATA:class} - (?.*)"}remove_field => ["message"]}# 不匹配正则则删除,匹配正则用=~if [level] !~ "(ERROR|WARN|INFO)" {# 删除日志drop {}}
}output {stdout {codec => rubydebug #控制台输出处理过后的数据}
if [fields][logtype] == "pre"{elasticsearch {hosts => ["ip:9200"]user => elasticpassword => xxxindex => "pre"}}
if [fields][logtype] == "prex"{elasticsearch {hosts => ["ip:9200"]user => elasticpassword => xxxindex => "prex"}}
}

注:

  • input 这里其实把logstash作为服 务,开启5044端口接收filebeat发出的消息

  • filter 主要用来过滤日志文件处理成我们需要的数据

  • grok 解析文本并构造 把非结构化日志数据通过正则解析成结构化和可查询化

  • output 采集的日志要进行输出,将事件发送到特定目标 ,我这里配置的es,并使用账号密码

备注:
官方提供了很多正则的grok pattern可以直接使用: :https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns

grok debug工具:  http://grokdebug.herokuapp.com

正则表达式调试工具: https://www.debuggex.com/

grok 里边有定义好的现场的模板你可以用,但是更多的是自定义模板,规则是这样的,小括号里边包含所有一个key和value,例子:(?value),比如以下的信息,第一个我定义的key是data,表示方法为:? 前边一个问号,然后用<>把key包含在里边去。value就是纯正则了,这个我就不举例子了。这个有个在线的调试库,可以供大家参考,
http://grokdebug.herokuapp.com/

我这里是按照JAVA日志格式进行编写的

{"date": [["2019-09-21 20:34:09.318"]],"thread": [["[XNIO-1 task-39]"]],"level": [["DEBUG"]],"class": [["com.xd.pre.modules.sys.mapper.SysLogMapper.insert"]],"msg": [["- ==> Parameters: 103.134.198.167(String), 1(Integer), admin(String), 查询用户集合(String), getList(String), /user(String), [com.baomidou.mybatisplus.extension.plugins.pagination.Page@1cb5e16a, UserDTO(userId=null, username=, password=null, deptId=0, jobId=null, phOne=null, email=null, avatar=null, lockFlag=null, delFlag=null, roleList=null, deptList=null, newPassword=null, smsCode=null)](String), Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36(String), com.xd.pre.modules.sys.controller.SysUserController(String), GET(String), 2019-09-21T20:34:08.905(LocalDateTime), 2019-09-21T20:34:08.905(LocalDateTime), 0(Long)"]]
}

logstash.yml
file

# 不受限限制访问
http.host: 0.0.0.0
# 使用了es安全认证所以要配置es相关信息
xpack.monitoring.elasticsearch.hosts:
- http://ip:9200
# 使用x-pack安全认证
xpack.monitoring.enabled: true
# es账号
xpack.monitoring.elasticsearch.username: "elastic"
# es密码
xpack.monitoring.elasticsearch.password: "xxx"

4. 启动命令

docker run -p 5044:5044 \
--name logstash -d \
-v /usr/local/src/elk/logstash/config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw \
-v /usr/local/src/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:rw \
docker.elastic.co/logstash/logstash:7.6.1

file

5. 查看启动日志

docker logs -f logstash

启动成功

file

四. 安装Kibana

4.1 安装

拉取官方镜像

docker pull docker.elastic.co/kibana/kibana:7.6.1

4.2 创建文件夹和配置文件

mkdir /usr/local/src/elk/kibana
mkdir /usr/local/src/elk/kibana/config
touch /usr/local/src/elk/kibana/config/kibana.yml

4.3 修改配置

vim /usr/local/src/elk/kibana/config/kibana.yml

file

配置文件

server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
elasticsearch.username: elastic
elasticsearch.password: xxx
xpack.monitoring.ui.container.elasticsearch.enabled: true
#汉化
i18n.locale: "zh-CN"

4.4 启动命令

docker run -d -p 5601:5601 \
--name=kibana \
-v /usr/local/src/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
docker.elastic.co/kibana/kibana:7.6.1

使用link参数,会在kibana容器hosts文件中加入elasticsearch ip地址,这样我们就直接通过定义的name来访问es服务

4.5 启动测试

打开浏览器访问ip:5601

file

然后输入账号密码即可

file

五. Filebeat

5.1 安装

拉取官方镜像

pull docker.elastic.co/beats/filebeat:7.6.1

5.2 在宿主机创建文件夹和文件

mkdir -p /usr/local/src/elk/filebeat/data
mkdir -p /usr/local/src/elk/filebeat/config
touch /usr/local/elk/filebeat/config/filebeat.yml

5.3 修改配置文件

file

filebeat.yml

filebeat.inputs:
- input_type: logenable: truepaths: # 采集日志的路径这里是容器内的path- /Users/lihaodong/Desktop/log/**multiline.pattern: &#39;^[0-9]{4}-[0-9]{2}-[0-9]{2}&#39;multiline.negate: truemultiline.match: aftermultiline.timeout: 10s# 为每个项目标识,或者分组,可区分不同格式的日志tags: ["pre-logs"]# 这个文件记录日志读取的位置,如果容器重启,可以从记录的位置开始取日志registry_file: /usr/share/filebeat/data/fields:logsource: node1logtype: pre# 输出到logstash中,logstash更换为自己的ip
output.logstash:enabled: truehosts: ["ip:5044"]

注:  Logstash的配置

output:logstash:hosts: ["ip:5044"]worker: 2loadbalance: trueindex: filebeat这里worker 的含义,是 beat 连到每个 host 的线程数。
在 loadbalance 开启的情况下,意味着有 4 个worker 轮训发送数据

5.4 启动命令

docker run --name filebeat -d \
-v /Users/lihaodong/Desktop/log:/Users/lihaodong/Desktop/log \
-v /usr/local/src/elk/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /usr/local/src/elk/filebeat/data:/usr/share/filebeat/data \
docker.elastic.co/beats/filebeat:7.6.1

5.5 查看启动日志是否成功

docker logs -f filebeat

file

从日志中看到文件夹没有权限,需要在宿主机给与权限

chmod 777 /usr/local/src/elk/filebeat/data

删掉容器,重新启动

file

OK! 到现在为止,基础软件安装完毕!

再次查看日志,看下是否在收集

docker logs -f filebeat

file

看样子 已经在我们所配置的路径进行收集日志并发送到logstsh了

六. kibana操作说明

创建索引模式,以便我们可以查看日志信息

file
file
file
file

OK! 大量的日志已经储存进来

七. 总结

本文章主要架构为:

filebeat读取logback日志文件,发送到logstash,再由logstash发送到es进行储存,最终kibana展示

可以做到代码无侵入性,随时用随时撤

注意: 软件启动顺序,先启动es,再启动kibana,logstash,filebeat

具体详细的介绍大家可以查一下资料,具体业务具体对待

 往期推荐 

????

Docker 入门到实战教程(一)介绍Docker

Docker 入门到实战教程(二)安装Docker

Docker 入门到实战教程(三)镜像和容器

Docker 入门到实战教程(四)容器链接

Docker 入门到实战教程(五)构建Docker镜像

Docker 入门到实战教程(六)Docker数据卷

Docker 入门到实战教程(七)安装Redis

Docker 入门到实战教程(八)安装Mysql

Docker 入门到实战教程(九)安装Nginx

Docker入门到实战教程(十)部署Spring Boot项目

Docker 入门到实战教程(十一)部署Vue+SpringBoot 前后端分离项目



推荐阅读
  • 搞懂 ELK 并不是一件特别难的事
    点击下方“民工哥技术之路”,选择“设为星标”回复“1024”获取独家整理的学习资料!本篇文章主要介绍ELK的一些框架组成,原理和实践&#x ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 「驭龙」开源主机入侵检测系统了解一下
    「驭龙」开源主机入侵检测系统了解一下 ... [详细]
  • Flume 数据采集组件
    目录1、数据收集工具系统产生背景2、专业的数据收集工具2.1、Chukwa2.2、Scribe2.3、Fluentd2.4、Logstash2.5、ApacheFlu ... [详细]
  • 大二修完java的基础入门,发现自己对这门语言有兴趣,想深入自学,但是一方面不知道怎么深入,另一方面想了解我毕业后能找哪方面的工作。我不想做单纯的程序员,不想每天都是敲代码。所以请过来人帮忙解疑。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • Spring cloud微服务架构前后端分离博客系统,Vue+boot源码分享 ... [详细]
  • ELK stack 学习记录
    ELK日志分析平台学习记录首先ELK主要指elasticsearch、logstash和kibana,三个开源软件组合而成的一套日志平台解决方案。可以将平时收集到的日志,通过前台展 ... [详细]
  • es的分布式原理?es是如何实现分布式的?
    Elasticsearch设计的理念是分布式搜索引擎,底层其实是基于lucene。核心思 ... [详细]
  •                               前言日志,一直以来都是开发人员和运维人员最关心的问题。开发人员可通过日志记录来协助问题定位,运维人员可通过日志发现系统隐 ... [详细]
  • 怎么提高ElasticSearch 索引速度
    这篇文章主要为大家展示了“怎么提高ElasticSearch索引速度”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究 ... [详细]
  • javajigsaw2015年12月1日,星期二,在OpenJDK邮件列表中,MarkReinhold确认了许多人的期望:J ... [详细]
author-avatar
手机用户2502930623
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有