Tải bản đầy đủ - 0 (trang)
CHƯƠNG 4. XÂY DỰNG HỆ THỐNG PHÂN TÍCH LOG

CHƯƠNG 4. XÂY DỰNG HỆ THỐNG PHÂN TÍCH LOG

Tải bản đầy đủ - 0trang

Chương 4. Xây dựng hệ thống phân tích Log



Một trong những tính năng phổ biến của Elastic stack là dùng để quản lý và phân

tích log. Với mơ hình của khách hàng của Fsoft có một máy chủ chạy Haproxy làm

nhiệm vụ cân bằng tải, 2 máy chủ web chạy apache và một máy chủ chạy cơ sở dữ liệu

mysql. Khi khách hàng từ bên ngoài truy cập vào tên miền của công ty, hệ thống DNS

sẽ phân giải địa chỉ tên miền thành địa chỉ IP của máy chủ cân bằng tải. Máy chủ cân

bằng tải sẽ tiếp nhận yêu cầu của khách hàng và phân phối ra các máy chủ web để xử

lý theo thuật toán roudrobin. Yêu cầu cần thiết là có một hệ thống phân tích log để

phân tích log của các dịch vụ haproxy, mysql, apache. Ngồi ra hệ thống này phải giám

sát được tình trạng memory, cpu, disk, network của các máy chủ trong hệ thống, nắm

bắt các gói tin sử dụng giao thức HTTP qua cổng 80 và các gói tin sử dụng giao thức

MySQL qua cổng 3306.

Bảng 4.1 Thông tin các máy chủ trong hệ thống triển khai

Hostname



IP address



Chức năng



Phần mềm sử dụng



Web 1



10.0.132.191



Chạy ứng dụng web



Apache,



php,



filebeat,



packetbeat, metricbeat

Web 2



10.0.132.192



Chạy ứng dụng web



Apache,



php,



filebeat,



packetbeat, metricbeat

Haproxy



10.0.132.195



Cân bằng tải



Haproxy, filebeat, packetbeat,

metricbeat



Mysql



10.0.132.190



Cơ sở dữ liệu



Mysql, filebeat, packetbeat,

metricbeat



Logstash



10.0.132.190



Sử dụng grok để phân tích cấu Logstash

tập tin log nhận được và xuất

ra elasticsearch



Kibana



10.0.132.190



Lấy



dữ



liệu



lấy



từ Kibana, Elasticsearch



Elasticsearch và hiển thị dưới

dạng các biểu đồ

Node1



10.0.132.199



Máy chủ này để chứa các Elasticsearch

index và thực hiện tìm kiếm dữ

T r a n g 39



Chương 4. Xây dựng hệ thống phân tích Log



liệu dựa trên các yêu cầu được

gửi từ kibana

Node2



10.0.132.198



Máy chủ này để chứa các Elasticsearch

index và thực hiện tìm kiếm dữ

liệu dựa trên các yêu cầu được

gửi từ kibana



4.2 Thông tin thu thập

Đối với hệ thống ở trên chúng ta sẽ tiến hành thu thập các thông tin sau:

-



Log được tạo ra bởi các dịch vụ haproxy, mysql, apache.



-



Thống kê thông tin hệ thống cho mỗi máy chủ.



-



Lưu lượng mạng của mỗi máy chủ bao gồm giao thức HTTP và MySQL.



Để phân tích thông tin cho mỗi máy chủ, chúng ta cần lựa chọn các beat phù hợp

với các yêu cầu.

-



Máy chủ web (web 1, web 2): Chúng ta sẽ cần thu thập thông tin access log và

error của apache, trạng thái của apache, các thông tin thống kê về CPU/memory.

Đối với log chúng ta sẽ sử dụng filebeat để thu thập thông tin. Đối với thông tin

CPU/memory hệ thống chúng ta sẽ sử dụng metricbeat. Chúng ta cũng sẽ bắt

các gói tin mạng sử dụng packetbeat cho giao thức HTTP.



-



Máy chủ cơ sở dữ liệu (mysql): Chúng ta có thể bắt các gói tin MySQL sử dụng

packetbeat. Giống như các máy chủ web chúng ta sẽ thu thập thông tin log và hệ

thống sử dụng filebeat và metricbeat.



-



Máy chủ cân bằng tải (Haproxy): Đối với máy chủ cân bằng tải chúng ta sẽ thu

thập log được sinh ra bởi dịch vụ haproxy, ngoài ra cũng như các máy chủ khác

chúng ta sẽ thập thông tin hệ thống sử dụng metricbeat.



Dữ liệu được đọc bởi filebeat sẽ được gửi đến Logstash. Logstash sẽ tiến hành xử

lý dữ liệu trước khi gửi cho ElasticSearch. Logstash sẽ giúp chúng ta phân tích cấu trúc

T r a n g 40



Chương 4. Xây dựng hệ thống phân tích Log



log và tách bản ghi log ra thành các trường khác nhau. Ví dụ log của apache chứa

những thơng tin IP Address, Username, URL…nếu chúng ta không tách ra thành nhiều

trường thì sẽ khơng thể thống kê được thơng tin hữu ích khi thu thập log. Sau khi

logstash xử lý log sẽ gửi thông tin đến elasticsearch và ghi dữ liệu dưới tên chỉ mục là

logstash*. Trên chỉ mục logstash*, các loại tài liệu sẽ tương ứng với tên các dịch vụ

như haproxylog, mysqlog, apacheaccesslog, apacheerrorlog. Các máy chủ web,

haproxy, mysql sử dụng filebeat để gửi thông tin tập tin log đến máy logstash thơng

qua cổng 5044.

Ngồi các thơng tin log server và ứng dụng thì người quản trị cũng cần phải theo

dõi hiệu năng của các máy chủ nên chúng ta sẽ sử dụng metricbeat để thu thập các

thông tin thống kê hệ thống như cpu, ram, disk trên các máy chủ. Việc nắm bắt các

traffic HTTP, MySQL cũng sẽ giúp người quản trị biết được hiệu năng của hệ thống,

biết được câu truy vấn nào thực hiện chậm để từ đó đưa ra các giải pháp để tối ưu hóa

hệ thống. Để thu thập thơng tin trên port 80 cho HTTP và port 3064 cho MySQL thì

chúng ta sẽ sử dụng packetbeat.

Packetbeat và metricbeat là những beat thu thập dữ liệu vào ghi vào elasticsearch

nên chúng ta khơng cần phải phân tích cấu trúc dữ liệu, các thông tin packetbeat và

metricbeat sẽ trực tiếp gửi về về elasticsearch.

4.3 Cài đặt, cấu hình hệ thống

4.3.1 Cấu hình log trên các dịch vụ

4.3.1.1 Máy chủ dịch vụ web

Trên máy chủ chạy dich vụ web(web 1, web 2) chúng ta cần thiết lập vị trí nơi lưu

log access_log và error log ở trong tập tin /etc/httpd/conf/httpd.conf.

ErrorLog "logs/error_log"

LogLevel warn



T r a n g 41



Chương 4. Xây dựng hệ thống phân tích Log



LogFormat



"%h



%l



%u



%t



\"%r\"



%>s



%b



\"%{Referer}i\"



\"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common



LogFormat "%h %l %u %t



\"%r\" %>s %b



\"%{Referer}i\"



\"%{User-Agent}i\" %I %O" combinedio



CustomLog "logs/access_log" combined





Mặc định tập tin error_log và access_log được lưu tại /var/log/access_log và

/var/log/error_log.

4.3.1.2 Máy chủ cân bằng tải haproxy

Trên máy chủ haproxy, chúng ta thiết lập vị trí lưu log của tập tin haproxy.log tại tập

tin cấu hình của haproxy (/etc/haproxy/haproxy.cfg).

global

log



127.0.0.1 local2 info



chroot



/var/lib/haproxy



pidfile



/var/run/haproxy.pid



maxconn



256



user



haproxy



group



haproxy



daemon

defaults

mode



http



log



global



option



httplog



timeout connect



10s



timeout client



30s



timeout server



30s

T r a n g 42



Chương 4. Xây dựng hệ thống phân tích Log



frontend http-in

bind *:80

default_backend



backend_servers



option



forwardfor



backend backend_servers

balance



roundrobin



server



web1 10.0.132.191:80 check



server



web2 10.0.132.193:80 check



Máy chủ haproxy sẽ ghi log vào tập tin /var/log/haproxy.log khi nhận yêu cầu từ

phía người dùng.

4.3.2 Cấu hình filebeat

Thiết lập cấu filebeat thơng qua tập tin /etc/filebeat/filebeat.yml để đọc thông tin

máy chủ web, chúng ta sẽ tiến hành thiết lập vị trí đọc tập tin log thông qua giá trị

prospector.

Đối với dịch vụ web chúng ta sẽ đọc nội dung 2 tập tin là access_log và error_log.

Để phân biệt 2 loại dữ liệu của 2 file, chúng ta sử dụng tùy chọn document_type. Khi

đánh chỉ mục vào Elastic stack thì access_log sẽ có loại dữ liệu là apachaccesslog và

error_log sẽ có loại dữ liệu là apacheerrorlog.

filebeat.prospectors:

- input_type: log

paths:

- /var/log/httpd/access_log

document_type: apacheaccesslog

tags: ["web1"]

- input_type: log

paths:

- /var/log/httpd/error_log

tags: ["web1"]

T r a n g 43



Chương 4. Xây dựng hệ thống phân tích Log



document_type: apacheerrorlog

output.logstash:

hosts: ["10.0.132.194:5044"]



Tương tự chúng ta cấu hình filebeat cho dịch vụ haproxy

filebeat.prospectors:

- input_type: log

paths:

- /var/log/haproxy.log

document_type: haproxylog

output.logstash:

hosts: ["10.0.132.194:5044"]



4.3.3 Cấu hình packetbeat

Thiết lập cấu hình packetbeat thơng qua tập tin etc/packetbeat/packetbeat.yml để

bắt các gói tin sử dụng giao thức HTTP cổng 80. Sau khi thu thập thông tin thì

packetbeat sẽ gửi về trực tiếp cho elasticsearch.

packetbeat.interfaces.device: any

packetbeat.flows:

timeout: 30s

period: 10s

packetbeat.protocols.icmp:

enabled: true

packetbeat.protocols.http:

ports: [80]

output.elasticsearch:

hosts: ["10.0.132.196:9200"]



Tương tự chúng ta cũng cấu hình packetbeat để bắt các gói tin sử dụng giao thức

MySQL

T r a n g 44



Chương 4. Xây dựng hệ thống phân tích Log



packetbeat.interfaces.device: any

packetbeat.flows:

timeout: 30s

period: 10s

packetbeat.protocols.icmp:

enabled: true

packetbeat.protocols.mysql:

ports: [3306]

output.elasticsearch:

hosts: ["10.0.132.196:9200"]



4.3.4 Cấu hình metricbeat

Thiết lập cấu hình metricbeat trên các máy chủ haproxy, mysql, web thông qua tập

tin /etc/metricbeat/metricbeat.yml để thống kê thông tin cpu, memory, network, disk…

metricbeat.modules:

- module: system

metricsets:

- cpu

- load

- filesystem

- fsstat

- memory

- network

- process

enabled: true

period: 10s

processes: ['.*']

output.elasticsearch:

hosts: ["10.0.132.196:9200"]



Dữ liệu sau khi được metricbeat thu thập được sẽ gửi trực tiếp đến máy chủ

elasticsearch địa chỉ 10.0.132.196

T r a n g 45



Chương 4. Xây dựng hệ thống phân tích Log



4.3.5 Cài đặt, cấu hình máy chủ ElasticSearch.

Đầu tiên chúng ta cần cài đặt elasticsearch trên các máy tính node1,node2 và kibana

#rpm



–ivh



https://artifacts.elastic.co/downloads/elasticsearch/elasticsea

rch-5.6.3.rpm



Sau khi cài đặt, chúng ta sẽ cấu hình dịch vụ elasticsearch thông qua tập tin

/etc/elasticsearch/elasticsearch.yml. Tiến hành chỉnh sữa tập tin elasticsearch.yml trên

node1

cluster.name: ecluster

node.name: node1

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

network.host: 10.0.132.199

http.port: 9200

discovery.zen.ping.unicast.hosts:

["10.0.132.199","10.0.132.198","10.0.132.196"]



Trong cấu hình elasticsearch chúng ta cần thiết lập các thông số sau:

-



cluster.name. Đây là thông tin cụm elasticsearch dùng để tính tốn và lưu trữ dữ

liệu.



-



Node.name là thơng tin của node trong elasticsearch.



-



Path.data: sau khi nhận dữ liệu từ logstash, metricbeat, packetbeat thì

elasticsearch sẽ lưu dữ liệu vào đây.



-



Path.logs: nơi lưu log của dịch vụ elasticsearch.



-



Network.host: địa chỉ IP elasticsearch cho phép truy cập.



-



http.port: cổng cho phép elasticsearch truy cập.



-



discovery.zen.ping.unicast.hosts: danh sách các node trong cùng cluster.

Elasticsearch sẽ dựa vào thông tin ở đây để xác định số lượng các node trong

cluster.

T r a n g 46



Chương 4. Xây dựng hệ thống phân tích Log



Tương tự chúng ta sẽ tiến hành elasticsearch trên node2.

cluster.name: ecluster

node.name: node2

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

network.host: 10.0.132.198

http.port: 9200

discovery.zen.ping.unicast.hosts:

["10.0.132.199","10.0.132.198","10.0.132.196"]



Vì cụm elasticsearch gồm 2 node với 2 địa chỉ IP khác nhau nên khi kibana thực

hiện truy xuất dữ liệu sẽ không biết truy xuất địa chỉ nào. Một giải pháp đưa ra là xây

dựng một máy chủ cân bằng tải để tiếp nhận các yêu cầu từ kibana sau đó phân phối

đến từng máy chủ elasticsearch tương tự như dịch vụ web, tuy nhiên việc này sẽ tốn tài

nguyên của hệ thống nên em đề xuất thực hiện cài đặt elasticsearch trên máy chủ

kibana, máy chủ elasticsearch này sẽ tham gia vào ecluster nhưng không thực hiện

chức năng điều khiển như node master, cũng không chứa dữ liệu. Và kibana sẽ truy

xuất trực tiếp đến địa chỉ IP của máy này.

Chúng ta sẽ tiến hành cấu hình elasticsearch trên máy chủ Kibana.

cluster.name: ecluster

node.name: kibana

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

network.host: 10.0.132.196

http.port: 9200

discovery.zen.ping.unicast.hosts:

["10.0.132.199","10.0.132.198","10.0.132.196"]

node.master: false

node.data: false

T r a n g 47



Chương 4. Xây dựng hệ thống phân tích Log



node.ingest: false

elasticsearch.url: "http://10.0.132.196:9200"

transport.host: 10.0.132.196

transport.tcp.port: 9300 - 9400



Nhiệm vụ elasticsearch trên máy này là nhận các request của kibana và phân phối

đến các máy trong cluster để xử lý. Máy chủ này sẽ không xử lý và chứa dữ liệu.

Sau khi cấu hình xong chúng ta sẽ tiến hành khởi động elasticsearch và thiết lập để

elasticsearch chạy khi máy chủ khởi động

#systemctl start elasticsearch

#systemctl enable elasticsearch



4.3.6 Cài đặt, cấu hình máy chủ kibana

Thực hiện cài đặt trên máy chủ kibana

#rpm –ivh https://artifacts.elastic.co/downloads/kibana/kibana5.6.3-x86_64.rpm



Địa chỉ của máy chủ kibana là 10.0.132.196 và địa chỉ của 2 node trong cluster là

10.0.132.198,



10.0.132.199.



Trong



tập



tin



cấu



hình



của



kibana



tại



/etc/kibana/kibana.yml chúng ta sẽ tiến hành cấu hình các thơng tin sau:

server.port: 5601

server.host: "10.0.132.196"

server.name: "kibana"

elasticsearch.url: "http://10.0.132.196:9200"



Trong đó

-



server.port là cổng mà máy chủ kibana lắng nghe.



-



Server.host là địa chỉ IP truy cập kibana



-



Server.name là hostname của máy chủ kibana



T r a n g 48



Chương 4. Xây dựng hệ thống phân tích Log



-



Elasticsearch.url là địa chỉ của máy cluster, elasticsearch được cài trên kibana

nên kibana sẽ truy xuất vào địa chỉ IP của chính nó, tuy nhiên việc lưu trữ dữ

liệu và tính tốn thì thực hiện trên node1 và node2. Elasticsearch cài trên kibana

chỉ làm nhiệm vụ điều hướng.



Thực hiện khởi động dịch vụ kibana và cấu hình để kibana khởi động cùng với máy

chủ

#systemctl start kibana

#systemctl enable kibana



4.3.7 Cài đặt cấu hình máy chủ Logstash

Ngay khi filebeat bắt đầu thu thập logs, Logstash sẽ bắt đầu nhận logs, phân tích,

xử lý, lập chỉ mục đến ElasticSearch. Bằng cách xử lý dữ liệu với Logstash, chúng ta

sẽ có cái nhìn sâu hơn về dữ liệu và các trường được xử lý. Các bản ghi có thể cho

chúng ta một số thơng tin hữu ích tốt hơn. Ví dụ: nếu chúng ta tách các trường trong

bản ghi log haproxy để tìm vị trí địa lý của người truy cập, nó sẽ cho chúng ta một ý

tưởng rõ ràng về vị trí mà hầu hết người dùng truy cập vào máy chủ. Để tách các bản

ghi thành nhiều trường khác nhau, chúng ta có thể sử dụng grok.

Đầu tiên chúng ta cần cài đặt máy phần mềm logstash

#rpm –ivh https://artifacts.elastic.co/downloads/kibana/kibana5.6.3-x86_64.rpm



Tạo các pattern tương ứng cho các dịch vụ.

4.3.7.1 Grok cho HAPROXY

Đối với tập tin HAPROXY, một bản ghi log sẽ có định dạng như bên dưới



T r a n g 49



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

CHƯƠNG 4. XÂY DỰNG HỆ THỐNG PHÂN TÍCH LOG

Tải bản đầy đủ ngay(0 tr)

×