ELK日志处理部署笔记-2.logstash实时处理

ling-2945 / 2024-03-15 / 原文

logstash概述

什么是logstash
-是一个数据采集、加工处理以及传输的工具
特点
-所有类型的数据集中处理
-不同模式和格式数据的正常化
-自定义日志格式的迅速扩展
-为自定义数据源轻松添加插件
为什么使用logstash
将日志转化为json使elasticasearch可读

下载

#logstash的配置文件需要在执行文件目录中,但是redhat下载可能会分散文件,所以需要手动将连接放到目录下
ln -s /etc/logstash /usr/share/logstash/config

#查看插件
/usr/share/logstash/bin/logstash-plugin list

#开始
/usr/share/logstash/bin/logstash

配置模块

配置文件位于
/etc/logstash/conf.d/【自定义】.conf 文件名自定义
设置

input { 
	file {
		path => ["/tmp/c.log"]
		start_position => "beginning"
		sincedb_path => "/var/lib/logstash/sincedb" 
	}
}

filter{ 
  grok {
    match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    remove_field => ["message"]
  }
}

output{ 
  stdout{ codec => "rubydebug" }
  elasticsearch {
    hosts => ["es-0002:9200","es-0003:9200"]
    index => "weblog-%{+YYYY.MM.dd}"
  }
}

input

  • file插件start_position这个参数指示Logstash从日志文件的开头开始读取数据。如果设置为 "beginning",无论Logstash之前是否处理过该文件,它都会从文件的第一行开始重新读取。
  • file插件sincedb是Logstash用来记录每个被监控日志文件的读取位置(即最后一次读到哪一行),如果你希望Logstash每次启动都从日志文件的开头读取,可以把这个路径设为 /dev/null,这样Logstash就会忽略之前保存的读取位置信息。
    filter
  • grok插件的宏定义,可以正则匹配http的日志格式,还有其他宏文件位于/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns/
  • elasticsearch插件,hosts => 指定监听的elasticasearch服务器, index =>以天为单位生成索引

结果

附注
遇到一次目录文件无法被写入的情况,发现问题在于logstash目录权限,如果不属于logstash需要手动改变目录权限

chown -R logstash: /var/log/logstash /var/lib/logstash

systemctl restart logstash.service

web日志实时分析

我们需要将网站服务器的日志实时的被logstash读取
为什么是filebeat?
如果使用nfs共享日志目录到logstash,对nfsIO消耗巨大
如果直接将logstash装到网站服务器,将消耗网站服务器资源
所以使用网站服务器上安装filebeat的方法传送日志内容

什么是filebeat?
-filebeat 是使用 Golang 实现的轻量型日志采集器,也是
Elasticsearch stack 里面的一员。
-filebeat 占用资源非常小,可以忽略不计
-filebeat 本质上是一个agent,可以安装在应用服务器各
个节点上,根据配置读取对应位置的日志文件,并通过网络
上报到相应的服务中

beats 插件概述
-beats 是 logstash input 模块的插件
-配合filebeat,专门用来接收 filebeat 发送过来的日志
-默认监听在 5044 端口上
-可以同时接收多台不同主机发送过来的日志信息

配置filebeat

dnf install -y filebeat

systemctl enable filebeat

vim /etc/filebeat/filebeat.yml
 filebeat.inputs:
 - type: filestream
   id: my-filestream-id # 如果同时配置多个收集器,id不能重复
   enabled: true # 打开收集模块
   paths:
     - /var/log/httpd/access_log # 日志文件路径
...略
# 注释掉 Elasticsearch 配置
# 注释掉 Elasticsearch 配置
...略
output.logstash: # 设置输出模块
   hosts: ["192.168.1.27:5044"] # 输出给logstash
...略
# 设置识别标签
  fields:
    logtype: apache_log
...略
# 清理冗余数据
: processors:
   - drop_fields:
       fields: 
         - log
         - offset
         - agent
         - ecs
# 后面内容是发送本机信息的,如不需要可注释掉
rm -f /var/log/httpd/*

systemctl restart filebeat httpd

# 测试验证: 访问页面,观察 logstash 是否能够获取数据
curl http://192.168.1.11/info.php

在logstash上配置

刚才的配置文件只需要改变input即可

input { 
  beats {
    port => 5044
  }
}
/usr/share/logstash/bin/logstash #开始调试