Thiết bị đo lường container với Elastic Stack

Elastic Stack có thể giám sát nhiều loại dữ liệu được tạo ra bởi các container Docker . Trong hướng dẫn này, bạn sẽ thiết lập Linode để phân tích và trực quan hóa nhật ký và số liệu container bằng các công cụ như Kibana, Beats và Elasticsearch. Sau khi hoàn tất, bạn sẽ có thể định cấu hình hệ thống của mình để tự động thu thập dữ liệu cho các container bổ sung.

Trước khi bạn bắt đầu

  1. Nếu bạn chưa thực hiện, hãy tạo một tài khoản Linode và Compute Instance. Xem hướng dẫn Bắt đầu với Linode và Tạo Compute Instance của chúng tôi .
  2. Làm theo hướng dẫn Thiết lập và Bảo mật Phiên bản Compute của chúng tôi để cập nhật hệ thống của bạn. Bạn cũng có thể muốn đặt múi giờ, cấu hình tên máy chủ, tạo tài khoản người dùng giới hạn và tăng cường quyền truy cập SSH.
  3. Thực hiện theo Hướng dẫn UFW của chúng tôi để cài đặt và cấu hình tường lửa (UFW) trên hệ thống chạy Ubuntu hoặc Debian của bạn hoặc Hướng dẫn FirewallD của chúng tôi cho hệ thống chạy rpm hoặc CentOS. Sau khi cấu hình tường lửa, hãy đảm bảo rằng các cổng cần thiết được mở để tiến hành kết nối qua SSH cho phần còn lại của hướng dẫn này:sudo ufw allow ssh
  4. Cài đặt Docker trên Linode của bạn bằng cách làm theo hướng dẫn cài đặt từ dự án Docker .

Ghi chú: Các dịch vụ trong hướng dẫn này chỉ liên kết với localhost, nghĩa là chúng không thể truy cập được bên ngoài Linode từ các máy chủ từ xa. Điều này đảm bảo rằng REST API của Elasticsearch vẫn riêng tư với localhost và không thể truy cập từ xa từ internet. Nếu bạn thực hiện các bước ngoài hướng dẫn này để cấu hình Elasticsearch và các thành phần liên quan, hãy đảm bảo rằng tường lửa của bạn được thiết lập và chặn đúng lưu lượng truy cập đến các nút Elasticsearch và Kibana từ internet (cổng 9200 và 9300 cho Elasticsearch và 5601 cho Kibana) để giữ cho chúng được bảo mật đúng cách.

Cài đặt Elastic Stack Components

Trước khi cấu hình hệ thống để theo dõi các container đang chạy, trước tiên hãy cài đặt các thành phần cần thiết để thu thập và gửi nhật ký và số liệu đến Elasticsearch.

Các bản phân phối dựa trên Debian

Cấu hình kho lưu trữ Elastic aptvà cài đặt các gói cần thiết cùng các gói phụ thuộc của chúng.

1.Cài đặt khóa ký gói Elastic APT chính thức:

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

2.Cài đặt apt-transport-httpsgói cần thiết để truy xuất debcác gói được phục vụ qua HTTPS:

sudo apt-get install apt-transport-https

3.Thêm thông tin kho lưu trữ APT vào danh sách nguồn của máy chủ:

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

4.Làm mới danh sách các gói có sẵn:

sudo apt-get update

5.Trước khi cài đặt Elasticsearch, Java runtime phải có mặt. Trên các hệ thống như Ubuntu 18.04 LTS, sử dụng default-jre-headlessgói cài đặt Java runtime tương thích:

sudo apt-get install default-jre-headless

6.Cài đặt Elasticsearch, Kibana, Filebeat và Metricbeat:

sudo apt-get install elasticsearch kibana filebeat metricbeat

Phân phối dựa trên Redhat

Cấu hình rpmkho lưu trữ yumvà các công cụ đóng gói liên quan.

1.Tin tưởng vào khóa ký Elastic:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2.Tạo cấu hình kho lưu trữ yum để sử dụng kho lưu trữ Elastic yum:

[elasticsearch-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
    

3.Cập nhật yumbộ nhớ đệm để đảm bảo mọi gói mới đều khả dụng:

sudo yum update

4.Trước khi cài đặt Elasticsearch, Java runtime phải có mặt. Ví dụ, trên CentOS, có thể cài đặt Java runtime tương thích bằng cách sử dụng gói OpenJDK không có giao diện:

sudo yum install java-11-openjdk-headless

5.Cài đặt Elasticsearch, Kibana, Filebeat và Metricbeat:

sudo yum install elasticsearch kibana filebeat metricbeat

Cấu hình Elastic Stack

Để khám phá và nắm bắt đúng số liệu container, mỗi thành phần của ngăn xếp Elastic phải được cấu hình.

Tìm kiếm đàn hồi

Trong tệp, /etc/elasticsearch/jvm.optionshai giá trị bắt đầu bằng -Xmphải không có chú thích. Các thiết lập này hướng dẫn JVM phân bổ một lượng bộ nhớ cụ thể. Giá trị khuyến nghị cho các thiết lập này là 50% RAM hệ thống khả dụng. Ví dụ, trên hệ thống có 1G RAM, các thiết lập này phải là:

-Xms512m
-Xmx512m

1.Trước khi khởi động Elasticsearch, hãy cài đặt một số plugin cần thiết để xử lý dữ liệu geoip và user-agent.

sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip

2.Sau khi thiết lập xong các thông tin này, hãy bắt đầu elasticsearchdịch vụ.

sudo systemctl start elasticsearch

3.Đợi một khoảng thời gian ngắn để Elasticsearch khởi động, sau đó kiểm tra xem Elasticsearch có phản hồi qua REST API không:

curl http://localhost:9200

Bạn sẽ thấy kết quả tương tự như sau:

{
  "name" : "iQEk_-M",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "tQeLgbKrTNOp2AoqdmTItw",
  "version" : {
        "number" : "6.5.4",
        "build_flavor" : "default",
        "build_type" : "deb",
        "build_hash" : "d2ef93d",
        "build_date" : "2018-12-17T21:17:40.758843Z",
        "build_snapshot" : false,
        "lucene_version" : "7.5.0",
        "minimum_wire_compatibility_version" : "5.6.0",
        "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Elasticsearch đã sẵn sàng để lập chỉ mục tài liệu.

Kibana

Hầu hết các thiết lập mặc định của Kibana đều phù hợp với mục đích của hướng dẫn này. Không cần thay đổi cấu hình; hãy khởi động dịch kibanavụ.

sudo systemctl start kibana

Tập tin

Sử dụng dockerđầu vào để cho phép Filebeat ghi lại các container đã bắt đầu một cách động. Điều này giúp giảm nhu cầu chỉ định đường dẫn tệp nhật ký Docker và thay vào đó cho phép Filebeat khám phá các container khi chúng bắt đầu.

1.Thêm nội dung sau vào gần đầu tệp cấu hình Filebeat để hướng dẫn filebeatdaemon ghi lại nhật ký vùng chứa Docker. Những dòng này phải được nhập dưới khóa cấu hình filebeat.inputs:

filebeat.inputs:
- type: docker
  containers.ids:
  - '*'
  processors:
  - add_docker_metadata: ~

2.Bỏ chú thích ở dòng sau và thay đổi giá trị của nó thành true, điều này sẽ cho phép Filebeat tạo bảng thông tin Kibana liên quan cho các nhật ký vùng chứa đã chụp:

setup.dashboards.enabled: true

3.Cuối cùng, thêm cấu hình sau autodiscovervào cuối tệp filebeat.yml:

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

4.Kích hoạt nginxmô-đun sẽ được sử dụng sau trong hướng dẫn này:

sudo /usr/bin/filebeat modules enable nginx

5.Phần còn lại của tệp cấu hình sẽ hướng dẫn Filebeat gửi nhật ký đến phiên bản Elasticsearch đang chạy cục bộ, có thể giữ nguyên không thay đổi. Khởi động Filebeat:

sudo systemctl start filebeat

Metricbeat

Giống như Filebeat, hãy cấu hình Metricbeat tương tự để tự động phát hiện các container đang chạy để theo dõi.

1.Metricbeat sử dụng một mô-đun để thu thập số liệu container. Phát hành lệnh sau để bật các mô-đun dockervà nginx:

sudo /usr/bin/metricbeat modules enable docker
sudo /usr/bin/metricbeat modules enable nginx

2.Bỏ chú thích ở dòng sau và thay đổi giá trị của nó thành true, điều này sẽ cho phép Metricbeat tạo bảng thông tin Kibana liên quan cho nhật ký vùng chứa đã ghi lại:

setup.dashboards.enabled: true

3.Phần còn lại của tệp cấu hình sẽ hướng dẫn Metricbeat gửi nhật ký đến phiên bản Elasticsearch đang chạy cục bộ, có thể giữ nguyên. Bây giờ có thể khởi động Metricbeat:

sudo systemctl start metricbeat

Hiển thị Nhật ký và Số liệu Container

Ví dụ sau đây minh họa cách Filebeat và Metricbeat tự động thu thập dữ liệu container có thể truy cập được trong Kibana.

1.Để bắt đầu, hãy chạy một container Docker nginx đơn giản trên Linode của bạn.

sudo docker run --name nginx -P -d --label co.elastic.logs/module=nginx nginx
  • Lệnh này sẽ chạy máy chủ web ở chế độ nền và hiển thị dịch vụ HTTP đang lắng nghe dưới một số cổng ngẫu nhiên.
  • Đối số này --labellà gợi ý để Filebeat tự động phân tích định dạng nhật ký của một số loại vùng chứa nhất định, trong trường hợp này là nginx.

2.Để mở kết nối an toàn tới Kibana, hãy mở đường hầm SSH tới cổng 5601 trên Linode của bạn.

ssh -L 5601:localhost:5601 <user@ip-address>
  • Thay thế <user@ip-address>bằng tên người dùng và địa chỉ IP của Linode của bạn.
  • Lệnh này sẽ chuyển tiếp cổng 5601 cục bộ tới cổng 5601 trên Linode của bạn.
  • Hướng dẫn toàn diện về cách sử dụng đường hầm SSH trên nhiều nền tảng khác nhau có sẵn trong hướng dẫn Tạo đường hầm SSH cho MySQL của chúng tôi .

3.Duyệt đến http://localhost:5601trình duyệt của bạn, bạn sẽ thấy trang đích ban đầu của Kibana.

Trang đích Kibana 6

4.Nhấp vào liên kết Quản lý ở thanh bên trái phía dưới. Trang sau sẽ được hiển thị. Sau đó, nhấp vào Mẫu chỉ mục để vào trang cấu hình Mẫu chỉ mục.Quản lý Kibana 6

5.Index Patterns quyết định cách Kibana hiểu các chỉ mục có trong Elasticsearch. Để một số hình ảnh trực quan hiển thị đúng, trước tiên phải cấu hình một mẫu chỉ mục mặc định. Chọn filebeat-* ở bên trái trang để cấu hình mẫu chỉ mục filebeat-*.Mẫu chỉ số Kibana 6

6.Nhấp vào biểu tượng ngôi sao ở góc trên bên phải của trang để đặt mẫu chỉ mục này làm mẫu mặc định trong Kibana.Mẫu chỉ mục mặc định của Kibana 6Kibana hiện đã được cấu hình đúng với mẫu chỉ mục mặc định.

7.Filebeat và Metricbeat được thiết lập để tự động cấu hình Elasticsearch và Kibana, do đó, bảng điều khiển và mẫu chỉ mục được tải và sẵn sàng để sử dụng. Nhấp vào Bảng điều khiển ở thanh bên trái, sẽ hiển thị trang sau.Bảng điều khiển Kibana 6

8.Trong thanh Tìm kiếm, nhập “container” để hiển thị bảng điều khiển được điền sẵn cho các container hệ thống. Nhấp vào liên kết Tổng quan [Metricbeat Docker] .Bảng điều khiển container Kibana 6

9.Bảng điều khiển Tổng quan [Metricbeat Docker] sẽ tải, hiển thị một số khía cạnh của số liệu container đang chạy hiện tại. Bảng điều khiển hiển thị danh sách các container đang chạy, tổng số container đang chạy, tạm dừng và dừng, cũng như số liệu về mức tiêu thụ tài nguyên container.Tổng quan về Kibana 6 DockerKhi cuộn xuống dưới, bạn cũng sẽ thấy biểu đồ cho biết mức sử dụng tài nguyên container theo thời gian, bao gồm CPU, bộ nhớ và hoạt động mạng.Tài nguyên Docker Kibana 6

10.Trước khi chuyển sang các hình ảnh Kibana khác, hãy tạo một số hoạt động nhật ký từ nginx bằng cách gửi yêu cầu HTTP đến container lắng nghe. Đầu tiên, hãy tìm cổng nào mà container đang lắng nghe yêu cầu bằng dockerlệnh:

docker ps

Bạn sẽ thấy kết quả tương tự như sau:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
3f0c6d284f1f        nginx               "nginx -g 'daemon of…"   23 minutes ago      Up 23 minutes       0.0.0.0:32769->80/tcp

Từ đầu ra này, chúng ta biết rằng máy chủ HTTP có thể được tiếp cận bằng cách gửi yêu cầu đến cổng 32769, cổng này đang được chuyển tiếp đến cổng 80 trong vùng chứa. Cổng trên hệ thống của bạn có thể khác.

11.Gửi nhiều yêu cầu đến cổng này bằng curllệnh, thay thế <port>bằng số tìm được ở bước trước:

for i in $(seq 1 10) ; do curl localhost:<port> ; done

12.Bây giờ một số bản ghi có trong Kibana cho container này. Nhấp vào Khám phá ở thanh bên trái trong Kibana. Nó sẽ hiển thị màn hình sau.Kibana 6 Khám phá

Biểu đồ gần đầu trang cho biết tổng số nhật ký container theo thời gian.

Bảng bên dưới biểu đồ chứa nội dung của từng nhật ký riêng lẻ.

Nhấp vào mũi tên bên trái dấu thời gian của mỗi nhật ký sẽ hiển thị thông tin cho từng nhật ký đã chụp.

13.Hãy thử phát hành lại for ...lệnh trước đó để gửi thêm mười curlyêu cầu đến vùng chứa và quan sát biểu đồ nhật ký thay đổi như thế nào để phản ánh các nhật ký mới.

14.Nhấp vào Dashboard ở thanh bên trái, sau đó nhấp vào lần thứ hai để vào màn hình lựa chọn dashboard. Tìm kiếm “nginx” trong thanh tìm kiếm.Bảng điều khiển Kibana 6 NGINX

15.Nhấp vào liên kết [Filebeat Nginx] Nhật ký truy cập và lỗi , trang này sẽ hiển thị bảng thông tin với nhiều hình ảnh trực quan về hoạt động của nginx.Kibana 6 NGINX Metricbeat

Các mô-đun bổ sung

Hướng dẫn này đã chứng minh cách Filebeat và Metricbeat có thể tự động ghi lại số liệu và nhật ký của container mà không cần phải cấu hình rõ ràng đường dẫn hoặc cấu hình tệp nhật ký. Ngoài các ví dụ nginx được trình bày ở đây, các liên kết bổ sung được cung cấp bên dưới liệt kê các mô-đun khác có thể được tải vào Filebeat và Metricbeat cho các dịch vụ khác.

Thông tin thêm

Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.

Nguồn: https://www.linode.com/docs/guides/how-to-monitor-containers-with-the-elastic-stack/