官网: https://www.elastic.co/guide/en/logstash/7.6/introduction.html
Logstash 是具有实时流水线功能的开源数据收集引擎。Logstash可以动态统一来自不同来源的数据,并将数据标准化到您选择的目标位置。清除所有数据并使其民主化,以用于各种高级下游分析和可视化用例。
官网:https://www.elastic.co/guide/en/logstash/7.6/pipeline.html
Logstash事件处理管道包括三个阶段:输入→过滤器→输出。输入会生成事件,过滤器会对其进行修改,输出会将它们发送到其他地方。输入和输出支持编解码器,使您可以在数据进入或退出管道时对其进行编码或解码,而不必使用单独的过滤器。
有关可用过滤器的更多信息,请参阅 过滤器插件。
有关可用输出的更多信息,请参见 输出插件。
有关可用编解码器的更多信息,请参见 编解码器插件。
Logstash file插件 sincedb文件内容解释:
跟踪监视文件中的当前位置,该插件通过将其记录在一个名为sincedb的单独文件中来跟踪每个文件中的当前位置。这样就可以停止并重新启动Logstash,并使它从中断处开始取走,而不会丢失Logstash停止时添加到文件中的行。
# 安装 openjdk,官方要求,安装 logstash 需要 Java8 或者 Java11 。 这里选用安装 11.
yum install -y java-11-openjdk.x86_64
# 安装 logstash
rpm -ivh logstash-7.6.1.rpm
# swappiness参数值可设置范围在0到100之间。
# 此参数值越低,就会让Linux系统尽量少用swap分区,多用内存;
# 参数值越高就是反过来,使内核更多的去使用swap空间。
cat /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/swappiness
cat /proc/sys/vm/swappiness
# 测试,插件使用。从标准输入读取事件,将事件打印到标准输出。
/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
# 将日志存入 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/
# 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
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
多行过滤可以把多行日志记录合并为一行事件
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
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
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
# 配置 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