- Server đã cài đặt ELK stack. Tài liệu cài đăt
- OS: Centos 7
- IP: 192.168.50.185/24
- Server gửi log:
- OS: Centos 7
- IP: 192.168.50.186/24
Trên server cài ELK stack, truy cập file /etc/elasticsearch/elasticsearch.yml và sửa như trong hình, với network.host là địa chỉ IP máy ELK server.
Restart Elasticsearch:
systemctl restart elasticsearch
Trên server cài đặt ELK stack, sửa file cấu hình của rsyslog /etc/rsyslog.conf
để cấu hình rsyslog nghe trên port 514 udp và tcp, bỏ comment các dòng sau:
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
Lưu file và khởi động lại rsyslog
systemctl restart rsyslog
Cấu hình trên client(192.168.50.186) để gửi log đến server:
Thêm dòng sau vào file cấu hình /etc/rsyslog.conf
:
*.* @IP_server:514
Thay
IP_server
với địa chỉ Ip của server(ở đây là 192.168.50.185). Nếu muốn gửi log theo giao thức TCP thay vì UDP thì thay@
bằng@@
.
Elasticsearch yêu cầu tất cả các document nó nhận được ở định dạng Json, Rsyslog cung cấp một cách để thực hiện điều này.
Ở trên server, tạo một file cấu hình mới để định dạng log về định dạng Json trước khi gửi đến Logstash:
sudo vi /etc/rsyslog.d/01-json-template.conf
Với nội dung file là:
template(name="json-template"
type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"@version\":\"1")
constant(value="\",\"message\":\"") property(name="msg" format="json")
constant(value="\",\"sysloghost\":\"") property(name="hostname")
constant(value="\",\"severity\":\"") property(name="syslogseverity-text")
constant(value="\",\"facility\":\"") property(name="syslogfacility-text")
constant(value="\",\"programname\":\"") property(name="programname")
constant(value="\",\"procid\":\"") property(name="procid")
constant(value="\"}\n")
}
Trên là một mẫu để định dạng log về JSON, có thể chỉnh sửa lại phù hợp với nhu cầu. Ví dụ về một JSOn message từ mẫu trên:
{
"@timestamp" : "2015-11-18T18:45:00Z",
"@version" : "1",
"message" : "Your syslog message here",
"sysloghost" : "hostname.example.com",
"severity" : "info",
"facility" : "daemon",
"programname" : "my_program",
"procid" : "1234"
}
Đọc thêm rsyslog.com docs để biết thêm các biến nếu muốn custom lại template. Dữ liệu gửi đi vẫn sẽ chưa gửi đi theo định dạng này, bước tiếp theo sẽ cấu hình để rsyslog gửi log đi theo mẫu json vừa thêm.
Cấu hình rsyslog gửi log theo định dạng json đến logstash, ở đây là cấu hình cho trường hợp rsyslog và logstash trên cùng một server. Tạo file cấu hình:
sudo vi /etc/rsyslog.d/60-output.conf
Thêm các dòng sau vào file
# Dong cau hinh sau gui log den localhost port 10514
# su dung dinh dang json
*.* @127.0.0.1:10514;json-template
Thay @
bằng @@
nếu muốn sử dụng TCP. Thay địa chỉ ip (127.0.0.1) bằng địa chỉ ip mà logstash sử dụng để lắng nghe log(ví dụ như trên địa chỉ khác hay trên server khác).
Lưu lại file, chưa cần khởi động lại rsyslog.
Đảm bảo server đã cài đặt Java và ELK stack theo hướng dẫn.
Cấu hình của Logstash nằm trong thư mục /etc/logstash/conf.d
, tạo một file cấu hình mới để cấu hình logstash nhận Json message.
sudo vi /etc/logstash/conf.d/rsyslog.conf
Với nội dung
input {
udp {
host => "127.0.0.1"
port => 10514
codec => "json"
type => "rsyslog"
}
}
filter { }
output {
if [type] == "rsyslog" {
elasticsearch {
hosts => [ "192.168.50.185:9200" ]
}
}
}
Cấu hình trên tương đương với một Logstash pipeline với input được lấy từ localhost port 10514, không cấu hình filter và cấu hình output gửi đến elasticsearch.
Cấu hình firewalld để allow một số port cần thiết: Trên ELK server:
firewall-cmd --add-port=514/udp --add-port=5601/tcp --add-port=9200/udp --add-port=9200/tcp --permanent
firewall-cmd --add-port=514/udp --add-port=5601/tcp --add-port=9200/udp --add-port=9200/tcp
Truy cập địa chỉ ELK server
http://192.168.50.185:5601 Vào mục Management và chọn Create Index:
Tạo index pattern Điền vào ô Define index pattern rồi chọn Next step:
Trên client, chạy lệnh sau để tạo thử log đến rsyslog:
logger this is test log
Kiểm tra trên Kibana, phần discover:
![](https://i.imgur.com/hmEDOwH.png)
Tài liệu tham khảo: