Thứ ba, 15/07/2014 | 00:00 GMT+7

Cách sử dụng Logstash và Kibana để tập trung log trên CentOS 7

Trong hướng dẫn này, ta sẽ xem xét cài đặt Logstash 1.4.2 và Kibana 3 trên CentOS 7 và cách cấu hình chúng để thu thập và trực quan hóa các log hệ thống của ta ở một vị trí tập trung. Logstash là một công cụ open-souce để thu thập, phân tích cú pháp và lưu trữ log để sử dụng trong tương lai. Kibana 3 là một giao diện web được dùng để tìm kiếm và xem các log mà Logstash đã lập index . Cả hai công cụ này đều dựa trên Elasticsearch. Elasticsearch, Logstash và Kibana, khi được sử dụng cùng nhau được gọi là ngăn xếp ELK.

Ghi log tập trung có thể rất hữu ích khi cố gắng xác định sự cố với server hoặc ứng dụng của bạn, vì nó cho phép bạn tìm kiếm qua tất cả log của bạn ở một nơi duy nhất. Nó cũng hữu ích vì nó cho phép bạn xác định các vấn đề trải dài trên nhiều server bằng cách tương quan các log của chúng trong một khung thời gian cụ thể.

Có thể sử dụng Logstash để thu thập log của tất cả các loại, nhưng ta sẽ giới hạn phạm vi của hướng dẫn này là thu thập log hệ thống.

Lưu ý: Bạn có thể tìm thấy version cập nhật của hướng dẫn này tại đây: Cách cài đặt Elasticsearch, Logstash và Kibana 4 trên CentOS 7 .

Mục tiêu của ta

Mục tiêu của hướng dẫn là cài đặt Logstash để thu thập các log hệ thống của nhiều server và cài đặt Kibana để trực quan hóa các log đã thu thập.

Cài đặt Logstash / Kibana của ta có bốn thành phần chính:

  • Logstash : Thành phần server của Logstash xử lý các log đến
  • Elasticsearch : Lưu trữ tất cả log
  • Kibana : Giao diện web để tìm kiếm và hiển thị log
  • Logstash Forwarder : Được cài đặt trên các server sẽ gửi log của họ đến Logstash, Logstash Forwarder đóng role là đại lý chuyển tiếp log sử dụng giao thức mạng lumberjack để giao tiếp với Logstash

Ta sẽ cài đặt ba thành phần đầu tiên trên một server duy nhất, mà ta sẽ gọi là Server Logstash của ta . Logstash Forwarder sẽ được cài đặt trên tất cả các server mà ta muốn thu thập log , ta sẽ gọi chung là Server của ta .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn sẽ yêu cầu quyền truy cập root vào VPS CentOS 7. Hướng dẫn cài đặt có thể tìm thấy ở đây (bước 3 và 4): Cài đặt server ban đầu với CentOS 6 .

Số lượng CPU, RAM và dung lượng lưu trữ mà Server Logstash của bạn sẽ yêu cầu phụ thuộc vào dung lượng log mà bạn định thu thập. Đối với hướng dẫn này, ta sẽ sử dụng một VPS với các thông số kỹ thuật sau cho Server Logstash của ta :

  • Hệ điều hành: CentOS 7
  • RAM: 2GB
  • CPU: 2

Ngoài Server Logstash của bạn, bạn cần có một vài server khác mà bạn sẽ thu thập log từ đó.

Hãy bắt đầu cài đặt Server Logstash của ta !

Cài đặt Java 7

Elasticsearch và Logstash yêu cầu Java 7, vì vậy ta sẽ cài đặt nó ngay bây giờ. Ta sẽ cài đặt OpenJDK 7.

Cài đặt version ổn định mới nhất của OpenJDK 7 bằng lệnh này:

sudo yum -y install java-1.7.0-openjdk 

Bây giờ Java 7 đã được cài đặt, hãy cài đặt ElasticSearch.

Cài đặt Elasticsearch

Lưu ý : Logstash 1.4.2 đề xuất Elasticsearch 1.1.1.

Chạy lệnh sau để nhập khóa GPG công khai Elasticsearch vào rpm:

sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch 

Tạo và chỉnh sửa file repository yum mới cho Elasticsearch:

sudo vi /etc/yum.repos.d/elasticsearch.repo 

Thêm cấu hình repository sau:

[elasticsearch-1.1] name=Elasticsearch repository for 1.1.x packages baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1 

Lưu và thoát.

Cài đặt Elasticsearch 1.1.1 bằng lệnh này:

sudo yum -y install elasticsearch-1.1.1 

Elasticsearch hiện đã được cài đặt. Hãy chỉnh sửa cấu hình:

sudo vi /etc/elasticsearch/elasticsearch.yml 

Thêm dòng sau vào đâu đó trong file , để tắt các tập lệnh động:

script.disable_dynamic: true 

Bạn cũng cần hạn chế quyền truy cập từ bên ngoài vào version Elasticsearch của bạn , để người ngoài không thể đọc dữ liệu hoặc tắt cụm Elasticseach của bạn thông qua API HTTP. Tìm dòng chỉ định network.host và bỏ ghi chú để nó trông giống như sau:

network.host: localhost 

Sau đó, vô hiệu hóa multicast bằng cách tìm các discovery.zen.ping.multicast.enabled mục và uncommenting để nó trông như thế này:

discovery.zen.ping.multicast.enabled: false 

Lưu và thoát elasticsearch.yml .

Bây giờ bắt đầu Elasticsearch:

sudo systemctl start elasticsearch.service 

Sau đó chạy lệnh sau để khởi động Elasticsearch khi khởi động:

sudo systemctl enable elasticsearch.service 

Bây giờ Elasticsearch đã được cài đặt và chạy, hãy cài đặt Kibana.

Cài đặt Kibana

Lưu ý : Logstash 1.4.2 khuyến nghị Kibana 3.0.1.

Tải Kibana về folder chính của bạn bằng lệnh sau:

cd ~; curl -O https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz 

Extract repository Kibana bằng tar:

tar xvf kibana-3.0.1.tar.gz 

Mở file cấu hình Kibana để chỉnh sửa:

vi ~/kibana-3.0.1/config.js 

Trong file cấu hình Kibana, tìm dòng chỉ định elasticsearch URL của server , và thay thế số cổng (9200 theo mặc định) với 80 :

   elasticsearch: "http://"+window.location.hostname+":80", 

Điều này là cần thiết vì ta đang lên kế hoạch truy cập Kibana trên cổng 80 (tức là http: // logstash \ _server \ _public \ _ip / ).

Ta sẽ sử dụng Apache để phục vụ cài đặt Kibana, vì vậy hãy di chuyển các file vào một vị trí thích hợp. Tạo một folder bằng lệnh sau:

sudo mkdir -p /var/www/kibana3 

Bây giờ sao chép các file Kibana vào folder mới tạo của bạn:

sudo cp -R ~/kibana-3.0.1/* /var/www/kibana3/ 

Trước khi có thể sử dụng giao diện web Kibana, ta phải cài đặt Apache. Hãy làm điều đó ngay bây giờ.

Cài đặt Apache HTTP

Sử dụng Yum để cài đặt Apache HTTP:

sudo yum -y install httpd 

Do cách mà Kibana giao diện user với Elasticsearch ( user cần có thể truy cập trực tiếp vào Elasticsearch), ta cần cấu hình Apache để ủy quyền các yêu cầu cổng 80 đến cổng 9200 (cổng mà Elasticsearch lắng nghe theo mặc định). Ta sẽ cung cấp một file VirtualHost mẫu để bắt đầu.

Download cấu hình VirtualHost mẫu:

cd ~; wget https://assets.digitalocean.com/articles/logstash/kibana3.conf 

Mở file cấu hình mẫu để chỉnh sửa:

vi kibana3.conf 

Tìm và thay đổi các giá trị được đánh dấu của VirtualHostServerName thành FQDN của bạn (hoặc localhost nếu bạn không sử dụng domain ) và root đến nơi ta đã cài đặt Kibana, vì vậy chúng trông giống như các mục sau:

<VirtualHost FQDN:80>   ServerName FQDN 

Lưu và thoát. Bây giờ sao chép nó vào cấu hình cấu hình Apache của bạn:

sudo cp ~/kibana3.conf /etc/httpd/conf.d/ 

Sau đó, tạo thông tin đăng nhập sẽ được sử dụng để truy cập Kibana (thay thế tên user của chính bạn):

sudo htpasswd -c /etc/httpd/conf.d/kibana-htpasswd user 

Sau đó nhập password và xác minh nó. Tệp htpasswd vừa tạo được tham chiếu trong cấu hình Apache mà bạn đã cấu hình gần đây.

Bây giờ hãy khởi động Apache để đưa các thay đổi của ta có hiệu lực:

sudo systemctl start httpd.service 

Ngoài ra, hãy cấu hình Apache để bắt đầu khi server khởi động :

sudo systemctl enable httpd.service 

Kibana hiện có thể truy cập thông qua FQDN của bạn hoặc địa chỉ IP công cộng của Server Logstash của bạn, tức là http: // logstash \ _server \ _public \ _ip / . Nếu truy cập vào đó trong trình duyệt web, bạn sẽ thấy trang chào mừng Kibana cho phép bạn xem trang tổng quan nhưng sẽ không có log nào để xem vì Logstash chưa được cài đặt . Hãy làm điều đó ngay bây giờ.

Cài đặt Logstash

Gói Logstash chia sẻ cùng một Khóa GPG với Elasticsearch và ta đã cài đặt public key đó, vì vậy hãy tạo và chỉnh sửa file repository Yum mới cho Logstash:

sudo vi /etc/yum.repos.d/logstash.repo 

Thêm cấu hình repository sau:

[logstash-1.4] name=logstash repository for 1.4.x packages baseurl=http://packages.elasticsearch.org/logstash/1.4/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1 

Lưu và thoát.

Cài đặt Logstash 1.4.2 bằng lệnh này:

sudo yum -y install logstash-1.4.2 

Logstash đã được cài đặt nhưng nó chưa được cấu hình.

Tạo certificate SSL

Vì ta sẽ sử dụng Logstash Forwarder để gửi log từ Server đến Server Logstash của ta , ta cần tạo certificate SSL và cặp khóa. Chứng chỉ được Logstash Forwarder sử dụng để xác minh danh tính của Logstash Server.

Đến đây bạn có hai tùy chọn để tạo certificate SSL của bạn . Nếu bạn có cài đặt DNS cho phép server khách hàng của bạn phân giải địa chỉ IP của Server Logstash, hãy sử dụng Tùy chọn 2 . Nếu không, Tùy chọn 1 sẽ cho phép bạn sử dụng địa chỉ IP.

Tùy chọn 1: Địa chỉ IP

Nếu bạn không có một DNS cài đặt -mà sẽ cho phép server của bạn, rằng bạn sẽ thu thập các bản ghi từ, để giải quyết địa chỉ IP của Logstash bạn Server-bạn sẽ có thêm địa chỉ IP riêng Logstash Server đến subjectAltName (SAN) trường của certificate SSL mà ta sắp tạo. Để làm như vậy, hãy mở file cấu hình OpenSSL:

sudo vi /etc/pki/tls/openssl.cnf 

Tìm phần [ v3_ca ] trong file và thêm dòng này vào bên dưới (thay thế bằng địa chỉ IP riêng của Server Logstash):

subjectAltName = IP: logstash_server_private_ip 

Lưu và thoát.

Bây giờ, tạo certificate SSL và private key ở các vị trí thích hợp (/ etc / pki / tls /), bằng các lệnh sau:

cd /etc/pki/tls sudo openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt 

Tệp logstash-forwarder.crt sẽ được sao chép vào tất cả các server sẽ gửi log đến Logstash nhưng ta sẽ thực hiện điều đó sau một thời gian ngắn. Hãy hoàn thành cấu hình Logstash của ta . Nếu bạn đã chọn tùy chọn này, hãy bỏ qua tùy chọn 2 và chuyển sang Định cấu hình Logstash .

Tùy chọn 2: FQDN (DNS)

Nếu bạn đã cài đặt DNS với mạng riêng của bạn , bạn nên tạo một bản ghi A có chứa địa chỉ IP riêng của Server Logstash — domain này sẽ được sử dụng trong lệnh tiếp theo, để tạo certificate SSL. Ngoài ra, bạn có thể sử dụng bản ghi trỏ đến địa chỉ IP công cộng của server . Chỉ cần đảm bảo server của bạn ( server mà bạn sẽ thu thập log từ đó) sẽ có thể phân giải domain thành Server Logstash của bạn.

Bây giờ, hãy tạo certificate SSL và private key , ở các vị trí thích hợp (/ etc / pki / tls /…), bằng lệnh sau (thay thế trong FQDN của Server Logstash):

cd /etc/pki/tls sudo openssl req -subj '/CN=<^>logstash_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt 

Tệp logstash-forwarder.crt sẽ được sao chép vào tất cả các server sẽ gửi log đến Logstash nhưng ta sẽ thực hiện điều đó sau một thời gian ngắn. Hãy hoàn thành cấu hình Logstash của ta .

Cấu hình Logstash

Các file cấu hình logstash có định dạng JSON và nằm trong /etc/logstash/conf.d. Cấu hình bao gồm ba phần: đầu vào, bộ lọc và kết quả .

Hãy tạo một file cấu hình có tên 01-lumberjack-input.conf và cài đặt đầu vào “lumberjack” của ta (giao thức mà Logstash Forwarder sử dụng):

sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf 

Chèn cấu hình đầu vào sau:

input {   lumberjack {     port => 5000     type => "logs"     ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"     ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"   } } 

Lưu và thoát. Điều này chỉ định một đầu vào lumberjack sẽ lắng nghe trên cổng tcp 5000 và nó sẽ sử dụng certificate SSL và private key mà ta đã tạo trước đó.

Bây giờ, hãy tạo một file cấu hình có tên là 10-syslog.conf , nơi ta sẽ thêm một bộ lọc cho các thông báo log hệ thống:

sudo vi /etc/logstash/conf.d/10-syslog.conf 

Chèn cấu hình bộ lọc log hệ thống sau:

filter {   if [type] == "syslog" {     grok {       match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }       add_field => [ "received_at", "%{@timestamp}" ]       add_field => [ "received_from", "%{host}" ]     }     syslog_pri { }     date {       match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]     }   } } 

Lưu và thoát. Bộ lọc này tìm kiếm các log được gắn nhãn là loại "nhật ký hệ thống" (bởi Logstash Forwarder) và nó sẽ cố gắng sử dụng "grok" để phân tích cú pháp các log hệ thống đến để làm cho nó có cấu trúc và khả năng truy vấn.

Cuối cùng, ta sẽ tạo một file cấu hình có tên 30-lumberjack-output.conf :

sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf 

Chèn cấu hình kết quả sau:

output {   elasticsearch { host => localhost }   stdout { codec => rubydebug } } 

Lưu và thoát. Đầu ra này về cơ bản cấu hình Logstash để lưu trữ các bản ghi trong Elasticsearch.

Với cấu hình này, Logstash cũng sẽ chấp nhận log không trùng với bộ lọc, nhưng dữ liệu sẽ không có cấu trúc (ví dụ: log Nginx hoặc Apache chưa được lọc sẽ xuất hiện dưới dạng thông báo phẳng thay vì phân loại thông báo theo mã phản hồi HTTP, địa chỉ IP nguồn, file được cung cấp , Vân vân.).

Nếu bạn muốn thêm bộ lọc cho các ứng dụng khác sử dụng đầu vào Logstash Forwarder, hãy đảm bảo đặt tên cho các file để chúng sắp xếp giữa cấu hình đầu vào và kết quả (tức là từ 01 đến 30).

Khởi động lại Logstash để thay đổi cấu hình của ta có hiệu lực:

sudo service logstash restart 

Bây giờ Server Logstash của ta đã sẵn sàng, hãy chuyển sang cài đặt Logstash Forwarder.

Cài đặt Logstash Forwarder

Lưu ý : Thực hiện các bước này cho từng server mà bạn muốn gửi log đến Server Logstash của bạn . Để biết hướng dẫn về cách cài đặt Logstash Forwarder trên các bản phân phối Linux dựa trên Debian (ví dụ: Ubuntu, Debian, v.v.), hãy tham khảo phần Build và Package Logstash Forwarder của biến thể Ubuntu của hướng dẫn này .

Sao chép Chứng chỉ SSL và Gói Chuyển tiếp Logstash

Trên Server Logstash , sao chép certificate SSL vào Server (thay thế bằng thông tin đăng nhập của chính bạn):

scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp 

Cài đặt gói Logstash Forwarder

Trên Server , download Logstash Forwarder RPM vào folder chính của bạn:

cd ~; curl -O http://download.elasticsearch.org/logstash-forwarder/packages/logstash-forwarder-0.3.1-1.x86_64.rpm 

Sau đó cài đặt Gói Logstash Forwarder:

sudo rpm -ivh ~/logstash-forwarder-0.3.1-1.x86_64.rpm 

Tiếp theo, bạn cần cài đặt tập lệnh init Logstash Forwarder, để nó bắt đầu khi server khởi động . Ta sẽ sử dụng tập lệnh init do logstashbook.com cung cấp:

cd /etc/init.d/; sudo curl -o logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_init sudo chmod +x logstash-forwarder 

Tập lệnh init phụ thuộc vào một file có tên /etc/sysconfig/logstash-forwarder . Tệp mẫu có sẵn để download :

sudo curl -o /etc/sysconfig/logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_sysconfig 

Mở nó để chỉnh sửa:

sudo vi /etc/sysconfig/logstash-forwarder 

Và sửa đổi giá trị LOGSTASH_FORWARDER_OPTIONS để nó trông giống như sau:

LOGSTASH_FORWARDER_OPTIONS="-config /etc/logstash-forwarder -spool-size 100" 

Lưu và thoát.

Bây giờ sao chép certificate SSL vào vị trí thích hợp (/ etc / pki / tls / certs):

sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/ 

Cấu hình Logstash Forwarder

Trên Server , tạo và chỉnh sửa file cấu hình Logstash Forwarder, ở định dạng JSON:

sudo vi /etc/logstash-forwarder 

Bây giờ, hãy thêm các dòng sau vào file , thay thế bằng địa chỉ IP riêng của Server Logstash của bạn cho logstash_server_private_IP :

{   "network": {     "servers": [ "logstash_server_private_IP:5000" ],     "timeout": 15,     "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"   },   "files": [     {       "paths": [         "/var/log/messages",         "/var/log/secure"        ],       "fields": { "type": "syslog" }     }    ] } 

Lưu và thoát. Điều này cấu hình Logstash Forwarder để kết nối với Server Logstash của bạn trên cổng 5000 (cổng mà ta đã chỉ định một đầu vào trước đó) và sử dụng certificate SSL mà ta đã tạo trước đó. Phần đường dẫn chỉ định file log nào sẽ gửi (ở đây ta chỉ định thưbảo mật ) và phần loại chỉ định rằng các log này thuộc loại “syslog * (là loại mà bộ lọc của ta đang tìm kiếm).

Lưu ý đây là nơi bạn sẽ thêm nhiều file / loại hơn để cấu hình Logstash Forwarder cho các file log khác tới Logstash trên cổng 5000.

Bây giờ ta sẽ muốn thêm dịch vụ Logstash Forwarder với chkconfig :

sudo chkconfig --add logstash-forwarder 

Bây giờ hãy bắt đầu Logstash Forwarder để đưa các thay đổi của ta vào vị trí:

sudo service logstash-forwarder start 

Bây giờ Logstash Forwarder đang gửi tin nhắnauth.log đến Server Logstash của bạn! Lặp lại quá trình này cho tất cả các server khác mà bạn muốn thu thập log .

Kết nối với Kibana

Khi bạn hoàn tất việc cài đặt Logstash Forwarder trên tất cả các server mà bạn muốn thu thập log , hãy xem Kibana, giao diện web mà ta đã cài đặt trước đó.

Trong trình duyệt web, truy cập FQDN hoặc địa chỉ IP công cộng của Server Logstash của bạn. Bạn cần nhập thông tin đăng nhập mà bạn đã tạo (trong khi cài đặt Apache), sau đó bạn sẽ thấy trang chào mừng Kibana.

Nhấp vào Control panel Logstash để chuyển đến console được tạo sẵn. Bạn sẽ thấy biểu đồ có các sự kiện log , với các thông báo log bên dưới (nếu bạn không thấy bất kỳ sự kiện hoặc thông báo nào, một trong bốn thành phần Logstash của bạn không được cấu hình đúng cách).

Tại đây, bạn có thể tìm kiếm và duyệt qua log của bạn . Bạn cũng có thể tùy chỉnh trang tổng quan của bạn . Đây là một ví dụ về version Kibana của bạn có thể trông như thế nào:

Trang tổng quan mẫu Kibana 3

Hãy thử những điều sau:

  • Tìm kiếm "root" để xem có ai đang cố gắng đăng nhập vào server của bạn với quyền root không
  • Tìm kiếm một tên server cụ thể
  • Thay đổi khung thời gian bằng cách chọn một vùng trên biểu đồ hoặc từ menu ở trên
  • Nhấp vào thông báo bên dưới biểu đồ để xem cách dữ liệu đang được lọc

Kibana có nhiều tính năng khác, chẳng hạn như vẽ đồ thị và lọc, vì vậy hãy thoải mái khám phá!

Kết luận

Bây giờ các log hệ thống của bạn được tập trung thông qua Logstash và bạn có thể hình dung chúng bằng Kibana, bạn sẽ có một khởi đầu tốt với việc tập trung tất cả các log quan trọng của bạn . Lưu ý bạn có thể gửi khá nhiều loại log tới Logstash, nhưng dữ liệu sẽ trở nên hữu ích hơn nếu nó được phân tích cú pháp và cấu trúc với grok.

Lưu ý trang tổng quan Kibana của bạn có thể truy cập được cho bất kỳ ai có thể truy cập vào server của bạn, vì vậy bạn cần bảo mật nó bằng một thứ như htaccess.


Tags:

Các tin liên quan

Cách sử dụng Logstash và Kibana để tập trung log trên CentOS 6
2014-07-08
Cách thiết lập DavMail trên CentOS 6
2014-02-13
Cách cài đặt Ruby 2.1.0 trên CentOS 6.5 bằng RVM
2014-01-22
Cách cài đặt ZeroMQ từ nguồn trên VPS CentOS 6 x64
2013-12-23
Cách cài đặt Diễn đàn Máy đơn giản trên CentOS 6
2013-12-05
Cách gửi cảnh báo qua e-mail trên VPS CentOS để giám sát hệ thống
2013-11-27
Cách cài đặt MediaWiki trên Centos 6.4
2013-11-13
Cách cài đặt CouchDB từ Nguồn trên VPS CentOS 6 x64
2013-11-11
Cách cấu hình vsftpd để sử dụng SSL / TLS trên VPS CentOS
2013-10-28
Cách cài đặt và bảo mật phpMyAdmin trên VPS CentOS 6.4
2013-10-09