Logstash 输出

输出是 Logstash 管道的最后一个阶段,它将过滤器数据从输入日志发送到指定的目的地。 Logstash 提供多个输出插件,将过滤后的日志事件存储到各种不同的存储和搜索引擎。

存储日志

Logstash 可以将过滤后的日志存储在 File、Elasticsearch Engine、stdout、AWS CloudWatch 等中。 TCP、UDP、Websocket 等网络协议也可以用于Logstash 用于将日志事件传输到远程存储系统。

在 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" => "lidihuo.com"}
   }
}
output {
   elasticsearch {
      hosts => ["127.0.0.1:9200"]
   }
}

输入日志

以下代码块显示了输入日志数据。

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 在 localhost 的响应。

{
   "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.lidihuo.com/elasticsearch/index.html

现在,使用上述 Logstash.conf 运行 Logstash

>Logstash –f Logstash.conf

在输出日志中粘贴上述文本后,该文本将被 Logstash 存储在 Elasticsearch 中。可以通过在浏览器中输入以下 URL 来检查存储的数据。

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\r",
            "user":"lidihuo.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\r",
            "user":"lidihuo.com","taskid":"48566","tags":[]
         }
      }
   }
}

下一章:Logstash 输出类型

Logstash 提供了多个插件来支持各种数据存储或搜索引擎。日志的输出事件可以发送到输出文件、标准输出或 Elasticsearch 等搜索引擎。 Logstash 支持三种类型的输出,分别是:标准输出文件输出 ...