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

本文涉及的产品
日志服务 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日志并进行多维度分析。
目录
相关文章
|
27天前
|
存储 前端开发 数据可视化
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
352 69
Grafana Loki,轻量级日志系统
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
91 8
|
2月前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
121 2
|
3月前
|
存储 监控 安全
|
3月前
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
373 2
|
3月前
|
存储 JSON 监控
开源日志分析Logstash
【10月更文挑战第22天】
86 1
|
6天前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
21 5
图解MySQL【日志】——Redo Log
|
3月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
1044 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
21天前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log