ELK Stack là một ngăn xếp mã nguồn mở tuyệt vời để tổng hợp và phân tích nhật ký. Nó là viết tắt của Elasticsearch (một cơ sở dữ liệu NoSQL và máy chủ tìm kiếm), Logstash (một dịch vụ phân tích và vận chuyển nhật ký) và Kibana (một giao diện web kết nối người dùng với cơ sở dữ liệu Elasticsearch và cho phép hiển thị và tùy chọn tìm kiếm cho người dùng vận hành hệ thống). Với một cộng đồng mã nguồn mở lớn, ELK đã trở nên khá phổ biến và rất vui được làm việc cùng.

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn quy trình cài đặt đơn giản để cài đặt ELK Stack trên Amazon Web Services.

Các hướng dẫn sau đây sẽ hướng dẫn bạn qua các bước liên quan đến việc tạo môi trường hộp cát hoạt động. Do thiết lập sản xuất toàn diện hơn, chúng tôi quyết định xây dựng chi tiết cách thay đổi cấu hình từng thành phần để chuẩn bị sử dụng trong môi trường sản xuất.

Chúng tôi sẽ bắt đầu bằng cách mô tả môi trường, sau đó chúng tôi sẽ hướng dẫn cách cài đặt từng thành phần và kết thúc bằng cách định cấu hình máy chủ hộp cát của chúng tôi để gửi nhật ký hệ thống của nó tới Logstash và xem chúng qua Kibana.

Lưu ý: Tất cả các thành phần ELK đều cần Java để hoạt động, vì vậy trước tiên chúng ta sẽ phải cài đặt Bộ phát triển Java (JDK). Tương tự như vậy, các hướng dẫn ở đây đã được thử nghiệm trên phiên bản 6.x của ELK Stack.

Môi trường AWS

Chúng tôi đã chạy hướng dẫn này trên một phiên bản AWS Ubuntu 16.04 duy nhất trên một phiên bản m4.large sử dụng bộ nhớ cục bộ của nó. Chúng tôi bắt đầu một phiên bản EC2 trong mạng con công cộng của VPC, sau đó chúng tôi thiết lập nhóm bảo mật (tường lửa) để cho phép truy cập từ mọi nơi bằng SSH và TCP 5601 (Kibana). Cuối cùng, chúng tôi đã thêm một địa chỉ IP đàn hồi mới và liên kết nó với phiên bản đang chạy của chúng tôi để kết nối với internet.

Production tip: Quá trình cài đặt sản xuất cần ít nhất ba phiên bản EC2 – một phiên bản cho mỗi thành phần, mỗi phiên bản có một ổ SSD EBS kèm theo.

Cài đặt ELK từng bước

Để bắt đầu, hãy kết nối với máy chủ đang chạy qua SSH: ssh [email protected]_ELASTIC_IP

Cài đặt gói

Chuẩn bị hệ thống bằng cách chạy (quá trình này có thể mất vài phút):

sudo apt-get update
sudo apt-get upgrade

Cài đặt Java

ELK Stack (đặc biệt là Elasticsearch và Logstash) yêu cầu cài đặt Java 8 trở lên.

sudo apt-get install default-jre

Xác minh rằng Java đã được cài đặt:

java -version

Nếu đầu ra của lệnh trước tương tự như lệnh này, thì bạn sẽ biết rằng mình đang đi đúng hướng:

openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

Cài đặt Elasticsearch

Elasticsearch là một cơ sở dữ liệu và máy chủ tìm kiếm được sử dụng rộng rãi và nó là thành phần chính của thiết lập ELK.

Các lợi ích của Elasticsearch bao gồm:

  • Cài đặt và sử dụng dễ dàng
  • Một công nghệ tìm kiếm nội bộ mạnh mẽ (Lucene)
  • Giao diện web RESTful
  • Khả năng làm việc với dữ liệu trong các tài liệu JSON không có lược đồ (noSQL)
  • Mã nguồn mở

Để bắt đầu quá trình cài đặt Elasticsearch, hãy thêm khóa kho lưu trữ sau:

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

Thêm danh sách Elasticsearch sau vào khóa:

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

Install:

sudo apt-get install elasticsearch

Mở tệp cấu hình Elasticsearch tại: /etc/elasticsearch/elasticsearch.ymlvà áp dụng các cấu hình sau:

network.host: "localhost"
http.port: 9200

Start service:

sudo service elasticsearch start

Test:

sudo curl http://localhost:9200

Nếu đầu ra tương tự như thế này, thì bạn sẽ biết rằng Elasticsearch đang chạy đúng cách:

{
  "name" : "J-Cm4Eg",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "-Hqx5vMgSbaZdM4-hjzMEQ",
  "version" : {
    "number" : "6.0.1",
    "build_hash" : "601be4a",
    "build_date" : "2017-12-04T09:29:09.525Z",
    "build_snapshot" : false,
    "lucene_version" : "7.0.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Để làm cho dịch vụ bắt đầu khi khởi động chạy:

sudo update-rc.d elasticsearch defaults 95 10

Production tip: KHÔNG mở bất kỳ cổng nào khác, như 9200, với thế giới! Có rất nhiều bot tìm kiếm 9200 và thực thi các tập lệnh khó hiểu để vượt qua máy móc. KHÔNG ràng buộc Elasticsearch với một IP công cộng.

Cài đặt Logstash

Logstash là một công cụ mã nguồn mở thu thập, phân tích cú pháp và lưu trữ nhật ký để sử dụng trong tương lai và giúp phân tích nhật ký nhanh chóng. Logstash hữu ích cho cả việc tổng hợp nhật ký từ nhiều nguồn, chẳng hạn như một cụm các phiên bản Docker và phân tích cú pháp chúng từ các dòng văn bản thành một định dạng có cấu trúc như JSON. Trong ELK Stack, Logstash sử dụng Elasticsearch để lưu trữ và lập chỉ mục nhật ký.

Cài đặt Logstash với:

sudo apt-get install logstash

Thu thập nhật ký hệ thống với Logstash

Tạo tệp cấu hình Logstash:

sudo vim /etc/logstash/conf.d/10-syslog.conf

Nhập cấu hình sau:

input {
  file {
    type => "syslog"
    path => [ "/var/log/messages", "/var/log/*.log" ]
  }
}
output {
  stdout { 
    codec => rubydebug
    }

    elasticsearch {
      hosts => "localhost" # Use the internal IP of your Elasticsearch server
    }
}

Tệp này yêu cầu Logstash lưu trữ nhật ký hệ thống cục bộ '/ var / log / syslog'và tất cả các tệp trong'/var/log*.log'bên trong cơ sở dữ liệu Elasticsearch theo cách có cấu trúc.

Phần đầu vào chỉ định tệp nào cần thu thập (đường dẫn) và định dạng mong đợi (nhật ký hệ thống). Phần đầu ra sử dụng hai đầu ra - stdout vàasticsearch. Đầu ra stdout được sử dụng để gỡ lỗi Logstash - bạn sẽ tìm thấy các thông báo nhật ký được định dạng độc đáo trong '/var/log/logstash/logstash.stdout'. Đầu ra co giãn là những gì thực sự lưu trữ các bản ghi trong Elasticsearch.

Trong ví dụ này, chúng tôi đang sử dụng localhost cho tên máy chủ Elasticsearch. Tuy nhiên, trong thiết lập sản xuất thực, tên máy chủ Elasticsearch sẽ khác vì Logstash và Elasticsearch phải được lưu trữ trên các máy khác nhau.

Production tip: Chạy Logstash và Elasticsearch là một lỗi rất phổ biến của ngăn xếp ELK và thường khiến máy chủ bị lỗi trong quá trình sản xuất. Bạn có thể đọc thêm một số mẹo về cách cài đặt ELK trong sản xuất.

Cuối cùng, khởi động Logstash để đọc cấu hình:

sudo service logstash restart

Để đảm bảo dữ liệu đang được lập chỉ mục, hãy sử dụng:

sudo curl -XGET 'localhost:9200/_cat/indices?v&pretty'

Bạn sẽ thấy chỉ mục Logstash mới của mình đã được tạo:

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open logstash-2017.12.12 sCf9FxPETImc6pyZMFYacw 5 1 31 0 55.5kb 55.5kb

Cài đặt Kibana

Kibana là một plugin trực quan hóa dữ liệu mã nguồn mở cho Elasticsearch. Nó cung cấp khả năng trực quan hóa trên đầu nội dung được lập chỉ mục trên một cụm Elasticsearch. Người dùng có thể tạo biểu đồ thanh, đường và phân tán; biểu đồ hình tròn; và bản đồ trên đầu trang của khối lượng lớn dữ liệu.

Trong số các ứng dụng khác, Kibana giúp làm việc với nhật ký dễ dàng. Giao diện web đồ họa của nó thậm chí còn cho phép người dùng bắt đầu thực hiện các tìm kiếm nhật ký mạnh mẽ.

Để cài đặt Kibana, hãy sử dụng lệnh sau:

sudo apt-get install kibana

Mở tệp cấu hình Kibana và nhập các cấu hình sau:

sudo vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"

Khởi động Kibana:

sudo service kibana start

Kiểm tra: Trỏ trình duyệt của bạn đến 'http: // YOUR_ELASTIC_IP: 5601' sau khi Kibana được khởi động.

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

Trước khi tiếp tục thiết lập Kibana, bạn phải xác định một mẫu chỉ mục Elasticsearch.

Cái gì index pattern nghĩa là gì, và tại sao chúng ta phải cấu hình nó? Logstash tạo chỉ mục Elasticsearch (cơ sở dữ liệu) mới mỗi ngày. Tên của các chỉ số trông giống như sau: logstash-YYYY.MM.DD - ví dụ: logstash-2017.12.10 cho chỉ mục được tạo vào ngày 10 tháng 12 năm 2017.

Kibana hoạt động với các chỉ số Elasticsearch này, vì vậy nó cần biết những chỉ số nào để sử dụng. Màn hình thiết lập cung cấp một mẫu mặc định, 'logstash- *', về cơ bản có nghĩa là Show the logs from all of the dates.

Vì chúng tôi đã tạo chỉ mục Logstash mới trong phần trước, tất cả những gì chúng tôi phải làm là nhấp vào Create để xác định mẫu trong Kibana.

Production tip: Trong hướng dẫn này, chúng tôi đang truy cập trực tiếp vào Kibana thông qua máy chủ ứng dụng của nó trên cổng 5601, nhưng trong môi trường sản xuất, bạn có thể muốn đặt một máy chủ proxy ngược, như Nginx, trước nó.

Để xem nhật ký của bạn, hãy truy cập trang Khám phá trong Kibana:

Như bạn có thể thấy, việc tạo toàn bộ quy trình vận chuyển, lưu trữ và xem nhật ký không phải là một nhiệm vụ khó khăn như vậy. Trước đây, lưu trữ và phân tích nhật ký là một nghệ thuật phức tạp, đòi hỏi thao tác trên các tệp văn bản khổng lồ, không có cấu trúc. Nhưng tương lai có vẻ tươi sáng và đơn giản hơn nhiều.