Cấu Hình Môi Trường & Chuẩn Bị Hạ Tầng
Dưới đây là sơ đồ phân bổ tài nguyên trên ba máy chủ vật lý/virtual:
- nodemaster01 (192.168.1.10): Chạy Elasticsearch + Logstash
- nocache01 (192.168.1.11): Chạy Elasticsearch + Logstash + Redis
- nodeui01 (192.168.1.12): Chạy Elasticsearch + Kibana
Gán tên miền nội bộ tương ứng trong tệp_hosts_ để đảm bảo giao tiếp ổn định giữa các thành phần:
echo '192.168.1.10 nodemaster01
192.168.1.11 nocache01
192.168.1.12 nodeui01' | sudo tee -a /etc/hosts
Tối Ưu Kernel & Giới Hạn Tài Nguyên
Elasticsearch yêu cầu vùng nhớ ảo lớn để sắp xếp chỉ mục. Điều chỉnh tham số hệ thống ngay lập tức và ghi vĩnh viễn vào kernel params:
sudo sysctl -w vm.max_map_count=655360
echo "vm.max_map_count = 655360" | sudo tee -a /etc/sysctl.conf
Cấp quyền mở rộng file descriptor và tiến trình con cho người dùng chạy ứng dụng logging:
# Thêm vào /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
Sau khi lưu, đăng xuất rồi đăng nhập lại để áp dụng giới hạn. Kiểm tra bằng lệnh ulimit -n.
Cài Đặt Runtime Java
Phiên bản Logstash và ES 6.x yêu cầu JDK 8 trở lên. Sử dụng kho EPEL để triển khai nhanh:
sudo yum install -y java-1.8.0-openjdk-devel net-tools vim wget epel-release
sudo ln -sf $(which java) /usr/bin/java
Khoảng Cách Mạng & Tài Khoản Dịch Vụ
Tắt tường lửa mặc định của CentOS 7 để tránh chặn cổng giao tiếp nội bộ:
sudo systemctl disable --now firewalld
Tạo nhóm và người dùng chuyên biệt để chạy daemon, đảm bảo tuân thủ nguyên tắc least privilege:
sudo groupadd -r logging && sudo useradd -r -g logging -d /opt/logging logging
Nạp Gói Phần Mềm Nguồn
Tải trực tiếp gói nén từ kho chính thức của Elastic:
BASE_URL=https://artifacts.elastic.co/downloads
wget ${BASE_URL}/elasticsearch/elasticsearch-6.4.3.tar.gz
wget ${BASE_URL}/logstash/logstash-6.4.3.tar.gz
wget ${BASE_URL}/kibana/kibana-6.4.3-linux-x86_64.tar.gz
Thiết Lập Nhân Từ Elasticsearch
Giải nén và gán quyền sở hữu thư mục làm việc cho tài khoản logging:
sudo tar xf elasticsearch-6.4.3.tar.gz -C /opt/
sudo chown -R logging:logging /opt/elasticsearch-6.4.3/
sudo mkdir -p /var/data/es/{data,logs} && sudo chown -R logging:logging /var/data/es
Tệp cấu hình chính (elasticsearch.yml) cần được tối giản hóa tập trung vào tính năng cụm và phát hiện nút:
cluster.name: log_platform_v1
node.name: nodemaster01
node.master: true
node.data: true
path.data: /var/data/es/data
path.logs: /var/data/es/logs
network.host: nodemaster01
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["nodemaster01", "nocache01", "nodeui01"]
discovery.zen.minimum_master_nodes: 2
discovery.zen.fd.ping_timeout: 100s
action.destructive_requires_name: true
http.cors.enabled: true
http.cors.allow-origin: "*"
bootstrap.memory_lock: false
Lưu ý cấu hình: Tham số discovery.zen.minimum_master_nodes được đặt ở mức 2 để tránh chia cắt脑 (split-brain) khi một nút master ngoại tuyến. Đường dẫn dữ liệu và nhật ký đã tách rời khỏi thư mục cài đặt gốc để tiện backup. CORS được bật để cho phép giao diện web truy cập API trực tiếp.
Khởi chạy daemon dưới dạng nền để kiểm thử nhanh:
su - logging -c "/opt/elasticsearch-6.4.3/bin/elasticsearch"
Xác nhận trạng thái cụm bằng công cụ curl:
curl -s http://nodemaster01:9200/_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1709312455 08:14:30 log_platform_v1 green 3 3 0 0 0 0 0 0 - 100.0%
Triển Khai Redis làm Trung Gian Lưu Thông
Redis sẽ đóng vai trò hàng chờ (buffer) giúp giải耦 Logstash input/output. Cài đặt và tinh chỉnh tệp tinstruct:
sudo yum install -y redis
sudo sed -i 's/^bind .*/bind nocache01/' /etc/redis.conf
sudo sed -i 's/^maxmemory .*/maxmemory 2gb/' /etc/redis.conf
sudo systemctl enable --now redis
Bảo mật kết nối Redis thông qua protected-mode yes và cấu hình persistence cơ bản. Cổng mặc định 6379 sẽ lắng nghe trên interface nội bộ.
Xây Dựng Pipeline Xử Lý Logstash
Logstash trên nodemaster01 sẽ thu thập file nhật ký hệ thống và đẩy về Redis. Tệp cấu hình pipeline (pipelines.yml hoặc logstash.conf) được thiết kế theo mô hình hai bước:
Bước 1: Nhập (Input → Redis)
input {
file {
path => "/var/log/messages"
start_position => "beginning"
type => "os_syslog"
sincedb_path => "/dev/null"
}
}
filter {
grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } }
date { match => [ "syslog_timestamp", "MMM dd HH:mm:ss" ] }
}
output {
redis {
host => "nocache01"
port => 6379
data_type => "list"
key => "queue:raw_logs_b64"
codec => json
}
}
Bước 2: Xuất (Redis → Elasticsearch)
Cùng máy hoặc máy khác có thể chạy consumer pipeline để lọc và ghi chỉ mục:
input {
redis {
host => "nocache01"
port => 6379
data_type => "list"
key => "queue:raw_logs_b64"
codec => json
}
}
filter {
mutate { remove_field => [ "@version", "host", "path" ] }
if [type] == "os_syslog" {
geoip { source => "client_ip" target => "[@metadata][geo]" }
}
}
output {
elasticsearch {
hosts => ["nodemaster01:9200","nocache01:9200","nodeui01:9200"]
index => "app-os-log-%{+yyyy.MM.dd}"
document_type => "_doc"
}
}
Cập nhật biến môi trường cơ sở cho Logstash:
# logstash.yml
node.name: processing-worker-01
path.data: /var/data/lst/data
path.logs: /var/data/lst/logs
http.host: "nodemaster01"
pipeline.workers: 4
Kích Hoạt Dashboard Trực Quan
Giải nén Kibana và tạo tệp PID placeholder để quản lý quy trình khởi động:
sudo tar xf kibana-6.4.3-linux-x86_64.tar.gz -C /opt/
sudo chown -R logging:logging /opt/kibana-6.4.3-linux-x86_64
touch /var/run/kibana.pid && sudo chown logging /var/run/kibana.pid
Khởi chạy service và verify cổng lắng nghe:
cd /opt/kibana-6.4.3-linux-x86_64 && su - logging -c "nohup bin/kibana > /dev/null 2>&1 &"
ss -lnt | grep 5601
LISTEN 0 128 192.168.1.12:5601 *
Giao diện web sẽ hiển thị dashboard mặc định. Người dùng có thể truy cập http://nodeui01:5601/app/kibana để tạo pattern chỉ mục app-os-log-* và bắt đầu phân tích luồng dữ liệu thực tế.