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

打印 上一主题 下一主题

主题 859|帖子 859|积分 2577

主要内容:

搭建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。
  1. input {
  2.   # 输入插件配置
  3. }
  4. filter {
  5.   # 过滤器插件配置
  6. }
  7. output {
  8.   # 输出插件配置
  9. }
复制代码
简朴的 Logstash 设置示例:
   从文件中读取日记数据,解析日记,并将解析后的数据发送到 Elasticsearch
  1. input {
  2.   file {
  3.     path => "/var/log/myapp.log"
  4.     start_position => "beginning"
  5.     sincedb_path => "/dev/null"
  6.   }
  7. }
  8. filter {
  9.   grok {
  10.     match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
  11.   }
  12.   date {
  13.     match => [ "timestamp", "ISO8601" ]
  14.     target => "@timestamp"
  15.   }
  16. }
  17. output {
  18.   elasticsearch {
  19.     hosts => ["http://localhost:9200"]
  20.     index => "myapp-logs-%{+YYYY.MM.dd}"
  21.   }
  22.   stdout { codec => rubydebug }
  23. }
复制代码
 
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

② 设置主机名解析
  1. [root@logstash ~]# vim /etc/hosts
  2. 192.168.1.41   es-0001
  3. 192.168.1.42   es-0002
  4. 192.168.1.43   es-0003
  5. 192.168.1.44   es-0004
  6. 192.168.1.45   es-0005
  7. 192.168.1.47   logstash
复制代码
③ 安装JAVA环境,及Logstash软件包
  1. [root@logstash ~]# yum install -y java-1.8.0-openjdk logstash
复制代码
④ 将设置文件/etc/logstash/作为源路径,软链接方式到/usr/share/logstash/config
  1. [root@logstash ~]# ls /etc/logstash/
复制代码

  1. [root@logstash ~]# ln -s /etc/logstash/ /usr/share/logstash/config
  2. [root@logstash ~]# ls /usr/share/logstash/
复制代码

  1. [root@logstash ~]# ls /usr/share/logstash/config/
复制代码

⑤ 修改设置文件(手动设置)
  1. [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
  2. input {        //日志数据输入区域
  3.   stdin{}      //stdin标准输入插件
  4. }
  5. filter{ }       //数据过滤规则处理区域
  6. output{         //日志数据输出区域
  7.   stdout{}      //stdin标准输出插件
  8. }
复制代码
⑥ 启动Logstash验证,测试效果
  1. [root@logstash ~]# /usr/share/logstash/bin/logstash
复制代码

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

上面的设置文件使用了 Logstash-input-stdin 和 Logstash-output-stdout 两个插件,Logstash对数据的处置惩罚依赖插件;


  • - 管理下令: /usr/share/logstash/bin/logstash-plugin
① 安装插件install
② 删除插件uninstall
③ 查看插件list
例如:
  1. [root@logstash ~]# ls /usr/share/logstash/bin/
复制代码

  1. [root@logstash ~]# /usr/share/logstash/bin/logstash-plugin    //执行管理命令
复制代码

  1. [root@logstash ~]# /usr/share/logstash/bin/logstash-plugin list   //查看插件
  2. logstash-codec-json      //logstash-codec-xxx编码格式插件
  3. logstash-filter-dns      //logstash-filter-xxx只能用于filter段的插件
  4. logstash-input-stdin     //logstash-input-xxx只能用于input段的插件
  5. logstash-output-stdout   //logstash-output-xxx只能用于output段的插件
复制代码
  插件名用【-】分隔,logstash表示为Logstash的插件,插件使用地区,插件名;其中codec字符编码可以适用于所有地区。
  
步调2:插件与调试格式
① 编写设置文件,使用json格式字符串测试: {"a":"1", "b":"2", "c":"3"}
  1. [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
  2. input {
  3.   stdin{ codec => "json" }      //标准输入,采用json编码格式输入
  4. }
  5.  
  6. filter{ }
  7.  
  8. output{
  9.   stdout{ codec => "rubydebug" }   //标准输出,采用rubydebug编码格式,可展现完整的数据格式(便于调试)
  10. }
复制代码
② 启动Logstash验证,测试效果
  1. [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;

# 修改设置文件①
  1. [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
  2. input {
  3.   stdin{ codec => "json" }
  4.   file{         //使用file模块
  5.     path => ["/tmp/a.log","/tmp/b.log"]     //从本地文件中获取数据
  6.   }
  7. }
  8. filter{ }
  9. output{
  10.   stdout{ codec => "rubydebug" }
  11. }
  12. [root@logstash ~]# /usr/share/logstash/bin/logstash   //启用Logstash
复制代码
# 打开另一个终端测试
  1. [root@logstash ~]# cd /tmp/
  2. [root@logstash tmp]# echo "TEST_${RANDOM}" >> a.log
  3. [root@logstash tmp]# echo "TEST_${RANDOM}" >> b.log
复制代码
# 启动Logstash验证,测试效果

# 修改设置文件②
  1. [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
  2. input {
  3.   stdin{ codec => "json" }
  4.   file{
  5.     path => ["/tmp/a.log"]
  6.     type => "is apache"    //字符串标签,用来区分不同数据种类的手段
  7.   }
  8.   file{
  9.     path => ["/tmp/b.log"]
  10.     type => "is nginx"
  11.   }
  12. }
  13. filter{ }
  14. output{
  15.   stdout{ codec => "rubydebug" }
  16. }     
  17.     
  18. [root@logstash ~]# /usr/share/logstash/bin/logstash   //启用Logstash
复制代码
# 打开另一个终端测试
  1. [root@logstash tmp]# echo "TEST_${RANDOM}" >> a.log
  2. [root@logstash tmp]# echo "TEST_${RANDOM}" >> b.log
复制代码
# 启动Logstash验证,测试效果

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

 

示例:input file插件

① 修改设置文件
  1. [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
  2. input {
  3.   file {
  4.     path => ["/tmp/c.log"]       //要监控的文件路径
  5.     type => "test"        //字符串标签,用来区分不同数据种类的手段
  6.     start_position => "beginning"   //第一次读取文件位置[beginning|end]
  7.     sincedb_path => "/var/lib/logstash/sincedb"   //记录读取文件的位置
  8.   }
  9. }
  10. filter{ }
  11. output{
  12.   stdout{ codec => "rubydebug" }
  13. }
复制代码
  补充:beginning从开头读取文件
  ② 删除默认书签文件
  1. [root@logstash ~]# rm -rf /var/lib/logstash/plugins/inputs/file/.sincedb_*
复制代码
③ 启动Logstash验证,测试效果
  1. [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功能

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



示例:filter grok插件

  1. [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
  2. [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
  3. input {
  4.   file {
  5.     path => ["/tmp/c.log"]       //要监控的文件路径
  6.     type => "test"              //字符串标签
  7.     start_position => "beginning"    //第一次读取文件位置[beginning|end]
  8.     sincedb_path => "/dev/null"     //记录读取文件的位置(devnull),可反复读取测试
  9.   }
  10. }
  11. filter{
  12.   grok {   
  13.     match => { "message" => "%{HTTPD_COMBINEDLOG}" }  //使用宏解析Apahce默认日志格式
  14.   }
  15. }
  16. output{
  17.   stdout{ codec => "rubydebug" }
  18. }
复制代码
# 启动Logstash,查看效果
  1. [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插件

① 修改设置文件
  1. [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
  2. input {
  3.   file {
  4.     path => ["/tmp/c.log"]
  5.     type => "test"
  6.     start_position => "beginning"
  7.     sincedb_path => "/dev/null"
  8.   }
  9. }
  10. filter{
  11.   grok {
  12.     match => { "message" => "%{HTTPD_COMBINEDLOG}" }
  13.   }
  14. }
  15. output{
  16.   stdout{ codec => "rubydebug" }
  17.   elasticsearch {
  18.     hosts => ["es-0004:9200", "es-0005:9200"]    //指定ES集群节点地址
  19.     index => "weblog-%{+YYYY.MM.dd}"     //按日期生成索引(宏)
  20.   }
  21. }
复制代码
② 启动Logstash,查看效果
  1. [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操作)
① 修改设置文件
  1. [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
  2. input {
  3.   file {
  4.     path => ["/tmp/c.log"]
  5.     type => "test"
  6.     start_position => "beginning"
  7.     sincedb_path => "/var/lib/logstash/sincedb"
  8.   }
  9.   beats {
  10.     port => 5044    //指定监听端口
  11.   }
  12. }
  13. filter{
  14.   grok {
  15.     match => { "message" => "%{HTTPD_COMBINEDLOG}" }
  16.   }
  17. }
  18. output{
  19.   stdout{ codec => "rubydebug" }
  20.   elasticsearch {
  21.     hosts => ["es-0004:9200", "es-0005:9200"]
  22.     index => "weblog-%{+YYYY.MM.dd}"
  23.   }
  24. }
复制代码
② 启动logstash,查看效果
  1. [root@logstash ~]# /usr/share/logstash/bin/logstash
复制代码

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

步调2:web服务安装filebeat(web操作)
① 安装filebeat软件
  1. [root@web ~]# yum install -y filebeat
  2. [root@web ~]# vim /etc/filebeat/filebeat.yml
  3. 24:  enabled: true   //打开收集模块
  4. 28:  - /var/log/httpd/access_log   //自定义读取日志路径,-为数组,表示可以写多个(支持通配符)
  5. 45:    fields:    //自定义标签
  6. 46:       my_type: apache    //区分日志的种类
  7. 148, 150 注释掉
  8. 161: output.logstash:    //设置输出模块
  9. 163:   hosts: ["192.168.1.47:5044"]   //指定Logstahsh地址(输出给Logstash)
  10. 180, 181, 182 注释掉
复制代码
② 查抄设置并启动服务
  1. [root@web ~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml
复制代码

  1. [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)
  1. [root@web ~]# yum install -y filebeat    //安装软件
  2. [root@web ~]# vim /etc/filebeat/filebeat.yml     //修改配置文件
  3. 24:  enabled: true
  4. 28:  - /var/log/httpd/access_log   //-为数组,表示可以写多个(支持通配符)
  5. 45:    fields:
  6. 46:       my_type: apache    //区分日志的种类
  7. 148, 150 注释掉
  8. 161: output.logstash:
  9. 163:   hosts: ["192.168.1.47:5044"]
  10. 180, 181, 182 注释掉
  11. [root@web ~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml   //检查配置文件
  12. [root@web ~]# systemctl enable --now filebeat
  13. [root@logstash ~]# ss -nlptu | grep 5044
  14. tcp    LISTEN     0      1024   [::]:5044       [::]:*        users:(("java",pid=1372,fd=104))
复制代码
 
步调2:Logstash设置
- Logstash input设置beats(负责接收Filebeat数据并进行数据分析)
- 通过自定义的fields标签,判断数据来源(采用正则表达式)
  1. [root@logstash ~]# vim /etc/logstash/conf.d/my.conf
  2. input {
  3.   beats {
  4.     port => 5044
  5.   }
  6. }
  7. filter{
  8.   if [fields][my_type] == "apache"{      //判断标签为Apache
  9.   grok {
  10.     match => { "message" => "%{HTTPD_COMBINEDLOG}" }
  11.   }}
  12. }
  13. output{
  14.   stdout{ codec => "rubydebug" }
  15.   if [fields][my_type] == "apache"{
  16.   elasticsearch {
  17.     hosts => ["es-0004:9200", "es-0005:9200"]
  18.     index => "weblog-%{+YYYY.MM.dd}"
  19.   }}
  20. }
  21. [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:毕竟两个人的聪明大于一个人的聪明,假如你不理解本章节的内容或需要相关条记、视频,可私信小安,请不关键羞和回避,可以向他人讨教,花点时间直到你真正的理解。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表