Logstash - Hướng dẫn nhanh

Logstash là một công cụ dựa trên các mẫu bộ lọc / đường ống để thu thập, xử lý và tạo các bản ghi hoặc sự kiện. Nó giúp tập trung và phân tích thời gian thực các nhật ký và sự kiện từ các nguồn khác nhau.

Logstash được viết trên ngôn ngữ lập trình JRuby chạy trên JVM, do đó bạn có thể chạy Logstash trên các nền tảng khác nhau. Nó thu thập các loại dữ liệu khác nhau như Nhật ký, Gói tin, Sự kiện, Giao dịch, Dữ liệu Dấu thời gian, v.v., từ hầu hết mọi loại nguồn. Nguồn dữ liệu có thể là Dữ liệu xã hội, Thương mại điện tử, Tin tức, CRM, Dữ liệu trò chơi, Xu hướng web, Dữ liệu tài chính, Internet of Things, Thiết bị di động, v.v.

Tính năng chung của Logstash

Các tính năng chung của Logstash như sau:

  • Logstash có thể thu thập dữ liệu từ các nguồn khác nhau và gửi đến nhiều điểm đến.

  • Logstash có thể xử lý tất cả các loại dữ liệu ghi nhật ký như Nhật ký Apache, Nhật ký sự kiện Windows, Dữ liệu qua giao thức mạng, Dữ liệu từ Đầu vào chuẩn và nhiều hơn nữa.

  • Logstash cũng có thể xử lý các yêu cầu http và dữ liệu phản hồi.

  • Logstash cung cấp nhiều bộ lọc, giúp người dùng tìm thấy nhiều ý nghĩa hơn trong dữ liệu bằng cách phân tích cú pháp và chuyển đổi nó.

  • Logstash cũng có thể được sử dụng để xử lý dữ liệu cảm biến trong internet vạn vật.

  • Logstash là mã nguồn mở và có sẵn theo giấy phép Apache phiên bản 2.0.

Các khái niệm về khóa Logstash

Các khái niệm chính của Logstash như sau:

Đối tượng sự kiện

Nó là đối tượng chính trong Logstash, đóng gói luồng dữ liệu trong đường ống Logstash. Logstash sử dụng đối tượng này để lưu trữ dữ liệu đầu vào và thêm các trường bổ sung được tạo trong giai đoạn lọc.

Logstash cung cấp API sự kiện cho các nhà phát triển để điều khiển các sự kiện. Trong hướng dẫn này, sự kiện này được gọi với nhiều tên khác nhau như Sự kiện dữ liệu ghi nhật ký, Sự kiện nhật ký, Dữ liệu nhật ký, Dữ liệu nhật ký đầu vào, Dữ liệu nhật ký đầu ra, v.v.

Đường ống

Nó bao gồm các giai đoạn của luồng dữ liệu trong Logstash từ đầu vào đến đầu ra. Dữ liệu đầu vào được nhập trong đường dẫn và được xử lý dưới dạng một sự kiện. Sau đó, gửi đến đích đầu ra ở định dạng mong muốn của người dùng hoặc hệ thống cuối.

Đầu vào

Đây là giai đoạn đầu tiên trong đường ống Logstash, được sử dụng để lấy dữ liệu trong Logstash để xử lý thêm. Logstash cung cấp nhiều plugin khác nhau để lấy dữ liệu từ các nền tảng khác nhau. Một số plugin được sử dụng phổ biến nhất là - File, Syslog, Redis và Beats.

Bộ lọc

Đây là giai đoạn giữa của Logstash, nơi diễn ra quá trình xử lý thực tế các sự kiện. Một nhà phát triển có thể sử dụng Mẫu Regex được xác định trước bởi Logstash để tạo các chuỗi nhằm phân biệt giữa các trường trong sự kiện và tiêu chí cho các sự kiện đầu vào được chấp nhận.

Logstash cung cấp các plugin khác nhau để giúp nhà phát triển phân tích cú pháp và chuyển đổi các sự kiện thành một cấu trúc mong muốn. Một số plugin bộ lọc được sử dụng phổ biến nhất là - Grok, Mutate, Drop, Clone và Geoip.

Đầu ra

Đây là giai đoạn cuối cùng trong đường dẫn Logstash, nơi các sự kiện đầu ra có thể được định dạng thành cấu trúc theo yêu cầu của hệ thống đích. Cuối cùng, nó gửi sự kiện đầu ra sau khi xử lý hoàn tất đến đích bằng cách sử dụng các plugin. Một số plugin được sử dụng phổ biến nhất là - Elasticsearch, File, Graphite, Statsd, v.v.

Ưu điểm của Logstash

Những điểm sau đây giải thích những ưu điểm khác nhau của Logstash.

  • Logstash cung cấp các chuỗi mẫu regex để xác định và phân tích cú pháp các trường khác nhau trong bất kỳ sự kiện đầu vào nào.

  • Logstash hỗ trợ nhiều loại máy chủ web và nguồn dữ liệu để trích xuất dữ liệu ghi nhật ký.

  • Logstash cung cấp nhiều plugin để phân tích cú pháp và chuyển đổi dữ liệu ghi nhật ký sang bất kỳ định dạng nào mà người dùng mong muốn.

  • Logstash tập trung, giúp dễ dàng xử lý và thu thập dữ liệu từ các máy chủ khác nhau.

  • Logstash hỗ trợ nhiều cơ sở dữ liệu, giao thức mạng và các dịch vụ khác như một nguồn đích cho các sự kiện ghi nhật ký.

  • Logstash sử dụng giao thức HTTP, cho phép người dùng nâng cấp các phiên bản Elasticsearch mà không cần phải nâng cấp Logstash trong một bước khóa.

Nhược điểm của Logstash

Những điểm sau đây giải thích những nhược điểm khác nhau của Logstash.

  • Logstash sử dụng http, điều này ảnh hưởng tiêu cực đến việc xử lý dữ liệu ghi nhật ký.

  • Làm việc với Logstash đôi khi có thể hơi phức tạp, vì nó cần sự hiểu biết và phân tích tốt về dữ liệu ghi nhật ký đầu vào.

  • Các plugin bộ lọc không phải là chung chung, vì vậy, người dùng có thể cần phải tìm trình tự chính xác của các mẫu để tránh lỗi khi phân tích cú pháp.

Trong chương tiếp theo, chúng ta sẽ hiểu ELK Stack là gì và nó giúp ích gì cho Logstash.

ELK là viết tắt của Elasticsearch, Logstash,Kibana. Trong ngăn xếp ELK, Logstash trích xuất dữ liệu ghi nhật ký hoặc các sự kiện khác từ các nguồn đầu vào khác nhau. Nó xử lý các sự kiện và sau đó lưu trữ nó trong Elasticsearch. Kibana là một giao diện web, truy cập vào biểu mẫu dữ liệu ghi nhật ký Elasticsearch và trực quan hóa nó.

Logstash và Elasticsearch

Logstash cung cấp đầu vào và đầu ra plugin Elasticsearch để đọc và ghi các sự kiện nhật ký vào Elasticsearch. Elasticsearch như một điểm đến đầu ra cũng được khuyến nghị bởi Công ty Elasticsearch vì khả năng tương thích với Kibana. Logstash gửi dữ liệu đến Elasticsearch qua giao thức http.

Elasticsearch cung cấp cơ sở tải lên hàng loạt, giúp tải dữ liệu từ các nguồn khác nhau hoặc các phiên bản Logstash lên công cụ Elasticsearch tập trung. ELK có những ưu điểm sau so với các Giải pháp DevOps khác -

  • Ngăn xếp ELK dễ quản lý hơn và có thể được mở rộng để xử lý hàng petabyte sự kiện.

  • Kiến trúc ngăn xếp ELK rất linh hoạt và nó cung cấp khả năng tích hợp với Hadoop. Hadoop chủ yếu được sử dụng cho mục đích lưu trữ. Logstash có thể được kết nối trực tiếp với Hadoop bằng cách sử dụng flume và Elasticsearch cung cấp một trình kết nối có tênes-hadoop để kết nối với Hadoop.

  • Tổng chi phí sở hữu ELK thấp hơn nhiều so với các lựa chọn thay thế của nó.

Logstash và Kibana

Kibana không tương tác trực tiếp với Logstash mà thông qua một nguồn dữ liệu, đó là Elasticsearch trong ngăn xếp ELK. Logstash thu thập dữ liệu từ mọi nguồn và Elasticsearch phân tích dữ liệu đó với tốc độ rất nhanh, sau đó Kibana cung cấp thông tin chi tiết hữu ích về dữ liệu đó.

Kibana là một công cụ trực quan hóa dựa trên web, giúp các nhà phát triển và những người khác phân tích các biến thể của một lượng lớn các sự kiện được Logstash thu thập trong công cụ Elasticsearch. Hình ảnh trực quan này giúp bạn dễ dàng dự đoán hoặc nhìn thấy những thay đổi trong xu hướng của lỗi hoặc các sự kiện quan trọng khác của nguồn đầu vào.

Để cài đặt Logstash trên hệ thống, chúng ta nên làm theo các bước sau:

Step 1- Kiểm tra phiên bản Java được cài đặt trong máy tính của bạn; nó phải là Java 8 vì nó không tương thích với Java 9. Bạn có thể kiểm tra điều này bằng cách:

Trong Hệ điều hành Windows (OS) (sử dụng dấu nhắc lệnh) -

> java -version

Trong hệ điều hành UNIX (Sử dụng thiết bị đầu cuối) -

$ echo $JAVA_HOME

Step 2 - Tải xuống Logstash từ -

https://www.elastic.co/downloads/logstash.

  • Đối với hệ điều hành Windows, tải xuống tệp ZIP.

  • Đối với HĐH UNIX, hãy tải xuống tệp TAR.

  • Đối với hệ điều hành Debian, hãy tải xuống tệp DEB.

  • Đối với Red Hat và các bản phân phối Linux khác, hãy tải xuống tệp RPN.

  • Các tiện ích APT và Yum cũng có thể được sử dụng để cài đặt Logstash trong nhiều bản phân phối Linux.

Step 3- Quá trình cài đặt Logstash rất dễ dàng. Hãy xem cách bạn có thể cài đặt Logstash trên các nền tảng khác nhau.

Note - Không đặt bất kỳ khoảng trắng hoặc dấu hai chấm nào trong thư mục cài đặt.

  • Windows OS - Giải nén gói zip và Logstash được cài đặt.

  • UNIX OS - Giải nén tệp tar ở bất kỳ vị trí nào và Logstash đã được cài đặt.

$tar –xvf logstash-5.0.2.tar.gz

Using APT utility for Linux OS −

  • Tải xuống và cài đặt Khóa ký công khai -
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
  • Lưu định nghĩa kho lưu trữ -
$ echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo
   tee -a /etc/apt/sources.list.d/elastic-5.x.list
  • Chạy cập nhật -
$ sudo apt-get update
  • Bây giờ bạn có thể cài đặt bằng cách sử dụng lệnh sau:
$ sudo apt-get install logstash

Using YUM utility for Debian Linux OS -

  • Tải xuống và cài đặt Khóa ký công khai -
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  • Thêm văn bản sau vào tệp với hậu tố .repo trong thư mục o “/etc/yum.repos.d/” của bạn. Ví dụ,logstash.repo

[logstash-5.x]
name = Elastic repository for 5.x packages
baseurl = https://artifacts.elastic.co/packages/5.x/yum
gpgcheck = 1
gpgkey = https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled = 1
autorefresh = 1
type = rpm-md
  • Bây giờ bạn có thể cài đặt Logstash bằng cách sử dụng lệnh sau:
$ sudo yum install logstash

Step 4- Vào thư mục chính của Logstash. Bên trong thư mục bin, chạyelasticsearch.battrong trường hợp cửa sổ hoặc bạn có thể làm tương tự bằng cách sử dụng dấu nhắc lệnh và thông qua thiết bị đầu cuối. Trong UNIX, chạy tệp Logstash.

Chúng ta cần xác định nguồn đầu vào, nguồn đầu ra và các bộ lọc tùy chọn. Để xác minh cài đặt, bạn có thể chạy nó với cấu hình cơ bản bằng cách sử dụng luồng đầu vào tiêu chuẩn (stdin) làm nguồn đầu vào và luồng đầu ra tiêu chuẩn (stdout) làm nguồn đầu ra. Bạn cũng có thể chỉ định cấu hình trong dòng lệnh bằng cách sử dụng–e Lựa chọn.

In Windows −

> cd logstash-5.0.1/bin
> Logstash -e 'input { stdin { } } output { stdout {} }'

In Linux −

$ cd logstash-5.0.1/bin
$ ./logstash -e 'input { stdin { } } output { stdout {} }'

Note- trong trường hợp cửa sổ, bạn có thể gặp lỗi cho biết JAVA_HOME chưa được đặt. Đối với điều này, vui lòng đặt nó trong các biến môi trường thành “C: \ Program Files \ Java \ jre1.8.0_111” hoặc vị trí bạn đã cài đặt java.

Step 5 - Các cổng mặc định cho giao diện web Logstash là 9600 đến 9700 được định nghĩa trong logstash-5.0.1\config\logstash.yml như là http.port và nó sẽ chọn cổng khả dụng đầu tiên trong phạm vi đã cho.

Chúng tôi có thể kiểm tra xem máy chủ Logstash có hoạt động hay không bằng cách duyệt http://localhost:9600hoặc nếu cổng khác và sau đó vui lòng kiểm tra dấu nhắc lệnh hoặc thiết bị đầu cuối. Chúng ta có thể thấy cổng được chỉ định là “Điểm cuối API Logstash đã khởi động thành công {: port ⇒ 9600}. Nó sẽ trả về một đối tượng JSON, chứa thông tin về Logstash đã cài đặt theo cách sau:

{
   "host":"manu-PC", 
   "version":"5.0.1",
   "http_address":"127.0.0.1:9600",
   "build_date":"2016-11-11T22:28:04+00:00",
   "build_sha":"2d8d6263dd09417793f2a0c6d5ee702063b5fada",
   "build_snapshot":false
}

Trong chương này, chúng ta sẽ thảo luận về kiến ​​trúc bên trong và các thành phần khác nhau của Logstash.

Kiến trúc dịch vụ Logstash

Logstash xử lý nhật ký từ các máy chủ và nguồn dữ liệu khác nhau và nó hoạt động như người gửi hàng. Người gửi hàng được sử dụng để thu thập nhật ký và chúng được cài đặt trong mọi nguồn đầu vào. Môi giới nhưRedis, Kafka hoặc là RabbitMQ là bộ đệm để giữ dữ liệu cho các chỉ mục, có thể có nhiều hơn một nhà môi giới bị lỗi trong các trường hợp.

Người lập chỉ mục như Luceneđược sử dụng để lập chỉ mục các bản ghi để có hiệu suất tìm kiếm tốt hơn và sau đó đầu ra được lưu trữ trong Elasticsearch hoặc đích đầu ra khác. Dữ liệu trong bộ nhớ đầu ra có sẵn cho Kibana và phần mềm trực quan khác.

Kiến trúc bên trong Logstash

Đường ống Logstash bao gồm ba thành phần Input, FiltersOutput. Phần đầu vào chịu trách nhiệm chỉ định và truy cập vào nguồn dữ liệu đầu vào, chẳng hạn như thư mục nhật ký củaApache Tomcat Server.

Ví dụ để giải thích về đường ống Logstash

Tệp cấu hình Logstash chứa thông tin chi tiết về ba thành phần của Logstash. Trong trường hợp này, chúng tôi đang tạo một tên tệp được gọi làLogstash.conf.

Cấu hình sau đây thu thập dữ liệu từ nhật ký đầu vào “inlog.log” và ghi nó vào nhật ký đầu ra “outlog.log” mà không có bất kỳ bộ lọc nào.

Logstash.conf

Tệp cấu hình Logstash chỉ sao chép dữ liệu từ inlog.log tập tin bằng cách sử dụng plugin đầu vào và chuyển dữ liệu nhật ký sang outlog.log tệp bằng cách sử dụng plugin đầu ra.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog.log"
   }
}

Chạy Logstash

Logstash sử dụng –f tùy chọn để chỉ định tệp cấu hình.

C:\logstash\bin> logstash –f logstash.conf

inlog.log

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

Hello tutorialspoint.com

outlog.log

Đầu ra Logstash chứa dữ liệu đầu vào trong trường thông báo. Logstash cũng thêm các trường khác vào đầu ra như Dấu thời gian, Đường dẫn của Nguồn đầu vào, Phiên bản, Máy chủ lưu trữ và Thẻ.

{
   "path":"C:/tpwork/logstash/bin/log/inlog1.log",
   "@timestamp":"2016-12-13T02:28:38.763Z",
   "@version":"1", "host":"Dell-PC",
   "message":" Hello tutorialspoint.com", "tags":[]
}

Như bạn có thể, đầu ra của Logstash chứa nhiều hơn dữ liệu được cung cấp thông qua nhật ký đầu vào. Đầu ra chứa Đường dẫn nguồn, Dấu thời gian, Phiên bản, Tên máy chủ và Thẻ, được sử dụng để thể hiện các thông báo bổ sung như lỗi.

Chúng tôi có thể sử dụng bộ lọc để xử lý dữ liệu và làm cho dữ liệu trở nên hữu ích cho nhu cầu của chúng tôi. Trong ví dụ tiếp theo, chúng tôi đang sử dụng bộ lọc để lấy dữ liệu, bộ lọc này hạn chế đầu ra chỉ có dữ liệu với một động từ như GET hoặc POST theo sau làUnique Resource Identifier.

Logstash.conf

Trong cấu hình Logstash này, chúng tôi thêm một bộ lọc có tên grokđể lọc ra dữ liệu đầu vào. Sự kiện nhật ký đầu vào, khớp với nhật ký đầu vào trình tự mẫu, chỉ đến đích đầu ra với lỗi. Logstash thêm thẻ có tên "_grokparsefailure" trong các sự kiện đầu ra, thẻ này không khớp với trình tự mẫu bộ lọc Grok.

Logstash cung cấp nhiều mẫu regex dựng sẵn để phân tích cú pháp nhật ký máy chủ phổ biến như Apache. Mẫu được sử dụng ở đây mong đợi một động từ như get, post, v.v., theo sau là một định danh tài nguyên thống nhất.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog2.log"
   }
}
filter {
   grok {
      match => {"message" => "%{WORD:verb} %{URIPATHPARAM:uri}"}
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog2.log"
   }
}

Chạy Logstash

Chúng ta có thể chạy Logstash bằng cách sử dụng lệnh sau.

C:\logstash\bin> logstash –f  Logstash.conf

inlog2.log

Tệp đầu vào của chúng tôi chứa hai sự kiện được phân tách bằng dấu phân cách mặc định, tức là dấu phân cách dòng mới. Sự kiện đầu tiên khớp với mẫu được chỉ định trong GROk và sự kiện thứ hai thì không.

GET /tutorialspoint/Logstash
Input 1234

outlog2.log

Chúng ta có thể thấy rằng sự kiện đầu ra thứ hai chứa thẻ "_grokparsefailure", vì nó không khớp với mẫu bộ lọc Grok. Người dùng cũng có thể xóa các sự kiện chưa khớp này trong đầu ra bằng cách sử dụng‘if’ điều kiện trong plugin đầu ra.

{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:47:10.352Z","@version":"1","host":"Dell-PC","verb":"GET",
   "message":"GET /tutorialspoint/logstash", "uri":"/tutorialspoint/logstash", "tags":[]
}
{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:48:12.418Z", "@version":"1", "host":"Dell-PC",
   "message":"t 1234\r", "tags":["_grokparsefailure"]
}

Nhật ký từ các máy chủ hoặc nguồn dữ liệu khác nhau được thu thập bằng cách sử dụng người gửi hàng. Người gửi hàng là một ví dụ của Logstash được cài đặt trong máy chủ, nó truy cập vào nhật ký máy chủ và gửi đến vị trí đầu ra cụ thể.

Nó chủ yếu gửi đầu ra đến Elasticsearch để lưu trữ. Logstash lấy đầu vào từ các nguồn sau:

  • STDIN
  • Syslog
  • Files
  • TCP/UDP
  • Microsoft windows Eventlog
  • Websocket
  • Zeromq
  • Tiện ích mở rộng tùy chỉnh

Thu thập nhật ký bằng Apache Tomcat 7 Server

Trong ví dụ này, chúng tôi đang thu thập nhật ký của Máy chủ Apache Tomcat 7 được cài đặt trong cửa sổ bằng cách sử dụng plugin nhập tệp và gửi chúng đến nhật ký khác.

logstash.conf

Ở đây, Logstash được cấu hình để truy cập nhật ký truy cập của Apache Tomcat 7 được cài đặt cục bộ. Mẫu regex được sử dụng trong cài đặt đường dẫn của plugin tệp để lấy dữ liệu từ tệp nhật ký. Điều này có chứa "quyền truy cập" trong tên của nó và nó thêm một loại apache, giúp phân biệt các sự kiện apache với các sự kiện khác trong một nguồn đích tập trung. Cuối cùng, các sự kiện đầu ra sẽ được hiển thị trong output.log.

input {
   file {
      path => "C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/*access*"
      type => "apache"
   }
} 
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Chạy Logstash

Chúng ta có thể chạy Logstash bằng cách sử dụng lệnh sau.

C:\logstash\bin> logstash –f  Logstash.conf

Apache Tomcat Log

Truy cập Máy chủ Apache Tomcat và các ứng dụng web của nó (http://localhost:8080) để tạo nhật ký. Dữ liệu cập nhật trong nhật ký được Logstash đọc trong thời gian thực và được lưu trữ trong output.log như được chỉ định trong tệp cấu hình.

Apache Tomcat tạo một tệp nhật ký truy cập mới theo ngày tháng và ghi lại các sự kiện truy cập tại đó. Trong trường hợp của chúng tôi, đó là localhost_access_log.2016-12-24.txt tronglogs thư mục của Apache Tomcat.

0:0:0:0:0:0:0:1 - - [
   25/Dec/2016:18:37:00 +0800] "GET / HTTP/1.1" 200 11418
0:0:0:0:0:0:0:1 - munish [
   25/Dec/2016:18:37:02 +0800] "GET /manager/html HTTP/1.1" 200 17472
0:0:0:0:0:0:0:1 - - [
   25/Dec/2016:18:37:08 +0800] "GET /docs/ HTTP/1.1" 200 19373
0:0:0:0:0:0:0:1 - - [
   25/Dec/2016:18:37:10 +0800] "GET /docs/introduction.html HTTP/1.1" 200 15399

output.log

Bạn có thể thấy trong các sự kiện đầu ra, một trường loại được thêm vào và sự kiện hiện diện trong trường thông báo.

{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt",
   "@timestamp":"2016-12-25T10:37:00.363Z","@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - - [25/Dec/2016:18:37:00 +0800] \"GET /
   HTTP/1.1\" 200 11418\r","type":"apache","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt","@timestamp":"2016-12-25T10:37:10.407Z",
   "@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - munish [25/Dec/2016:18:37:02 +0800] \"GET /
   manager/html HTTP/1.1\" 200 17472\r","type":"apache","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt","@timestamp":"2016-12-25T10:37:10.407Z",
   "@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - - [25/Dec/2016:18:37:08 +0800] \"GET /docs/
   HTTP/1.1\" 200 19373\r","type":"apache","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   localhost_access_log.2016-12-25.txt","@timestamp":"2016-12-25T10:37:20.436Z",
   "@version":"1","host":"Dell-PC",
   "message":"0:0:0:0:0:0:0:1 - - [25/Dec/2016:18:37:10 +0800] \"GET /docs/
   introduction.html HTTP/1.1\" 200 15399\r","type":"apache","tags":[]
}

Thu thập nhật ký bằng Plugin STDIN

Trong phần này, chúng ta sẽ thảo luận về một ví dụ khác về việc thu thập nhật ký bằng cách sử dụng STDIN Plugin.

logstash.conf

Đây là một ví dụ rất đơn giản, trong đó Logstash đang đọc các sự kiện được nhập bởi người dùng trong một đầu vào chuẩn. Trong trường hợp của chúng tôi, đó là dấu nhắc lệnh, lưu trữ các sự kiện trong tệp output.log.

input {
   stdin{}
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Chạy Logstash

Chúng ta có thể chạy Logstash bằng cách sử dụng lệnh sau.

C:\logstash\bin> logstash –f  Logstash.conf

Viết văn bản sau trong dấu nhắc lệnh -

Người dùng đã nhập hai dòng sau. Logstash phân tách các sự kiện bằng cài đặt dấu phân cách và giá trị của nó theo mặc định là '\ n'. Người dùng có thể thay đổi bằng cách thay đổi giá trị của dấu phân cách trong plugin tệp.

Tutorialspoint.com welcomes you
Simply easy learning

output.log

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

{
   "@timestamp":"2016-12-25T11:41:16.518Z","@version":"1","host":"Dell-PC",
   "message":"tutrialspoint.com welcomes you\r","tags":[]
}
{
   "@timestamp":"2016-12-25T11:41:53.396Z","@version":"1","host":"Dell-PC",
   "message":"simply easy learning\r","tags":[]
}

Logstash hỗ trợ một loạt các bản ghi từ các nguồn khác nhau. Nó đang làm việc với các nguồn nổi tiếng như được giải thích bên dưới.

Thu thập nhật ký từ các chỉ số

Các sự kiện hệ thống và các hoạt động thời gian khác được ghi lại trong các thước đo. Logstash có thể truy cập nhật ký từ các chỉ số hệ thống và xử lý chúng bằng bộ lọc. Điều này giúp hiển thị cho người dùng nguồn cấp dữ liệu trực tiếp của các sự kiện theo cách tùy chỉnh. Các chỉ số được xóa theoflush_interval settingbộ lọc số liệu và theo mặc định; nó được đặt thành 5 giây.

Chúng tôi đang theo dõi các chỉ số thử nghiệm do Logstash tạo ra, bằng cách thu thập và phân tích các sự kiện chạy qua Logstash và hiển thị nguồn cấp dữ liệu trực tiếp trên dấu nhắc lệnh.

logstash.conf

Cấu hình này chứa một plugin của trình tạo, được Logstash cung cấp cho các chỉ số thử nghiệm và đặt cài đặt loại thành “được tạo” để phân tích cú pháp. Trong giai đoạn lọc, chúng tôi chỉ xử lý các dòng có kiểu được tạo bằng cách sử dụng câu lệnh 'if'. Sau đó, plugin số liệu đếm trường được chỉ định trong cài đặt đồng hồ. Plugin số liệu xóa số lượng sau mỗi 5 giây được chỉ định trongflush_interval.

Cuối cùng, xuất các sự kiện bộ lọc ra đầu ra tiêu chuẩn như dấu nhắc lệnh bằng cách sử dụng codec pluginđể định dạng. Plugin Codec đang sử dụng giá trị [ sự kiện ] [ rate_1m ] để xuất các sự kiện trên giây trong cửa sổ trượt 1 phút.

input {
   generator {
     	type => "generated"
   }
}
filter {
   if [type] == "generated" {
      metrics {
         meter => "events"
         add_tag => "metric"
      }
   }
}
output {
   # only emit events with the 'metric' tag
   if "metric" in [tags] {
      stdout {
         codec => line { format => "rate: %{[events][rate_1m]}"
      }
   }
}

Chạy Logstash

Chúng ta có thể chạy Logstash bằng cách sử dụng lệnh sau.

>logsaths –f logstash.conf

stdout (dấu nhắc lệnh)

rate: 1308.4
rate: 1308.4
rate: 1368.654529135342
rate: 1416.4796003951449
rate: 1464.974293984808
rate: 1523.3119444107458
rate: 1564.1602979542715
rate: 1610.6496496890895
rate: 1645.2184750334154
rate: 1688.7768007612485
rate: 1714.652283095914
rate: 1752.5150680019278
rate: 1785.9432934744932
rate: 1806.912181962126
rate: 1836.0070454626025
rate: 1849.5669494173826
rate: 1871.3814756851832
rate: 1883.3443123790712
rate: 1906.4879113216743
rate: 1925.9420717997118
rate: 1934.166137658981
rate: 1954.3176526556897
rate: 1957.0107444542625

Thu thập nhật ký từ máy chủ web

Máy chủ web tạo ra một số lượng lớn nhật ký liên quan đến quyền truy cập của người dùng và lỗi. Logstash giúp trích xuất các bản ghi từ các máy chủ khác nhau bằng cách sử dụng các plugin đầu vào và lưu trữ chúng ở một vị trí tập trung.

Chúng tôi đang trích xuất dữ liệu từ stderr logs của Máy chủ Apache Tomcat cục bộ và lưu trữ nó trong output.log.

logstash.conf

Tệp cấu hình Logstash này hướng Logstash đọc nhật ký lỗi apache và thêm một thẻ có tên “apache-error”. Chúng tôi chỉ cần gửi nó đến output.log bằng cách sử dụng plugin xuất tệp.

input {
   file {
      path => "C:/Program Files/Apache Software Foundation/Tomcat 7.0 /logs/*stderr*"
      type => "apache-error"  
   }
} 
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Chạy Logstash

Chúng ta có thể chạy Logstash bằng cách sử dụng lệnh sau.

>Logstash –f Logstash.conf

Mẫu nhật ký đầu vào

Đây là mẫu stderr log, tạo ra khi các sự kiện máy chủ xảy ra trong Apache Tomcat.

C: \ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ logs \ tomcat7-stderr.2016-12-25.log

Dec 25, 2016 7:05:14 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-9999"]
Dec 25, 2016 7:05:14 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Dec 25, 2016 7:05:14 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 823 ms

output.log

{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"Dec 25, 2016 7:05:14 PM org.apache.coyote.AbstractProtocol start\r",
   "type":"apache-error","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"INFO: Starting ProtocolHandler [
      \"ajp-bio-8009\"]\r","type":"apache-error","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"Dec 25, 2016 7:05:14 PM org.apache.catalina.startup.Catalina start\r",
   "type":"apache-error","tags":[]
}
{
   "path":"C:/Program Files/Apache Software Foundation/Tomcat 7.0/logs/
   tomcat7-stderr.2016-12-25.log","@timestamp":"2016-12-25T11:05:27.045Z",
   "@version":"1","host":"Dell-PC",
   "message":"INFO: Server startup in 823 ms\r","type":"apache-error","tags":[]
}

Thu thập nhật ký từ các nguồn dữ liệu

Để bắt đầu, hãy để chúng tôi hiểu cách Định cấu hình MySQL để ghi nhật ký. Thêm các dòng sau vàomy.ini file của máy chủ cơ sở dữ liệu MySQL trong [mysqld].

Trong windows, nó hiện diện bên trong thư mục cài đặt của MySQL, nằm trong:

C:\wamp\bin\mysql\mysql5.7.11

Trong UNIX, bạn có thể tìm thấy nó trong - /etc/mysql/my.cnf

general_log_file   = "C:/wamp/logs/queries.log"
general_log = 1

logstash.conf

Trong tệp cấu hình này, plugin tệp được sử dụng để đọc nhật ký MySQL và ghi nó vào ouput.log.

input {
   file {
      path => "C:/wamp/logs/queries.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

queries.log

Đây là nhật ký được tạo bởi các truy vấn được thực thi trong cơ sở dữ liệu MySQL.

2016-12-25T13:05:36.854619Z   2 Query		select * from test1_users
2016-12-25T13:05:51.822475Z    2 Query	select count(*) from users
2016-12-25T13:05:59.998942Z    2 Query         select count(*) from test1_users

output.log

{
   "path":"C:/wamp/logs/queries.log","@timestamp":"2016-12-25T13:05:37.905Z",
   "@version":"1","host":"Dell-PC",
   "message":"2016-12-25T13:05:36.854619Z    2 Query\tselect * from test1_users",
   "tags":[]
}
{
   "path":"C:/wamp/logs/queries.log","@timestamp":"2016-12-25T13:05:51.938Z",
   "@version":"1","host":"Dell-PC",
   "message":"2016-12-25T13:05:51.822475Z    2 Query\tselect count(*) from users",
   "tags":[]
}
{
   "path":"C:/wamp/logs/queries.log","@timestamp":"2016-12-25T13:06:00.950Z",
   "@version":"1","host":"Dell-PC",
   "message":"2016-12-25T13:05:59.998942Z    2 Query\tselect count(*) from test1_users",
   "tags":[]
}

Logstash nhận nhật ký bằng các plugin đầu vào và sau đó sử dụng các plugin bộ lọc để phân tích cú pháp và chuyển đổi dữ liệu. Việc phân tích cú pháp và chuyển đổi các bản ghi được thực hiện theo các hệ thống có trong đích đầu ra. Logstash phân tích cú pháp dữ liệu ghi nhật ký và chỉ chuyển tiếp các trường bắt buộc. Sau đó, các trường này được chuyển thành dạng tương thích và dễ hiểu của hệ thống đích.

Làm thế nào để phân tích cú pháp Nhật ký?

Việc phân tích các bản ghi được thực hiện bằng cách sử dụng GROK (Biểu diễn bằng đồ họa của tri thức) và bạn có thể tìm thấy chúng trong Github -

https://github.com/elastic/logstash/tree/v1.4.2/patterns.

Logstash khớp dữ liệu của nhật ký với Mẫu GROK được chỉ định hoặc chuỗi mẫu để phân tích cú pháp các nhật ký như "% {COMBINEDAPACHELOG}", thường được sử dụng cho nhật ký apache.

Dữ liệu được phân tích cú pháp có cấu trúc hơn và dễ tìm kiếm và thực hiện các truy vấn. Logstash tìm kiếm các mẫu GROK được chỉ định trong nhật ký đầu vào và trích xuất các dòng phù hợp từ nhật ký. Bạn có thể sử dụng trình gỡ lỗi GROK để kiểm tra các mẫu GROK của mình.

Cú pháp cho mẫu GROK là% {SYNTAX: SEMANTIC}. Bộ lọc Logstash GROK được viết dưới dạng sau:

%{PATTERN:FieldName}

Ở đây, PATTERN đại diện cho mẫu GROK và tên trường là tên của trường, đại diện cho dữ liệu được phân tích cú pháp trong đầu ra.

Ví dụ: sử dụng trình gỡ lỗi GROK trực tuyến https://grokdebug.herokuapp.com/

Đầu vào

Một dòng lỗi mẫu trong nhật ký -

[Wed Dec 07 21:54:54.048805 2016] [:error] [pid 1234:tid 3456829102]
   [client 192.168.1.1:25007] JSP Notice:  Undefined index: abc in
   /home/manu/tpworks/tutorialspoint.com/index.jsp on line 11

Trình tự mẫu GROK

Chuỗi mẫu GROK này khớp với sự kiện nhật ký, bao gồm dấu thời gian, theo sau là Cấp nhật ký, Id quy trình, Id giao dịch và Thông báo lỗi.

\[(%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\] \[.*:%{LOGLEVEL:loglevel}\]
   \[pid %{NUMBER:pid}:tid %{NUMBER:tid}\] \[client %{IP:clientip}:.*\]
   %{GREEDYDATA:errormsg}

đầu ra

Đầu ra ở định dạng JSON.

{
   "day": [
      "Wed"
   ],
   "month": [
      "Dec"
   ],
   "loglevel": [
      "error"
   ],
   "pid": [
      "1234"
   ],
   "tid": [
      "3456829102"
   ],
   "clientip": [
      "192.168.1.1"
   ],
   "errormsg": [
      "JSP Notice:  Undefined index: abc in
      /home/manu/tpworks/tutorialspoint.com/index.jsp on line 11"
   ]
}

Logstash sử dụng các bộ lọc ở giữa đường dẫn giữa đầu vào và đầu ra. Các bộ lọc của các biện pháp Logstash thao tác và tạo các sự kiện nhưApache-Access. Nhiều plugin bộ lọc được sử dụng để quản lý các sự kiện trong Logstash. Đây, trong một ví dụ vềLogstash Aggregate Filter, chúng tôi đang lọc thời lượng mỗi giao dịch SQL trong cơ sở dữ liệu và tính toán tổng thời gian.

Cài đặt Plugin bộ lọc tổng hợp

Cài đặt Trình cắm bộ lọc tổng hợp bằng tiện ích plugin Logstash. Logstash-plugin là một tệp hàng loạt cho các cửa sổ trongbin folder trong Logstash.

>logstash-plugin install logstash-filter-aggregate

logstash.conf

Trong cấu hình này, bạn có thể thấy ba câu lệnh 'if' cho Initializing, Incrementing,generating tổng thời gian giao dịch, tức là sql_duration. Plugin tổng hợp được sử dụng để thêm sql_duration, hiện diện trong mọi sự kiện của nhật ký đầu vào.

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
      }
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"    
   }
}

Chạy Logstash

Chúng ta có thể chạy Logstash bằng cách sử dụng lệnh sau.

>logstash –f logstash.conf

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

output.log

Như đã chỉ định trong tệp cấu hình, câu lệnh 'if' cuối cùng ở vị trí của trình ghi nhật ký - TRANSACTION_END, sẽ in ra tổng thời gian giao dịch hoặc sql_duration. Điều này đã được đánh dấu bằng màu vàng trong output.log.

{
   "path":"C:/tpwork/logstash/bin/log/input.log","@timestamp": "2016-12-22T19:04:37.214Z",
   "loglevel":"INFO","logger":"TRANSACTION_START","@version": "1","host":"wcnlab-PC",
   "message":"8566 - TRANSACTION_START - start\r","tags":[]
}
{
   "duration":320,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.366Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 320\r","taskid":"48566","tags":[]
}
{
   "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.373Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 200\r","taskid":"48566","tags":[]
}
{
   "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-22T19:04:38.380Z","loglevel":"INFO","logger":"TRANSACTION_END",
   "@version":"1","host":"wcnlab-PC","label":"end",
   "message":" INFO - 48566 - TRANSACTION_END - end\r","taskid":"48566","tags":[]
}

Logstash cung cấp nhiều plugin khác nhau để biến đổi nhật ký được phân tích cú pháp. Các plugin này có thểAdd, Delete,Update các trường trong nhật ký để hiểu rõ hơn và truy vấn trong hệ thống đầu ra.

Chúng tôi đang sử dụng Mutate Plugin để thêm người dùng tên trường trong mỗi dòng của nhật ký đầu vào.

Cài đặt Plugin bộ lọc đột biến

Để cài đặt plugin bộ lọc đột biến; chúng ta có thể sử dụng lệnh sau.

>Logstash-plugin install Logstash-filter-mutate

logstash.conf

Trong tệp cấu hình này, Plugin Mutate được thêm vào sau Plugin tổng hợp để thêm trường mới.

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 {
   file {
      path => "C:/tpwork/logstash/bin/log/output.log"
   }
}

Chạy Logstash

Chúng ta có thể chạy Logstash bằng cách sử dụng lệnh sau.

>logstash –f logstash.conf

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

output.log

Bạn có thể thấy rằng có một trường mới có tên “người dùng” trong các sự kiện đầu ra.

{
   "path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.383Z",
   "@version":"1",
   "host":"wcnlab-PC",
   "message":"NFO - 48566 - TRANSACTION_START - start\r",
   "user":"tutorialspoint.com","tags":["_grokparsefailure"]
}
{
   "duration":320,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.383Z","loglevel":"INFO","logger":"SQL",
   "@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 320\r",
   "user":"tutorialspoint.com","taskid":"48566","tags":[]
}
{
   "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.399Z","loglevel":"INFO",
   "logger":"SQL","@version":"1","host":"wcnlab-PC","label":"transaction1",
   "message":" INFO - 48566 - SQL - transaction1 - 200\r",
   "user":"tutorialspoint.com","taskid":"48566","tags":[]
}
{
   "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log",
   "@timestamp":"2016-12-25T19:55:37.399Z","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":[]
}

Đầ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 đích xác đị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

Để bắt đầu 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 nó 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 đây 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 được đề cập ở trên vào nhật ký đầu ra, 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":[]
         }
      }
   }
}

Logstash cung cấp nhiều Plugin để hỗ trợ các kho dữ liệu hoặc công cụ tìm kiếm khác nhau. Các sự kiện đầu ra của nhật ký có thể được gửi tới tệp đầu ra, đầu ra tiêu chuẩn hoặc công cụ tìm kiếm như Elasticsearch. Có ba loại đầu ra được hỗ trợ trong Logstash, đó là:

  • Đầu ra tiêu chuẩn
  • Đầu ra tệp
  • Đầu ra rỗng

Bây giờ chúng ta hãy thảo luận chi tiết từng điều này.

Đầu ra tiêu chuẩn (stdout)

Nó được sử dụng để tạo các sự kiện nhật ký đã lọc dưới dạng một luồng dữ liệu đến giao diện dòng lệnh. Đây là một ví dụ về việc tạo tổng thời lượng của một giao dịch cơ sở dữ liệu thành stdout.

logstash.conf

Tệp cấu hình này chứa một plugin đầu ra stdout để ghi tổng sql_duration vào đầu ra chuẩn.

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
      }
   }
}
output {
   if [logger] == "TRANSACTION_END" {
      stdout {
         codec => line{format => "%{sql_duration}"}
      }
   }
}

Note - Vui lòng cài đặt bộ lọc tổng hợp, nếu chưa được cài đặt.

>logstash-plugin install Logstash-filter-aggregate

Chạy Logstash

Chúng ta có thể chạy Logstash bằng cách sử dụng lệnh sau.

>logstash –f logsatsh.conf

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

stdout (nó sẽ là dấu nhắc lệnh trong cửa sổ hoặc thiết bị đầu cuối trong UNIX)

Đây là tổng sql_duration 320 + 200 = 520.

520

Đầu ra tệp

Logstash cũng có thể lưu trữ các sự kiện nhật ký bộ lọc vào một tệp đầu ra. Chúng tôi sẽ sử dụng ví dụ được đề cập ở trên và lưu trữ đầu ra trong một tệp thay vì STDOUT.

logstash.conf

Tệp cấu hình Logstash này hướng Logstash lưu trữ tổng sql_duration vào tệp nhật ký đầu ra.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input1.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
      }
   }
}
output {
   if [logger] == "TRANSACTION_END" {
      file {
         path => "C:/tpwork/logstash/bin/log/output.log"
         codec => line{format => "%{sql_duration}"}
      }
   }
}

Chạy logstash

Chúng ta có thể chạy Logstash bằng cách sử dụng lệnh sau.

>logstash –f logsatsh.conf

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

output.log

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

520

Đầu ra rỗng

Đây là một plugin đầu ra đặc biệt, được sử dụng để phân tích hiệu suất của các Plugin đầu vào và bộ lọc.

Logstash cung cấp các plugin khác nhau cho cả ba giai đoạn của đường ống (Đầu vào, Bộ lọc và Đầu ra). Các plugin này giúp người dùng thu thập nhật ký từ nhiều nguồn khác nhau như Máy chủ web, Cơ sở dữ liệu, Giao thức qua mạng, v.v.

Sau khi nắm bắt, Logstash có thể phân tích cú pháp và chuyển đổi dữ liệu thành thông tin có ý nghĩa theo yêu cầu của người dùng. Cuối cùng, Logstash có thể gửi hoặc lưu trữ thông tin có ý nghĩa đó đến các nguồn đích khác nhau như Elasticsearch, AWS Cloudwatch, v.v.

Đầu vào Plugin

Các plugin đầu vào trong Logstash giúp người dùng trích xuất và nhận nhật ký từ nhiều nguồn khác nhau. Cú pháp để sử dụng plugin đầu vào như sau:

Input {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

Bạn có thể tải xuống plugin đầu vào bằng cách sử dụng lệnh sau:

>Logstash-plugin install Logstash-input-<plugin name>

Tiện ích Logstash-plugin có trong bin foldercủa thư mục cài đặt Logstash. Bảng sau đây có danh sách các plugin đầu vào do Logstash cung cấp.

Sr.No. Tên & Mô tả plugin
1

beats

Để lấy dữ liệu ghi nhật ký hoặc sự kiện từ khuôn khổ nhịp đàn hồi.

2

cloudwatch

Để trích xuất các sự kiện từ CloudWatch, một ưu đãi API của Amazon Web Services.

3

couchdb_changes

Sự kiện từ _chages URI của couchdb được vận chuyển bằng cách sử dụng plugin này.

4

drupal_dblog

Để trích xuất dữ liệu ghi nhật ký cơ quan giám sát của drupal với DBLog được bật.

5

Elasticsearch

Để lấy kết quả của các truy vấn được thực hiện trong cụm Elasticsearch.

6

eventlog

Để nhận các sự kiện từ nhật ký sự kiện của windows.

7

exec

Để lấy đầu ra lệnh shell làm đầu vào trong Logstash.

số 8

file

Để lấy các sự kiện từ một tệp đầu vào. Điều này rất hữu ích, khi Logstash được cài đặt cục bộ với nguồn đầu vào và có quyền truy cập vào nhật ký nguồn đầu vào.

9

generator

Nó được sử dụng cho mục đích thử nghiệm, tạo ra các sự kiện ngẫu nhiên.

10

github

Chụp các sự kiện từ webhook GitHub.

11

graphite

Để nhận dữ liệu chỉ số từ công cụ giám sát than chì.

12

heartbeat

Nó cũng được sử dụng để thử nghiệm và nó tạo ra nhịp tim giống như các sự kiện

13

http

Để thu thập các sự kiện nhật ký qua hai giao thức mạng là http và https.

14

http_poller

Nó được sử dụng để giải mã đầu ra API HTTP cho một sự kiện.

15

jdbc

Nó chuyển đổi các giao dịch JDBC thành một sự kiện trong Logstash.

16

jmx

Để trích xuất các số liệu từ các ứng dụng java từ xa bằng JMX.

17

log4j

Chụp các sự kiện từ đối tượng socketAppender của Log4j qua ổ cắm TCP.

18

rss

Đầu ra của các công cụ dòng lệnh như một sự kiện đầu vào trong Logstash.

19

tcp

Ghi lại các sự kiện qua cổng TCP.

20

twitter

Thu thập các sự kiện từ API phát trực tuyến twitter.

21

unix

Thu thập các sự kiện qua ổ cắm UNIX.

22

websocket

Ghi lại các sự kiện qua giao thức websocket.

23

xmpp

Đọc các sự kiện qua giao thức Jabber / xmpp.

Cài đặt plugin

Tất cả các plugin đều có cài đặt cụ thể, giúp chỉ định các trường quan trọng như Cổng, Đường dẫn, v.v., trong plugin. Chúng ta sẽ thảo luận về cài đặt của một số plugin đầu vào.

Tập tin

Plugin đầu vào này được sử dụng để trích xuất các sự kiện trực tiếp từ các tệp nhật ký hoặc văn bản có trong nguồn đầu vào. Nó hoạt động tương tự như lệnh tail trong UNIX và lưu con trỏ đọc cuối cùng và chỉ đọc dữ liệu được nối mới từ tệp đầu vào, nhưng nó có thể được thay đổi bằng cách sử dụng cài đặt star_position. Sau đây là các cài đặt của plugin đầu vào này.

Đặt tên Giá trị mặc định Sự miêu tả
thêm các lĩnh vực {} Nối một trường mới vào sự kiện đầu vào.
close_older 3600 Các tệp có thời gian đọc lần cuối (tính bằng giây) nhiều hơn thời gian được chỉ định trong plugin này sẽ bị đóng.
codec "trơn" Nó được sử dụng để giải mã dữ liệu trước khi nhập vào đường dẫn Logstash.
dấu phân cách “\ N” Nó được sử dụng để chỉ định một dấu phân cách dòng mới.
explore_interval 15 Đó là khoảng thời gian (tính bằng giây) giữa việc khám phá các tệp mới trong đường dẫn được chỉ định.
enable_metric thật Nó được sử dụng để bật hoặc tắt báo cáo và thu thập số liệu cho plugin được chỉ định.
loại trừ Nó được sử dụng để chỉ định tên tệp hoặc các mẫu, cần được loại trừ khỏi plugin đầu vào.
Tôi Để chỉ định một danh tính duy nhất cho phiên bản plugin đó.
max_open_files Nó chỉ định số lượng tệp đầu vào tối đa bằng Logstash bất kỳ lúc nào.
con đường Chỉ định đường dẫn của tệp và nó có thể chứa các mẫu cho tên tệp.
vị trí bắt đầu "kết thúc" Bạn có thể thay đổi thành "bắt đầu", nếu bạn muốn; ban đầu Logstash sẽ bắt đầu đọc các tệp từ đầu chứ không chỉ sự kiện nhật ký mới.
start_interval 1 Nó chỉ định khoảng thời gian tính bằng giây, sau đó Logstash kiểm tra các tệp đã sửa đổi.
thẻ Để thêm bất kỳ thông tin bổ sung nào, chẳng hạn như Logstash, nó sẽ thêm "_grokparsefailure" trong thẻ, khi bất kỳ sự kiện nhật ký nào không tuân thủ bộ lọc Grok được chỉ định.
kiểu Đây là một trường đặc biệt, bạn có thể thêm vào một sự kiện đầu vào và nó rất hữu ích trong các bộ lọc và kibana.

Elasticsearch

Plugin cụ thể này được sử dụng để đọc các kết quả truy vấn tìm kiếm trong một cụm Elasticsearch. Phần sau có các cài đặt được sử dụng trong plugin này -

Đặt tên Giá trị mặc định Sự miêu tả
thêm các lĩnh vực {} Giống như trong plugin tệp, nó được sử dụng để thêm một trường trong sự kiện đầu vào.
ca_file Nó được sử dụng để chỉ định đường dẫn của tệp Cơ quan cấp chứng chỉ SSL.
codec "trơn" Nó được sử dụng để giải mã các sự kiện đầu vào từ Elasticsearch trước khi nhập vào đường dẫn Logstash.
docinfo "sai" Bạn có thể thay đổi nó thành true, nếu bạn muốn trích xuất thông tin bổ sung như chỉ mục, loại và id từ công cụ Elasticsearch.
docinfo_fields ["_index", "_type", "_id"] Bạn có thể loại bỏ bất kỳ trường nào bạn không muốn trong đầu vào Logstash của mình.
enable_metric thật Nó được sử dụng để bật hoặc tắt báo cáo và thu thập số liệu cho phiên bản plugin đó.
máy chủ Nó được sử dụng để chỉ định địa chỉ của tất cả các công cụ tìm kiếm đàn hồi, sẽ là nguồn đầu vào của cá thể Logstash đó. Cú pháp là host: port hoặc IP: port.
Tôi Nó được sử dụng để cung cấp một số nhận dạng duy nhất cho phiên bản plugin đầu vào cụ thể đó.
mục lục "logstash- *" Nó được sử dụng để chỉ định tên chỉ mục hoặc một mẫu mà Logstash sẽ theo dõi bởi Logstash để nhập liệu.
mật khẩu Với mục đích xác thực.
truy vấn "{\" sắp xếp \ ": [\" _ doc \ "]}" Truy vấn để thực hiện.
ssl sai Bật hoặc tắt lớp ổ cắm an toàn.
thẻ Để thêm bất kỳ thông tin bổ sung nào trong các sự kiện đầu vào.
kiểu Nó được sử dụng để phân loại các biểu mẫu đầu vào để có thể dễ dàng tìm kiếm tất cả các sự kiện đầu vào ở các giai đoạn sau.
người dùng Vì mục đích xác thực.

Nhật ký sự kiện

Plugin đầu vào này đọc dữ liệu từ API win32 của máy chủ windows. Tiếp theo là các cài đặt của plugin này -

Đặt tên Giá trị mặc định Sự miêu tả
thêm các lĩnh vực {} Tương tự như trong plugin tệp, nó được sử dụng để thêm một trường trong sự kiện đầu vào
codec "trơn" Nó được sử dụng để giải mã các sự kiện đầu vào từ các cửa sổ; trước khi tham gia vào đường dẫn Logstash
logfile ["Ứng dụng", "Bảo mật", "Hệ thống"] Các sự kiện bắt buộc trong tệp nhật ký đầu vào
khoảng thời gian 1000 Nó tính bằng mili giây và xác định khoảng thời gian giữa hai lần kiểm tra liên tiếp các bản ghi sự kiện mới
thẻ Để thêm bất kỳ thông tin bổ sung nào trong các sự kiện đầu vào
kiểu Nó được sử dụng để phân loại biểu mẫu đầu vào, một plugin cụ thể cho loại nhất định, do đó sẽ dễ dàng tìm kiếm tất cả các sự kiện đầu vào trong các giai đoạn sau

Twitter

Plugin đầu vào này được sử dụng để thu thập nguồn cấp dữ liệu của twitter từ API phát trực tuyến của nó. Bảng sau mô tả các cài đặt của plugin này.

Đặt tên Giá trị mặc định Sự miêu tả
thêm các lĩnh vực {} Tương tự như trong plugin tệp, nó được sử dụng để thêm một trường trong sự kiện đầu vào
codec "trơn" Nó được sử dụng để giải mã các sự kiện đầu vào từ các cửa sổ; trước khi tham gia vào đường dẫn Logstash
khóa_ người tiêu dùng Nó chứa khóa người tiêu dùng của ứng dụng twitter. Để biết thêm thông tin, hãy truy cậphttps://dev.twitter.com/apps/new
Consumer_secret Nó chứa khóa bí mật của người tiêu dùng của ứng dụng twitter. Để biết thêm thông tin, hãy truy cậphttps://dev.twitter.com/apps/new
enable_metric thật Nó được sử dụng để bật hoặc tắt báo cáo và thu thập số liệu cho phiên bản plugin đó
theo sau

Nó chỉ định id người dùng được phân tách bằng dấu phẩy và LogStash kiểm tra trạng thái của những người dùng này trong Twitter.

Để biết thêm thông tin, hãy truy cập

https://dev.twitter.com

full_tweet sai Bạn có thể thay đổi nó thành true, nếu bạn muốn Logstash đọc toàn bộ đối tượng trả về từ API twitter
Tôi Nó được sử dụng để cung cấp một số nhận dạng duy nhất cho phiên bản plugin đầu vào cụ thể đó
ignore_retweets Sai Bạn có thể thay đổi đặt thành true để bỏ qua các tweet lại trong nguồn cấp dữ liệu twitter đầu vào
từ khóa Đó là một loạt các từ khóa, cần được theo dõi trong nguồn cấp dữ liệu đầu vào twitters
ngôn ngữ Nó xác định ngôn ngữ của các tweet mà LogStash cần từ nguồn cấp dữ liệu twitter đầu vào. Đây là một mảng định danh, xác định một ngôn ngữ cụ thể trong twitter
địa điểm Để lọc ra các tweet từ nguồn cấp dữ liệu đầu vào theo vị trí được chỉ định. Đây là một mảng, chứa kinh độ và vĩ độ của vị trí
oauth_token Đây là một tệp bắt buộc, chứa mã thông báo oauth của người dùng. Để biết thêm thông tin chi tiết vui lòng truy cập liên kết sauhttps://dev.twitter.com/apps
oauth_token_secret Đây là một tệp bắt buộc, chứa mã thông báo bí mật oauth của người dùng. Để biết thêm thông tin chi tiết vui lòng truy cập liên kết sauhttps://dev.twitter.com/apps
thẻ Để thêm bất kỳ thông tin bổ sung nào trong các sự kiện đầu vào
kiểu Nó được sử dụng để phân loại biểu mẫu đầu vào, một plugin cụ thể cho loại nhất định, do đó sẽ dễ dàng tìm kiếm tất cả các sự kiện đầu vào trong các giai đoạn sau

TCP

TCP được sử dụng để nhận các sự kiện qua cổng TCP; nó có thể đọc từ các kết nối người dùng hoặc máy chủ, được chỉ định trong cài đặt chế độ. Bảng sau đây mô tả các cài đặt của plugin này:

Đặt tên Giá trị mặc định Sự miêu tả
thêm các lĩnh vực {} Tương tự như trong plugin tệp, nó được sử dụng để thêm một trường trong sự kiện đầu vào
codec "trơn" Nó được sử dụng để giải mã các sự kiện đầu vào từ các cửa sổ; trước khi tham gia vào đường dẫn Logstash
enable_metric thật Nó được sử dụng để bật hoặc tắt báo cáo và thu thập số liệu cho phiên bản plugin đó
tổ chức “0.0.0.0” Địa chỉ của hệ điều hành máy chủ mà máy khách phụ thuộc vào
Tôi Nó chứa khóa người tiêu dùng của ứng dụng twitter
chế độ "người phục vụ" Nó được sử dụng để chỉ định nguồn đầu vào là máy chủ hay máy khách.
Hải cảng Nó xác định số cổng
ssl_cert Nó được sử dụng để chỉ định đường dẫn của chứng chỉ SSL
ssl_enable sai Bật hoặc tắt SSL
ssl_key Để chỉ định đường dẫn của tệp khóa SSL
thẻ Để thêm bất kỳ thông tin bổ sung nào trong các sự kiện đầu vào
kiểu Nó được sử dụng để phân loại biểu mẫu đầu vào, một plugin cụ thể cho loại nhất định, do đó sẽ dễ dàng tìm kiếm tất cả các sự kiện đầu vào trong các giai đoạn sau

Logstash - Plugin đầu ra

Logstash hỗ trợ nhiều nguồn đầu ra khác nhau và trong các công nghệ khác nhau như Cơ sở dữ liệu, Tệp, Email, Đầu ra chuẩn, v.v.

Cú pháp để sử dụng plugin đầu ra như sau:

output {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

Bạn có thể tải xuống plugin đầu ra bằng cách sử dụng lệnh sau:

>logstash-plugin install logstash-output-<plugin name>

Các Logstash-plugin utilitycó trong thư mục bin của thư mục cài đặt Logstash. Bảng sau đây mô tả các plugin đầu ra do Logstash cung cấp.

Sr.No. Tên & Mô tả plugin
1

CloudWatch

Plugin này được sử dụng để gửi dữ liệu chỉ số tổng hợp đến CloudWatch của các dịch vụ web amazon.

2

csv

Nó được sử dụng để viết các sự kiện đầu ra theo cách được phân tách bằng dấu phẩy.

3

Elasticsearch

Nó được sử dụng để lưu trữ các bản ghi đầu ra trong chỉ mục Elasticsearch.

4

email

Nó được sử dụng để gửi một email thông báo, khi kết quả được tạo. Người dùng có thể thêm thông tin về đầu ra trong email.

5

exec

Nó được sử dụng để chạy một lệnh, phù hợp với sự kiện đầu ra.

6

ganglia

Nó thay đổi các số liệu cho gmond of Gangila.

7

gelf

Nó được sử dụng để tạo đầu ra cho Graylog2 ở định dạng GELF.

số 8

google_bigquery

Nó xuất các sự kiện tới Google BigQuery.

9

google_cloud_storage

Nó lưu trữ các sự kiện đầu ra vào Google Cloud Storage.

10

graphite

Nó được sử dụng để lưu trữ các sự kiện đầu ra vào Graphite.

11

graphtastic

Nó được sử dụng để viết các số liệu đầu ra trên Windows.

12

hipchat

Nó được sử dụng để lưu trữ các sự kiện nhật ký đầu ra vào HipChat.

13

http

Nó được sử dụng để gửi các sự kiện nhật ký đầu ra đến các điểm cuối http hoặc https.

14

influxdb

Nó được sử dụng để lưu trữ sự kiện đầu ra trong InfluxDB.

15

irc

Nó được sử dụng để ghi các sự kiện đầu ra vào irc.

16

mongodb

Nó lưu trữ dữ liệu đầu ra trong MongoDB.

17

nagios

Nó được sử dụng để thông báo cho Nagios kết quả kiểm tra thụ động.

18

nagios_nsca

Nó được sử dụng để thông báo cho Nagios kết quả kiểm tra thụ động qua giao thức NSCA.

19

opentsdb

Nó lưu trữ các sự kiện đầu ra Logstash vào OpenTSDB.

20

pipe

Nó truyền các sự kiện đầu ra tới đầu vào chuẩn của chương trình khác.

21

rackspace

Nó được sử dụng để gửi các sự kiện nhật ký đầu ra đến dịch vụ Hàng đợi của Rackspace Cloud.

22

redis

Nó sử dụng lệnh rpush để gửi dữ liệu ghi đầu ra đến hàng đợi Redis.

23

riak

Nó được sử dụng để lưu trữ các sự kiện đầu ra vào cặp khóa / giá trị được phân phối Riak.

24

s3

Nó lưu trữ dữ liệu ghi đầu ra vào Amazon Simple Storage Service.

25

sns

Nó được sử dụng để gửi các sự kiện đầu ra đến Dịch vụ Thông báo Đơn giản của Amazon.

26

solr_http

Nó lập chỉ mục và lưu trữ dữ liệu ghi đầu ra trong Solr.

27

sps

Nó được sử dụng để chuyển các sự kiện đến Dịch vụ Hàng đợi Đơn giản của AWS.

28

statsd

Nó được sử dụng để gửi dữ liệu số liệu đến daemon mạng thống kê.

29

stdout

Nó được sử dụng để hiển thị các sự kiện đầu ra trên đầu ra tiêu chuẩn của CLI như dấu nhắc lệnh.

30

syslog

Nó được sử dụng để gửi các sự kiện đầu ra đến máy chủ nhật ký hệ thống.

31

tcp

Nó được sử dụng để gửi các sự kiện đầu ra đến TCP socket.

32

udp

Nó được sử dụng để đẩy các sự kiện đầu ra qua UDP.

33

websocket

Nó được sử dụng để đẩy các sự kiện đầu ra qua giao thức WebSocket.

34

xmpp

Nó được sử dụng để đẩy các sự kiện đầu ra qua giao thức XMPP.

Tất cả các plugin đều có cài đặt cụ thể, giúp chỉ định các trường quan trọng như Cổng, Đường dẫn, v.v., trong plugin. Chúng ta sẽ thảo luận về cài đặt của một số plugin đầu ra.

Elasticsearch

Plugin đầu ra Elasticsearch cho phép Logstash lưu trữ đầu ra trong các cụm cụ thể của công cụ Elasticsearch. Đây là một trong những lựa chọn nổi tiếng của người dùng vì nó đi kèm trong gói ELK Stack và do đó, cung cấp các giải pháp end-to-end cho Devops. Bảng sau mô tả các cài đặt của plugin đầu ra này.

Đặt tên Giá trị mặc định Sự miêu tả
hoạt động mục lục Nó được sử dụng để xác định hành động được thực hiện trong công cụ Elasticsearch. Các giá trị khác cho cài đặt này là xóa, tạo, cập nhật, v.v.
cacert Nó chứa đường dẫn của tệp với .cer hoặc .pem để xác thực chứng chỉ của máy chủ.
codec "trơn" Nó được sử dụng để mã hóa dữ liệu ghi đầu ra trước khi gửi đến nguồn đích.
doc_as_upset sai Cài đặt này được sử dụng trong trường hợp cập nhật hành động. Nó tạo một tài liệu trong công cụ Elasticsearch, nếu id tài liệu không được chỉ định trong plugin đầu ra.
loại tài liệu Nó được sử dụng để lưu trữ cùng một loại sự kiện trong cùng một loại tài liệu. Nếu nó không được chỉ định, thì loại sự kiện được sử dụng cho cùng một.
flush_size 500 Điều này được sử dụng để cải thiện hiệu suất của tải lên hàng loạt trong Elasticsearch
máy chủ [“127.0.0.1”] Nó là một mảng địa chỉ đích cho dữ liệu ghi đầu ra
id_flush_time 1 Nó xác định giới hạn thời gian (giây) giữa hai lần xả, lực lượng Logstash xả sau thời hạn quy định trong cài đặt này
mục lục "logstash -% {+ YYYY.MM.dd}" Nó được sử dụng để chỉ định chỉ mục của công cụ Elasticsearch
management_temlpate thật Nó được sử dụng để áp dụng mẫu mặc định trong Elasticsearch
cha mẹ không Nó được sử dụng để chỉ định id của tài liệu mẹ trong Elasticsearch
mật khẩu Nó được sử dụng để xác thực yêu cầu đến một cụm bảo mật trong Elasticsearch
con đường Nó được sử dụng để chỉ định đường dẫn HTTP của Elasticsearch.
đường ống không Nó được sử dụng để đặt đường dẫn nhập, người dùng muốn thực thi cho một sự kiện
Ủy quyền Nó được sử dụng để chỉ định proxy HTTP
retry_initial_interval 2 Nó được sử dụng để đặt khoảng thời gian ban đầu (giây) giữa các lần thử lại hàng loạt. Nó sẽ tăng gấp đôi sau mỗi lần thử lại cho đến khi đạt đến retry_max_interval
retry_max_interval 64 Nó được sử dụng để đặt khoảng thời gian tối đa cho retry_initial_interval
retry_on_conflict 1 Đây là số lần thử lại của Elasticsearch để cập nhật tài liệu
ssl Để bật hoặc tắt SSL / TLS được bảo mật cho Elasticsearch
bản mẫu Nó chứa đường dẫn của mẫu tùy chỉnh trong Elasticsearch
Tên mẫu "logstash" Điều này được sử dụng để đặt tên cho mẫu trong Elasticsearch
hết giờ 60 Đây là thời gian chờ cho các yêu cầu mạng tới Elasticsearch
nâng cao "" Nó cập nhật tài liệu hoặc nếu document_id không tồn tại, nó sẽ tạo một tài liệu mới trong Elasticsearch
người dùng Nó chứa người dùng để xác thực yêu cầu Logstash trong cụm Elasticsearch an toàn

E-mail

Plugin xuất email được sử dụng để thông báo cho người dùng khi Logstash tạo ra kết quả đầu ra. Bảng sau đây mô tả các cài đặt cho plugin này.

Đặt tên Giá trị mặc định Sự miêu tả
Địa chỉ "Localhost" Nó là địa chỉ của máy chủ thư
tập tin đính kèm [] Nó chứa tên và vị trí của các tệp đính kèm
thân hình "" Nó chứa nội dung email và phải là văn bản thuần túy
cc Nó chứa các địa chỉ email được phân tách bằng dấu phẩy cho cc của email
codec "trơn" Nó được sử dụng để mã hóa dữ liệu ghi đầu ra trước khi gửi đến nguồn đích.
loại nội dung "text / html; charset = UTF-8" Nó được sử dụng để loại nội dung của email
gỡ lỗi sai Nó được sử dụng để thực hiện chuyển tiếp thư trong chế độ gỡ lỗi
miền "localhost" Nó được sử dụng để thiết lập miền để gửi email
từ "[email protected]" Nó được sử dụng để chỉ định địa chỉ email của người gửi
htmlbody "" Nó được sử dụng để chỉ định nội dung của email ở định dạng html
mật khẩu Nó được sử dụng để xác thực với máy chủ thư
Hải cảng 25 Nó được sử dụng để xác định cổng giao tiếp với máy chủ thư
trả lời Nó được sử dụng để chỉ định id email cho trường email trả lời
môn học "" Nó chứa dòng chủ đề của email
use_tls sai Bật hoặc tắt TSL cho giao tiếp với máy chủ thư
tên tài khoản Là chứa tên người dùng để xác thực với máy chủ
thông qua "Smtp" Nó xác định các phương thức gửi email bằng Logstash

Http

Cài đặt này được sử dụng để gửi các sự kiện đầu ra qua http đến đích. Plugin này có các cài đặt sau:

Đặt tên Giá trị mặc định Sự miêu tả
automatic_retries 1 Nó được sử dụng để đặt số lần thử lại yêu cầu http bằng logstash
cacert Nó chứa đường dẫn của tệp để xác thực chứng chỉ của máy chủ
codec "trơn" Nó được sử dụng để mã hóa dữ liệu ghi đầu ra trước khi gửi đến nguồn đích.
content_type Tôi chỉ định loại nội dung của yêu cầu http đến máy chủ đích
bánh quy thật Nó được sử dụng để bật hoặc tắt cookie
định dạng "json" Nó được sử dụng để đặt định dạng của nội dung yêu cầu http
tiêu đề Nó chứa thông tin của tiêu đề http
http_method "" Nó được sử dụng để chỉ định phương thức http được logstash sử dụng trong yêu cầu và các giá trị có thể là "put", "post", "patch", "delete", "get", "head"
hết thời gian yêu cầu 60 Nó được sử dụng để xác thực với máy chủ thư
url Đây là cài đặt bắt buộc cho plugin này để chỉ định điểm cuối http hoặc https

stdout

Plugin đầu ra stdout được sử dụng để viết các sự kiện đầu ra trên đầu ra tiêu chuẩn của giao diện dòng lệnh. Nó là dấu nhắc lệnh trong cửa sổ và thiết bị đầu cuối trong UNIX. Plugin này có các cài đặt sau:

Đặt tên Giá trị mặc định Sự miêu tả
codec "trơn" Nó được sử dụng để mã hóa dữ liệu ghi đầu ra trước khi gửi đến nguồn đích.
công nhân 1 Nó được sử dụng để chỉ định số lượng công nhân cho đầu ra

statsd

Nó là một daemon mạng được sử dụng để gửi dữ liệu ma trận qua UDP đến các dịch vụ phụ trợ đích. Nó là dấu nhắc lệnh trong cửa sổ và thiết bị đầu cuối trong UNIX. Plugin này có các cài đặt sau:

Đặt tên Giá trị mặc định Sự miêu tả
codec "trơn" Nó được sử dụng để mã hóa dữ liệu ghi đầu ra trước khi gửi đến nguồn đích.
đếm {} Nó được sử dụng để xác định số lượng được sử dụng trong các chỉ số
giảm dần [] Nó được sử dụng để chỉ định tên chỉ số giảm dần
tổ chức "Localhost" Nó chứa địa chỉ của máy chủ thống kê
tăng [] Nó được sử dụng để chỉ định tên số liệu tăng dần
Hải cảng 8125 Nó chứa cổng của máy chủ thống kê
tỷ lệ mẫu 1 Nó được sử dụng chỉ định tỷ lệ mẫu của số liệu
người gửi "%{tổ chức}" Nó chỉ định tên của người gửi
bộ {} Nó được sử dụng để chỉ định một số liệu đã đặt
thời gian {} Nó được sử dụng để chỉ định một số liệu thời gian
công nhân 1 Nó được sử dụng để chỉ định số lượng công nhân cho đầu ra

Lọc Plugin

Logstash hỗ trợ nhiều plugin bộ lọc khác nhau để phân tích cú pháp và chuyển đổi nhật ký đầu vào sang định dạng có cấu trúc hơn và dễ truy vấn.

Cú pháp để sử dụng plugin bộ lọc như sau:

filter {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

Bạn có thể tải xuống plugin bộ lọc bằng cách sử dụng lệnh sau:

>logstash-plugin install logstash-filter-<plugin name>

Tiện ích Logstash-plugin có trong thư mục bin của thư mục cài đặt Logstash. Bảng sau đây mô tả các plugin đầu ra do Logstash cung cấp.

Sr.No. Tên & Mô tả plugin
1

aggregate

Plugin này thu thập hoặc tổng hợp dữ liệu từ nhiều sự kiện cùng loại và xử lý chúng trong sự kiện cuối cùng

2

alter

Nó cho phép người dùng thay đổi trường của các sự kiện nhật ký, mà bộ lọc biến đổi không xử lý

3

anonymize

Nó được sử dụng để thay thế các giá trị của các trường bằng một hàm băm nhất quán

4

cipher

Nó được sử dụng để mã hóa các sự kiện đầu ra trước khi lưu trữ chúng trong nguồn đích

5

clone

Nó được sử dụng để tạo bản sao của các sự kiện đầu ra trong Logstash

6

collate

Nó hợp nhất các sự kiện từ các bản ghi khác nhau theo thời gian hoặc số lượng của chúng

7

csv

Plugin này phân tích cú pháp dữ liệu từ nhật ký đầu vào theo dấu phân tách

số 8

date

Nó phân tích cú pháp ngày từ các trường trong sự kiện và đặt nó làm dấu thời gian cho sự kiện

9

dissect

Plugin này giúp người dùng trích xuất các trường từ dữ liệu phi cấu trúc và giúp bộ lọc tìm kiếm dễ dàng phân tích cú pháp chính xác

10

drop

Nó được sử dụng để loại bỏ tất cả các sự kiện cùng loại hoặc bất kỳ sự kiện tương tự nào khác

11

elapsed

Nó được sử dụng để tính toán thời gian giữa các sự kiện bắt đầu và kết thúc

12

Elasticsearch

Nó được sử dụng để sao chép các trường của sự kiện nhật ký trước đó có mặt trong Elasticsearch sang trường hiện tại trong Logstash

13

extractnumbers

Nó được sử dụng để trích xuất số từ các chuỗi trong các sự kiện nhật ký

14

geoip

Nó thêm một trường trong sự kiện, chứa vĩ độ và kinh độ của vị trí của IP có trong sự kiện nhật ký

15

grok

Đây là plugin bộ lọc thường được sử dụng để phân tích cú pháp sự kiện để lấy các trường

16

i18n

Nó xóa các ký tự đặc biệt khỏi một sự kiện được lưu trong nhật ký

17

json

Nó được sử dụng để tạo một đối tượng Json có cấu trúc trong sự kiện hoặc trong một trường cụ thể của sự kiện

18

kv

Plugin này hữu ích trong việc phân tích các cặp giá trị khóa trong dữ liệu ghi nhật ký

19

metrics

Nó được sử dụng để tổng hợp các chỉ số như đếm khoảng thời gian trong mỗi sự kiện

20

multiline

Nó cũng là một trong những plugin bộ lọc được sử dụng phổ biến, giúp người dùng trong trường hợp chuyển đổi dữ liệu ghi nhật ký nhiều dòng thành một sự kiện duy nhất.

21

mutate

Plugin này được sử dụng để đổi tên, xóa, thay thế và sửa đổi các trường trong sự kiện của bạn

22

range

Nó được sử dụng để kiểm tra các giá trị số của các trường trong các sự kiện so với phạm vi dự kiến ​​và độ dài của chuỗi trong một phạm vi.

23

ruby

Nó được sử dụng để chạy mã Ruby tùy ý

24

sleep

Điều này làm cho Logstash ngủ trong một khoảng thời gian cụ thể

25

split

Nó được sử dụng để tách một trường của một sự kiện và đặt tất cả các giá trị phân tách vào các bản sao của sự kiện đó

26

xml

Nó được sử dụng để tạo sự kiện bằng cách phân tích dữ liệu XML có trong nhật ký

Plugin Codec

Codec Plugins có thể là một phần của plugin đầu vào hoặc đầu ra. Các Plugin này được sử dụng để thay đổi hoặc định dạng bản trình bày dữ liệu ghi nhật ký. Logstash cung cấp nhiều Plugin codec và những plugin đó như sau:

Sr.No. Tên & Mô tả plugin
1

avro

Plugin này mã hóa tuần tự hóa các sự kiện Logstash thành dữ liệu avro hoặc giải mã các bản ghi avro thành các sự kiện Logstash

2

cloudfront

Plugin này đọc dữ liệu được mã hóa từ AWS cloudfront

3

cloudtrail

Plugin này được sử dụng để đọc dữ liệu từ AWS cloudtrail

4

collectd

Điều này đọc dữ liệu từ giao thức nhị phân được gọi là được thu thập qua UDP

5

compress_spooler

Nó được sử dụng để nén các sự kiện nhật ký trong Logstash thành các lô được phân phối

6

dots

Điều này được sử dụng theo dõi hiệu suất bằng cách đặt một dấu chấm cho mọi sự kiện để bắt đầu

7

es_bulk

Điều này được sử dụng để chuyển đổi dữ liệu hàng loạt từ Elasticsearch thành các sự kiện Logstash bao gồm siêu dữ liệu Elasticsearch

số 8

graphite

Codec này đọc dữ liệu từ graphite thành các sự kiện và thay đổi sự kiện thành các bản ghi được định dạng graphite

9

gzip_lines

Plugin này được sử dụng để xử lý dữ liệu được mã hóa gzip

10

json

Điều này được sử dụng để chuyển đổi một phần tử duy nhất trong mảng Json thành một sự kiện Logstash duy nhất

11

json_lines

Nó được sử dụng để xử lý dữ liệu Json với dấu phân cách dòng mới

12

line

Plugin này sẽ đọc và ghi sự kiện trong một lần trực tiếp, điều đó có nghĩa là sau dấu phân cách dòng mới sẽ có một sự kiện mới

13

multiline

It is used to convert multiline logging data into a single event

14

netflow

This plugin is used to convert nertflow v5/v9 data to logstash events

15

nmap

It parses the nmap result data into an XML format

16

plain

This reads text without delimiters

17

rubydebug

This plugin will write the output Logstash events using Ruby awesome print library

Build Your Own Plugin

You can also create your own Plugins in Logstash, which suites your requirements. The Logstash-plugin utility is used to create custom Plugins. Here, we will create a filter plugin, which will add a custom message in the events.

Generate the Base Structure

A user can generate the necessary files by using the generate option of the logstash-plugin utility or it is also available on the GitHub.

>logstash-plugin generate --type filter --name myfilter --path c:/tpwork/logstash/lib

Here, type option is used to specify the plugin is either Input, Output or Filter. In this example, we are creating a filter plugin named myfilter. The path option is used to specify the path, where you want your plugin directory to be created. After executing the above mentioned command, you will see that a directory structure is created.

Develop the Plugin

You can find the code file of the plugin in the \lib\logstash\filters folder in the plugin directory. The file extension will be .rb.

In our case, the code file was located inside the following path −

C:\tpwork\logstash\lib\logstash-filter-myfilter\lib\logstash\filters\myfilter.rb

We change the message to − default ⇒ "Hi, You are learning this on tutorialspoint.com" and save the file.

Install the Plugin

To install this plugin, the Gemfile of Logstash need to be modified. You can find this file in the installation directory of Logstash. In our case, it will be in C:\tpwork\logstash. Edit this file using any text editor and add the following text in it.

gem "logstash-filter-myfilter",:path => "C:/tpwork/logstash/lib/logstash-filter-myfilter"

In the above command, we specify the name of the plugin along with where we can find it for installation. Then, run the Logstash-plugin utility to install this plugin.

>logstash-plugin install --no-verify

Testing

Here, we are adding myfilter in one of the previous examples −

logstash.conf

This Logstash config file contains myfilter in the filter section after the grok filter plugin.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input1.log"
   } 
}
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid} -
            %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" ]
   }
   myfilter{}
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output1.log"
      codec => rubydebug
   }
}

Run logstash

We can run Logstash by using the following command.

>logstash –f logsatsh.conf

input.log

The following code block shows the input log data.

INFO - 48566 - TRANSACTION_START - start

output.log

The following code block shows the output log data.

{
   "path" => "C:/tpwork/logstash/bin/log/input.log",
   "@timestamp" => 2017-01-07T06:25:25.484Z,
   "loglevel" => "INFO",
   "logger" => "TRANSACTION_END",
   "@version" => "1",
   "host" => "Dell-PC",
   "label" => "end",
   "message" => "Hi, You are learning this on tutorialspoint.com",
   "taskid" => "48566",
   "tags" => []
}

Publish it on Logstash

A developer can also publish his/her custom plugin to Logstash by uploading it on the github and following the standardized steps defined by the Elasticsearch Company.

Please refer the following URL for more information on publishing −

https://www.elastic.co/guide/en/logstash/current/contributing-to-logstash.html

Logstash offers APIs to monitor its performance. These monitoring APIs extract runtime metrics about Logstash.

Node Info API

This API is used to get the information about the nodes of Logstash. It returns the information of the OS, Logstash pipeline and JVM in JSON format.

You can extract the information by sending a get request to Logstash using the following URL −

GET http://localhost:9600/_node?pretty

Response

Following would be the response of the Node Info API.

{
   "host" : "Dell-PC",
   "version" : "5.0.1",
   "http_address" : "127.0.0.1:9600",
   
   "pipeline" : {
      "workers" : 4,
      "batch_size" : 125,
      "batch_delay" : 5,
      "config_reload_automatic" : false,
      "config_reload_interval" : 3
   },
   "os" : {
      "name" : "Windows 7",
      "arch" : "x86",
      "version" : "6.1",
      "available_processors" : 4
   },
   "jvm" : {
      "pid" : 312,
      "version" : "1.8.0_111",
      "vm_name" : "Java HotSpot(TM) Client VM",
      "vm_version" : "1.8.0_111",
      "vm_vendor" : "Oracle Corporation",
      "start_time_in_millis" : 1483770315412,
      
      "mem" : {
         "heap_init_in_bytes" : 16777216,
         "heap_max_in_bytes" : 1046937600,
         "non_heap_init_in_bytes" : 163840,
         "non_heap_max_in_bytes" : 0
      },
      "gc_collectors" : [ "ParNew", "ConcurrentMarkSweep" ]
   }
}

You can also get the specific information of Pipeline, OS and JVM, by just adding their names in the URL.

GET http://localhost:9600/_node/os?pretty
GET http://localhost:9600/_node/pipeline?pretty
GET http://localhost:9600/_node/jvm?pretty

Plugins Info API

This API is used to get the information about the installed plugins in the Logstash. You can retrieve this information by sending a get request to the URL mentioned below −

GET http://localhost:9600/_node/plugins?pretty

Response

Following would be the response of the Plugins Info API.

{
   "host" : "Dell-PC",
   "version" : "5.0.1",
   "http_address" : "127.0.0.1:9600",
   "total" : 95,
   "plugins" : [ {
      "name" : "logstash-codec-collectd",
      "version" : "3.0.2"
   },
   {
      "name" : "logstash-codec-dots",
      "version" : "3.0.2"
   },
   {
      "name" : "logstash-codec-edn",
      "version" : "3.0.2"
   },
   {
      "name" : "logstash-codec-edn_lines",
      "version" : "3.0.2"
   },
   ............
}

Node Stats API

This API is used to extract the statistics of the Logstash (Memory, Process, JVM, Pipeline) in JSON objects. You can retrieve this information by sending a get request to the URLS mentioned below −

GET http://localhost:9600/_node/stats/?pretty
GET http://localhost:9600/_node/stats/process?pretty
GET http://localhost:9600/_node/stats/jvm?pretty
GET http://localhost:9600/_node/stats/pipeline?pretty

Hot Threads API

This API retrieves the information about the hot threads in Logstash. Hot threads are the java threads, which has high CPU usage and run longer than then normal execution time. You can retrieve this information by sending a get request to the URL mentioned below −

GET http://localhost:9600/_node/hot_threads?pretty

A user can use the following URL to get the response in a form that is more readable.

GET http://localhost:9600/_node/hot_threads?human = true

In this chapter, we will discuss the security and monitoring aspects of Logstash.

Monitoring

Logstash is a very good tool to monitor the servers and services in production environments. Applications in production environment produces different kinds of log data like access Logs, Error Logs, etc. Logstash can count or analyze the number of errors, accesses or other events using filter plugins. This analysis and counting can be used for monitoring different servers and their services.

Logstash offers plugins like HTTP Poller to monitor the website status monitoring. Here, we are monitoring a website named mysite hosted on a local Apache Tomcat Server.

logstash.conf

In this config file, the http_poller plugin is used to hit the site specified in the plugin after a time interval specified in interval setting. Finally, it writes the status of the site to a standard output.

input {
   http_poller {
      urls => {
         site => "http://localhost:8080/mysite"
      }
      request_timeout => 20
      interval => 30
      metadata_target => "http_poller_metadata"
   }
}
output {
   if [http_poller_metadata][code] == 200 {
      stdout {
         codec => line{format => "%{http_poller_metadata[response_message]}"}
      }
   }
   if [http_poller_metadata][code] != 200 {
      stdout {
         codec => line{format => "down"}
      }
   }
}

Run logstash

We can run Logstash with the following command.

>logstash –f logstash.conf

stdout

If the site is up, then the output will be −

Ok

If we stop the site by using the Manager App of Tomcat, the output will change to −

down

Security

Logstash provides plenty of features for secure communication with external systems and supports authentication mechanism. All Logstash plugins support authentication and encryption over HTTP connections.

Security with HTTP protocol

There are settings like user and password for authentication purposes in various plugins offered by Logstash like in the Elasticsearch plugin.

elasticsearch {
   user => <username>
   password => <password>
}

The other authentication is PKI (public key infrastructure) for Elasticsearch. The developer needs to define two settings in the Elasticsearch output plugin to enable the PKI authentication.

elasticsearch {
   keystore => <string_value>
   keystore_password => <password>
}

In the HTTPS protocol, a developer can use the authority’s certificate for SSL/TLS.

elasticsearch {
   ssl => true
   cacert => <path to .pem file>
}

Security with Transport Protocol

To use the transport protocol with Elasticsearch, users need to set protocol setting to transport. This avoids un-marshalling of JSON objects and leads to more efficiency.

The basic authentication is same as performed in http protocol in Elasticsearch output protocol.

elasticsearch {
   protocol => “transport”
   user => <username>
   password => <password>
}

The PKI authentication also needs the SSL sets to be true with other settings in the Elasticsearch output protocol −

elasticsearch {
   protocol => “transport”
   ssl => true
   keystore => <string_value>
   keystore_password => <password>
}

Finally, the SSL security requires a little with more settings than other security methods in communication.

elasticsearch {
   ssl => true
   ssl => true
   keystore => <string_value>
   keystore_password => <password>
   truststore => 
      
        truststore_password => <password> } 
      

Other Security Benefits from Logstash

Logstash can help input system sources to prevent against attacks like denial of service attacks. The monitoring of logs and analyzing the different events in those logs can help system administrators to check the variation in the incoming connections and errors. These analyses can help to see if the attack is happening or going to happen on the servers.

Other products of the Elasticsearch Company such as x-pack and filebeat provides some functionality to communicate securely with Logstash.