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.comxuyê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.comtrỏ đế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.comtrỏ đến địa chỉ IP công cộng của server của bạn.
 
-  Bản ghi A với 
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:
. . . 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, hãy 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:
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.
 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, input và output , 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. 
 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 .
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 :
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:
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 # :
... #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: và 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 đó:
. . . 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:
OutputEnabled: 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"]' 
OutputLoaded 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:
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:
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 :
 Bạn cũng có thể xem  user  nào đã sử dụng sudo và khi nào: 
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.
Các tin liên quan
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.042018-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 cài đặt Ruby on Rails với rbenv trên Ubuntu 18.04
2018-07-13
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 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
 

