Thứ ba, 20/11/2018 | 00:00 GMT+7

Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.04

Elastic Stack - trước đây được gọi là ELK Stack - là một tập hợp phần mềm open-souce do Elastic production , cho phép bạn tìm kiếm, phân tích và trực quan hóa các bản ghi được tạo từ bất kỳ nguồn nào ở bất kỳ định dạng nào, một phương pháp được gọi là ghi log tập trung . Ghi log tập trung có thể rất hữu ích khi cố gắng xác định sự cố với server hoặc ứng dụng của bạn, vì nó cho phép bạn tìm kiếm qua tất cả log của bạn ở một nơi duy nhất. Nó cũng hữu ích vì nó cho phép bạn xác định các sự cố trải dài trên nhiều server bằng cách tương quan các log của chúng trong một khung thời gian cụ thể.

Ngăn xếp elastic có bốn thành phần chính:

  • Elasticsearch : một công cụ tìm kiếm RESTful phân tán lưu trữ tất cả dữ liệu đã thu thập.
  • Logstash : thành phần xử lý dữ liệu của Elastic Stack gửi dữ liệu đến Elasticsearch.
  • Kibana : một giao diện web để tìm kiếm và hiển thị các bản ghi.
  • Beats : trình gửi dữ liệu nhẹ, cho một mục đích có thể gửi dữ liệu từ hàng trăm hoặc hàng nghìn máy tới Logstash hoặc Elasticsearch.

Trong hướng dẫn này, bạn sẽ cài đặt Elastic Stack trên server Ubuntu 16.04. Bạn sẽ học cách cài đặt tất cả các thành phần của Elastic Stack - bao gồm Filebeat , một Beat được sử dụng để chuyển tiếp và tập trung các log và file - và cấu hình chúng để thu thập và trực quan hóa log hệ thống. Ngoài ra, vì Kibana thường chỉ có sẵn trên localhost , ta sẽ sử dụng Nginx để proxy cho nó để nó có thể truy cập được qua trình duyệt web. Ta sẽ cài đặt tất cả các thành phần này trên một server duy nhất, mà ta sẽ gọi là server Elastic Stack của ta .

Lưu ý : Khi cài đặt Ngăn xếp elastic , bạn phải sử dụng cùng một version trên toàn bộ ngăn xếp. Trong hướng dẫn này, ta sẽ cài đặt các version mới nhất của toàn bộ ngăn xếp, tại thời điểm viết bài này, Elasticsearch 6.5.1, Kibana 6.5.1, Logstash 6.5.1 và Filebeat 6.5.1.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần những thứ sau:

  • Server Ubuntu 16.04 được cài đặt theo Hướng dẫn cài đặt server ban đầu cho Ubuntu 16.04 của ta , bao gồm user không phải root có quyền sudo và firewall được cấu hình bằng ufw . Số lượng CPU, RAM và bộ nhớ mà server Elastic Stack của bạn sẽ yêu cầu tùy thuộc vào dung lượng log mà bạn định thu thập. Đối với hướng dẫn này, ta sẽ sử dụng một VPS với các thông số kỹ thuật sau cho server Elastic Stack của ta :

    • Hệ điều hành: Ubuntu 16.04
    • RAM: 4GB
    • CPU: 2
  • Java 8 - được yêu cầu bởi Elasticsearch và Logstash - được cài đặt trên server của bạn. Để cài đặt phần mềm này, hãy làm theo phần “Cài đặt Oracle JDK” trong hướng dẫn của ta về cách cài đặt Java 8 trên Ubuntu 16.04.

  • Nginx được cài đặt trên server của bạn, mà ta sẽ cấu hình sau trong hướng dẫn này làm Reverse Proxy cho Kibana. Làm theo hướng dẫn của ta về Cách cài đặt Nginx trên Ubuntu 16.04 để cài đặt điều này.

Ngoài ra, vì Elastic Stack được sử dụng để truy cập thông tin có giá trị về server của bạn mà bạn không muốn user lạ truy cập, điều quan trọng là bạn phải giữ an toàn cho server của bạn bằng cách cài đặt certificate TLS / SSL.Đây là tùy chọn nhưng được khuyến khích mạnh mẽ .

Tuy nhiên, vì cuối cùng bạn sẽ áp dụng các thay đổi đối với khối server Nginx của bạn trong suốt quá trình hướng dẫn này, nên bạn có thể hoàn thành hướng dẫn Let's Encrypt trên Ubuntu 16.04 ở cuối bước thứ hai của hướng dẫn này. Với ý nghĩ đó, nếu bạn cấu hình Let's Encrypt trên server của bạn , bạn cần có những thứ sau trước khi thực hiện:

  • Tên domain đủ điều kiện (FQDN). Hướng dẫn này sẽ sử dụng example.com xuyên suốt. Bạn có thể mua domain trên Namecheap , nhận một domain miễn phí trên Freenom hoặc sử dụng công ty đăng ký domain mà bạn chọn.
  • Cả hai bản ghi DNS sau được cài đặt cho server của bạn. Bạn có thể theo dõi phần giới thiệu này về DigitalOcean DNS để biết chi tiết về cách thêm chúng.

    • Bản ghi A với example.com trỏ đến địa chỉ IP công cộng của server của bạn.
    • Một bản ghi A với www. example.com trỏ đến địa chỉ IP công cộng của server của bạn.

Bước 1 - Cài đặt và cấu hình Elasticsearch

Các thành phần Elastic Stack không có sẵn trong repository mặc định của Ubuntu. Tuy nhiên, chúng có thể được cài đặt với APT sau khi thêm danh sách nguồn gói của Elastic.

Tất cả các gói của Elastic Stack đều được ký bằng khóa ký Elasticsearch để bảo vệ hệ thống của bạn khỏi giả mạo gói. Các gói đã được kiểm nghiệm bằng khóa sẽ được người quản lý gói của bạn coi là tin cậy . Trong bước này, bạn sẽ nhập khóa GPG công khai Elasticsearch và thêm danh sách nguồn gói Elastic để cài đặt Elasticsearch.

Để bắt đầu, hãy chạy lệnh sau để nhập khóa GPG công khai Elasticsearch vào APT:

  • wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Tiếp theo, thêm danh sách nguồn elastic vào folder sources.list.d , nơi APT sẽ tìm kiếm các nguồn mới:

  • echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

Tiếp theo, cập nhật danh sách gói của bạn để APT sẽ đọc nguồn Đàn hồi mới:

  • sudo apt-get update

Sau đó cài đặt Elasticsearch bằng lệnh này:

  • sudo apt-get install elasticsearch

Sau khi cài đặt xong Elasticsearch, hãy sử dụng editor bạn muốn để chỉnh sửa file cấu hình chính của Elasticsearch, elasticsearch.yml . Ở đây, ta sẽ sử dụng nano :

  • sudo nano /etc/elasticsearch/elasticsearch.yml

Lưu ý: Tệp cấu hình của Elasticsearch ở định dạng YAML, nghĩa là thụt lề rất quan trọng! Đảm bảo rằng bạn không thêm bất kỳ khoảng trống thừa nào khi chỉnh sửa file này.

Elasticsearch lắng nghe lưu lượng truy cập từ mọi nơi trên cổng 9200 . Bạn cần hạn chế quyền truy cập từ bên ngoài vào version Elasticsearch của bạn để ngăn người ngoài đọc dữ liệu hoặc tắt cụm Elasticsearch của bạn thông qua API REST. Tìm dòng chỉ định network.host , bỏ ghi chú và thay thế giá trị của nó bằng localhost để nó trông giống như sau:

/etc/elasticsearch/elasticsearch.yml
. . . network.host: localhost . . . 

Lưu và elasticsearch.yml bằng cách nhấn CTRL+X , tiếp theo là Y rồi ENTER nếu bạn đang sử dụng nano . Sau đó, khởi động dịch vụ Elasticsearch với systemctl :

  • sudo systemctl start elasticsearch

Tiếp theo, chạy lệnh sau để cho phép Elasticsearch khởi động mỗi khi server của bạn khởi động:

  • sudo systemctl enable elasticsearch

Bạn có thể kiểm tra xem dịch vụ Elasticsearch của bạn có đang chạy hay không bằng cách gửi một yêu cầu HTTP:

  • curl -X GET "localhost:9200"

Bạn sẽ thấy một phản hồi hiển thị một số thông tin cơ bản về nút local của bạn, tương tự như sau:

Output
{ "name" : "DX2KuVz", "cluster_name" : "elasticsearch", "cluster_uuid" : "Mscq8fVcR5-xgxFB3l35lg", "version" : { "number" : "6.5.0", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "816e6f6", "build_date" : "2018-11-09T18:58:36.352602Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }

Bây giờ Elasticsearch đã được cài đặt và chạy, hãy cài đặt Kibana, thành phần tiếp theo của Elastic Stack.

Bước 2 - Cài đặt và cấu hình Trang tổng quan Kibana

Theo tài liệu chính thức , bạn chỉ nên cài đặt Kibana sau khi cài đặt Elasticsearch. Việc cài đặt theo thứ tự này đảm bảo các thành phần mà mỗi sản phẩm phụ thuộc vào đều được đặt đúng vị trí.

Vì bạn đã thêm nguồn gói Elastic ở bước trước, bạn chỉ có thể cài đặt các thành phần còn lại của Elastic Stack bằng APT:

  • sudo apt-get install kibana

Sau đó, kích hoạt và bắt đầu dịch vụ Kibana:

  • sudo systemctl enable kibana
  • sudo systemctl start kibana

Bởi vì Kibana được cấu hình để chỉ lắng nghe trên localhost , ta phải cài đặt một reverse-proxy để cho phép bên ngoài truy cập vào nó. Ta sẽ sử dụng Nginx cho mục đích này, đã được cài đặt sẵn trên server của bạn.

Đầu tiên, sử dụng lệnh openssl để tạo user Kibana quản trị mà bạn sẽ sử dụng để truy cập giao diện web Kibana. Ví dụ, ta sẽ đặt tên cho account này là kibanaadmin , nhưng đảm bảo tính bảo mật cao hơn, ta khuyên bạn nên chọn một tên không chuẩn cho user của bạn sẽ khó đoán.

Lệnh sau sẽ tạo user và password Kibana quản trị và lưu trữ chúng trong file htpasswd.users . Bạn sẽ cấu hình Nginx để yêu cầu tên user và password này và đọc file này trong giây lát:

  • echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

Nhập và xác nhận password khi được yêu cầu . Hãy nhớ hoặc ghi lại thông tin đăng nhập này, vì bạn cần nó để truy cập giao diện web Kibana.

Tiếp theo, ta sẽ tạo một file khối server Nginx. Để làm ví dụ, ta sẽ gọi file này là example.com , mặc dù bạn có thể thấy hữu ích khi đặt tên mô tả hơn. Ví dụ: nếu bạn đã cài đặt bản ghi FQDN và DNS cho server này, bạn có thể đặt tên file này sau FQDN của bạn :

  • sudo nano /etc/nginx/sites-available/example.com

Thêm khối mã sau vào file , đảm bảo cập nhật example.com để trùng với FQDN hoặc địa chỉ IP công cộng của server của bạn. Mã này cấu hình Nginx để hướng lưu lượng truy cập HTTP của server của bạn đến ứng dụng Kibana, đang lắng nghe trên localhost:5601 . Ngoài ra, nó cấu hình Nginx để đọc file htpasswd.users và yêu cầu xác thực cơ bản.

Lưu ý nếu bạn đã làm theo hướng dẫn của ta về Cách cài đặt khối server Nginx ( Server ảo) trên Ubuntu 16.04 , bạn có thể đã tạo file khối server này và điền vào nó một số nội dung. Trong trường hợp đó, hãy xóa tất cả nội dung hiện có trong file trước khi thêm nội dung sau:

/etc/nginx/sites-available/example.com
server {     listen 80;      server_name example.com;      auth_basic "Restricted Access";     auth_basic_user_file /etc/nginx/htpasswd.users;      location / {         proxy_pass http://localhost:5601;         proxy_http_version 1.1;         proxy_set_header Upgrade $http_upgrade;         proxy_set_header Connection 'upgrade';         proxy_set_header Host $host;         proxy_cache_bypass $http_upgrade;     } } 

Khi bạn hoàn tất, hãy lưu file .

Tiếp theo, kích hoạt cấu hình mới bằng cách tạo một softlink đến folder sites-enabled . Nếu bạn đã tạo file khối server có cùng tên trong yêu cầu Nginx, bạn không cần chạy lệnh này:

  • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

Sau đó kiểm tra cấu hình để tìm lỗi cú pháp:

  • sudo nginx -t

Nếu bất kỳ lỗi nào được báo cáo trong kết quả của bạn, hãy quay lại và kiểm tra kỹ xem nội dung bạn đã đặt trong file cấu hình của bạn đã được thêm đúng chưa. Khi bạn thấy syntax is ok trong kết quả , hãy tiếp tục và khởi động lại dịch vụ Nginx:

  • sudo systemctl restart nginx

Nếu bạn đã làm theo hướng dẫn cài đặt server ban đầu, bạn nên bật firewall UFW. Để cho phép kết nối với Nginx, ta có thể điều chỉnh các luật bằng lệnh :

  • sudo ufw allow 'Nginx Full'

Lưu ý: Nếu bạn đã làm theo hướng dẫn Nginx yêu cầu , bạn có thể đã tạo luật UFW cho phép cấu hình Nginx HTTP thông qua firewall . Vì cấu hình Nginx Full cho phép cả truy cập HTTP và HTTPS thông qua firewall , bạn có thể xóa luật bạn đã tạo trong hướng dẫn tiên quyết một cách an toàn. Làm như vậy với lệnh sau:

  • sudo ufw delete allow 'Nginx HTTP'

Kibana hiện có thể truy cập thông qua FQDN của bạn hoặc địa chỉ IP công cộng của server Elastic Stack của bạn. Bạn có thể kiểm tra trang trạng thái của server Kibana bằng cách chuyển đến địa chỉ sau và nhập thông tin đăng nhập của bạn khi được yêu cầu :

http://your_server_ip/status 

Trang trạng thái này hiển thị thông tin về việc sử dụng tài nguyên của server và liệt kê các plugin đã cài đặt.

| Trang trạng thái Kibana

Lưu ý : Như đã đề cập trong phần Yêu cầu , bạn nên bật SSL / TLS trên server của bạn . Làm theo hướng dẫn này ngay bây giờ để nhận certificate SSL miễn phí cho Nginx trên Ubuntu 16.04. Sau khi có certificate SSL / TLS, bạn có thể quay lại và hoàn thành hướng dẫn này.

Bây giờ console Kibana đã được cấu hình, hãy cài đặt thành phần tiếp theo: Logstash.

Bước 3 - Cài đặt và cấu hình Logstash

Mặc dù Beats có thể gửi dữ liệu trực tiếp đến database Elasticsearch, nhưng ta khuyên bạn nên sử dụng Logstash để xử lý dữ liệu. Điều này sẽ cho phép bạn thu thập dữ liệu từ các nguồn khác nhau, chuyển đổi nó thành một định dạng chung và xuất nó sang một database khác.

Cài đặt Logstash bằng lệnh này:

  • sudo apt-get install logstash

Sau khi cài đặt Logstash, bạn có thể chuyển sang cấu hình nó. Các file cấu hình của Logstash được viết ở định dạng JSON và nằm trong folder /etc/logstash/conf.d . Khi bạn cấu hình nó, sẽ hữu ích khi nghĩ về Logstash như một đường ống lấy dữ liệu ở một đầu, xử lý dữ liệu theo cách này hay cách khác và gửi nó đến đích (trong trường hợp này, đích là Elasticsearch). Một đường ống Logstash có hai phần tử bắt buộc, inputoutput , và một phần tử tùy chọn, filter . Các plugin đầu vào sử dụng dữ liệu từ một nguồn, các plugin bộ lọc xử lý dữ liệu và các plugin kết quả ghi dữ liệu vào đích.

Đường dẫn logstash

Tạo file cấu hình có tên 02-beats-input.conf , nơi bạn sẽ cài đặt đầu vào Filebeat của bạn :

  • sudo nano /etc/logstash/conf.d/02-beats-input.conf

Chèn cấu hình input sau. Điều này chỉ định một đầu vào beats sẽ lắng nghe trên cổng TCP 5044 .

/etc/logstash/conf.d/02-beats-input.conf
input {   beats {     port => 5044   } } 

Lưu và đóng file . Tiếp theo, tạo một file cấu hình được gọi là 10-syslog-filter.conf , nơi ta sẽ bổ sung thêm một bộ lọc cho các bản ghi hệ thống hay còn gọi là syslogs:

  • sudo nano /etc/logstash/conf.d/10-syslog-filter.conf

Chèn cấu hình bộ lọc log hệ thống sau. Cấu hình log hệ thống mẫu này được lấy từ tài liệu Elastic chính thức . Bộ lọc này được sử dụng để phân tích cú pháp log hệ thống đến để làm cho chúng có cấu trúc và có thể sử dụng được bởi các console Kibana được định nghĩa :

/etc/logstash/conf.d/10-syslog-filter.conf
filter {   if [fileset][module] == "system" {     if [fileset][name] == "auth" {       grok {         match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",                   "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",                   "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",                   "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",                   "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",                   "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",                   "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }         pattern_definitions => {           "GREEDYMULTILINE"=> "(.|\n)*"         }         remove_field => "message"       }       date {         match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]       }       geoip {         source => "[system][auth][ssh][ip]"         target => "[system][auth][ssh][geoip]"       }     }     else if [fileset][name] == "syslog" {       grok {         match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }         pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }         remove_field => "message"       }       date {         match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]       }     }   } } 

Lưu file khi hoàn tất.

Cuối cùng, tạo một file cấu hình có tên 30-elasticsearch-output.conf :

  • sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf

Chèn cấu hình output sau. Về cơ bản, kết quả này cấu hình Logstash để lưu trữ dữ liệu Beats trong Elasticsearch, đang chạy tại localhost:9200 , trong một index được đặt tên theo Beat được sử dụng. Beat được sử dụng trong hướng dẫn này là Filebeat:

/etc/logstash/conf.d/30-elasticsearch-output.conf
output {   elasticsearch {     hosts => ["localhost:9200"]     manage_template => false     index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"   } } 

Lưu và đóng file .

Nếu bạn muốn thêm bộ lọc cho các ứng dụng khác sử dụng đầu vào Filebeat, hãy nhớ đặt tên cho các file để chúng được sắp xếp giữa cấu hình đầu vào và kết quả , nghĩa là tên file phải bắt đầu bằng một số có hai chữ số từ 02 đến 30 .

Kiểm tra cấu hình Logstash của bạn bằng lệnh này:

  • sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

Nếu không có lỗi cú pháp nào, kết quả của bạn sẽ hiển thị Configruation OK hình Configruation OK sau một lúc. Nếu bạn không thấy điều này trong kết quả của bạn , hãy kiểm tra bất kỳ lỗi nào xuất hiện trong kết quả của bạn và cập nhật cấu hình của bạn để sửa chúng.

Nếu kiểm tra cấu hình của bạn thành công, hãy bắt đầu và bật Logstash để áp dụng các thay đổi cấu hình:

  • sudo systemctl start logstash
  • sudo systemctl enable logstash

Bây giờ Logstash đang chạy chính xác và được cấu hình đầy đủ, hãy cài đặt Filebeat.

Bước 4 - Cài đặt và cấu hình Filebeat

Elastic Stack sử dụng một số trình gửi dữ liệu nhẹ được gọi là Beats để thu thập dữ liệu từ nhiều nguồn khác nhau và vận chuyển chúng đến Logstash hoặc Elasticsearch. Dưới đây là các Nhịp đập hiện có sẵn từ Elastic:

  • Filebeat : thu thập và gửi các file log .
  • Metricbeat : thu thập số liệu từ hệ thống và dịch vụ của bạn.
  • Packetbeat : thu thập và phân tích dữ liệu mạng.
  • Winlogbeat : thu thập log sự kiện của Windows.
  • Auditbeat : thu thập dữ liệu khung kiểm toán Linux và giám sát tính toàn vẹn của file .
  • Nhịp tim : theo dõi các dịch vụ để biết tính khả dụng của chúng bằng cách thăm dò tích cực.

Trong hướng dẫn này, ta sẽ sử dụng Filebeat để chuyển tiếp các bản ghi local đến Elastic Stack của ta .

Cài đặt Filebeat bằng APT:

  • sudo apt-get install filebeat

Tiếp theo, cấu hình Filebeat để kết nối với Logstash. Ở đây, ta sẽ sửa đổi file cấu hình ví dụ đi kèm với Filebeat.

Mở file cấu hình Filebeat:

  • sudo nano /etc/filebeat/filebeat.yml

Lưu ý: Như với Elasticsearch, file cấu hình của Filebeat có định dạng YAML. Điều này nghĩa là thụt lề thích hợp là rất quan trọng, vì vậy hãy đảm bảo sử dụng cùng một số khoảng trắng được chỉ ra trong các hướng dẫn này.

Filebeat hỗ trợ nhiều kết quả kết quả , nhưng bạn thường chỉ gửi các sự kiện trực tiếp đến Elasticsearch hoặc tới Logstash để xử lý thêm. Trong hướng dẫn này, ta sẽ sử dụng Logstash để thực hiện xử lý bổ sung đối với dữ liệu được Filebeat thu thập. Filebeat sẽ không cần gửi bất kỳ dữ liệu nào trực tiếp đến Elasticsearch, vì vậy hãy tắt kết quả đó. Để làm như vậy, hãy tìm phần output.elasticsearch và comment các dòng sau bằng cách đặt trước chúng bằng dấu # :

/etc/filebeat/filebeat.yml
... #output.elasticsearch:   # Array of hosts to connect to.   #hosts: ["localhost:9200"] ... 

Sau đó, cấu hình phần output.logstash . Bỏ ghi chú các dòng output.logstash:hosts: ["localhost:5044"] bằng cách bỏ dấu # . Điều này sẽ cấu hình Filebeat để kết nối với Logstash trên server Elastic Stack của bạn tại cổng 5044 , cổng mà ta đã chỉ định đầu vào Logstash trước đó:

/etc/filebeat/filebeat.yml
. . . output.logstash:   # The Logstash hosts   hosts: ["localhost:5044"] . . . 

Lưu và đóng file .

Chức năng của Filebeat có thể được mở rộng với các module Filebeat . Trong hướng dẫn này, ta sẽ sử dụng module hệ thống , module này thu thập và phân tích các bản ghi được tạo bởi dịch vụ ghi log hệ thống của các bản phân phối Linux phổ biến.

Hãy kích hoạt nó:

  • sudo filebeat modules enable system

Bạn có thể xem danh sách các module được bật và tắt bằng lệnh:

  • sudo filebeat modules list

Bạn sẽ thấy một danh sách tương tự như sau:

Output
Enabled: system Disabled: apache2 auditd elasticsearch haproxy icinga iis kafka kibana logstash mongodb mysql nginx osquery postgresql redis suricata traefik

Theo mặc định, Filebeat được cấu hình để sử dụng đường dẫn mặc định cho log hệ thống và log ủy quyền. Trong trường hợp của hướng dẫn này, bạn không cần phải thay đổi bất kỳ điều gì trong cấu hình. Bạn có thể xem các thông số của module trong file cấu hình /etc/filebeat/modules.d/system.yml .

Tiếp theo, tải mẫu index vào Elasticsearch. Chỉ mục Elasticsearch là một tập hợp các tài liệu có các đặc điểm tương tự. Các index được xác định bằng một tên, được sử dụng để chỉ index khi thực hiện các hoạt động khác nhau bên trong nó. Mẫu index sẽ được tự động áp dụng khi một index mới được tạo.

Để tải mẫu, hãy sử dụng lệnh sau:

  • sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
Output
Loaded index template

Filebeat được đóng gói với các console Kibana mẫu cho phép bạn trực quan hóa dữ liệu Filebeat trong Kibana. Trước khi có thể sử dụng trang tổng quan, bạn cần tạo mẫu index và tải trang tổng quan vào Kibana.

Khi trang tổng quan tải, Filebeat kết nối với Elasticsearch để kiểm tra thông tin version . Để tải trang tổng quan khi Logstash được bật, bạn cần tắt kết quả Logstash và bật kết quả Elasticsearch:

  • sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

Bạn sẽ thấy kết quả giống như sau:

Output
. . . 2018-11-19T21:29:45.239Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-11-19T21:29:45.240Z INFO [publisher] pipeline/module.go:110 Beat name: elk-16-03 2018-11-19T21:29:45.241Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-11-19T21:29:45.248Z INFO elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.0 2018-11-19T21:29:45.253Z INFO template/load.go:129 Template already exists and will not be overwritten. Loaded index template Loading dashboards (Kibana must be running and reachable) 2018-11-19T21:29:45.253Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-11-19T21:29:45.256Z INFO elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.0 2018-11-19T21:29:45.256Z INFO kibana/client.go:118 Kibana url: http://localhost:5601 2018-11-19T21:30:15.404Z INFO instance/beat.go:741 Kibana dashboards successfully loaded. Loaded dashboards 2018-11-19T21:30:15.404Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-11-19T21:30:15.408Z INFO elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.0 2018-11-19T21:30:15.408Z INFO kibana/client.go:118 Kibana url: http://localhost:5601 2018-11-19T21:30:15.457Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled 2018-11-19T21:30:15.505Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled Loaded machine learning job configurations

Đến đây bạn có thể bắt đầu và bật Filebeat:

  • sudo systemctl start filebeat
  • sudo systemctl enable filebeat

Nếu bạn đã cài đặt Elastic Stack đúng cách, Filebeat sẽ bắt đầu gửi log hệ thống và log ủy quyền của bạn tới Logstash, sau đó sẽ tải dữ liệu đó vào Elasticsearch.

Để xác minh Elasticsearch thực sự đang nhận dữ liệu này, hãy truy vấn index Filebeat bằng lệnh sau:

  • curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Bạn sẽ thấy một kết quả giống như sau:

Output
{ "took" : 7, "timed_out" : false, "_shards" : { "total" : 3, "successful" : 3, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 1580, "max_score" : 1.0, "hits" : [ { "_index" : "filebeat-6.5.0-2018.11.19", "_type" : "doc", "_id" : "HnDiLWcB5tvUruXKVbok", "_score" : 1.0, "_source" : { "input" : { "type" : "log" }, ...

Nếu kết quả của bạn hiển thị tổng số lần truy cập là 0, Elasticsearch đang không tải bất kỳ log nào trong index bạn đã tìm kiếm và bạn cần xem lại cài đặt của bạn để tìm lỗi. Nếu bạn nhận được kết quả mong đợi, hãy tiếp tục bước tiếp theo, trong đó ta sẽ xem cách chuyển qua một số trang tổng quan của Kibana.

Bước 5 - Khám phá Trang tổng quan Kibana

Hãy xem Kibana, giao diện web mà ta đã cài đặt trước đó.

Trong trình duyệt web, hãy truy cập FQDN hoặc địa chỉ IP công cộng của server Elastic Stack của bạn. Sau khi nhập thông tin đăng nhập mà bạn đã xác định ở Bước 2, bạn sẽ thấy trang chủ Kibana:

Trang chủ Kibana

Nhấp vào liên kết Khám phá trong thanh chuyển bên trái. Trên trang Khám phá , chọn mẫu index filebeat- * được định nghĩa để xem dữ liệu Filebeat. Theo mặc định, điều này sẽ hiển thị cho bạn tất cả dữ liệu log trong 15 phút qua. Bạn sẽ thấy một biểu đồ với các sự kiện log và một số thông báo log bên dưới:

Trang khám phá

Tại đây, bạn có thể tìm kiếm và duyệt qua log của bạn và cũng có thể tùy chỉnh trang tổng quan của bạn . Tuy nhiên, tại thời điểm này, sẽ không có nhiều thứ trong đó vì bạn chỉ thu thập các syslog từ server Elastic Stack của bạn .

Sử dụng console bên trái để chuyển đến trang Control panel và tìm kiếm console Hệ thống Filebeat . Khi đó, bạn có thể tìm kiếm các trang tổng quan mẫu đi kèm với module system của Filebeat.

Ví dụ: bạn có thể xem số liệu thống kê chi tiết dựa trên thông báo log hệ thống của bạn :

Trang tổng quan Syslog

Bạn cũng có thể xem user nào đã sử dụng sudo và khi nào:

Trang tổng quan Sudo

Kibana có nhiều tính năng khác, chẳng hạn như đồ thị và lọc, vì vậy hãy thoải mái khám phá.

Kết luận

Trong hướng dẫn này, bạn đã học cách cài đặt và cấu hình Elastic Stack để thu thập và phân tích log hệ thống. Lưu ý bạn chỉ có thể gửi bất kỳ loại log hoặc dữ liệu được lập index nào đến Logstash bằng Beats , nhưng dữ liệu sẽ trở nên hữu ích hơn nếu nó được phân tích cú pháp và cấu trúc bằng bộ lọc Logstash, vì điều này biến dữ liệu thành một định dạng nhất quán có thể đọc được dễ dàng bởi Elasticsearch.


Tags:

Các tin liên quan

Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.04
2018-11-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 18.04
2018-11-06
Cách triển khai ứng dụng Symfony 4 để sản xuất với LEMP trên Ubuntu 18.04
2018-10-18
Cách cài đặt và sử dụng Composer trên Ubuntu 18.04
2018-10-16
Làm thế nào để kiểm tra các vai trò không thể phục hồi với Molecule trên Ubuntu 18.04
2018-10-02
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04 [Quickstart]
2018-07-16
Cách bật SFTP mà không cần quyền truy cập Shell trên Ubuntu 18.04
2018-07-13
Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 18.04
2018-07-13
Cách cài đặt Git trên Ubuntu 18.04 [Quickstart]
2018-07-12
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04
2018-07-12