Bài tập

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

Huy Erick

Giới thiệu Elastic Stack - trước đây được biết đến với tên gọi ELK Stack - là một bộ sưu tập phần mềm mã nguồn mở do Elastic sản xuất, cho phép bạn tìm kiếm,...

Giới thiệu

Elastic Stack - trước đây được biết đến với tên gọi ELK Stack - là một bộ sưu tập phần mềm mã nguồn mở do Elastic sản xuất, cho phép bạn tìm kiếm, phân tích và hiển thị dữ liệu nhật ký được tạo ra từ bất kỳ nguồn nào và trong bất kỳ định dạng nào, một hành động được gọi là ghi nhật ký tập trung. Ghi nhật ký tập trung rất hữu ích khi bạn cố gắng xác định các vấn đề về 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ả các nhật ký 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 vấn đề kéo dài trên nhiều máy chủ bằng cách tương quan các nhật ký của chúng trong khoảng thời gian cụ thể.

Elastic Stack 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 được 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: giao diện web để tìm kiếm và hiển thị nhật ký.
  • Beats: các công cụ gửi dữ liệu đơn giản, nhằm mục đích gửi dữ liệu từ hàng trăm hoặc hàng ngàn máy tính đến Logstash hoặc Elasticsearch.

Trong hướng dẫn này, bạn sẽ cài đặt Elastic Stack trên máy chủ CentOS 7. 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 nhật ký và tệp tin - và cấu hình chúng để thu thập và hiển thị nhật ký hệ thống. Ngoài ra, vì Kibana thường chỉ có sẵn trên localhost, bạn sẽ sử dụng Nginx để làm proxy cho nó để có thể truy cập thông qua trình duyệt web. Kết thúc hướng dẫn này, bạn sẽ đã cài đặt tất cả các thành phần này trên một máy chủ duy nhất, được gọi là máy chủ Elastic Stack.

Yêu cầu tiên quyết

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

  • Một máy chủ CentOS 7 đã được cấu hình theo Hướng dẫn Cài đặt Ban đầu máy chủ với CentOS 7, bao gồm một người dùng không phải là root có đặc quyền sudo và tường lửa. Số lượng CPU, RAM và dung lượng lưu trữ mà máy chủ Elastic Stack của bạn sẽ yêu cầu phụ thuộc vào khối lượng nhật ký mà bạn dự định thu thập. Trong hướng dẫn này, bạn sẽ sử dụng một VPS với các thông số kỹ thuật sau cho máy chủ Elastic Stack của chúng tôi:
    • HĐH: CentOS 7.5
    • RAM: 4GB
    • CPU: 2
  • Java 8 - được yêu cầu bởi Elasticsearch và Logstash - đã được cài đặt trên máy chủ của bạn. Lưu ý rằng Java 9 không được hỗ trợ. Để cài đặt điều này, làm theo phần "Cài đặt OpenJDK 8 JRE" của hướng dẫn của chúng tôi về cách cài đặt Java trên CentOS.
  • Nginx đã được cài đặt trên máy chủ của bạn, bạn sẽ cấu hình nó sau trong hướng dẫn này như một proxy ngược cho Kibana. Theo hướng dẫn của chúng tôi về Cách cài đặt Nginx trên CentOS 7 để thiết lập nó.

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

Các thành phần của Elastic Stack không có sẵn thông qua trình quản lý gói theo mặc định, nhưng bạn có thể cài đặt chúng bằng yum bằng cách thêm kho lưu trữ gói của Elastic.

Tất cả các gói của Elastic Stack đều được ký bằng khóa chữ ký Elasticsearch để bảo vệ hệ thống của bạn khỏi giả mạo gói. Các gói đã được xác thực bằng cách sử dụng khóa sẽ được coi là đáng tin cậy bởi trình quản lý gói của bạn. Trong bước này, bạn sẽ nhập khóa GPG công cộng của Elasticsearch và thêm kho lưu trữ Elastic để cài đặt Elasticsearch.

Chạy lệnh sau để tải xuống và cài đặt khóa công cộng của Elasticsearch:

sudo rpm -import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Tiếp theo, thêm kho lưu trữ Elastic. Sử dụng trình chỉnh sửa văn bản ưa thích của bạn để tạo tệp elasticsearch.repo trong thư mục /etc/yum.repos.d/. Ở đây, chúng tôi sẽ sử dụng trình chỉnh sửa văn bản vi:

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

Để cung cấp cho yum thông tin cần thiết để tải xuống và cài đặt các thành phần của Elastic Stack, chuyển sang chế độ chèn bằng cách nhấn i và thêm các dòng sau vào tệp.

[elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md

Ở đây, bạn đã bao gồm tên có thể đọc được của kho lưu trữ, URL cơ sở dữ liệu thư mục dữ liệu của kho lưu trữ và khóa gpgkey cần thiết để xác minh các gói Elastic.

Khi bạn hoàn thành, nhấn ESC để rời khỏi chế độ chèn, sau đó :wq và ENTER để lưu và thoát tệp. Để tìm hiểu thêm về trình chỉnh sửa văn bản vi và người kế nhiệm vim của nó, hãy xem hướng dẫn của chúng tôi về Cách cài đặt và Sử dụng Trình chỉnh sửa Văn bản Vim trên Máy chủ Đám mây.

Với kho lưu trữ đã được thêm, bạn có thể cài đặt Elastic Stack. Theo tài liệu chính thức, bạn nên cài đặt Elasticsearch trước các thành phần khác. Việc cài đặt theo thứ tự này đảm bảo rằng các thành phần mà mỗi sản phẩm phụ thuộc vào đều được đặt đúng cách.

Cài đặt Elasticsearch bằng lệnh sau:

sudo yum install elasticsearch

Sau khi Elasticsearch cài đặt xong, mở tệp cấu hình chính của nó, elasticsearch.yml, trong trình chỉnh sửa của bạn:

sudo vi /etc/elasticsearch/elasticsearch.yml

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

. . . network.host: localhost . . .

Lưu và đóng elasticsearch.yml. Sau đó, khởi động dịch vụ Elasticsearch bằng systemctl:

sudo systemctl start elasticsearch

Tiếp theo, chạy lệnh sau để cho phép Elasticsearch khởi động mỗi khi máy chủ 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 bằng cách gửi một yêu cầu HTTP:

curl -X GET "localhost:9200"

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

{   "name" : "8oSCBFJ",   "cluster_name" : "elasticsearch",   "cluster_uuid" : "1Nf9ZymBQaOWKpMRBfisog",   "version" : {     "number" : "6.5.2",     "build_flavor" : "default",     "build_type" : "rpm",     "build_hash" : "9434bed",     "build_date" : "2018-11-29T23:58:20.891072Z",     "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 đã hoạt động, 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 Bảng điều khiển Kibana

Theo thứ tự cài đặt trong tài liệu chính thức, bạn nên cài đặt Kibana là thành phần tiếp theo sau Elasticsearch. Sau khi thiết lập Kibana, chúng ta sẽ có thể sử dụng giao diện của nó để tìm kiếm và hiển thị dữ liệu mà Elasticsearch lưu trữ.

Vì bạn đã thêm kho lưu trữ Elastic trong bước trước, bạn chỉ cần cài đặt các thành phần còn lại của Elastic Stack bằng yum:

sudo yum install kibana

Sau đó, kích hoạt và khởi động dịch vụ Kibana:

sudo systemctl enable kibana sudo systemctl start kibana

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

Trước tiên, sử dụng lệnh openssl để tạo người dùng Kibana quản trị mà bạn sẽ sử dụng để truy cập vào giao diện web Kibana. Ví dụ, chúng ta sẽ đặt tên tài khoản này là kibanaadmin, nhưng để đảm bảo an toàn hơn, chúng tôi khuyên bạn nên chọn một tên người dùng không chuẩn cho người dùng của mình mà sẽ khó đoán được.

Lệnh sau sẽ tạo tài khoản Kibana quản trị và mật khẩu và lưu chúng trong tệp htpasswd.users. Bạn sẽ cấu hình Nginx để yêu cầu tên người dùng và mật khẩu này và đọc tệp này trong thời gian ngắn:

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

Nhập và xác nhận một mật khẩu tại thông báo. Ghi nhớ hoặc ghi chú tên đăng nhập này, vì bạn sẽ cần nó để truy cập vào giao diện web Kibana.

Tiếp theo, chúng ta sẽ tạo một tệp cấu hình khối máy chủ Nginx. Ví dụ, chúng ta sẽ tham chiếu đến tệp này là example.com.conf, mặc dù bạn có thể thấy hữu ích để đặt tên mô tả hơn cho tệp của bạn. Ví dụ, nếu bạn có một tên miền FQDN và các bản ghi DNS được thiết lập cho máy chủ này, bạn có thể đặt tên tệp này theo FQDN của bạn:

sudo vi /etc/nginx/conf.d/example.com.conf

Thêm khối mã sau vào tệp, hãy chắc chắn cập nhật example.com và www.example.com để phù hợp với FQDN của máy chủ hoặc địa chỉ IP công cộng của bạn. Mã 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, nó cấu hình Nginx để đọc tệp htpasswd.users và yêu cầu xác thực cơ bản.

server {     listen 80;     server_name example.com www.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 thành, lưu và đóng tệp.

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

sudo nginx -t

Nếu có bất kỳ lỗi nào được báo cáo trong đầu ra của bạn, hãy quay lại và kiểm tra lại rằng nội dung bạn đã đặt trong tệp cấu hình của mình đã được thêm vào đúng cách. Khi bạn thấy cú pháp ok trong đầu ra, hãy tiếp tục và khởi động lại dịch vụ Nginx:

sudo systemctl restart nginx

Mặc định, chính sách an ninh SELinux được đặt để áp dụng. Chạy lệnh sau để cho phép Nginx truy cập vào dịch vụ proxy:

sudo setsebool httpd_can_network_connect 1 -P

Bạn có thể tìm hiểu thêm về SELinux trong hướng dẫn Giới thiệu về SELinux trên CentOS 7 của chúng tôi.

Bây giờ Kibana có thể truy cập thông qua FQDN của bạn hoặc địa chỉ IP công cộng của máy chủ Elastic Stack. Bạn có thể kiểm tra trang trạng thái của máy chủ Kibana bằng cách điều hướng đến địa chỉ sau và nhập thông tin đăng nhập 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 máy chủ và danh sách các plugin đã cài đặt.

Bây giờ bảng điều khiển 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 cơ sở dữ liệu Elasticsearch, chúng tôi khuyến nghị sử dụng Logstash để xử lý dữ liệu trước. Đ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 định dạng chung và xuất nó vào một cơ sở dữ liệu khác.

Cài đặt Logstash với lệnh sau:

sudo yum install logstash

Sau khi cài đặt Logstash, bạn có thể tiến hành cấu hình. Các tệp cấu hình của Logstash được viết dưới định dạng JSON và nằm trong thư mục /etc/logstash/conf.d. Trong quá trình cấu hình, hữu ích khi tưởng tượng Logstash như một đường ống mà nó nhận dữ liệu từ một đầu, xử lý nó theo một cách nào đó và gửi nó đến đích của nó (trong trường hợp này, là Elasticsearch). Một quy trình Logstash có hai phần bắt buộc, đầu vào và đầu ra, và một phần tùy chọn, bộ lọc. Các plugin đầu vào tiêu thụ dữ liệu từ nguồn, các plugin bộ lọc xử lý dữ liệu và các plugin đầu ra viết dữ liệu vào đích.

Tạo một tệp cấu hình được gọi là 02-beats-input.conf, nơi bạn sẽ thiết lập đầu vào của Filebeat:

sudo vi /etc/logstash/conf.d/02-beats-input.conf

Chèn cấu hình đầu vào sau đây. Điều này chỉ định một đầu vào tiếp nhận trên cổng TCP 5044.

input {   beats {     port => 5044   } }

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

sudo vi /etc/logstash/conf.d/10-syslog-filter.conf

Chèn cấu hình bộ lọc syslog sau đây. Cấu hình syslogs mẫu này được lấy từ tài liệu chính thức của Elastic. Bộ lọc này được sử dụng để phân tích cúc bộ nhập syslogs đến để làm cho chúng có cấu trúc và có thể sử dụng bởi các bảng điều khiển Kibana đã được xác định trước:

filter {   if [type] == "syslog" {     grok {       match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }       add_field => [ "received_at", "%{@timestamp}" ]       add_field => [ "received_from", "%{host}" ]     }     syslog_pri { }     date {       match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]     }   } }

Lưu và đóng tệp.

Bây giờ bạn đã cài đặt và cấu hình Logstash. Để khởi động dịch vụ Logstash và cho phép nó khởi động mỗi khi máy chủ của bạn khởi động, hãy chạy các lệnh sau:

sudo systemctl enable logstash sudo systemctl start logstash

Khi Logstash đang chạy, nó sẽ tiếp tục lắng nghe các dòng đầu vào và xử lý chúng dựa trên các cấu hình của bạn. Bạn có thể kiểm tra xem Logstash đã đang chạy bằng cách xem các thông báo đến và đi của nó trong mục /var/log/logstash/logstash-plain.log:

sudo cat /var/log/logstash/logstash-plain.log

Đó là tất cả! Bạn đã cài đặt và cấu hình Elasticsearch, Kibana và Logstash trên máy chủ CentOS 7 của mình. Bây giờ bạn có thể bắt đầu thực hiện các tác vụ như thu thập và hiển thị nhật ký hệ thống sử dụng Elastic Stack.

Hãy khám phá Elastic Stack và hưởng những lợi ích mà nó mang lại cho việc quản lý và giám sát hệ thống của bạn!

1