Skip to content

Latest commit

 

History

History
165 lines (138 loc) · 5.78 KB

05.Rsyslog.md

File metadata and controls

165 lines (138 loc) · 5.78 KB

Cấu hình logstash nhận log từ rsyslog

Mô hình lab

  • 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

Cấu hình

Bước 1: Cấu hình bind address cho Elasticsearch

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

Bước 2: Cấu hình rsyslog trên server.

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

Bước 3: Cấu hình Rsyslog để gửi log từ xa.

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 @@.

Bước 4: Định dạng Log về định dạng Json

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.

Bước 5: Cấu hình server rsyslog gửi log đến logstash.

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.

Bước 6: Cấu hình Logstash nhận Json message.

Đả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.

Bước 7: Cấu hình filewalld

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 

Bước 8: Kiểm tra trên Kibana

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: