原文地址:https://cloud.tencent.com/developer/article/1353068
css
Elasticsearch是当前主流的分布式大数据存储和搜索引擎,能够为用户提供强大的全文本检索能力,普遍应用于日志检索,全站搜索等领域。Logstash做为Elasicsearch经常使用的实时数据采集引擎,能够采集来自不一样数据源的数据,并对数据进行处理后输出到多种输出源,是Elastic Stack 的重要组成部分。本文从Logstash的工做原理,使用示例,部署方式及性能调优等方面入手,为你们提供一个快速入门Logstash的方式。文章最后也给出了一些深刻了解Logstash的的连接,以方便你们根据须要详细了解。html
如上图,Logstash的数据处理过程主要包括:Inputs, Filters, Outputs 三部分, 另外在Inputs和Outputs中可使用Codecs对数据格式进行处理。这四个部分均以插件形式存在,用户经过定义pipeline配置文件,设置须要使用的input,filter,output, codec插件,以实现特定的数据采集,数据处理,数据输出等功能 linux
能够点击每一个模块后面的详细参考连接了解该模块的插件列表及对应功能 ios
第一个示例Logstash将采用标准输入和标准输出做为input和output,而且不指定filtergit
cd logstash-6.4.0
bin/logstash -e 'input { stdin { } } output { stdout {} }'
{
"@version" => "1",
"host" => "localhost",
"@timestamp" => 2018-09-18T12:39:38.514Z,
"message" => "hello world"
}
Logstash会自动为数据添加@version, host, @timestamp等字段redis
在这个示例中Logstash从标准输入中得到数据,仅在数据中添加一些简单字段后将其输出到标准输出。docker
这个示例将采用Filebeat input插件(Elastic Stack中的轻量级数据采集程序)采集本地日志,而后将结果输出到标准输出json
filebeat.yml配置以下(paths改成日志实际位置,不一样版本beats配置可能略有变化,请根据状况调整)centos
filebeat.prospectors:
- input_type: log
paths:
- /path/to/file/logstash-tutorial.log
output.logstash:
hosts: "localhost:5044"
启动命令: 安全
./filebeat -e -c filebeat.yml -d "publish"
1)建立first-pipeline.conf文件内容以下(该文件为pipeline配置文件,用于指定input,filter, output等):
input {
beats {
port => "5044"
}
}
#filter {
#}
output {
stdout { codec => rubydebug }
}
codec => rubydebug用于美化输出[参考]
2)验证配置(注意指定配置文件的路径):
./bin/logstash -f first-pipeline.conf --config.test_and_exit
3)启动命令:
./bin/logstash -f first-pipeline.conf --config.reload.automatic
--config.reload.automatic选项启用动态重载配置功能
4)预期结果:
能够在Logstash的终端显示中看到,日志文件被读取并处理为以下格式的多条数据
{
"@timestamp" => 2018-10-09T12:22:39.742Z,
"offset" => 24464,
"@version" => "1",
"input_type" => "log",
"beat" => {
"name" => "VM_136_9_centos",
"hostname" => "VM_136_9_centos",
"version" => "5.6.10"
},
"host" => "VM_136_9_centos",
"source" => "/data/home/michelmu/workspace/logstash-tutorial.log",
"message" => "86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /style2.css HTTP/1.1" 200 4877 "http://www.semicomplete.com/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"",
"type" => "log",
"tags" => [
[0] "beats_input_codec_plain_applied"
]
}
相对于示例2.1,该示例使用了filebeat input插件从日志中获取一行记录,这也是Elastic stack获取日志数据最多见的一种方式。另外该示例还采用了rubydebug codec 对输出的数据进行显示美化。
能够看到虽然示例2.2使用filebeat从日志中读取数据,并将数据输出到标准输出,可是日志内容做为一个总体被存放在message字段中,这样对后续存储及查询都极为不便。能够为该pipeline指定一个grok filter来对日志格式进行处理
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
}
output {
stdout { codec => rubydebug }
}
sudo rm data/registry
sudo ./filebeat -e -c filebeat.yml -d "publish"
{
"request" => "/style2.css",
"agent" => ""Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"",
"offset" => 24464,
"auth" => "-",
"ident" => "-",
"input_type" => "log",
"verb" => "GET",
"source" => "/data/home/michelmu/workspace/logstash-tutorial.log",
"message" => "86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /style2.css HTTP/1.1" 200 4877 "http://www.semicomplete.com/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"",
"type" => "log",
"tags" => [
[0] "beats_input_codec_plain_applied"
],
"referrer" => ""http://www.semicomplete.com/projects/xdotool/"",
"@timestamp" => 2018-10-09T12:24:21.276Z,
"response" => "200",
"bytes" => "4877",
"clientip" => "86.1.76.62",
"@version" => "1",
"beat" => {
"name" => "VM_136_9_centos",
"hostname" => "VM_136_9_centos",
"version" => "5.6.10"
},
"host" => "VM_136_9_centos",
"httpversion" => "1.1",
"timestamp" => "04/Jan/2015:05:30:37 +0000"
}
能够看到message中的数据被详细解析出来了
Logstash中的一些filter能够根据现有数据生成一些新的数据,如geoip能够根据ip生成经纬度信息
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
geoip {
source => "clientip"
}
}
output {
stdout { codec => rubydebug }
}
{
"request" => "/style2.css",
"agent" => ""Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"",
"geoip" => {
"timezone" => "Europe/London",
"ip" => "86.1.76.62",
"latitude" => 51.5333,
"continent_code" => "EU",
"city_name" => "Willesden",
"country_name" => "United Kingdom",
"country_code2" => "GB",
"country_code3" => "GB",
"region_name" => "Brent",
"location" => {
"lon" => -0.2333,
"lat" => 51.5333
},
"postal_code" => "NW10",
"region_code" => "BEN",
"longitude" => -0.2333
},
"offset" => 24464,
"auth" => "-",
"ident" => "-",
"input_type" => "log",
"verb" => "GET",
"source" => "/data/home/michelmu/workspace/logstash-tutorial.log",
"message" => "86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /style2.css HTTP/1.1" 200 4877 "http://www.semicomplete.com/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"",
"type" => "log",
"tags" => [
[0] "beats_input_codec_plain_applied"
],
"referrer" => ""http://www.semicomplete.com/projects/xdotool/"",
"@timestamp" => 2018-10-09T12:37:46.686Z,
"response" => "200",
"bytes" => "4877",
"clientip" => "86.1.76.62",
"@version" => "1",
"beat" => {
"name" => "VM_136_9_centos",
"hostname" => "VM_136_9_centos",
"version" => "5.6.10"
},
"host" => "VM_136_9_centos",
"httpversion" => "1.1",
"timestamp" => "04/Jan/2015:05:30:37 +0000"
}
能够看到根据ip派生出了许多地理位置信息数据
Logstash做为Elastic stack的重要组成部分,其最经常使用的功能是将数据导入到Elasticssearch中。将Logstash中的数据导入到Elasticsearch中操做也很是的方便,只须要在pipeline配置文件中增长Elasticsearch的output便可。
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
geoip {
source => "clientip"
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
curl -XGET 'http://172.16.16.17:9200/logstash-2018.10.09/_search?pretty&q=response=200'
Logstash提供了大量的Input, filter, output, codec的插件,用户能够根据本身的须要,使用一个或多个组件实现本身的功能,固然用户也能够自定义插件以实现更为定制化的功能。自定义插件能够参考[logstash input插件开发]
演示过如何快速使用Logstash后,如今详细讲述一下Logstash的部署方式。
logstash的目录主要包括:根目录、bin目录、配置目录、日志目录、插件目录、数据目录
不一样安装方式各目录的默认位置参考[此处]
当单个Logstash没法知足性能需求时,能够采用横向扩展的方式来提升Logstash的处理能力。横向扩展的多个Logstash相互独立,采用相同的pipeline配置,另外能够在这多个Logstash前增长一个LoadBalance,以实现多个Logstash的负载均衡。
[详细调优参考]
Logstash做为Elastic Stack的重要组成部分,在Elasticsearch数据采集和处理过程当中扮演着重要的角色。本文经过简单示例的演示和Logstash基础知识的铺陈,但愿能够帮助初次接触Logstash的用户对Logstash有一个总体认识,并能较为快速上手。对于Logstash的高阶使用,仍须要用户在使用过程当中结合实际状况查阅相关资源深刻研究。固然也欢迎你们积极交流,并对文中的错误提出宝贵意见。