Logstash - Giai đoạn đầu ra

Đầu ra là giai đoạn cuối cùng trong đường ống Logstash, gửi dữ liệu bộ lọc từ các bản ghi đầu vào đến một điểm đến được chỉ định. Logstash cung cấp nhiều plugin đầu ra để lưu trữ các sự kiện nhật ký đã lọc vào nhiều công cụ lưu trữ và tìm kiếm khác nhau.

Lưu trữ Nhật ký

Logstash có thể lưu trữ các nhật ký đã lọc trong một File, Elasticsearch Engine, stdout, AWS CloudWatch, vv Các giao thức mạng như TCP, UDP, Websocket cũng có thể được sử dụng trong Logstash để chuyển các sự kiện nhật ký đến hệ thống lưu trữ từ xa.

Trong ngăn xếp ELK, người dùng sử dụng công cụ Elasticsearch để lưu trữ các sự kiện nhật ký. Ở đây, trong ví dụ sau, chúng tôi sẽ tạo các sự kiện nhật ký cho một công cụ Elasticsearch cục bộ.

Cài đặt Plugin đầu ra Elasticsearch

Chúng ta có thể cài đặt plugin đầu ra Elasticsearch bằng lệnh sau.

>logstash-plugin install Logstash-output-elasticsearch

logstash.conf

Tệp cấu hình này chứa một plugin Elasticsearch, plugin này lưu trữ sự kiện đầu ra trong Elasticsearch được cài đặt cục bộ.

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

Khối mã sau đây hiển thị dữ liệu nhật ký đầu vào.

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END - end

Bắt đầu Elasticsearch tại Localhost

Để khởi động Elasticsearch tại localhost, bạn nên sử dụng lệnh sau.

C:\elasticsearch\bin> elasticsearch

Khi Elasticsearch đã sẵn sàng, bạn có thể kiểm tra bằng cách nhập URL sau vào trình duyệt của mình.

http://localhost:9200/

Phản ứng

Khối mã sau hiển thị phản hồi của Elasticsearch tại 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"
}

Note - Để biết thêm thông tin về Elasticsearch, bạn có thể nhấp vào liên kết sau.

https://www.tutorialspoint.com/elasticsearch/index.html

Bây giờ, hãy chạy Logstash với Logstash.conf đã đề cập ở trên

>Logstash –f Logstash.conf

Sau khi dán văn bản nói trên vào nhật ký xuất, văn bản đó sẽ được Logstash lưu trữ trong Elasticsearch. Bạn có thể kiểm tra dữ liệu được lưu trữ bằng cách nhập URL sau vào trình duyệt.

http://localhost:9200/logstash-2017.01.01/_search?pretty

Phản ứng

Đây là dữ liệu ở định dạng JSON được lưu trữ trong chỉ mục Logstash-2017.01.01.

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