View difference between Paste ID: gsh1mekg and h27RAeqK
SHOW: | | - or go back to the newest paste.
1
Đọc 1 lượt
2
- Cài theo các bước: https://blog.cloud365.vn/logging/ELK-part2-Cai-dat-ELK-stack/
3
 *  Lưu ý thay đổi nội dung của filebeat.yml
4
- Cấu hình logstash input, output theo hướng dẫn trong https://blog.cloud365.vn/logging/ELK-part-5-Tim-hieu-ve-filebeats/
5
 * lưu ý cấu hình filebeat đang bị sai
6
Cấu hình filebeat cho log tại : https://pastebin.com/wLUpjUwB
7
8
9
- Sau khi kiểm tra các service status OK --> vào kibana tạo index pattern: Index pattern là gì? 
10
	Có thể để ý thấy khi logstash forward sang cho elasticsearch sẽ có index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
11
	Đây chính là pattern chung "[@metadata][beat]" -> vào kibana  tạo index pattern là giá trị của [@metadata][beat], trường hợp này là "filebeat", tham số thời gian có thể thay đổi --> index pattern là : "filebeat-*" -> next step
12
- Khi này đã có thể discover các event
13
14
15
- Tuy nhiên để visualize được thì cần có các trường giá trị phù hợp -> cần parse đúng cách:
16
Đối với cách nhận toàn bộ các field giá trị như /var/log/*.log chỉ phù hợp cho nhận log Ubuntu, centos thì system log ở vị trí khác. Theo dõi blog này : https://burnhamforensics.com/2019/03/12/monitoring-centos-endpoints-with-filebeat-elk/
17
Để bật system log cho hệ điều hành: khôi phục filebeat.yml mặc định
18
filebeat modules enable system
19
20
Sau đó cấu hình lại logstash để filter ra các field mong muốn như trong: https://burnhamforensics.com/2019/03/12/monitoring-centos-endpoints-with-filebeat-elk/
21
22
Muốn tạo dashboard -> vào client có filebeat agent: gõ lệnh  "filebeat setup --dashboards". DONE
23
24
25
Ví dụ đã setup: http://139.180.137.217:5601/app/kibana#/dashboard/5517a150-f9ce-11e6-8115-a7c18106d86a
26
27
28
29
---- /etc/logstash/conf.d/02-logstash.conf
30
filter {
31
  if [fileset][module] == "system" {
32
    if [fileset][name] == "secure" {
33
      grok {
34
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
35
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
36
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
37
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} <img draggable="false" class="emoji" alt="~_~X" src="https://s0.wp.com/wp-content/mm
38
u-plugins/wpcom-smileys/twemoji/2/svg/1f626.svg"> %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
39
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
40
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
41
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
42
        pattern_definitions => {
43
          "GREEDYMULTILINE"=> "(.|\n)*"
44
        }
45
        remove_field => "message"
46
      }
47
      date {
48
        match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
49
      }
50
      geoip {
51
        source => "[system][auth][ssh][ip]"
52
        target => "[system][auth][ssh][geoip]"
53
      }
54
    }
55
    else if [fileset][name] == "syslog" {
56
      grok {
57
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
58
        pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
59
        remove_field => "message"
60
      }
61
      date {
62
        match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
63
      }
64
    }
65
  }
66
}
67
68
69
input {
70
beats {
71
    port => 5044
72
    ssl => false
73
}
74
}
75
76
output {
77
    elasticsearch {
78
    hosts => ["localhost:9200"]
79
    sniffing => true
80
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
81
    }
82
}