Hướng dẫn cấu hình Logstash để chuyển tiếp Apache logs sang OpenSearch

Hướng dẫn cấu hình Logstash để chuyển tiếp Apache logs sang OpenSearch

Quản lý log máy chủ web hiệu quả đóng vai trò quan trọng trong việc tối ưu hiệu suất website, xử lý sự cố và phân tích hành vi người dùng. Apache, một trong những máy chủ web phổ biến nhất, tạo ra các log truy cập và log lỗi chứa nhiều dữ liệu quan trọng. Để khai thác và phân tích log một cách tối ưu, bạn có thể sử dụng Logstash để thu thập, xử lý và chuyển tiếp dữ liệu đến DataOnline Managed OpenSearch. Điều này giúp lập chỉ mục và trực quan hóa thông tin, mang lại cái nhìn sâu sắc về hiệu suất hệ thống và trải nghiệm người dùng.

Chúng tôi sẽ hướng dẫn bạn cách cài đặt Logstash trên một Droplet, cấu hình Logstash để thu thập nhật ký Apache của bạn, và gửi chúng đến Managed OpenSearch để phân tích.

Yêu Cầu Ban Đầu

  1. Droplet có cài đặt Apache Webserver.

  2. Managed OpenSearch Cluster

Bước 1 – Cài đặt Logstash

Logstash có thể được cài đặt thông qua các file binary hoặc qua kho gói. Để quản lý và cập nhật dễ dàng hơn, việc sử dụng kho gói thường được khuyến nghị.

Trong phần này, chúng ta sẽ hướng dẫn cài đặt Logstash trên Droplet của bạn sử dụng cả hai trình quản lý gói APT và YUM.

Hãy xác định hệ điều hành

Chạy lệnh sau để xác định hệ điều hành:

cat /etc/os-release

Đối với Hệ Thống Dựa trên APT (Ubuntu/Debian)

Tải về và cài đặt Public Signing Key:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

Bạn có thể cần cài đặt gói apt-transport-https trên Debian trước khi tiến hành:

sudo apt-get install apt-transport-https

Lưu định nghĩa kho lưu trữ vào file /etc/apt/sources.list.d/elastic-8.x.list:

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

Hãy sử dụng phương pháp echo như trên để thêm kho Logstash. Đừng sử dụng lệnh add-apt-repository vì nó sẽ thêm cả mục deb-src, và chúng tôi không cung cấp gói nguồn. Nếu bạn đã thêm mục deb-src, bạn sẽ thấy lỗi như sau:

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

Chỉ cần xoá mục deb-src trong file /etc/apt/sources.list và cài đặt sẽ hoạt động như mong đợi.

Chạy lệnh sau để cập nhật và chuẩn bị kho:

sudo apt-get update && sudo apt-get install logstash

Đối với Hệ Thống Dựa trên YUM (CentOS/RHEL)

Tải về và cài đặt public signing key:

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

Thêm đoạn sau vào file /etc/yum.repos.d/logstash.repo. Bạn có thể sử dụng lệnh tee để tạo và cập nhật file:

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

Kho của bạn đã sẵn sàng để sử dụng. Cài đặt Logstash bằng lệnh:

sudo yum install logstash

Để biết thêm thông tin, vui lòng tham khảo hướng dẫn cài đặt Logstash.

Bước 2 – Cấu hình Logstash để gửi nhật ký đến OpenSearch

Một pipeline (đường ống) của Logstash gồm ba giai đoạn chính: input, filter, và output. Các pipeline của Logstash sử dụng các plugin. Bạn có thể sử dụng các plugin do cộng đồng cung cấp hoặc tự tạo.

  • Input: Giai đoạn này thu thập dữ liệu từ nhiều nguồn khác nhau. Logstash hỗ trợ nhiều plugin input để xử lý các nguồn dữ liệu như file nhật ký, cơ sở dữ liệu, hàng đợi tin nhắn, và dịch vụ đám mây.

  • Filter: Giai đoạn này xử lý và biến đổi dữ liệu thu thập được từ giai đoạn input. Các bộ lọc (filters) có thể sửa đổi, làm giàu, và cấu trúc dữ liệu để chúng trở nên hữu ích hơn và dễ phân tích hơn.

  • Output: Giai đoạn này gửi dữ liệu đã xử lý đến đích. Đích đến có thể là cơ sở dữ liệu, file, hoặc các kho dữ liệu như OpenSearch.

Bước 3 – Cài đặt Plugin OpenSearch Output

Plugin output của OpenSearch có thể được cài đặt bằng cách chạy lệnh sau:

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

Thông tin chi tiết hơn có thể được tìm thấy tại repository của logstash-output-opensearch-plugin.

Bây giờ, hãy tạo một pipeline.

Tạo một file mới tại đường dẫn /etc/logstash/conf.d/ với tên apache_pipeline.conf, và sao chép nội dung sau:

input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_access"
  }

  file {
    path => "/var/log/apache2/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_error"
  }
}

filter {
  if "apache_access" in [tags] {
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
      }
   } else {
   grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
   }
}

output {
  if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}

Thay <OpenSearch-Hostname> bằng tên miền (hostname) của máy chủ OpenSearch của bạn và <your_password> bằng mật khẩu OpenSearch của bạn.

Hãy cùng phân tích cấu hình trên:

INPUT:
Đoạn này dùng để cấu hình nguồn dữ liệu cho các sự kiện. Ở đây, plugin input dạng ‘file’ được sử dụng.

  • path => “/var/log/apache2/access.log”: Chỉ định đường dẫn tới file nhật ký truy cập của Apache mà Logstash sẽ đọc.
    Hãy chắc chắn rằng dịch vụ Logstash có quyền truy cập vào đường dẫn này.

  • start_position => “beginning”: Xác định vị trí mà Logstash sẽ bắt đầu đọc file nhật ký. Giá trị “beginning” có nghĩa là Logstash sẽ xử lý file từ đầu, thay vì từ cuối.

  • sincedb_path => “/dev/null”: Chỉ định đường dẫn tới file sincedb. Các file sincedb được Logstash sử dụng để lưu lại vị trí hiện tại trong file nhật ký, giúp nó có thể tiếp tục từ vị trí đó sau khi khởi động lại hoặc gặp sự cố.

  • tags => “apache_access”: Gán một tag cho các sự kiện được đọc từ input này. Các tag rất hữu ích trong việc nhận diện và lọc các sự kiện trong Logstash, thường được sử dụng trong các giai đoạn output hoặc filter sau này. Ở đây, chúng ta dùng tag cho mục đích đó.

FILTER:

Bắt đầu với các điều kiện (conditionals)

Do make sure that the Logstash service has access to the input path.
  • Điều này kiểm tra xem tag “apache_access” có tồn tại trong trường [tags] của các sự kiện nhận được hay không. Chúng ta sử dụng điều kiện này để áp dụng Grok Filter phù hợp cho các nhật ký truy cập và lỗi của Apache.

  • Grok Filter (cho Nhật ký Truy cập của Apache):

    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }

    Grok filter %{HTTPD_COMBINEDLOG} là một mẫu (pattern) đã được định nghĩa sẵn trong Logstash, dùng để phân tích định dạng nhật ký truy cập kết hợp của Apache. Nó trích xuất các trường như địa chỉ IP, thời gian, phương thức HTTP, URI, mã trạng thái, v.v., từ trường message của các sự kiện.

  • Mutate Filter Remove (tùy chọn):
    Sau khi các nhật ký của Apache được phân tích, chúng ta sử dụng mutate-remove để loại bỏ một số trường không cần thiết:

    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
    }
  • Else Condition:
    Khối else được thực hiện nếu tag “apache_access” không tồn tại trong trường [tags]. Khối else này chứa một Grok filter khác dùng để phân tích nhật ký lỗi của Apache.

    grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }

    Grok filter %{HTTPD24_ERRORLOG} phân tích các thông điệp phù hợp với định dạng nhật ký lỗi của Apache. Nó trích xuất các trường liên quan đến nhật ký lỗi như thời gian, mức độ lỗi, thông điệp lỗi, v.v.

    Các mẫu Grok có thể được tìm thấy tại: GitHub – logstash-patterns-core.

Plugin output dùng để gửi các sự kiện tới một đích đến cụ thể.

Khối output bắt đầu với một điều kiện if. Ở đây, chúng ta sử dụng điều kiện if:

if "apache_access" in [tags] {}
  • Điều kiện này được dùng để định tuyến các nhật ký tới OpenSearch, chia thành hai index riêng biệt: apache_accessapache_error.

Hãy cùng khám phá plugin OpenSearch Output:

hosts            => "https://XXX:25060"  Your Open search Hostname
user             => "doadmin"            Your Open search Username
password         => "XXXXX"              OpenSearch Password
index            => "apache_error"       Index name in OpenSearch
ssl_certificate_verification => true     Enabled SSL certificate verification

Hy vọng phần giải thích trên đã giúp bạn hiểu rõ hơn cấu hình của Logstash trong việc thu thập và xử lý nhật ký Apache để gửi đến OpenSearch!

Bước 4 – Khởi động Logstash

Khi pipeline đã được cấu hình, hãy khởi động dịch vụ Logstash:

systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service

Bước 5 – Khắc Phục Sự Cố

Kiểm Tra Kết Nối

Bạn có thể kiểm tra xem Logstash có thể kết nối đến OpenSearch hay không bằng cách kiểm tra kết nối với lệnh:

curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"

Thay <your-opensearch-server> bằng hostname của máy chủ OpenSearch của bạn và <your_username>, <your_password> bằng thông tin đăng nhập OpenSearch của bạn.

Nhập Dữ Liệu

Đảm bảo rằng dữ liệu được lập chỉ mục chính xác trong OpenSearch:

curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"

Thay <your-index-name> bằng tên index bạn muốn kiểm tra.

Cấu Hình Firewall và Mạng

Đảm bảo rằng các quy tắc firewall và cài đặt mạng cho phép lưu lượng truy cập giữa Logstash và OpenSearch trên cổng 25060.

Nhật Ký

Nhật ký của Logstash có thể được tìm thấy tại /var/log/logstash/logstash-plain.log.
Để biết thêm chi tiết, hãy tham khảo mục Troubleshooting.

Kết Luận

Trong hướng dẫn này, chúng ta đã cùng nhau thực hiện các bước:

  • Cài Đặt Logstash: Hướng dẫn cách sử dụng trình quản lý gói APT hoặc YUM, tùy theo bản phân phối Linux, để cài đặt Logstash trên Droplet của bạn.

  • Cấu Hình Logstash: Tạo và điều chỉnh file cấu hình Logstash để đảm bảo rằng nhật ký Apache được phân tích đúng và gửi đến OpenSearch.

  • Xác Minh trong OpenSearch: Thiết lập index pattern trong OpenSearch Dashboards để xác nhận rằng các nhật ký của bạn đã được lập chỉ mục chính xác và hiển thị cho việc phân tích.

Với các bước trên, bạn hiện đã có một thiết lập chức năng, trong đó Logstash thu thập nhật ký Apache và gửi chúng đến OpenSearch để phân tích.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *