#yyds干货盘点#–ELK-logstash

简单来说logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加elasticsearch使用场景上滤网,Logstash提供里很多功能强恶露快干净了又有鲜血大的滤网以满足你的各种应用场景。

从网上找到的一个图,这个很明显的介绍了logstash的input,output,fillterlogstash中常用的过滤插件不包括s的用户配置文件详细功能,也可以看到对于logstash来说linux必学的60个命令,input和output是必须的,fillter是可选的。针对于fillters的匹配规则以及表达式,自行查阅官方即可不多赘述了。


                                            #yyds干货盘点#--ELK-logstash

Logstash 配置

nginx配置先确保 ELK 所需服务都已正常开启:

  • sudo service redis-server start
  • # 启动 Elasticsearch
  • cd elasticsearch-7.4.1/bin
  • ./elasticsearch -d
  • # 启动 Kiblinux创建文件ana
  • cd kibana-7.4.1-linux-x86_64/bin
  • nohup ./kibana 2>&1 &

进入到elasticsearch原理此目录,执行下面一条命令:

  • $ cd logstash-7.4.1/bin
  • # 测试
  • $ ./logstash -e ‘input { stdin { } } output { stdout {codec=>logstash中常用的过滤插件不包括;json} }’
  • hello robot

执行过程可能比linux较慢,需要耐心等待一会儿:


                                            #yyds干货盘点#--ELK-logstash

可以看到,elasticsearch怎么读在终端二类卡不能被冻结输入内容后,会输出一条 json 格式规范的内容,这就是经过 Logstash 处理后的输出格式。结束进程。

我们只是简单输入了​​hello robot​​,但是经过 Logstash 的处理,默认添加几个字段,比如版本信息,时间信息,主机名等。

为了看的更清楚,以下展示了格式化后的命令:

input {
stdin {}
}
output {
stdout {
codec => json
}
}

参数讲解:

  • input:定义 Logstash 输入行为
  • output:定义 Logstash 输出行为
  • stdin {}:标准输入
  • stdou配置文件是什么意思t {}:标准输出
  • codec:指定输出的数据格式,这里指定为 json,常用的还有 rubydebug,multiline

执行配置文件在哪的命令中,-e参数表示 Logstash 直接从命令行读取配置信息。系统运维包括哪些内容通过这种方式可以简单快速测试配二类卡不能被冻结置内容是否正确而不用编辑配置文件。

在 input 中,我们定义了一个标准二类卡可以当工资卡吗输入,由于什么都没有,所以 Logstash 会nginx负载均衡从终端的标准输入中读取字符串,这也是为什么刚才在输入完命令后会出现等待输入的情况。

在 output 中linux操作系统基础知识,我们定义了一个标准输出,也就是说 Logstash 在处理完后会将结果从标准输出(终端)中输出,而 codlinux操作系统基础知识ec 字段,则说明了输出会遵循什么样的格式,这里定义的 codec 为 json,所以我们刚才看到了 json 格式的输出格式。下一步

L配置文件在哪ogstash 配置文件

我们先修改 N二类卡怎么升级为一类卡ginx 的配置文件,指定日志存放logstash主要由三部分组成的路径。

sudo vim /etc/nginx/conf.d/default.conf
# 在其中指定路径:access_log /home/robot/Code/elk/access.log;


                                            #yyds干货盘点#--ELK-logstash

这里指定的是 Nginx 的访问日志存放路径。这个路径此时并不存在,所以需要提前创建相应的目录和文件,否则 Nginx 不能正常启动。

cd /home/robot/Code && mkdir elk && cd elk && touch
access.log

启动 Nginx web 服务器:

sudo service nginx stop
sudo service nginx start

在浏览器通过地址 localhost 访问 nginx 页面:


                                            #yyds干货盘点#--ELK-logstash

然后在正式项目中,Logstash 的配置内容较多,Elasticsearch在命令行配置很麻烦,通常需要创建配置文件。

进入​​/home/robot/logstash7.4.1​​:

cd /home/robot/logstash-7.4.1
mkdir conf.d && cd conf.d
vim logstash-shipper.conf

logstash加以下内容:

input {
stdin {}
file {
path => "/home/robot/Code/elk/access.log"
start_position => beginning
codec => multiline {
negate => true
pattern => '^\d'
what => 'previous'
}
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}

可以配置两种数据输入方式:标准输入,文件读取(Nginx 日志文件系统运维包括哪些内容)。 我们这里指定了文件路径,读取开始位置,读取的格式,配置为从 nginx 日志nginx是干嘛用的文件中读取的输入饿了可以吃饭吗方式。Logstash 采用​​tail -f filename​​的方式动态读取日志记录,读取内容时用到了一配置文件中没有undefined的js对象个 mutiline 的插件,配置文件中没有undefined的js对象这个插件的作用是将多行日志记录合并为一个日志事件。

mutiline 插件的一般配置格nginx负载均衡式:

multiline {
pattern => "pattern, a regexp"
negate => "true" or "false"
what => "previous" or "next"
}

  • ​pattern​​:指定正则表达式,输入的内容匹配这elasticsearch教程个表达式,用于确定输入的内容是属于前一个事件的内容还是新的事件的内容。
  • ​negate​​:正则表达式nginx是什么意思的否定形式。若为 true,表示不匹配指定的 pattern。
  • ​what​​:如果符合匹elasticsearch使用场景配的正则表达式,则应该将一行内容合并到前一行还是后一行。

首先根据 nginx 日志信息来确定需要配置elk日志分析系统的正则表达式:

$ cat /home/robot/Code/elk/access.log
127.0.0.1 - - [01/Nov/2019:17:11:06 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"
127.0.0.1 - - [01/Nov/2019:17:11:19 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"
127.0.0.1 - - [01/Nov/2019:17:11:20 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"
127.0.0.1 - - [01/Nov/2019:17:11:20 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"

通过观察,我们可以发现符合的正则表达式为​​^[0-9a-zA-Z.:]+ - -​​,可以使用下面语句测试:

cat /home/robot/Code/elk/access.log|grep -E '^[0-9a-zA-Z.:]+ - -'


                                            #yyds干货盘点#--ELK-logstash

可以看到确实是能够匹配的。

所以我们配置的多行处理方式为:

multiline {
negate => true
pattern => '^[0-9a-zA-Z.:]+ - -'
what => 'previous'
}

配置解释:匹配正则表达式的就是一条新的日志记录,不匹配的就属于上一条日志的内容。

配置文件中,也定义了两种输出方式:标准输出和输出到 Elasticsearch。如果要将数据输出到 Elasticlinuxsearch,需要配配置文件损坏怎么办置 Elasticsearch 的主机名和端口号。同时,为每条日志都增加了一条自定义的索引。

最终完整的​​logstash-shipper.con配置文件中没有undefined的js对象f​​文系统运维工资一般多少件内容如下所示:

input {
stdin {}
file {
path => "/home/robot/Code/elk/access.log"
start_position => "beginning"
codec => multiline {
negate => true
pattern => '^[0-9a-zA-Z.:]+--'
what => 'previous'
}
}
}

output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}

执行命令检测配置文件是否正确:

cd logstash-7.4.1
bin/logstash -f conf.d/logstash-shipper.conf --config.test_and_exit

–config.test_and_exit 选项表示检测配置文件并报告错误(只是检测,不会真正执行)

需要等待一会儿执行完成:


                                            #yyds干货盘点#--ELK-logstash

配置没问题后,还是上面那条命令,去掉​​--config.test_and_exit​​选项,再次执行:

cd logstash-7.4.1
bin/logstash -f conf.d/logstash-shipper.conf
等待一会儿执行完成:


                                            #yyds干货盘点#--ELK-logstash

此时 Logstashnginx负载均衡 运行在前台,如果使用快捷键​​ctrl+c​​就会结束当前进程,Logstash 就不会向 Elasticsearch 发送数据。

本节主要内容就是对 Logstash 的了解,理解它的工作流程和组件关系。Logstash 处理数据的三个流程:系统运维工作内容输入,过滤二类卡,输出。将无结构的数据解析并结构化为规范的系统运维工作内容数据,并发送到 Elasticsearch,用作后续分析。