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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 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日志并进行多维度分析。
目录
相关文章
|
1月前
|
存储 JSON 监控
可以通过配置Filebeat来将Higress日志持久化到磁盘
【2月更文挑战第10天】可以通过配置Filebeat来将Higress日志持久化到磁盘
29 4
|
3月前
|
Java 应用服务中间件 nginx
微服务框架(二十九)Logstash Nginx 日志上报
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash Nginx 日志上报 本系列文章中所使用的框架版本为Spring Boot 2.0.3...
|
3月前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
103 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
|
4月前
|
Kubernetes 容器
k8s学习-CKS真题-日志审计 log audit
k8s学习-CKS真题-日志审计 log audit
79 0
|
4月前
|
存储 缓存 关系型数据库
认真学习MySQL的事务日志-Redo日志
认真学习MySQL的事务日志-Redo日志
44 0
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架(三十)Logstash Kong 日志上报
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash Kong 日志上报 本系列文章中所使用的框架版本为Spring Boot 2.0.3-...
|
3月前
|
JSON Java 数据格式
微服务框架(十三)Spring Boot Logstash日志采集
  本文为Spring Boot中Log4j2对接Logstash,进行日志采集。Logstah只支持log4j,使用log4j2时需要通过TCP插件调用 此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。
|
4月前
|
存储 监控 数据可视化
小白带你学习linux的ELK日志收集系统
小白带你学习linux的ELK日志收集系统
163 0
|
4月前
|
Kubernetes 监控 容器
k8s学习-CKA真题-监控Pod日志
k8s学习-CKA真题-监控Pod日志
78 0
|
6月前
|
NoSQL Redis 索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引