ELK 日志分析平台 —— Logstash

ELK 日志分析平台 —— Logstash


Logstash 简介

官网: https://www.elastic.co/guide/en/logstash/7.6/introduction.html
安装包下载地址: https://www.elastic.co/downloads/past-releases/logstash-7-6-2

Logstash 是具有实时流水线功能的开源数据收集引擎。Logstash可以动态统一来自不同来源的数据,并将数据标准化到您选择的目标位置。清除所有数据并使其民主化,以用于各种高级下游分析和可视化用例。

  • Logstash和Beats有助于收集,聚合和丰富您的数据并将其存储在Elasticsearch中。
  • Logstash是一个开源的服务器端数据处理管道。
  • logstash拥有200多个插件,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(大多都是 Elasticsearch。)
  • Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器。

Logstash的工作原理

官网:https://www.elastic.co/guide/en/logstash/7.6/pipeline.html

Logstash事件处理管道包括三个阶段:输入→过滤器→输出。输入会生成事件,过滤器会对其进行修改,输出会将它们发送到其他地方。输入和输出支持编解码器,使您可以在数据进入或退出管道时对其进行编码或解码,而不必使用单独的过滤器。

  • 输入项
    您可以使用输入将数据获取到Logstash。一些更常用的输入是:
    • file:从文件系统上的文件读取,就像UNIX命令一样 tail -0F
    • syslog:在众所周知的端口514上侦听syslog消息,并根据RFC3164格式进行解析
    • redis:使用redis通道和redis列表从redis服务器读取。Redis经常在集中式Logstash安装中用作“代理”,该安装会将来自远程Logstash“托运人”的Logstash事件排队。
    • beats:进程的事件发送的 beats。

  • 筛选器
    筛选器是Logstash管道中的中间处理设备。如果事件符合特定条件,则可以将过滤器与条件语句结合使用以对事件执行操作。一些有用的过滤器包括:
    • grok:解析和构造任意文本。当前,Grok是Logstash中将非结构化日志数据解析为结构化和可查询内容的最佳方法。Logstash内置120种模式,很可能会找到满足您需求的模式!
    • mutate:对事件字段执行常规转换。您可以重命名,删除,替换和修改事件中的字段。
    • drop:完全删除事件,例如调试事件。
    • clone:复制事件,可能会添加或删除字段。
    • geoip:添加有关IP地址地理位置的信息(还在Kibana中显示惊人的图表!)

有关可用过滤器的更多信息,请参阅 过滤器插件


  • 输出
    输出是Logstash管道的最后阶段。一个事件可以通过多个输出,但是一旦完成所有输出处理,该事件就完成了执行。一些常用的输出包括:
    • elasticsearch:将事件数据发送到Elasticsearch。如果您打算以一种高效,便捷且易于查询的格式保存数据,那么Elasticsearch是您的最佳选择。时期。是的,我们有偏见:)
    • file:将事件数据写入磁盘上的文件。
    • graphite:将事件数据发送到graphite,graphite是一种流行的开源工具,用于存储和绘制指标图形。http://graphite.readthedocs.io/en/latest/
    • statsd:将事件数据发送到statsd,该服务“通过UDP侦听统计信息(如计数器和计时器),并将聚合发送到一个或多个可插拔后端服务”。如果您已经在使用statsd,这可能对您有用!

有关可用输出的更多信息,请参见 输出插件


  • 编解码器
    编解码器基本上是流过滤器,可以作为输入或输出的一部分进行操作。编解码器使您可以轻松地将消息的传输与序列化过程分开。流行的编解码器包括json,msgpack和plain (文本)。
    • json:以JSON格式编码或解码数据。
    • multiline:将多行文本事件(例如java异常和stacktrace消息)合并到单个事件中。

有关可用编解码器的更多信息,请参见 编解码器插件


[注]:Logstash file插件 sincedb文件

Logstash file插件 sincedb文件内容解释:
跟踪监视文件中的当前位置,该插件通过将其记录在一个名为sincedb的单独文件中来跟踪每个文件中的当前位置。这样就可以停止并重新启动Logstash,并使它从中断处开始取走,而不会丢失Logstash停止时添加到文件中的行。

  • inode编号
  • 文件系统的主要设备号
  • 文件系统的次要设备号
  • 文件中的当前字节偏移量
  • 最后一个活动时间戳(浮点数)
  • 与此记录匹配的最后一个已知路径

实验


Logstash 安装

# 安装 openjdk,官方要求,安装 logstash 需要 Java8 或者 Java11 。 这里选用安装 11.
yum install -y java-11-openjdk.x86_64
# 安装 logstash
rpm -ivh logstash-7.6.1.rpm

Logstash 插件使用


1、修改 swappiness 参数
# swappiness参数值可设置范围在0到100之间。 
# 此参数值越低,就会让Linux系统尽量少用swap分区,多用内存;
# 参数值越高就是反过来,使内核更多的去使用swap空间。
cat /proc/sys/vm/swappiness 
echo 10 > /proc/sys/vm/swappiness 
cat /proc/sys/vm/swappiness

2、Logstash file 插件使用

# 测试,插件使用。从标准输入读取事件,将事件打印到标准输出。
/usr/share/logstash/bin/logstash -e 'input { stdin {}} output { stdout {} }'

# 以文件形式输出
# path => "/tmp/demo"   : 输出路劲。
# codec => line { format => "custom format: %{message}"}    : 自定义输出格式。

vim /etc/logstash/conf.d/demo.conf
input {
  stdin {}
}
output {
 file {
   path => "/tmp/demo"
   codec => line { format => "custom format: %{message}"}
 }
}

# 指定文件使用插件
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/demo.conf 

3、将数据存入 ES
# 将日志存入 elasticsearch
# path => "/var/log/messages"   :用作输入的文件的路径。路径必须是绝对路径,不能是相对路径。
# start_position => "beginning"   :选择Logstash最初从开头开始读取文件。
# hosts => ["172.25.9.1:9200"]    :设置远程存储的主机。如果给定一个数组,它将在hosts参数中指定的主机之间负载均衡请求。
# index => "syslog-%{+yyyy.MM.dd}"		: 写入事件的格式。

vim /etc/logstash/conf.d/demo.conf
input {
        file {
                path => "/var/log/messages"
                start_position => "beginning"
        }
}

output {

        stdout {}
        elasticsearch {
                hosts => ["172.25.9.1:9200"]
                index => "syslog-%{+yyyy.MM.dd}"
        }
}


# web 界面访问head。
http://172.25.9.1:9100/

4、Logstash file插件 sincedb文件
# Logstash file插件 sincedb文件
cd /usr/share/logstash/data/plugins/inputs/file/
# 查看 sincedb 文件
l.
ll .sincedb_452905a167cf4509fd08acb964fdb20c 
cat .sincedb_452905a167cf4509fd08acb964fdb20c
#  显示文件索引节点号(inode)。一个索引节点代表一个文件。
ls -i /var/log/messages 

5、Syslog 输入插件

logstash 可以伪装成日志服务器,直接接受远程日志。

vim /etc/logstash/conf.d/demo.conf 
input {
	#file {
	#	path => "/var/log/messages"
	#	start_position => "beginning"
	#}
	syslog {
		port => 514
	}
}

output {

	stdout {}
	#file {
   	#	path => "/tmp/demo"
   	#	codec => line { format => "custom format: %{message}"}
 	#}

	elasticsearch {
		hosts => ["172.25.9.1:9200"]
		index => "rsyslog-%{+yyyy.MM.dd}"
	}
}

# 配置远程 rsyslog 服务
# server2、3:
vim /etc/rsyslog.conf 
……
 15 $ModLoad imudp
 16 $UDPServerRun 514
……
90 *.* @@172.25.9.1:514
……

systemctl restart rsyslog

# server1:
# 指定文件使用插件
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/demo.conf

6、多行过滤插件

多行过滤可以把多行日志记录合并为一行事件

cd /etc/logstash/conf.d/
vim test.conf
# pattern => "^EOF"  : 多行结束的标志或者开始的标志。
# negate => true : 是否对pattern的结果取反,该行表示没有遇到 EOF 开头的行都是前一行
# what => previous : previous 向上匹配,next 向下匹配。
# 官网 :https://www.elastic.co/guide/en/logstash/7.6/multiline.html
input {
	stdin {
	codec => multiline {
		pattern => "^EOF"
		negate => true
		what => previous
		}
	}
}

output {
	stdout {}
}

# 指定文件使用插件
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 

7、采集 ES 日志,并存储到 ES
cd /etc/logstash/conf.d/
vim es.conf
# start_position => "beginning"   : 选择Logstash 最初从哪个位置读取信息,beginning 从总是开始位置读取,end 从结尾读取。将文件作为实时流,所以这里的结尾指的是上一次读取到的结尾。
# codec => multiline:编码方式为多行编码器,多行编解码器将折叠多行消息并将其合并为一个事件。
input {
	file {
		path => "/var/log/elasticsearch/my-es.log"
		start_position => "beginning"
		codec => multiline {
		pattern => "^\["
		negate => true
		what => previous
		}

	}
}

output {

	stdout {}

	elasticsearch {
		hosts => ["172.25.9.1:9200"]
		index => "eslog-%{+yyyy.MM.dd}"
	}
}


# 指定文件使用插件
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf 

8、grok过滤插件
cd /etc/logstash/conf.d/
vim test1.conf
# 官网:https://www.elastic.co/guide/en/logstash/7.6/plugins-filters-grok.html
#  grok :grok模式的语法是 %{SYNTAX:SEMANTIC},SYNTAX 是与文本匹配的模式的名称,类似日志中的数据类型。SEMANTIC 是为匹配的文本段指定的标识符,类似数据的标题。
# match  :  一个散列,它定义了查找位置以及使用哪些模式的映射。
input {
	stdin {}
}
filter {
	grok {
	match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
	}
}
output {
	stdout {}
}

# 指定文件使用插件
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test1.conf

9、apache 服务日志过滤实战
# 配置 httpd 服务
yum install -y httpd
systemctl start httpd 
# 默认发布页
echo server1 > /var/www/html/index.html
# Logstash 采集用户对该目录有相应的权限
ll -d /var/log/httpd/
chmod 755 /var/log/httpd/

# 编写配置文件
cd /etc/logstash/conf.d/
vim apache.conf
# match => { "message" => "%{HTTPD_COMBINEDLOG}" } 
input {
	file {
		path => "/var/log/httpd/access_log"
		start_position => "beginning"
	}
}

filter {
	grok {
		match => { "message" => "%{HTTPD_COMBINEDLOG}" }
	}
}

output {

	stdout {}

	elasticsearch {
		hosts => ["172.25.9.1:9200"]
		index => "apachelog-%{+yyyy.MM.dd}"
	}
}

# 指定文件使用插件
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/apache.conf

实验截图


安装 Logstash

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

Logstash 插件使用


1、修改 swappiness 参数

在这里插入图片描述


2、命令行使用插件

在这里插入图片描述在这里插入图片描述


3、file 插件的使用

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述


4、多行过滤

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述


5、采集ES 日志

在这里插入图片描述在这里插入图片描述在这里插入图片描述


6、grok过滤插件

在这里插入图片描述在这里插入图片描述在这里插入图片描述


7、apache服务日志过滤

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述


8、Logstash file插件 sincedb文件

在这里插入图片描述在这里插入图片描述


9、Syslog 输入插件

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值