Linux云计算 |【第五阶段】ARCHITECTURE-DAY2

server/2024/10/19 3:33:20/

主要内容:

搭建Logstash完成ELK集群、实现Web日志实时分析

一、Logstash介绍

Logstash 是一个开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,并将数据发送到你指定的存储库中。它通常与 Elasticsearch 和 Kibana 一起使用,构成 ELK 技术栈,用于日志分析、数据收集和处理等场景。

特点:

  • ① 所有类型的数据集中处理;
  • ② 不同模式和格式数据的正常化;
  • ③ 自定义日志格式的迅速扩展;
  • ④ 为自定义数据源轻松添加插件;

主要功能:

1)数据采集:

输入插件:Logstash 支持多种输入插件,可以从文件、数据库、消息队列、日志文件、网络端口等多种来源采集数据。
示例:
- file 插件:从文件中读取数据。
- beats 插件:从 Beats 代理(如 Filebeat、Metricbeat)接收数据。
- syslog 插件:从 Syslog 服务器接收日志数据。

2)数据转换:

过滤器插件:Logstash 提供了丰富的过滤器插件,用于解析、转换和丰富数据。
示例:
- grok 插件:解析非结构化数据,将其转换为结构化数据。
- mutate 插件:对字段进行重命名、删除、替换等操作。
 -date 插件:解析日期字段,并将其设置为事件的时间戳。

3)数据输出:

输出插件:Logstash 支持多种输出插件,可以将处理后的数据发送到 Elasticsearch、文件、数据库、消息队列等多种目标。
示例:
- elasticsearch 插件:将数据发送到 Elasticsearch 进行存储和分析。
- file 插件:将数据写入文件。
- stdout 插件:将数据输出到标准输出,通常用于调试。

1、Logstach的工作结构

Logstash 的配置文件通常由三个主要部分组成:input、filter 和 output。

input {# 输入插件配置
}filter {# 过滤器插件配置
}output {# 输出插件配置
}

简单的 Logstash 配置示例:

从文件中读取日志数据,解析日志,并将解析后的数据发送到 Elasticsearch

input {file {path => "/var/log/myapp.log"start_position => "beginning"sincedb_path => "/dev/null"}
}filter {grok {match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }}date {match => [ "timestamp", "ISO8601" ]target => "@timestamp"}
}output {elasticsearch {hosts => ["http://localhost:9200"]index => "myapp-logs-%{+YYYY.MM.dd}"}stdout { codec => rubydebug }
}

 

2、Logstash的数据类型

数据类型

示例

布尔值类型

ssl_enable => true

字节类型

bytes => “1MiB”

字符串类型

name => “xkops”

数值类型

prot => 22

数组

match => [“datetime”,”UNIX”]

哈希(键值对)

options => { k => “v”, k2 => “v2”}

注释

#

 

3、Logstash的语法

语法

说明

==

等于

!=

不等于

小于

大于

小于等于

>=

大于等于

=~

匹配正则

!~

不匹配正则

in

包含

not in

不包含

and

or

nand

非与

xor

非或

4、ELK架构图例:

  • 日志收集和分析:从多个来源收集日志数据,解析和转换数据,并将数据发送到 Elasticsearch 进行存储和分析。
  • 数据清洗和转换:对原始数据进行清洗、转换和丰富,使其更适合后续分析和存储。
  • 实时数据处理:实时处理和分析数据,支持实时监控和报警。

部署logstash示例:

① 配置主机名解析文件(包括所有ES节点和本机的主机名)

② Logstash依赖JAVA环境,所以安装java-openjdk、Logstash软件包

③ Logstash没有默认配置文件,需手动配置

1)配置文件管理

  • - 默认安装目录:/usr/share/logstash
  • - 配置文件路径:/etc/logstash

注意:因为Logstash默认会在安装目录下寻找配置文件,所以需要将配置文件通过软连接关联到安装目录的路径下:# ln -s /etc/logstash /usr/share/logstash/config

  • - 配置文件格式:(input、filter、output区域)

  • - 启动Logstash命令: /usr/share/logstash/bin/logstash
  • - 官方手册地址:Logstash Reference [8.15] | Elastic

步骤1:安装logstash

① 购买1台云主机

主机名称

IP地址

相关配置

logstash

192.168.1.47

最低配置2核4G

② 配置主机名解析

[root@logstash ~]# vim /etc/hosts
192.168.1.41   es-0001
192.168.1.42   es-0002
192.168.1.43   es-0003
192.168.1.44   es-0004
192.168.1.45   es-0005
192.168.1.47   logstash

③ 安装JAVA环境,及Logstash软件包

[root@logstash ~]# yum install -y java-1.8.0-openjdk logstash

④ 将配置文件/etc/logstash/作为源路径,软链接方式到/usr/share/logstash/config

[root@logstash ~]# ls /etc/logstash/

[root@logstash ~]# ln -s /etc/logstash/ /usr/share/logstash/config
[root@logstash ~]# ls /usr/share/logstash/

[root@logstash ~]# ls /usr/share/logstash/config/

⑤ 修改配置文件(手动配置)

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {        //日志数据输入区域stdin{}      //stdin标准输入插件
}filter{ }       //数据过滤规则处理区域output{         //日志数据输出区域stdout{}      //stdin标准输出插件
}

⑥ 启动Logstash验证,测试效果

[root@logstash ~]# /usr/share/logstash/bin/logstash

补充:任意输入字符进行测试,返回的是JSON格式的信息;

2)插件管理

上面的配置文件使用了 Logstash-input-stdinLogstash-output-stdout 两个插件,Logstash对数据的处理依赖插件;

  • - 管理命令: /usr/share/logstash/bin/logstash-plugin

① 安装插件install

② 删除插件uninstall

③ 查看插件list

例如:

[root@logstash ~]# ls /usr/share/logstash/bin/

[root@logstash ~]# /usr/share/logstash/bin/logstash-plugin    //执行管理命令

[root@logstash ~]# /usr/share/logstash/bin/logstash-plugin list   //查看插件
logstash-codec-json      //logstash-codec-xxx编码格式插件
logstash-filter-dns      //logstash-filter-xxx只能用于filter段的插件
logstash-input-stdin     //logstash-input-xxx只能用于input段的插件
logstash-output-stdout   //logstash-output-xxx只能用于output段的插件
…

插件名用【-】分隔,logstash表示为Logstash的插件,插件使用区域,插件名;其中codec字符编码可以适用于所有区域。

步骤2:插件与调试格式

① 编写配置文件,使用json格式字符串测试: {"a":"1", "b":"2", "c":"3"}

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {stdin{ codec => "json" }      //标准输入,采用json编码格式输入
}filter{ }output{stdout{ codec => "rubydebug" }   //标准输出,采用rubydebug编码格式,可展现完整的数据格式(便于调试)
}

② 启动Logstash验证,测试效果

[root@logstash ~]# /usr/share/logstash/bin/logstash

在写配置文件时,标准输入区域的格式取决于数据源,一般标准输出区域的格式默认是rubydebug格式,便于阅读和调试;

二、插件的帮助手册

Logstash里面插件众多,不同的插件参数也不同,需要学会通过手册查找所需插件;

官方手册地址:Logstash Reference [8.15] | Elastic

1、input插件 配置管理

  • - file插件,主要用途是从本地文件中获取数据,并实时监控文件的变化;
  • - 核心参数:

① path要监控的文件路径

path => [“/tmp/a.log”,”/tmp/b.log”]

② start_position第一次读取文件位置[beginning|end]

start_position => “beginning”

③ sincedb_path记录读取文件的位置(类似书签)

sincedb_path => “/var/lib/logstash/sincedb-access”

④ type提供一个字符串标记

type => “testlog”

例如:

 

例如1:Logstash从本地文件中获取数据

# 查询插件的帮助手册,找到Input plugins中的file插件;

# 在file插件中找到该格式的模板

# 在file插件中找到Option,在Required选项中找到YES为必须配置(array为数组)

# 在array中,找到文件路径的Example;

# 修改配置文件①

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {stdin{ codec => "json" }file{         //使用file模块path => ["/tmp/a.log","/tmp/b.log"]     //从本地文件中获取数据}
}filter{ }output{stdout{ codec => "rubydebug" }
}[root@logstash ~]# /usr/share/logstash/bin/logstash   //启用Logstash

# 打开另一个终端测试

[root@logstash ~]# cd /tmp/
[root@logstash tmp]# echo "TEST_${RANDOM}" >> a.log
[root@logstash tmp]# echo "TEST_${RANDOM}" >> b.log

# 启动Logstash验证,测试效果

# 修改配置文件②

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {stdin{ codec => "json" }file{path => ["/tmp/a.log"]type => "is apache"    //字符串标签,用来区分不同数据种类的手段}file{path => ["/tmp/b.log"]type => "is nginx"}
}filter{ }output{stdout{ codec => "rubydebug" }
}     [root@logstash ~]# /usr/share/logstash/bin/logstash   //启用Logstash

# 打开另一个终端测试

[root@logstash tmp]# echo "TEST_${RANDOM}" >> a.log
[root@logstash tmp]# echo "TEST_${RANDOM}" >> b.log

# 启动Logstash验证,测试效果

补充:Logstash默认会创建书签文件,用来记录上一次读取数据文件的位置,默认存放在/var/lib/logstash/plugins/inputs/file/下;每次对Logstash重启,就会生成书签文件;需要指定书签文件,便于管理;

 


示例:input file插件

① 修改配置文件

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {file {path => ["/tmp/c.log"]       //要监控的文件路径type => "test"        //字符串标签,用来区分不同数据种类的手段start_position => "beginning"   //第一次读取文件位置[beginning|end]sincedb_path => "/var/lib/logstash/sincedb"   //记录读取文件的位置}
}filter{ }output{stdout{ codec => "rubydebug" }
}

补充:beginning从开头读取文件

② 删除默认书签文件

[root@logstash ~]# rm -rf /var/lib/logstash/plugins/inputs/file/.sincedb_*

③ 启动Logstash验证,测试效果

[root@logstash ~]# /usr/share/logstash/bin/logstash

2、filter插件配置管理

  • - grok插件,用来解析各种非结构化的日志数据插件;
  • - grok使用正则表达式把非结构化的数据结构化在分组匹配;
  • - 正则表达式需要根据具体数据结构编写(适用性极广)

① 正则表达式分组匹配格式:(自定义)

调用格式:(?正则表达式)

② 正则表达式宏调用格式:(官方宏文件)

调用格式:%{宏名称:名字}

- grok自带宏文件路径:/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns

例如:

补充:为WEB服务器重建ELB负载均衡器,开启获取客户端IP功能

[root@logstash ~]# cat /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/httpd    //查看httpd相关的宏文件


示例:filter grok插件

[root@logstash ~]# echo '192.168.1.252 - - [29/Jul/2020:14:06:57 +0800] "GET /info.html HTTP/1.1" 200 119 "-" "curl/7.29.0"' >/tmp/c.log
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {file {path => ["/tmp/c.log"]       //要监控的文件路径type => "test"              //字符串标签start_position => "beginning"    //第一次读取文件位置[beginning|end]sincedb_path => "/dev/null"     //记录读取文件的位置(devnull),可反复读取测试}
}filter{grok {   match => { "message" => "%{HTTPD_COMBINEDLOG}" }  //使用宏解析Apahce默认日志格式}
}output{stdout{ codec => "rubydebug" }
}

# 启动Logstash,查看效果

[root@logstash ~]# /usr/share/logstash/bin/logstash

3、output插件配置管理

  • - elasticsearch插件是日志分析系统的数据输出插件,主要用途是把filter处理过的json数据写入到elasticsearch集群中;
  • - 核心参数:

① host elasticsearch节点的地址,数组格式:

host => [“es-0004:9200”,”es-0005:9200”]

② index存储数据索引的名称:

index => “weblog”

③ index还支持按日期生成索引,其中YYYY表示年,MM表示月份,dd表示日期:

index => “weblog-%{+YYYY.MM.dd}”

例如:


示例:output elasticsearch插件

① 修改配置文件

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {file {path => ["/tmp/c.log"]type => "test"start_position => "beginning"sincedb_path => "/dev/null"}
}filter{grok {match => { "message" => "%{HTTPD_COMBINEDLOG}" }}
}output{stdout{ codec => "rubydebug" }elasticsearch {hosts => ["es-0004:9200", "es-0005:9200"]    //指定ES集群节点地址index => "weblog-%{+YYYY.MM.dd}"     //按日期生成索引(宏)}
}

② 启动Logstash,查看效果

[root@logstash ~]# /usr/share/logstash/bin/logstash

③ 通过浏览器访问HEAD页面,连接并查看ES集群elasticsearch插件生成的索引

三、WEB日志实时分析

1、远程获取WEB日志(filebeat服务,ELK、EFK)

由于Logstash依赖JAVA环境,而且占用资源非常大,因此在每一台WEB服务器上部署Logstash非常不合适,为了实现让WEB服务器(或WEB集群)能够将日志数据远程发送给Logstash,可以使用更轻量的filebeat软件收集日志,通过网络给Logstash发送数据,而Logstash使用beats接收日志,完成数据分析;

Logstash接收日志(beats插件)

接收日志必须监听网络服务,Logstash可以通过beats插件接收filebeat发送过来的数据;

例如:

2、filebeat安装配置

  • - 软件包:filebeat
  • - 配置文件路径:/etc/filebeat/filebeat.yml
  • - 修改配置文件


示例:filebeat配置

1)Logstash配置beats插件(服务端)

2)WEB服务器安装filebeat(客户端)

3)启动服务并验证;

- 验证:grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml

- 启动服务: systemctl enable --now filebeat

步骤1:logstash beats插件(Logstash操作)

① 修改配置文件

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {file {path => ["/tmp/c.log"]type => "test"start_position => "beginning"sincedb_path => "/var/lib/logstash/sincedb"}beats {port => 5044    //指定监听端口}
}
filter{grok {match => { "message" => "%{HTTPD_COMBINEDLOG}" }}
}
output{stdout{ codec => "rubydebug" }elasticsearch {hosts => ["es-0004:9200", "es-0005:9200"]index => "weblog-%{+YYYY.MM.dd}"}
}

② 启动logstash,查看效果

[root@logstash ~]# /usr/share/logstash/bin/logstash

[root@logstash ~]# ss -nlptu | grep 5044
tcp    LISTEN     0      1024   [::]:5044               [::]:*                   users:(("java",pid=1372,fd=104))

步骤2:web服务安装filebeat(web操作)

① 安装filebeat软件

[root@web ~]# yum install -y filebeat
[root@web ~]# vim /etc/filebeat/filebeat.yml
24:  enabled: true   //打开收集模块
28:  - /var/log/httpd/access_log   //自定义读取日志路径,-为数组,表示可以写多个(支持通配符)
45:    fields:    //自定义标签
46:       my_type: apache    //区分日志的种类
148, 150 注释掉
161: output.logstash:    //设置输出模块
163:   hosts: ["192.168.1.47:5044"]   //指定Logstahsh地址(输出给Logstash)
180, 181, 182 注释掉

② 检查配置并启动服务

[root@web ~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml

[root@web ~]# systemctl enable --now filebeat

③ 访问WEB服务器验证,查看logstash是否新增数据

浏览器访问:http://121.37.211.232/

四、网站日志分析实战

1)目标:

- 实现web日志流量实时分析

- 通过kibana绘制图表展示web访问情况

2)实验步骤:

步骤1:

  • ① 在web服务器上安装filebeat,并把日志发送给Logstash
  • ② Logstash使用beats模块接收日志

步骤2:

  • ① Logstash—input配置beats收集日志
  • ② Logstash—filter对日志格式化
  • ③ Logstash—output写入日志到elasticsearch

步骤3:

  • ① kibana从elasticsearch读取日志图表展示

步骤1:Filebeat配置

① WEB服务器部署Filebeat(负责收集并远程数据给Logstash)

[root@web ~]# yum install -y filebeat    //安装软件
[root@web ~]# vim /etc/filebeat/filebeat.yml     //修改配置文件
24:  enabled: true
28:  - /var/log/httpd/access_log   //-为数组,表示可以写多个(支持通配符)
45:    fields:
46:       my_type: apache    //区分日志的种类
148, 150 注释掉
161: output.logstash:
163:   hosts: ["192.168.1.47:5044"]
180, 181, 182 注释掉[root@web ~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml   //检查配置文件[root@web ~]# systemctl enable --now filebeat
[root@logstash ~]# ss -nlptu | grep 5044
tcp    LISTEN     0      1024   [::]:5044       [::]:*        users:(("java",pid=1372,fd=104))

 

步骤2:Logstash配置

- Logstash input配置beats(负责接收Filebeat数据并进行数据分析)

- 通过自定义的fields标签,判断数据来源(采用正则表达式)

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {beats {port => 5044}
}filter{if [fields][my_type] == "apache"{      //判断标签为Apachegrok {match => { "message" => "%{HTTPD_COMBINEDLOG}" }}}
}output{stdout{ codec => "rubydebug" }if [fields][my_type] == "apache"{elasticsearch {hosts => ["es-0004:9200", "es-0005:9200"]index => "weblog-%{+YYYY.MM.dd}"}}
}[root@logstash ~]# /usr/share/logstash/bin/logstash

步骤3:清空 elasticsearch 中数据

① 删除所有ES集群上面的index索引(库),开始验证(保留kibana运行配置信息的索引)

方法1:HEAD网页-动作(删除)

方法2: curl -XDELETE http://es-0001:9200/*

② 清空所有数据后,测试访问浏览器http://121.37.211.232/

步骤4:配置Kibana(验证)

① 创建索引模式

# 选择timestamp

# 查看索引

# 新建可视化饼图

# 进行数据分片

# 使用另一个客户端,模拟测试访问

[root@ecs-proxy ~]# ab -c 200 -n 200 http://121.37.211.232/

 

小结:

本篇章节为【第五阶段】ARCHITECTURE-DAY2 的学习笔记,这篇笔记可以初步了解到 搭建Logstash完成ELK集群、实现Web日志实时分析。


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。


http://www.ppmy.cn/server/131155.html

相关文章

计算机毕业设计Python深度学习游戏推荐系统 Django PySpark游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设

主要功能如下: (1)用户管理模块:用户能够注册、登录及修改个人信息,查看热门游戏及攻略信息。 (2)数据采集与处理模块:主要通过Python编程,爬取Tap Tap社区中游戏热门榜…

Linux高阶——1013—正则表达式

1、正则表达式 一般使用正则表达式来查询数据 2、正则表达式的模糊查询 下面的形式更容易匹配 3、使用命令grep使用正则表达式 使用表达式时,先分析规则,再编写代码 4、正则表达式练习 (1)查询含有a字符的行 新建一个文件 &am…

【CSS】flex: 1; 的意思

在 Flexbox 布局中,flex: 1; 是一个简写属性,它表示弹性容器中的子元素如何分配可用空间。flex: 1 意味着该元素可以根据剩余的空间进行扩展,占据相应的比例。具体来说,flex: 1; 是 flex-grow、flex-shrink 和 flex-basis 这三个属…

【Unity】TextMeshPro 3.0.9无法显示emoji表情问题

需要下载TextMeshPro 3.2.x-pre.xxx版本,重新生成Sprite Asset文件解决 注意:若Package Manager没有搜到pre版本,那么可以去github下载到本地,再解压后,将文件夹移动到工程Packages文件夹下,然后打开Packa…

【进阶OpenCV】 (9)--摄像头操作--->答题卡识别改分项目

文章目录 项目:答题卡识别改分1. 图片预处理2. 描绘轮廓3. 轮廓近似4. 透视变换5. 阈值处理6. 找每一个圆圈轮廓7. 将每一个圆圈轮廓排序8. 找寻所填答案,比对正确答案8.1 思路8.2 图解8.3 代码体现 9. 计算正确率 总结 项目:答题卡识别改分 …

win软件 超强的本地视频 图片去水印 动态水印!

AI视频图片去水印 HitPaw Watermark Remover 电脑软件,内涵安装教程,以后看到有水印的视频不怕啦,用这个就行了,可以去除动态水印! 【下载】 https://pan.quark.cn/s/1ba6f088f0b2 【应用名称】:HitPaw Watermark R…

Java利用ChromeDriver插件网页截图(Wondows版+Linux版)

chromedriver是谷歌浏览器驱动,用来模拟谷歌运行操作的一个工具,此处主要讲解Java后端利用此插件进行网页截图,并且适配Linux部署。 环境准备 Wondows服务器或电脑 本机需安装Chrome谷歌浏览器,根据本机浏览器版本,下载对应的chr…

Kotlin基本语法

kotlin基本语法官网 1. 变量 ‘val’ 声明 仅被赋值一次的变量,初始化后不能重新赋值。 ‘var’ 声明 可以重新分配的变量,可以在初始化后更改其值。 Kotlin 支持类型推断,可以省略变量名后的类型。 val x: Int 5 var x: Int 5 val x 5变量只有在…