Thứ năm, 03/11/2016 | 00:00 GMT+7

Cách thu thập các chỉ số cơ sở hạ tầng với Packetbeat và ELK trên Ubuntu 16.04

Packetbeat cho phép bạn theo dõi lưu lượng mạng theo thời gian thực đối với các giao thức cấp ứng dụng như HTTP và MySQL, cũng như DNS và các dịch vụ khác.

Để thực hiện việc này, bạn cấu hình các đại lý, được gọi là “người gửi hàng”, trên các client có chức năng phát hiện và phân tích lưu lượng mạng và ánh xạ các thông báo tới các giao dịch. Những người gửi hàng này sau đó tạo các bản ghi cho từng hành động và gửi chúng đến Elasticsearch hoặc Logstash. Sau khi có dữ liệu, bạn có thể tìm kiếm, phân tích và trực quan hóa dữ liệu với Kibana để bạn có thể đưa ra quyết định sáng suốt về cơ sở hạ tầng của bạn hoặc khắc phục sự cố.

Trong hướng dẫn này, bạn sẽ cấu hình và sử dụng Packetbeat với ngăn xếp ELK để thu thập và trực quan hóa các chỉ số cơ sở hạ tầng.

Yêu cầu

  • Một server Ubuntu 16.04 với 4GB RAM, được cấu hình với cài đặt ELK Stack được mô tả trong hướng dẫn Cách cài đặt Elasticsearch, Logstash và Kibana trên Ubuntu 16.04 . Làm theo hướng dẫn để cấu hình ngăn xếp ELK và cài đặt console Kibana, nhưng không cấu hình bất kỳ client nào.
  • Một server Ubuntu 16.04 với bất kỳ dung lượng RAM nào, sẽ đóng role như một client .
  • Một account user tiêu chuẩn với các quyền sudo cho mỗi server . Bạn có thể cài đặt account tiêu chuẩn theo hướng dẫn Cài đặt server ban đầu với Ubuntu 16.04 .

Bước 1 - Tải Mẫu index Packetbeat trong Elasticsearch

Bởi vì ta đang có kế hoạch sử dụng Packetbeat để gửi log đến Elasticsearch, trước tiên ta tải mẫu index Packetbeat, mẫu này cấu hình Elasticsearch để phân tích các trường Packetbeat đến theo cách thông minh.

Đầu tiên, đăng nhập vào server ELK của bạn:

  • ssh sammy@your_elk_server_ip

Sau khi đăng nhập, hãy download mẫu index Packetbeat vào folder chính của bạn:

  • cd ~
  • curl -O https://raw.githubusercontent.com/elastic/beats/master/packetbeat/packetbeat.template-es2x.json

Sau đó tải mẫu bằng lệnh này:

  • curl -XPUT 'http://localhost:9200/_template/packetbeat' -d@packetbeat.template-es2x.json

Bạn sẽ thấy kết quả kết quả nếu mẫu được tải thành công.

Output
{"acknowledged":true}

Bây giờ server ELK của bạn đã sẵn sàng chấp nhận dữ liệu từ Packetbeat, hãy cài đặt người gửi hàng trên server khách.

Bước 2 - Cài đặt Packetbeat trên Server Khách hàng

Để cài đặt người gửi Packetbeat, bạn cần lấy certificate SSL mà bạn đã tạo trong hướng dẫn yêu cầu cho server khách. Cần phải cài đặt giao tiếp giữa các server khách và server ELK.

Định vị địa chỉ IP của server khách hàng của bạn. Sau đó, trên server ELK của bạn , sao chép certificate SSL vào server khách hàng của bạn bằng lệnh scp :

  • scp /etc/pki/tls/certs/logstash-forwarder.crt sammy@your_client_server_private_ip_address:/tmp

Sau khi cung cấp password của bạn, hãy đảm bảo bản sao certificate đã thành công.

Bây giờ, đăng nhập vào server khách hàng của bạn:

  • ssh sammy@your_client_server_ip_address

Sau khi đăng nhập, hãy sao chép certificate SSL của server ELK vào folder /etc/pki/tls/certs :

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

Tiếp theo, ta cần cài đặt chính Packetbeat. Trên server khách hàng của bạn, hãy đảm bảo danh sách nguồn Beats tồn tại. Mở file /etc/apt/sources.list.d/beats.list để chỉnh sửa:

  • sudo nano /etc/apt/sources.list.d/beats.list

Nếu bạn đã cài đặt shippers trước đó, file này có thể đã chứa dòng sau:

/etc/apt/source.list.d/beats.list
deb https://packages.elastic.co/beats/apt stable main 

Nếu file trống hoặc dòng này không tồn tại, hãy thêm nó và lưu file . Sau đó thoát khỏi editor .

Để cài đặt nguồn này, ta cần một khóa GPG. Packetbeat sử dụng cùng một khóa GPG như Elasticsearch mà ta cài đặt bằng lệnh này:

  • wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Bây giờ, hãy cài đặt gói Packetbeat:

  • sudo apt-get update
  • sudo apt-get install packetbeat

Packetbeat hiện đã được cài đặt nhưng cần được cấu hình trước khi bạn có thể sử dụng nó.

Bước 3 - Cấu hình Packetbeat trên Máy khách

Packetbeat cần biết những gì cần ghi và nơi để gửi dữ liệu. Hãy cấu hình nó để kết nối với Logstash trên server ELK của ta và xác định loại lưu lượng mà ta muốn nó xem. Ta sẽ làm điều đó bằng cách sửa đổi file cấu hình mặc định đi kèm với Packetbeat.

Trên server khách hàng, hãy chỉnh sửa file cấu hình Packetbeat:

  • sudo nano /etc/packetbeat/packetbeat.yml

Lưu ý: Tệp cấu hình của Packetbeat có định dạng YAML, nghĩa là thụt lề rất quan trọng! Đảm bảo sử dụng cùng một số khoảng trắng được chỉ ra trong các hướng dẫn này.

Ở gần đầu file , bạn sẽ thấy phần input , đây là nơi bạn có thể chỉ định số liệu và thống kê nào sẽ được gửi đến server ELK. Ta sẽ sử dụng cài đặt đầu vào mặc định, nhưng hãy thay đổi nó để phù hợp với nhu cầu của bạn.

Chọn network interface để nắm bắt lưu lượng. Trên Linux, Packetbeat hỗ trợ chụp tất cả các tin nhắn được gửi hoặc nhận bởi server có cài đặt Packetbeat. Đối với điều này, hãy sử dụng any làm thiết bị nào:

packbeat.yml
# Select the network interfaces to sniff the data. You can use the "any" # keyword to sniff on all connected interfaces. interfaces:   device: any 

Trong phần protocols , hãy cấu hình các cổng mà Packetbeat có thể tìm thấy mỗi giao thức. Nếu bạn sử dụng bất kỳ cổng không chuẩn nào, hãy thêm chúng vào đây. Nếu không, các giá trị mặc định sẽ hoạt động tốt.

packbeat.yml
protocols:   dns:     ports: [53]      include_authorities: true     include_additionals: true    http:     ports: [80, 8080, 8081, 5000, 8002]    memcache:     ports: [11211]    mysql:     ports: [3306]    pgsql:     ports: [5432]    redis:     ports: [6379]    thrift:     ports: [9090]    mongodb:     ports: [27017] 

Tiếp theo, ta cần cho Packetbeat biết nơi gửi dữ liệu của nó.

Trong phần output , hãy tìm dòng bắt đầu elasticsearch: cho biết phần kết quả Elasticsearch. Ta sẽ không sử dụng phần này, vì vậy hãy xóa hoặc comment toàn bộ phần kết quả của Elasticsearch , cho đến dòng có #logstash: .

Bắt đầu xóa tại đây:

packbeat.yml
  ### Elasticsearch as output   elasticsearch:     # Array of hosts to connect to.     # Scheme and port can be left out and will be set to the default (http and 9200)      ... 

Và tiếp tục xóa cho đến khi bạn tìm thấy dòng này:

packbeat.yml
  ### Logstash as output 

Thay vì gửi dữ liệu đến Elasticsearch, ta sẽ gửi dữ liệu đó đến Logstash. Vì vậy, hãy tìm phần kết quả Logstash được chú thích, được biểu thị bằng dòng bắt đầu bằng #logstash:. Bỏ comment đó bằng cách xóa dấu # đứng trước. Sau đó bỏ comment hosts: ["localhost:5044"] và thay đổi localhost thành địa chỉ IP riêng của server ELK của bạn. Phần của file cấu hình sẽ giống như sau:

packbeat.yml
  ### Logstash as output   logstash:     # The Logstash hosts     hosts: ["your_ELK_server_private_ip_address:5044"] 

Điều này cấu hình Packetbeat để kết nối với Logstash trên server ELK của bạn trên cổng 5044 , cổng mà ta đã chỉ định cho đầu vào Logstash trong hướng dẫn yêu cầu .

Tiếp theo, tìm phần tls và xóa comment trước tls: . Sau đó, bỏ comment chỉ định certificate_authorities và thay đổi giá trị của nó thành ["/etc/pki/tls/certs/logstash-forwarder.crt"] :

packbeat.yml
    tls:       # List of root certificates for HTTPS server verifications       certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"] 

Điều này cấu hình Packetbeat để sử dụng certificate mà ta đã sao chép từ server ELK. Nếu không có điều này, client sẽ không thể cài đặt kết nối.

Nếu bạn muốn kiểm tra lại file cấu hình của bạn , hãy so sánh file cấu hình của bạn với ví dụ này, ví dụ này đã bỏ qua hầu hết các comment không cần thiết để cải thiện khả năng đọc:

packbeat.yml
############################# Sniffer ######################################### interfaces:   device: any  ############################# Protocols ####################################### protocols:   dns:     ports: [53]      include_authorities: true     include_additionals: true    http:     ports: [80, 8080, 8081, 5000, 8002]    memcache:     ports: [11211]    mysql:     ports: [3306]    pgsql:     ports: [5432]    redis:     ports: [6379]    thrift:     ports: [9090]    mongodb:     ports: [27017]  ############################# Output ########################################## output:    ### Logstash as output    logstash:     hosts: ["your_ELK_server_private_ip_address:5044"]      tls:       certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]  ############################# Logging ######################################### logging:    files:     rotateeverybytes: 10485760 # = 10MB 

Khi bạn đã xem xét cấu hình của bạn , hãy lưu file và thoát khỏi editor .

Bây giờ hãy khởi động lại Packetbeat để đưa các thay đổi vào vị trí:

  • sudo service packetbeat restart

Và cấu hình Packetbeat để bắt đầu khi server của bạn khởi động lại:

  • sudo update-rc.d packetbeat defaults 95 10

Lặp lại phần này cho bất kỳ server nào khác mà bạn muốn theo dõi.

Packetbeat hiện đang lắng nghe lưu lượng mạng và gửi nó tới Logstash. Hãy xem nó có hoạt động không.

Bước 4 - Kiểm tra cài đặt Packetbeat

Đến đây, Packetbeat trên server khách hàng của bạn sẽ gửi log lưu lượng truy cập mạng của bạn tới Logstash trên server ELK của bạn. Logstash sẽ tải dữ liệu Packetbeat vào Elasticsearch trong một index được đánh dấu ngày tháng có tên là packetbeat-YYYY.MM.DD . Hãy kiểm tra xem điều này có hoạt động không bằng cách tạo một yêu cầu HTTP đơn giản trên client và tìm kiếm yêu cầu đó trong Elasticsearch trên server ELK.

Trên server khách hàng của bạn, sử dụng curl để thực hiện yêu cầu tới http://www.elastic.co .

  • curl http://www.elastic.co/ > /dev/null

Sau đó, trên server ELK của bạn, hãy xác minh Elasticsearch thực sự đang nhận dữ liệu bằng cách truy vấn index Packetbeat bằng lệnh này:

  • curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'

Bạn sẽ thấy một loạt kết quả giống như sau:

Output
{ "_index" : "packetbeat-2016.09.29", "_type" : "http", "_id" : "AVdDG6pDqHsDFrI4DAlI", "_score" : 1.0, "_source" : { "responsetime" : 80, "path" : "/", "beat" : { "hostname" : "your_client_server_hostname", "name" : "your_client_server_name" }, "direction" : "out", "port" : 80, "server" : "", "status" : "OK", "params" : "", "count" : 1, "client_port" : 52072, "client_proc" : "", "ip" : "52.38.222.131", "bytes_out" : 432, "bytes_in" : 78, "query" : "GET /", "http" : { "code" : 301, "content_length" : 178, "phrase" : "Permanently" }, "proc" : "", "client_ip" : "your_client_server_ip", "client_server" : "", "@timestamp" : "2016-09-29T15:41:07.725Z", "type" : "http", "method" : "GET", "@version" : "1", "host" : "your_client_server_hostname", "tags" : [ "beats_input_raw_event" ] } }

Nếu kết quả của bạn hiển thị tổng số lần truy cập là 0, Elasticsearch không tải bất kỳ dữ liệu Packetbeat nào theo index bạn đã tìm kiếm và bạn nên thử lại sau vài giây, vì có thể mất một thời gian ngắn để dữ liệu được lấy. Nếu bạn vẫn không thấy kết quả sau khi chờ đợi, hãy xem lại cài đặt của bạn để tìm lỗi. Đảm bảo bạn đã trỏ file cấu hình của Packetbeat vào certificate bạn đã chuyển qua, vì điều này sẽ không thành công nếu đường dẫn không chính xác.

Khi bạn đã nhận được kết quả mong đợi, bạn có thể chuyển sang bước tiếp theo và tìm hiểu cách sử dụng Kibana để xem một số biểu đồ và đồ thị về lưu lượng mạng của bạn .

Bước 5 - Trực quan hóa dữ liệu với Kibana

Khi bạn hoàn tất việc cài đặt Packetbeat trên tất cả các server mà bạn muốn thu thập số liệu thống kê của hệ thống, hãy xem Kibana.

Trong trình duyệt web, truy cập domain hoặc địa chỉ IP công cộng của server ELK của bạn. Sau khi nhập thông tin đăng nhập của server ELK, bạn sẽ thấy trang Khám phá Kibana của bạn .

Lưu ý : Bạn đã cấu hình các thông tin đăng nhập này trong hướng dẫn yêu cầu khi bạn cấu hình user cho Kibana.

Nhấp vào tab Cài đặt ở đầu trang. Bây giờ, chọn gói tin- * từ menu Mẫu index ở phía bên trái của giao diện:

Chọn mẫu index  Packetbeat

Sau đó, chọn tab Khám phá ở đầu màn hình để xem dữ liệu này. Bạn sẽ thấy thông tin sau trên màn hình của bạn :

Các mục log  Packetbeat

Từ đây, bạn có thể xem các mục nhập Packetbeat khác nhau của bạn bằng cách lọc trên các trường có sẵn. Bạn có thể nhấp vào các trường này để thêm chúng hoặc trực quan hóa chúng bằng cách sử dụng tổng hợp (đếm, tổng, tối thiểu, tối đa, trung bình, v.v.).

Kibana cũng cung cấp một loạt các hình ảnh trực quan mà bạn có thể sử dụng để phân tích dữ liệu. Nhấp vào tab Hình ảnh hóa ở đầu màn hình để liệt kê các hình ảnh hóa trực quan hoặc mở một hình ảnh hóa trang web đã lưu.

Hình ảnh hóa gói tin

Tiếp theo, hãy xem console Packetbeat mẫu mà ta đã tải ở đầu hướng dẫn này. Nhấp vào tab Trang tổng quan ở đầu màn hình, sau đó nhấp vào biểu tượng Tải Trang tổng quan đã lưu ở phía bên phải của màn hình. Bạn sẽ thấy danh sách các bộ lọc Trang tổng quan dưới dạng các đề xuất được phân trang:

Xem các loại console  Packetbeat mẫu

Chọn Packetbeat-Dashboard từ danh sách đề xuất. Vì ta chỉ có một số yêu cầu web dưới dạng tài liệu trong index của ta , console sẽ dẫn đến Không tìm thấy kết quả nào cho các giao dịch DB, Cache, RPC hoặc các kết quả khác.

Xem ví dụ về trang tổng quan Packetbeat trên cùng

Nhưng nếu cuộn xuống, bạn sẽ thấy nhiều số liệu được thu thập từ các server khách hàng mà bạn đã cài đặt Packetbeat.

Xem phần dưới cùng của console  Packetbeat mẫu

Từ đây, bạn có thể tạo biểu đồ dựa trên dữ liệu index . Ví dụ: bạn có thể tạo biểu đồ hiển thị phân tích truy vấn HTTP dựa trên thời gian phản hồi, điều này có thể giúp theo dõi các phản hồi chậm từ các ứng dụng web của bạn. Và bạn có thể đi sâu hơn bằng cách sử dụng các tổng hợp phụ để tìm thời gian phản hồi cho từng mã, các domain đã truy cập, v.v.

Bạn có thể khám phátài liệu Packetbeat để tìm hiểu thêm.

Kết luận

Như vậy, các chỉ số hệ thống của bạn được tập trung thông qua Elasticsearch và Logstash, và bạn có thể hình dung chúng bằng Kibana, bạn có thể xem nhanh các server của bạn đang hoạt động. Từ đây, bạn có thể cần điều tra các chủ hàng khác, bao gồm Filebeat, Topbeat và những người khác. Xem trang Beats để biết thêm thông tin về các chủ hàng có sẵn.


Tags:

Các tin liên quan

Cách thu thập số liệu cơ sở hạ tầng với Packetbeat và ELK trên Ubuntu 14.04
2016-11-02
Cách thiết lập ứng dụng Node.js để sản xuất trên Ubuntu 16.04
2016-11-01
Cách cài đặt và cấu hình ownCloud trên Ubuntu 16.04
2016-10-31
Cách sử dụng module bản đồ của Nginx trên Ubuntu 16.04
2016-10-31
Cách thực hiện bộ đệm trình duyệt với module tiêu đề của Nginx trên Ubuntu 16.04
2016-10-31
Cách di chuyển thư mục dữ liệu cho ownCloud trên Ubuntu 16.04
2016-10-19
Cách cài đặt Hadoop ở chế độ độc lập trên Ubuntu 16.04
2016-10-13
Cách cài đặt và cấu hình NATS trên Ubuntu 16.04
2016-10-07
Cách kết nối Internet of Things của bạn với Node-RED trên Ubuntu 16.04
2016-09-23
Cách cài đặt R trên Ubuntu 16.04
2016-09-19