ElasticSerach学习(五)-基于ES+filebeat+logstash实现日志收集系统

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: ElasticSerach学习(五)-基于ES+filebeat+logstash实现日志收集系统

记录一下搭建elk+filebeat收集日志的全过程

环境:

es 7.7.1 单节点集群

logstash 7.7.1

filebeat 7.7.1

kibana 7.7.1


搭建环境均为linux,centos7


搭建目标:

  1. 使用filebeat读取log4j日志文件发送到logstash
  2. logstash进行过滤解析,发送到es
  1. 先直接发送到es
  2. 尝试过滤解析日志字段,拆分后发送到es
  1. 使用kibana进行查询



1. ES环境搭建

此处搭建es单节点集群

1.1 下载解压

下载地址: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-7-1 当前最新版本为7.12 也可以下载

下载后上传到虚拟机,解压

1.2 新建用户

因为es不允许使用root用户,所以要新建用户

useradd es
passwd es
#输入密码 es


修改解压目录的所有者为es,防止权限问题

chown-R es:es #解压目录


1.3 修改虚拟机配置

修改虚拟机配置,文件数

vim /etc/security/limits.conf


在文件末尾添加一下内容

*               soft    nofile          65536*               hard    nofile          65536*               soft    nproc           4096*               hard    nproc           4096


修改虚拟机配置

vim /etc/sysctl.conf


文件末尾增加配置(如有配置,需修改)

vm.max_map_count =262144

注意:上述配置都需要使用root账号进行修改

1.4 修改es启动配置

接下来切换到es用户

su es


进入到解压目录,找到config目录,修改jvm的内存(默认为1g,需调小一点,不然虚拟机扛不住),如果虚拟机内存够,也可以不用调

cd config
vim jvm.options
#修改如下两行 (默认为1g)-Xms256m-Xmx256m



1.5 修改es配置

可以通过修改config目录下elasticsearch.yml修改es的相关配置,比如节点名称,访问ip,集群配置等.

由于我们这里是单节点集群,所以使用默认配置即可


1.6 启动es

进入解压目录下bin目录

cd bin
./elasticsearch -d

-d 使es后台运行,第一次运行可以不加-d,在控制台查看启动日志是否有异常.


1.7 关闭es

# 查看pid

nestat -nptl# 默认端口号为9200 9300对应的pidkill <pid>


2. logstash

2.1 下载解压

下载地址 https://www.elastic.co/cn/downloads/past-releases/logstash-7-7-1

解压到指定目录(使用es用户即可)


2.2 修改配置文件

2.2.1 修改jvm.options

进入config目录下,修改jvm内存

cd config
vim jvm.options
# 修改-Xms -Xmx两行-Xms256m-Xmx256m


2.2.2 修改logstash-sample.config文件

备份后修改此文件

input {
  beats {
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["http://192.168.164.132:9200"]
    index => "yxjcjk_log-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}



input 为数据来源

从beats输入,也就是filebeat访问的端口为5044

output 为数据输出

输出到es,配置es的访问地址,如果为集群,请配置多个,注意: es的访问地址是es的配置文件中配置的,默认为localhost,我这里是修改了该配置文件,换成了ip地址.

index是输入到es的index名称,可以指定年月日.



2.3 启动logstash

./bin/logstash -f ./config/logstash-sample.conf
# 使用nohup 后台启动nohup ./bin/logstah -f ./config/logstash-sample.conf > ./log/nohup.out 2>&1 &


2.4 停止logstash

# 同es 停止方法netstat -nptl# -9是发现kill杀不掉,使用-9强制停止kill-9 <pid>


3. filebeat

3.1 下载解压

下载地址 https://www.elastic.co/cn/downloads/past-releases/filebeat-7-7-1

解压到指定目录


3.2 修改配置

进入解压目录下 filebeat.reference.yml文件时filebeat的所有配置


我们备份下filebeat.yml,然后修改filebeat.yml文件

filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so# you can use different inputs for various configurations.# Below are the input specific configurations.- type: log
# Change to true to enable this input configuration.  enabled: true# Paths that should be crawled and fetched. Glob based paths.  paths:
- /home/elastic/test_logs/*.log  
#不以[开头的行都合并到上一行的末尾  multiline.pattern: ^\[
  multiline.negate: true  multiline.match: after
output.logstash:
# The Logstash hosts  hosts: ["localhost:5044"]


主要配置input,output

input 从日志文件读取,需要配置文件的地址,和多行合并,

output 输出到logstash,配置logstash的端口号即可


3.2 启动filebeat

# 直接启动,控制台输出日志./filebeat -e-c filebeat.yml
# 后台启动nohup ./filebeat -e-c filebeat.yml > nohup.out 2>&1 &

-e 启动

-c 指定配置文件


3.2 停止filebeat

同logstash/es

netstat -nptlkill <pid>


4. kibana

kibana主要用于可视化

4.1 下载解压

下载地址: https://www.elastic.co/cn/downloads/past-releases/kibana-7-7-1

解压到指定地址


4.2 启动

kibana无需修改什么配置,默认直接连接localhost:9200 的es,如果es的地址有修改的话改动下此配置即可,其他配置无需修改

nohup /home/elastic/kibata/kibana-7.7.1-linux-x86_64/bin/kibana > /home/elastic/kibata/kibana-7.7.1-linux-x86_64/log/nohup.out  2>&1 &

4.3 停止

netstat -nptl# 找到5601端口对应的pidkill <pid>



5. 读取日志发送到es

根据上述配置,逐个启动 es,kibana,logstash,filebeat,就会默认读取日志文件并发送到logstash,过滤后再发送到es

但是此时发送到es的日志还是一个消息整体,就是一个字符串,我们需要对每一条日志记录进行分析,拆分为字段后写入es.

5.1 logstash对日志进行分析过滤,拆分字段

使用的是Grok插件

Grok插件将记录拆分为一个个字段

5.1.1 Grok使用

Grok的语句是%{模式名:字段名}

会把对应的数据转换为字段



常用的模式记录如下:

WORD:配置字符串

TIMESTAMP_ISO8601:配置时间

LOGLEVEL:匹配日志级别

DATA:匹配长数据

INT:匹配数字

GREEDYDATA:匹配剩余数据


使用示例:

日志记录如下:

[yxjcjk][2021-05-13 16:22:33,773][ERROR][org.gocom.components.coframe.auth.LoginManager.mobile_login_biz:540] [Name=org.gocom.components.coframe.auth.LoginManager.mobile_login.biz][activity name=存入登录用户信息日志][activity id=invokePojo2] throw an exception:java.lang.Exception,exception :


对应开发的Grok表达式为:

\[%{WORD:sys}\]\[%{TIMESTAMP_ISO8601:time}\]\[%{LOGLEVEL:level}\]\[%{DATA:uri}:%{INT:line_num}\] %{GREEDYDATA:data}


此表达式提取了系统名称(sys),时间(time),日志级别(level),访问路径(uri),路径行数(line_num),剩余具体日志(data),最终输入到es



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6天前
|
Windows Python
如何反向读取Windows系统日志EVTX文件?
以下是如何反向读取Windows系统日志EVTX文件
16 2
|
15天前
|
存储 监控 安全
|
13天前
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
13 2
|
15天前
|
存储 JSON 监控
开源日志分析Logstash
【10月更文挑战第22天】
30 1
|
24天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
47 1
|
1月前
|
监控 网络协议 安全
Linux系统日志管理
Linux系统日志管理
42 3
|
12天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
121 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
220 3
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1630 14
|
1月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
31 0