Bài tập

Hướng dẫn Cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên CentOS 7

Huy Erick

Lưu ý: Đây là một phiên bản cải tiến và nâng cấp từ bài viết gốc. Chúng tôi đã giữ lại thông điệp chính trong bài viết gốc, nhưng đã đưa thêm những thông tin...

Lưu ý: Đây là một phiên bản cải tiến và nâng cấp từ bài viết gốc. Chúng tôi đã giữ lại thông điệp chính trong bài viết gốc, nhưng đã đưa thêm những thông tin mới mẻ để làm cho nó trở nên thú vị hơn.

Giới thiệu

Trong hướng dẫn này, chúng ta sẽ đi qua quá trình cài đặt Elasticsearch ELK Stack trên CentOS 7 - Elasticsearch 2.2.x, Logstash 2.2.x và Kibana 4.4.x. Chúng tôi cũng sẽ chỉ cho bạn cách cấu hình để thu thập và hiển thị các syslog của hệ thống của bạn tại một vị trí tập trung, sử dụng Filebeat 1.1.x. Logstash là một công cụ mã nguồn mở được sử dụng để thu thập, phân tích và lưu trữ các log cho việc sử dụng sau này. Kibana là một giao diện web có thể được sử dụng để tìm kiếm và xem các log mà Logstash đã chỉ mục. Cả hai công cụ này đều dựa trên Elasticsearch, được sử dụng để lưu trữ các log.

Logging tập trung có thể rất hữu ích khi bạn cố gắng xác định vấn đề với máy chủ 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 tại 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 vấn đề tồn tại trên nhiều máy chủ bằng cách liên kết các log của chúng trong một khoảng thời gian cụ thể.

Logstash có thể được sử dụng để thu thập log của mọi loại, nhưng chúng tôi sẽ giới hạn phạm vi của hướng dẫn này chỉ vào việc thu thập syslog.

Mục tiêu của chúng ta

Mục tiêu của hướng dẫn này là thiết lập Logstash để thu thập syslog từ nhiều máy chủ và cấu hình Kibana để hiển thị các log đã được thu thập.

Cài đặt ELK stack của chúng ta bao gồm bốn thành phần chính:

  • Logstash: Thành phần máy chủ của Logstash xử lý các log đầu vào
  • Elasticsearch: Lưu trữ tất cả các log
  • Kibana: Giao diện web để tìm kiếm và hiển thị các log, Kibana sẽ được proxy qua Nginx
  • Filebeat: Được cài đặt trên các máy chủ khách hàng và gửi log của họ đến Logstash, Filebeat là một đại diện giao nhận log sử dụng giao thức mạng lumberjack để giao tiếp với Logstash

Chúng tôi sẽ cài đặt ba thành phần đầu tiên trên một máy chủ duy nhất gọi là ELK Server. Filebeat sẽ được cài đặt trên tất cả các máy chủ khách hàng mà chúng tôi muốn thu thập log, hợp nhất dưới dạng tập hợp các máy chủ khách hàng của chúng tôi.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần có quyền truy cập root vào một VPS CentOS 7. Hướng dẫn để thiết lập điều đó có thể được tìm thấy tại đây (bước 3 và 4): "Cài đặt ban đầu cho máy chủ với CentOS 7".

Nếu bạn muốn sử dụng Ubuntu thay thế, hãy xem hướng dẫn này: "Cách cài đặt ELK trên Ubuntu 14.04".

Số lượng CPU, RAM và dung lượng lưu trữ mà ELK Server của bạn sẽ yêu cầu phụ thuộc vào số lượng log mà bạn muốn thu thập. Đối với hướng dẫn này, chúng tôi sẽ sử dụng VPS với các thông số sau cho ELK Server của chúng tôi:

  • Hệ điều hành: CentOS 7
  • RAM: 4GB
  • CPU: 2

Ngoài ELK Server của bạn, bạn sẽ muốn có vài máy chủ khác mà bạn sẽ thu thập log từ đó.

Hãy bắt đầu thiết lập ELK Server của chúng ta!

Cài đặt Java 8

Elasticsearch và Logstash yêu cầu Java, vì vậy chúng ta sẽ cài đặt nó ngay bây giờ. Chúng tôi sẽ cài đặt phiên bản mới nhất của Oracle Java 8 vì đó là lựa chọn mà Elasticsearch khuyến nghị. Tuy nhiên, OpenJDK cũng hoạt động tốt nếu bạn chọn vào con đường đó. Làm theo các bước trong phần này có nghĩa là bạn chấp nhận Thỏa thuận Giấy phép Nhị phân Oracle cho Java SE.

Đổi sang thư mục home của bạn và tải xuống RPM JDK Java 8 của Oracle (Bản cập nhật 73, mới nhất vào thời điểm viết bài này) với các lệnh sau:

cd ~ wget -no-cookies -no-check-certificate -header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm"

Tiếp theo, cài đặt RPM với lệnh yum này (nếu bạn đã tải xuống một phiên bản khác, thay thế tên tệp ở đây):

sudo yum -y localinstall jdk-8u73-linux-x64.rpm

Bây giờ, Java sẽ được cài đặt tại /usr/java/jdk1.8.0_73/jre/bin/java và được liên kết từ /usr/bin/java.

Bạn có thể xóa tệp lưu trữ mà bạn đã tải xuống trước đó:

rm ~/jdk-8u*-linux-x64.rpm

Bây giờ Java 8 đã được cài đặt, hãy cài đặt Elasticsearch.

Cài đặt Elasticsearch

Elasticsearch có thể được cài đặt bằng trình quản lý gói bằng cách thêm kho gói của Elastic.

Chạy lệnh sau để nhập khóa công khai Elasticsearch vào rpm:

sudo rpm -import http://packages.elastic.co/GPG-KEY-elasticsearch

Tạo một tệp kho yum mới cho Elasticsearch. Lưu ý đây là một lệnh duy nhất:

echo '[elasticsearch-2.x] name=Elasticsearch repository for 2.x packages baseurl=http://packages.elastic.co/elasticsearch/2.x/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1 ' | sudo tee /etc/yum.repos.d/elasticsearch.repo

Cài đặt Elasticsearch với lệnh này:

sudo yum -y install elasticsearch

Elasticsearch đã được cài đặt. Hãy chỉnh sửa cấu hình:

sudo vi /etc/elasticsearch/elasticsearch.yml

Bạn muốn giới hạn quyền truy cập ngoài vào phiên bản Elasticsearch của bạn (port 9200), để người ngoài không thể đọc dữ liệu của bạn hoặc tắt cụm Elasticsearch của bạn qua HTTP API. Tìm dòng chỉ định network.host, gỡ bỏ dấu chú thích và thay thế giá trị bằng "localhost" để nó trông như sau:

network.host: localhost

Lưu và thoát elasticsearch.yml.

Bây giờ khởi động Elasticsearch:

sudo systemctl start elasticsearch

Sau đó, chạy lệnh sau để Elasticsearch tự động khởi động khi khởi động:

sudo systemctl enable elasticsearch

Bây giờ Elasticsearch đã hoạt động, hãy cài đặt Kibana.

Cài đặt Kibana

Gói Kibana chia sẻ cùng một khóa GPG với Elasticsearch và chúng tôi đã cài đặt khóa công khai đó.

Tạo và chỉnh sửa tệp kho yum mới cho Kibana:

sudo vi /etc/yum.repos.d/kibana.repo

Thêm cấu hình kho sau:

[kibana-4.4] name=Kibana repository for 4.4.x packages baseurl=http://packages.elastic.co/kibana/4.4/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1

Lưu và thoát.

Cài đặt Kibana với lệnh này:

sudo yum -y install kibana

Mở tệp cấu hình Kibana để chỉnh sửa:

sudo vi /opt/kibana/config/kibana.yml

Trong tệp cấu hình Kibana, tìm dòng chỉ định server.host và thay đổi địa chỉ IP ("0.0.0.0" mặc định) thành "localhost":

server.host: "localhost"

Lưu và thoát. Cài đặt này làm cho Kibana chỉ có thể truy cập từ localhost. Điều này hoàn toàn phù hợp vì chúng ta sẽ cài đặt một reverse proxy Nginx, trên cùng một máy chủ, để cho phép truy cập từ bên ngoài.

Bây giờ khởi động dịch vụ Kibana và kích hoạt nó:

sudo systemctl start kibana sudo chkconfig kibana on

Trước khi chúng tôi có thể sử dụng giao diện web Kibana, chúng tôi phải cài đặt một reverse proxy. Hãy làm điều đó bây giờ, với Nginx.

Cài đặt Nginx

Vì chúng ta đã cấu hình Kibana lắng nghe trên localhost, chúng ta phải cài đặt một reverse proxy để cho phép truy cập từ bên ngoài. Chúng tôi sẽ sử dụng Nginx cho mục đích này.

Chú ý: Nếu bạn đã có một phiên bản Nginx hiện có mà bạn muốn sử dụng, hãy sử dụng nó thay thế. Chỉ cần đảm bảo cấu hình Kibana để nó có thể được truy cập từ máy chủ Nginx của bạn (bạn có thể muốn thay đổi giá trị host, trong /opt/kibana/config/kibana.yml, thành địa chỉ IP riêng của máy chủ Kibana). Ngoài ra, đề nghị rằng bạn nên kích hoạt SSL/TLS.

Thêm kho EPEL vào yum:

sudo yum -y install epel-release

Bây giờ sử dụng yum để cài đặt Nginx và gói công cụ httpd:

sudo yum -y install nginx httpd-tools

Sử dụng htpasswd để tạo người dùng quản trị, gọi là "kibanaadmin" (bạn nên sử dụng tên khác), mà có thể truy cập vào giao diện web Kibana:

sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin

Nhập mật khẩu tại mini trình giao diện. Hãy nhớ đăng nhập này, vì bạn sẽ cần nó để truy cập vào giao diện web Kibana.

Bây giờ mở tệp cấu hình Nginx trong trình soạn thảo ưa thích của bạn. Chúng tôi sẽ sử dụng vi:

sudo vi /etc/nginx/nginx.conf

Tìm khối server mặc định (bắt đầu bằng server {), khối cấu hình cuối cùng trong tệp, và xóa nó đi. Khi bạn hoàn thành, hai dòng cuối cùng trong tệp sẽ trông như sau:

include /etc/nginx/conf.d/*.conf; }

Lưu và thoát.

Bây giờ chúng ta sẽ tạo một khối máy chủ Nginx trong một tệp mới:

sudo vi /etc/nginx/conf.d/kibana.conf

Dán khối mã sau vào tệp. Đảm bảo cập nhật server_name để phù hợp với tên máy chủ của bạn:

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;  } }

Lưu và thoát. Điều này cấu hình Nginx để chuyển hướng lưu lượng HTTP của máy chủ của bạn đến ứng dụng Kibana, đang lắng nghe trên localhost:5601. Ngoài ra, Nginx sẽ sử dụng tệp htpasswd.users, mà chúng tôi đã tạo trước đó, và yêu cầu xác thực cơ bản.

Bây giờ hãy khởi động và kích hoạt Nginx để áp dụng các thay đổi của chúng tôi:

sudo systemctl start nginx sudo systemctl enable nginx

Kibana giờ đây có thể truy cập thông qua FQDN hoặc địa chỉ IP công khai của ELK Server của bạn, ví dụ: http://elk_server_public_ip/. Nếu bạn truy cập vào đó trong trình duyệt web, sau khi nhập các thông tin đăng nhập "kibanaadmin", bạn sẽ thấy một trang chào mừng Kibana yêu cầu bạn cấu hình một mẫu chỉ mục mặc định: Hãy chọn [filebeat]-YYYY.MM.DD từ menu Index Patterns (phía trái), sau đó nhấp vào nút Star (Thiết lập làm mẫu chỉ mục mặc định) để đặt mẫu chỉ mục Filebeat làm mặc định.

Bây giờ nhấp vào liên kết Discover ở thanh điều hướng trên cùng. Mặc định, điều này sẽ hiển thị tất cả dữ liệu log trong 15 phút qua. Bạn sẽ thấy một biểu đồ tỉ lệ với các sự kiện log, với các thông báo log phía dưới: Hiện tại, sẽ không có nhiều thông tin ở đây vì bạn chỉ thu thập syslog từ các máy chủ khách hàng của mình. Ở đây, bạn có thể tìm kiếm và duyệt qua các log của bạn. Bạn cũng có thể tùy chỉnh bảng điều khiển của mình.

Hãy thử một số điều sau:

  • Tìm kiếm "root" để xem xem có ai đang cố gắng đăng nhập vào máy chủ của bạn dưới dạng root
  • Tìm kiếm một tên máy chủ cụ thể (tìm kiếm host: "hostname")
  • Thay đổi khoảng thời gian bằng cách chọn một khu vực trên biểu đồ hoặc từ menu phía trên
  • Nhấp vào các thông báo bên dưới biểu đồ để xem cách dữ liệu được lọc

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

Kết luận

Bây giờ, doạn log của bạn được tập trung thông qua Elasticsearch và Logstash, và bạn có thể hiển thị chúng với Kibana, bạn đã có một bước khởi đầu tốt để tập trung tất cả những log quan trọng của bạn. Hãy nhớ rằng bạn có thể gửi bất kỳ loại log hoặc dữ liệu đã được chỉ mục khác vào Logstash, nhưng dữ liệu trở nên hữu ích hơn nếu nó được phân tích và cấu trúc với grok.

Để nâng cao ELK stack mới của bạn, bạn nên xem xét việc thu thập và lọc các log khác của mình với Logstash và tạo bảng điều khiển Kibana. Bạn cũng có thể muốn thu thập các chỉ số hệ thống bằng cách sử dụng Topbeat với ELK stack của bạn. Tất cả những chủ đề này được đề cập trong các hướng dẫn khác trong loạt bài này.

Chúc may mắn!

1