[ELK Stack – Phần 1] Hướng dẫn cách cài đặt và sử dụng ElasticSearch ELK Stack trên Ubuntu 16.04

2
481
wikivps elasticsearch-elk-stack
wikivps – elasticsearch elk stack

HƯỚNG DẪN CÀI ĐẶT VÀ SỬ DỤNG ELASTICSEARCH ELK STACK TRÊN UBUNTU 16.04

GIỚI THIỆU

Trong bài hướng dẫn này mình sẽ hướng dẫn bạn cách cài đặt Elasticsearch ELK Stack trên Linux Ubuntu 16.04 ( Bộ ELK này bao gồm Elasticsearch 2.3.x, Logstash 2.3.x, and Kibana 4.5.x) . Hướng dẫn cách cấu hình các service này hoạt động chung với nhau để visualize syslogs và quản lý tập trung logs (centralized location) bằng Filebeat 1.2.x. Logstash là một opensource nó có thể collecting, parsing, and storing logs. Kibana là một web interface xử dụng để search & view logs mà Logstash đã index. Cả 2 tools trên đều base trên Elasticsearch, Elasticsearch dùng để lưu logs.

Việc xử lý tập trung logs rất quan trọng trong các trường hợp xác định lỗi phía server hoặc là application. Nó cho phép mình search bất kỳ loại logs mà chỉ cần đứng ở web interface của Kibana. Nó rất hữu hiệu trong các trường hợp mà lỗi server hoặc application xuất hiện ở nhiều server khác nhau trong hệ thống, đứng ở Kibana bạn có thể search logs của toàn bộ hệ thống

Logstash có thể collect được hầu hết các loại logs, nhưng trong bài viết này mình sẽ giới hạn lại ở syslog.

MỤC TIÊU ĐẠT ĐƯỢC

Mục tiêu của bài viết này là mình có thể dùng Logstash để tập hợp syslog của tất cả các server có mặt trong hệ thống lại với nhau, và cài đặt Kibana để visualize logs.

ELK Stack cài đặt thì có các component chính như sau.
* Logstash: Thành phần chức năng chính của Logstash chính là xử lý incoming logs
* Elasticsearch: Lưu trữ toàn bộ logs mà Logstash index được.
* Kibana: Web interface dùng để searching & visualizing logs, có thể expose ra bằng proxy nginx
* Filebeat: Filebeat server là một logs shipping agent, nó được cài đặt trên Server mà mình muốn lấy logs, nó sẽ đẩy logs từ server này về cho Logstash xử lý. Nó được gọi là Client Servers

wikivps elk infrastructure
wikivps – elk infrastructure

Mình sẽ cài đặt 3 tool đầu tiên vào chung server. Còn FileBeat thì nó sẽ được cài lên server remote.

YÊU CẦU CẦN THIẾT CHO QUÁ TRÌNH CÀI ĐẶT

Cần quyền root để cài đặt ELK Stack
Cấu hình server CPU, Ram, Disk phụ thuộc vào lượng Logs mà bạn muốn thu thập và xử lý. Trong bài này mình sẽ dùng cấu hình trong specs của ELK
* OS: Ubuntu 16.04
* RAM: 4GB
* CPU: 2

BẮT ĐẦU QUÁ TRÌNH CÀI ĐẶT ELK STACK (NOTE: CẦN QUYỀN ROOT)
  1. Cài đặt Java 8 (Install Java 8)
    Elasticsearch và Logstash đều yêu cầu phải có java enviroment mới có thể hoạt động, nên ta tiến hành cài đặt Java.
  2. Cài đặt Elasticsearch (Install Elasticsearch)
    Elasticsearch có thể cài đặt từ package manager như apt & yum từ Elastic’s package source list.
    Chạy command sau để import Elasticsearch public GPG key.

    Tạo Elasticsearch source list file.

    Update apt package database lại.

    Sau đó cài đặt Elasticsearch bằng command sau.

    Lúc này Elasticsearch đã được cài đặt xong, bây giờ tiến hành cấu hình.

    Mở file cấu hình lên và cho elasticsearch listen ở loopback interface, để bên ngoài không thể truy cập vào database elasticsearch bằng HTTP API được (nhầm tránh rũi ro). Tìm dòng “network.host”, uncomment it, và thay thế vào đó bằng localhost như bên dưới

    Lưu lại và thoát. Bây giờ start Elasticsearch lên.

    Cấu hình cho elasticsearch khởi động lúc onboot.

    Finished, giờ tiếp theo ta cài Kibana.
  3. Cài đặt Kibaba (Install Kibana)
    Củng tương tự như Elasticsearch, với Kibana mình củng cài nó từ package manager bằng repo. Đầu tiên add repo cho Kibana.

    Update apt package database.

    Cài đặt Kibana.

    Sau khi cài đặt xong thì tiến hành cấu hình.

    Trong file config tìm dòng server.host, Thay ip 0.0.0.0 bằng localhost. Mình sẽ không public Kibana ra ngoài mà đặt nó phía sau proxy nginx, và vì 1 điều nữa là Kibana nó dở cái nó không có user management, nên mình phải dùng authentication basic của nginx để làm login tạm.

    Bây giờ start, và cấu hình on boot cho kibana

    Lúc này mình chưa sài được Kibana vì chưa có proxy nginx. Bắt đầu cài nginx proxy và public tên miền http://docker.wikivps.net để truy cập vào Kibana web interface.
  4. Cài đặt Nginx (Install Nginx)
    Phải và nên cài nginx proxy để public Kibana ra ngoài internet.
    Sử dụng package manager apt để cài Nginx.

    Sử dụng openssl để tạo admin user, mình đặt tên user là “kibanaadmin” (có thể thay đổi bất kỳ tên nào muốn). Sử dụng user này có thể login vào web interface của kibana

    Khi chạy command trên nó sẽ yêu cầu bạn nhập password cho user kibanaadmin đó, nhập password và nhớ lưu lại để lúc sau sài, sau đó nhấn Enter.
    Bây giờ cấu hình vhost cho nginx để listen trên domain docker.wikivps.net, và proxy pass về Kibana TCP Socket đang listen.
    Mở file cấu hình virtualhost mặt định lên xoá toàn bộ nội dung trong đó.

    Sau khi xoá toàn bộ nội dung trong đó thì copy và paste nội dung này vào thay thế.

    OK, giờ check lại config nginx và start service nginx lên.

    Ở bước này check thử xem cái tool quản lý firewall ufw có được cài đặt chưa, chưa thì bạn cài vào, và chạy command để cho firewall allow open port cho Nginx service.
  5. Cài đặt Logstash (Install Logstash)
    Củng tương tự các service trên Logstash củng cài đặt từ package manager apt, thêm repo để cài đặt Logstash

    Update apt package database.

    Cài đặt Logstash

    Ok, Logstash vừa cài xong, nhưng khoan hãy start nó lên. Giờ mình cấp SSL Certificates và cấu hình vài bước phụ.

    1. Tạo SSL Certificates (Generate SSL Certificates)
      Bởi vì mình dùng tool Filebeat để đẩy log từ remote server về ELK server cho nên mình phải tạo SSL Certificate và key pair. Certificate sẽ được Filebeat sử dụng để verify với ELK Server trước khi đẩy log về.
      Tạo các thư mục chứa certificates và key

      Lúc này nếu mà hệ thống mình có DNS internal à. thì mình sẽ gen key cách khác, còn ở đây mình sẽ chỉ các bạn gen key và cert khi hệ thống không có DNS internal và phải dùng IP của ELK Server.
    2. Tạo SSL cho phép sử dụng IP trong trường hợp không có DNS internal
      Vì dùng ip để tạo SSL Cert nên mình phải thay đổi trường subjectAltName trong file openssl.conf thành IP để mới có thể generate SSL bằng ip được.

      Ok, xong lưu lại file này và tiến hành gen key & cert.

      Sau này khi mà muốn đẩy logs từ server nào về ELK server thì chỉ cần copy certificate file logstash-forwarder.crt này qua, và cấu hình nó trong Filebeat là ok.
    3. Cấu hình Logstash (Configure Logstash)
      File cấu hình của Logstash nó viết dưới dạng JSON, và đặt ở  /etc/logstash/conf.d/. Logstash nó có 3 thành phần chính về cấu hình đó là: Inputs, Filters, and Outputs.
      Đầu tiên ta tạo file có tên là 02-beats-input.conf và cấu hình input filebeat.

      Ta phải mở port 5044 cho beat đầy logs về.

      Bây giờ tạo file 10-syslog-filter.conf, và cấu hình filter cho syslog message.

      Ý nghĩa của phần filter trên là logstash nó sẽ tìm kiếm logs có type là syslog sau đó nó parse incoming syslog log để cho những đoạn logs này nó có thứ tự, cấu trúc hơn, dễ truy vấn hơn.
      Cuối cùng, ta tạo file có tên là 30-elasticsearch-output.conf, để cấu hình output

      Ý nghĩa phần cấu hình output này là logstash sẽ lưu beat data vào elasticsearch.
      NOTE: Nếu bạn muốn cấu hình filter cho ứng dụng khác không phải syslog thì phải chắc chắn rằng tên của các file chứa filter này phải có số thự tự nằm ở giữa (như ví dụ trên thì phải nằm đoạn 02-30)
      Kiểm tra Logstash configuration.

      Sau một vài giây, nếu mà output là “Configuration OK” thì không có lỗi gì. Còn ngược lại thì ráng đọc error log output nha. : ))
      Khởi động lại Logstash, enable on boot, để các thay đổi config phía trên được apply

      OK, Logstash listen ok rồi, giờ mình cài thêm sample kibana dashboards.
  6. Load Kibana Dashboards
    Elastic cung cấp một vài sample Kibana Dashboards và Beats index patterns nó có thể giúp mình tiếp cận Kibana dễ dàng hơn.
    Sử dụng lệnh curl để download file đặt ở home folder.

    Cài đặt tool unzip và tiến hành giải nén file

    Load the sample dashboards, visualizations and Beats index patterns into Elasticsearch with these command.

    Các index patterns sau sẽ được load lên.
    – packetbeat-*
    – topbeat-*
    – filebeat-*
    – winlogbeat-*
    Khi bắt đầu sài kibana, mình sẽ chọn filebeat index pattern làm default.
  7. Load Filebeat Index Template In Elasticsearch
    Vì trong bài viết này mình sẽ demo ship logs bằng FileBeat về ELK Server để lưu vào Elasticsearch, cho nên mình phải Load FileBeat index template để cho Elasticsearch có thể xử lý tốt các trường gửi về từ filebeat một cách tốt nhất.
    Đầu tiên download filebeat index template về.

    Sao đó load template lên

    Nếu template được load thành công thì sẽ thấy output như sau.

    Ok, hiện tại thì ELK Server sẵng sàn để nhập logs ship từ FileBeat về, giờ mình đi cài đặt FileBeat trên server remote (Client Servers) để ship logs về.
  8. Cài đặt Filebeat (Setup Filebeat – Add client servers)
    1. Copy SSL Certificate
      Đứng từ ELK Server copy cái file certificate nãy tạo ở bước trên à. Lưu vào thư mục /tmp

      Tạo thư mục lưu và chuyển file vừa copy về vào thư mục cert mới tạo này.

      Ok, giờ tiến hành cài Filebeat package
    2. Cài đặt FileBeat package (Install Filebeat package)
      Đứng từ server remote (client servers), tạo repo filebeat để cài đặt từ package manager.

      Ok, Filebeat đã cài đặt nhưng chưa được config, giờ mình sẽ cấu hình cho filebeat.
    3. Cấu hình FileBeat (Configure FileBeat)
      Phần này nếu bạn nào lười thì copy file cấu hình sẵn này bỏ vào thư mục /etc/filebeat/filebeat.yml luôn, sau đó sữa lại cái trường hosts: [“ip_elk_server:5044”], thay cái ip_elk_server bằng ip internal của ELK Server là được.
      Còn nếu cấu hình từng bước để hiểu, thì ta bắt đầu cấu hình từ file config default của filebeat như sau.
      Mở file cấu hình lên.

      Chú ý là file config của filebeat nó dùng yaml format, cho nên nó rất rất là quan trọng các dấu cách (space). chú ý copy hay ghỏ lại phải canh dấu cách cho chuẩn không là ăn hành.
      Ở phần đầu ta thấy cái prospectors section, chổ này định nghĩa log nào được đầy về và cách sử lý. Mình sẽ cấu hình lại như sau

      Ý nghĩa phần cấu hình trên là chỉ lấy syslog và auth log thôi, còn lại comment lại hết.
      Tiếp theo là tìm dòng document_type, uncomment và điền value mới cho nó là “syslog” như sau.

      Tiếp theo tìm phần Logstash output section. uncomment nó, sau đó trong section này uncomment cái dòng host, sau đó edit lại localhost bằng ip của ELK Server như sau.

      Next, tìm tls section và uncomment nó. Tìm dòng certificate_authorities thay đổi value của nó thành như sau.

      Ok, bây giờ Filebeat đã sử dụng SSL của ELK Server tạo lúc đầu.
      Lưu lại và thoát.
      Restart lại Filebeat

      Nếu bạn không chắc cấu hình chính xác thì quay lại bước đầu của phần này lấy cái file temp của mình up lên à. check lại cấu hình. 😀
    4. Kiểm tra Filebeat sau khi cài đặt (Test FileBeat installation)
      Trên ELK Server, kiểm tra kiểm tra xem Elasticsearch có nhận được data chưa, bằng cách query filebeat index với command.

      Nếu mà thành công thì nó sẽ phụt ra một đống result như này.

      Nếu mà không có output ra như vậy thì check lại xem lỗi đâu, lần mò lại thử.
  9. Kiểm tra lại Kibana
    Ok hết rồi giờ login vào domain docker.wikivps.net với thông tin tài khoản kibanaadmin trước đó. Sau khi login lần đầu mình sẽ chọn index patterns là filebeat-*, và set default như hình sau.

    wikivps - cấu hình index pattern mặt định
    wikivps – cấu hình index pattern mặt định

    Sau đó chuyển qua tab Discover, ở tab này mặt định dữ liệu load lên sẽ là 15 phút gần nhất bạn có thể thay đổi được thời gian này thành 30 phút, 1 ngày, …
    Và đứng ở tab này bạn có thể search, để xử lý sự cố hệ thống hay ứng dụng của mình. ví dụ như search thông tin login user root từ syslog như sau.

    wikivps - cách sử dụng search trên kibana
    wikivps – cách sử dụng search trên kibana

    OK, xong rồi, nếu bạn còn nhiều client server thì cứ cài filebeat và cấu hình tương tự vậy nhé. Mình sẽ cố gắng viết thêm bài về lấy log của virtualhost webservice để theo dõi traffic web, và cố gắng viết bài về hướng dẫn sử dụng kibana về search về visualizations. Bài viết này mới chỉ là khởi đầu.
    Chúc mọi người có ngày mới vui vẻ !

 

 

Bình luận qua Facebook

2 BÌNH LUẬN

  1. Chào bạn,
    Bài viết của bạn khá hay nó sẽ rất hữu ích. Hiện nay xu thế với công nghệ Opensource ELK một hệ sinh thái rất hay. Mình xin đề xuất nếu có thời gian bạn có thể xem thêm các mục sau:
    1) ELK Stack không dừng lại ở log có cấu trúc –> Xử lý với những log ứng dụng phi cấu trúc
    2) 3 phương thức để input log trong bài này bạn đang dùng 1 cách
    (cá nhân mình thì tổng hợp nó thành 3 cách sau: (1) qua Agent shiper (2) qua socket (3) qua restful)
    3) Nghiên cứu mở rộng hơn tính năng của hệ sinh thái ELK
    a. Ossec – wazuh (tích hợp với wazuh đóng vai trong ossec)
    b. APM (application performance monitoring)
    Chúc bạn thành công!!!! hy vọng VN sớm có cộng đồng của elk để cùng chia sẻ chi thức
    Rất mong nhận được chia sẻ từ các bạn — phamductuk47@gmail.com

BÌNH LUẬN

Please enter your comment!
Please enter your name here

Giải bài toán nhỏ này nhé !!! *