Logstash - 输出阶段
输出是 Logstash 管道中的最后一个阶段,它将输入日志中的过滤数据发送到指定的目的地。Logstash 提供多个输出插件,将过滤后的日志事件存储到各种不同的存储和搜索引擎中。
存储日志
Logstash 可以将过滤后的日志存储在文件、Elasticsearch Engine、stdout、AWS CloudWatch等中。Logstash 中还可以使用TCP、UDP、Websocket等网络协议将日志事件传输到远程存储系统。
在 ELK 堆栈中,用户使用 Elasticsearch 引擎来存储日志事件。在这里,在下面的示例中,我们将为本地 Elasticsearch 引擎生成日志事件。
安装 Elasticsearch 输出插件
我们可以使用以下命令安装 Elasticsearch 输出插件。
>logstash-plugin install Logstash-output-elasticsearch
logstash.conf
此配置文件包含一个 Elasticsearch 插件,它将输出事件存储在本地安装的 Elasticsearch 中。
input { file { path => "C:/tpwork/logstash/bin/log/input.log" } } filter { grok { match => [ "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid} - %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" ] } if [logger] == "TRANSACTION_START" { aggregate { task_id => "%{taskid}" code => "map['sql_duration'] = 0" map_action => "create" } } if [logger] == "SQL" { aggregate { task_id => "%{taskid}" code => "map['sql_duration'] ||= 0 ; map['sql_duration'] += event.get('duration')" } } if [logger] == "TRANSACTION_END" { aggregate { task_id => "%{taskid}" code => "event.set('sql_duration', map['sql_duration'])" end_of_task => true timeout => 120 } } mutate { add_field => {"user" => "tutorialspoint.com"} } } output { elasticsearch { hosts => ["127.0.0.1:9200"] } }
Input.log
以下代码块显示输入日志数据。
INFO - 48566 - TRANSACTION_START - start INFO - 48566 - SQL - transaction1 - 320 INFO - 48566 - SQL - transaction1 - 200 INFO - 48566 - TRANSACTION_END - end
在本地主机启动 Elasticsearch
要在本地主机启动 Elasticsearch,您应该使用以下命令。
C:\elasticsearch\bin> elasticsearch
Elasticsearch 准备就绪后,您可以在浏览器中输入以下 URL 进行检查。
http://localhost:9200/
响应
以下代码块显示了本地主机上 Elasticsearch 的响应。
{ "name" : "Doctor Dorcas", "cluster_name" : "elasticsearch", "version" : { "number" : "2.1.1", "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71", "build_timestamp" : "2015-12-15T13:05:55Z", "build_snapshot" : false, "lucene_version" : "5.3.1" }, "tagline" : "You Know, for Search" }
注意 − 有关 Elasticsearch 的更多信息,您可以点击以下链接。
https://www.tutorialspoint.com/elasticsearch/index.html
现在,使用上述 Logstash.conf 运行 Logstash
>Logstash –f Logstash.conf
将上述文本粘贴到输出日志中后,Logstash 会将该文本存储在 Elasticsearch 中。您可以在浏览器中输入以下网址来检查存储的数据。
http://localhost:9200/logstash-2017.01.01/_search?pretty
响应
这是存储在索引 Logstash-2017.01.01 中的 JSON 格式的数据。
{ "took" : 20, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 10, "max_score" : 1.0, "hits" : [ { "_index" : "logstash-2017.01.01", "_type" : "logs", "_id" : "AVlZ9vF8hshdrGm02KOs", "_score" : 1.0, "_source":{ "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log", "@timestamp":"2017-01-01T12:17:49.140Z","loglevel":"INFO", "logger":"SQL","@version":"1","host":"wcnlab-PC", "label":"transaction1", "message":" INFO - 48566 - SQL - transaction1 - 200 ", "user":"tutorialspoint.com","taskid":"48566","tags":[] } }, { "_index" : "logstash-2017.01.01", "_type" : "logs", "_id" : "AVlZ9vF8hshdrGm02KOt", "_score" : 1.0, "_source":{ "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log", "@timestamp":"2017-01-01T12:17:49.145Z","loglevel":"INFO", "logger":"TRANSACTION_END","@version":"1","host":"wcnlab-PC", "label":"end", "message":" INFO - 48566 - TRANSACTION_END - end ", "user":"tutorialspoint.com","taskid":"48566","tags":[] } } } }