Cài đặt và Cấu hình Logstash để tích hợp với OpenSearch
1. Cài đặt Logstash trên Ubuntu 24.04
Bước đầu tiên là đưa Logstash vào hệ thống để đóng vai trò trung gian thu thập và chuyển đổi dữ liệu trước khi đẩy vào OpenSearch.
Chúng ta sẽ sử dụng repository chính thức của OpenSearch vì Logstash bản gốc của Elastic đã không tương thích trực tiếp với OpenSearch mà không cần chỉnh sửa sâu.
Kết quả mong đợi: Logstash được cài đặt và service sẵn sàng để cấu hình.
Thêm repository chính thức của OpenSearch vào nguồn apt:
echo "deb [signed-by=/usr/share/keyrings/opensearch-archive-keyring.gpg] https://packages.opensearch.org/releases/opensearch/logstash/2.x focal main" | sudo tee /etc/apt/sources.list.d/opensearch.logstash.list
Cập nhật danh sách gói và cài đặt Logstash 2.x (phiên bản tương thích tốt nhất với OpenSearch 2.x hiện tại):
sudo apt-get update && sudo apt-get install -y logstash-opensearch
Khởi động và kích hoạt dịch vụ Logstash:
sudo systemctl enable logstash && sudo systemctl start logstash
Verify: Kiểm tra trạng thái service.
sudo systemctl status logstash
2. Cấu hình Pipeline để thu thập Log Hệ thống
Bây giờ chúng ta sẽ tạo một pipeline xử lý log hệ thống (syslog) của Ubuntu, thêm timestamp chuẩn, và đẩy vào OpenSearch.
Tạo file cấu hình pipeline mới để không làm ảnh hưởng đến cấu hình mặc định.
Kết quả mong đợi: File cấu hình được tạo sẵn sàng để Logstash đọc và chạy.
Tạo file cấu hình pipeline tại đường dẫn mặc định của Logstash:
sudo nano /etc/logstash/conf.d/system-logs.conf
Dán nội dung hoàn chỉnh sau vào file. Lưu ý phần `hosts` phải là địa chỉ IP hoặc domain của node OpenSearch bạn đã cài ở các phần trước, và `ssl` phải được bật nếu đã cấu hình TLS ở Phần 3.
input {
syslog {
port => 5000
type => "syslog"
host => "0.0.0.0"
codec => "syslog"
}
}
filter {
# Thêm timestamp chuẩn nếu log không có
if [timestamp] == "" {
mutate {
add_field => { "[@timestamp]" => "%{+ISO8601}" }
}
}
# Parse log để tách trường message, host, program
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
tag_on_failure => [ "syslog-parse-failure" ]
}
# Chuẩn hóa tên trường
mutate {
rename => { "syslog_hostname" => "host" }
rename => { "syslog_program" => "program" }
rename => { "syslog_message" => "message" }
rename => { "syslog_timestamp" => "@timestamp" }
}
# Thêm tag để dễ lọc ở Dashboards
if [program] =~ /^kernel$/ {
mutate {
add_tag => [ "kernel_log" ]
}
}
}
output {
opensearch {
hosts => ["https://192.168.1.100:9200"]
user => "logstash_internal_user"
password => "YOUR_PASSWORD_HERE"
index => "system-logs-%{+YYYY.MM.dd}"
# Cấu hình SSL nếu đã bật ở Phần 3
ssl => true
ssl_certificate_verification => true
cacert => "/etc/opensearch/certs/ca.crt"
# Tùy chọn: Tạo index template tự động
document_type => "_doc"
}
# Debug output ra console để test nhanh (xóa khi production)
stdout { codec => rubydebug }
}
Verify: Chạy Logstash ở chế độ debug để kiểm tra pipeline có lỗi syntax không.
sudo logstash -f /etc/logstash/conf.d/system-logs.conf --config.test_and_exit
Khởi động lại service để áp dụng cấu hình mới:
sudo systemctl restart logstash
Verify: Xem log của Logstash để đảm bảo nó đang connect vào OpenSearch.
sudo journalctl -u logstash -f --no-pager
3. Cài đặt Plugin Logstash cho OpenSearch
Để Logstash có thể giao tiếp với OpenSearch, chúng ta cần cài đặt plugin `opensearch-output` (thay cho `elasticsearch-output`).
Trong bước cài đặt package ở mục 1, plugin này thường đã được bao gồm, nhưng nếu bạn dùng version Logstash cũ hoặc cần version mới hơn, hãy chạy lệnh sau.
Kết quả mong đợi: Plugin được cài đặt thành công và hiển thị trong danh sách plugin.
Liệt kê các plugin đang cài đặt để xác nhận:
logstash-plugin list
Nếu chưa có `logstash-output-opensearch`, cài đặt thủ công:
sudo logstash-plugin install logstash-output-opensearch
Verify: Chạy lệnh list một lần nữa và tìm kiếm từ khóa "opensearch".
logstash-plugin list | grep opensearch
Tích hợp Plugin Visualization và Maps vào OpenSearch Dashboards
4. Cài đặt Plugin Maps và Visualizations
OpenSearch Dashboards mặc định đã có sẵn các plugin cơ bản, nhưng để có trải nghiệm tốt nhất về bản đồ (Maps) và các loại biểu đồ nâng cao, chúng ta cần đảm bảo các plugin này được kích hoạt hoặc cập nhật.
Trong bản OpenSearch 2.x, plugin Maps thường đã được tích hợp sẵn trong bundle. Tuy nhiên, nếu bạn muốn cập nhật hoặc cài đặt plugin thứ 3 (như GeoIP), chúng ta sẽ dùng CLI.
Kết quả mong đợi: Plugin Maps và Visualization được kích hoạt và hiển thị trong menu Dashboards.
Danh sách các plugin đã cài đặt hiện tại:
sudo opensearch-dashboards-plugin list
Cài đặt plugin Maps (nếu chưa có) từ repository chính thức:
sudo /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install --allow-root maps
Cài đặt plugin Visualization nâng cao (ví dụ: Lens - công cụ vẽ biểu đồ hiện đại của OpenSearch):
sudo /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install --allow-root lens
Khởi động lại OpenSearch Dashboards để áp dụng:
sudo systemctl restart opensearch-dashboards
Verify: Truy cập giao diện web OpenSearch Dashboards (http://IP:5601), vào Settings -> Plugins để kiểm tra trạng thái của Maps và Lens.
5. Cấu hình Plugin GeoIP để xử lý Log có địa chỉ IP
Để plugin Maps hoạt động hiệu quả với log hệ thống, chúng ta cần enrich dữ liệu IP thành tọa độ địa lý (Latitude/Longitude).
Chúng ta sẽ cài plugin GeoIP vào Logstash và cập nhật pipeline đã tạo ở Phần 7 mục 2.
Kết quả mong đợi: Log chứa IP sẽ tự động được thêm trường `_geo.location` để hiển thị trên bản đồ.
Cài đặt plugin GeoIP cho Logstash:
sudo logstash-plugin install logstash-filter-geoip
Cập nhật file cấu hình `/etc/logstash/conf.d/system-logs.conf` bằng cách chèn bộ lọc GeoIP vào phần `filter` (sau phần Grok).
filter {
# ... (giữ nguyên phần Grok ở trên) ...
# Enrich địa lý từ IP source
if [source] {
geoip {
source => "source"
target => "geoip"
}
mutate {
rename => { "geoip.location" => "_geo.location" }
}
}
}
Khởi động lại Logstash:
sudo systemctl restart logstash
Verify: Chạy lệnh test để gửi log mẫu có IP và xem kết quả output có trường `_geo.location` hay không.
echo "Jan 1 00:00:00 testhost sshd[1234]: Connection from 8.8.8.8" | nc -w 1 127.0.0.1 5000
Tạo Pipeline Xử lý Dữ liệu Log Thời gian thực
6. Gửi dữ liệu thử nghiệm và Verify trên Dashboard
Bây giờ hệ thống đã hoàn chỉnh, chúng ta cần gửi dữ liệu thật để kiểm tra luồng dữ liệu từ Log -> Logstash -> OpenSearch -> Dashboards.
Sử dụng công cụ `rsyslog` hoặc `nc` để giả lập log hệ thống gửi vào cổng 5000 của Logstash.
Kết quả mong đợi: Dữ liệu xuất hiện trong Index của OpenSearch và hiển thị được trên biểu đồ của Dashboards.
Cấu hình rsyslog để gửi log vào Logstash (nếu chưa làm):
sudo nano /etc/rsyslog.d/opensearch.conf
Nội dung file rsyslog để chuyển log hệ thống sang Logstash:
# Forward all system logs to Logstash
*.* @127.0.0.1:5000
Khởi động lại rsyslog để áp dụng:
sudo systemctl restart rsyslog
Verify: Tạo một file log giả lập để xem dữ liệu đi vào:
echo "Test message from sysadmin at $(date)" | logger -t custom-app
Check trong OpenSearch bằng API để xem index đã có document chưa:
curl -u logstash_internal_user:YOUR_PASSWORD_HERE -k "https://192.168.1.100:9200/system-logs-*/_search?pretty" | jq '.hits.hits[0]._source'
Verify trên Dashboards: Mở trình duyệt -> Discover -> Chọn Index pattern `system-logs-*` -> Bạn sẽ thấy dòng log vừa tạo.
7. Tạo Visualization bản đồ (Maps) trên Dashboards
Sử dụng dữ liệu đã enrich GeoIP để tạo bản đồ hiển thị nguồn gốc log.
Thực hiện các bước trực tiếp trên giao diện OpenSearch Dashboards.
Kết quả mong đợi: Một Dashboard hiển thị bản đồ thế giới với các điểm đánh dấu tương ứng với log có địa chỉ IP.
Trong trình duyệt, vào menu bên trái -> Visualize Library -> Create new visualization.
Chọn loại "Maps".
Cấu hình Data Source:
- Index: Chọn `system-logs-*`
- Query: Để trống hoặc nhập `source:*` để lọc log có địa chỉ IP.
- Layer 1: Chọn "Location data source" là "Field value".
- Field: Chọn `_geo.location` (hoặc `geoip.location` nếu chưa rename).
- Aggregation: Chọn "Count" để đếm số lượng log tại mỗi vị trí.
Click "Save" và đặt tên là "System Logs Geo Map".
Vào menu "Dashboard" -> "Create new dashboard" -> Thêm visualization "System Logs Geo Map" vừa tạo vào canvas.
Verify: Bạn sẽ thấy các chấm màu trên bản đồ tương ứng với địa chỉ IP trong log hệ thống. Nếu log có nhiều nguồn IP khác nhau, các chấm sẽ phân bố khác nhau.
Điều hướng series:
Mục lục: Series: Triển khai Database Search với OpenSearch và Ubuntu 24.04
« Phần 6: Triển khai cluster đa node và cân bằng tải
Phần 8: Troubleshooting, giám sát và các mẹo nâng cao »