Tám năm trước, container là một công nghệ đã được biết đến, nhưng ít được công chúng chấp nhận. Sau đó, Solomon Hykes đã tạo ra Docker, một công nghệ container, giúp container dễ sử dụng hơn nhiều. Ngày nay, container thống trị thế giới CNTT. Gartner dự đoán 70% các tổ chức sẽ chạy các ứng dụng container vào năm 2023.
Tại sao? Các tổ chức nhận ra lợi ích của việc cấu hình dễ dàng hơn, triển khai nhanh hơn và có thể chạy nhiều khối lượng công việc hơn trên cùng một phần cứng với các ứng dụng được chứa trong container.
Để sử dụng container tốt nhất có thể, việc giám sát container Docker là điều bắt buộc. Nếu không có giám sát container, bạn sẽ đi trong bóng tối. Bạn thực sự không thể biết container của mình hoạt động tốt như thế nào, chúng đang làm gì hoặc chúng đang thực hiện công việc của mình tốt như thế nào.
Ngoài ra, nếu không có giám sát container Docker, bạn không thể biết các dịch vụ vi mô và ứng dụng được xây dựng trên container hoạt động như thế nào. Giám sát container cho phép bạn biết những gì đang diễn ra với chính các container và với các chương trình lớn hơn hướng đến người dùng của bạn.
Giám sát Docker Container: Những điều cơ bản
Một lý do chính khiến container trở nên phổ biến là vì chúng phù hợp với Tích hợp liên tục/Triển khai liên tục (CI/CD) . Đây là phương pháp DevOps được thiết kế để cho phép các lập trình viên tích hợp mã của họ vào kho lưu trữ được chia sẻ sớm và thường xuyên. Khi đã ở đó, các chương trình được chứa trong container sẽ được triển khai nhanh chóng và hiệu quả.
Docker cũng cho phép các nhà phát triển đóng gói, vận chuyển và chạy bất kỳ ứng dụng nào dưới dạng một container nhẹ, di động, tự cung tự cấp, có thể chạy hầu như ở bất kỳ đâu. Container cung cấp cho bạn khả năng di động ứng dụng ngay lập tức.
Container thực hiện điều này bằng cách cho phép các nhà phát triển cô lập mã vào một container duy nhất, giúp việc sửa đổi và cập nhật chương trình hiệu quả hơn. Nó cho phép các doanh nghiệp chia nhỏ các dự án phát triển lớn thành nhiều nhóm Agile nhỏ hơn bằng cách sử dụng các đường ống CI/CD để tự động phân phối mã mới và đã cập nhật thông qua container.
Cuối cùng, và có lẽ là điểm quan trọng nhất đối với các doanh nghiệp, container cho phép các công ty tối đa hóa phần cứng và tài nguyên đám mây. Như James Bottomley, cựu giám đốc công nghệ ảo hóa máy chủ của Parallels và là nhà phát triển hạt nhân Linux hàng đầu, đã giải thích, “Các trình quản lý ảo hóa máy ảo, chẳng hạn như Hyper-V, KVM và Xen, đều dựa trên việc mô phỏng phần cứng ảo. Điều đó có nghĩa là chúng rất tốn kém về mặt yêu cầu hệ thống.”
Tuy nhiên, container sử dụng hệ điều hành chia sẻ nên chúng mỏng hơn nhiều so với hypervisor về mặt tài nguyên hệ thống. Thay vì ảo hóa phần cứng, container nằm trên một phiên bản Linux duy nhất. Điều này có nghĩa là bạn có thể “bỏ lại 99,9 phần trăm rác VM vô dụng, để lại cho bạn một viên nang nhỏ gọn, gọn gàng chứa ứng dụng của bạn”, như Bottomley đã nói. Nói cách khác, với một hệ thống container được điều chỉnh tốt, bạn có thể có tới bốn đến sáu container chạy trên một hệ thống mà trước đây chỉ có thể chạy một phiên bản duy nhất.
Ngày nay, có nhiều loại nền tảng container. Trong khi Docker là nền tảng nổi tiếng nhất, còn có LXC , runC , containerd và podman . Tất cả chúng đều thực hiện các chức năng tương tự và phần lớn có thể được quản lý bằng cùng một công cụ.
Docker là gì?
Vậy, Docker cụ thể là gì? Docker được xây dựng trên LXC. Giống như bất kỳ container nào khác, đối với bất kỳ chương trình nào chạy trên Docker, nó có hệ thống tệp, bộ nhớ, CPU và RAM riêng. Sự khác biệt chính giữa container và VM là trong khi hypervisor trừu tượng hóa toàn bộ thiết bị, container chỉ trừu tượng hóa hạt nhân hệ điều hành. Tất cả các lợi ích của Docker chỉ đến từ cơ chế đơn giản đó.
Tại sao nó lại thành công khi những người tiền nhiệm của nó như FreeBSD Jails , Oracle Solaris Zones và OpenVZ cho phép các container hoạt động tốt và an toàn, nhưng lại ít thành công trên thị trường? Ở một mức độ nào đó, các container đã thành công nhưng vô hình. Ví dụ, Google đã sử dụng chương trình container mã nguồn mở của riêng mình là lmctfy (Let Me Contain That For You) trong hơn một thập kỷ. Bất cứ khi nào bạn sử dụng chức năng của Google, ví dụ như Tìm kiếm, Gmail, Google Docs, thì nó đang chạy trong một container vô hình.
Docker mang lại lợi ích là làm cho container an toàn hơn và hiệu quả hơn khi triển khai và sử dụng so với các phương pháp trước đây. Ngoài ra, vì quan hệ đối tác của Docker với các thế lực container khác, bao gồm Canonical, Google, Red Hat và Parallels, trên thành phần mã nguồn mở chính libcontainer , mang lại sự chuẩn hóa rất cần thiết cho container.
Docker tặng định dạng container libcontainers và thời gian chạy của nó, cũng như các thông số kỹ thuật liên quan, cho Dự án Open Container của Quỹ Linux . Cụ thể, điều này bao gồm toàn bộ nội dung của dự án libcontainer , bao gồm nsinit, và tất cả các sửa đổi cần thiết để chạy độc lập với Docker.
Docker tiếp tục làm việc trên các nỗ lực chuẩn hóa container khác. Ví dụ, Docker đã tặng containerd , thời gian chạy container nguồn mở của mình, cho Cloud Native Computing Foundation (CNCF) . Chuẩn hóa đóng vai trò rất lớn trong việc giúp Docker thành công.
Không giống như các công nghệ container khác, Docker cũng hỗ trợ mạng được xác định bằng phần mềm (SDN). Điều này cho phép các nhóm DevOps xác định mạng cho container mà không cần lo lắng về việc chuyển đổi phần cứng. Thay vào đó, họ thiết lập các cấu trúc mạng phức tạp và xác định mạng thông qua các tệp cấu hình.
Đồng thời, SDN và Docker giúp khai thác các dịch vụ siêu nhỏ . Cùng nhau, chúng giúp xây dựng các ứng dụng hiệu quả hơn từ các dịch vụ kết hợp lỏng lẻo hoạt động cùng nhau thông qua các giao thức nổi tiếng như HTTP và TCP.
Cuối cùng, thành công của Docker có được là nhờ vào việc đây là công nghệ mở phù hợp vào đúng thời điểm giúp người dùng tận dụng cuộc cách mạng điện toán đám mây.
Giám sát Container là gì?
Một kịch bản phổ biến đối với các doanh nghiệp là họ sử dụng Docker và có hàng trăm đến hàng trăm nghìn container chạy các ứng dụng quan trọng đối với công ty của bạn. Để sắp xếp chúng, rất có thể họ đang sử dụng Kubernetes . Như CTO của CNCF Chris Aniszczyk cho biết, có một khoảng cách ngày càng lớn trong việc hiểu rằng Kubernetes và container về cơ bản là một gói thỏa thuận . Có những chương trình sắp xếp container khác, nhưng Kubernetes là công ty dẫn đầu thị trường áp đảo. Trong số đó, Datadog báo cáo rằng gần 90% người dùng Kubernetes tận dụng các dịch vụ được quản lý trên nền tảng đám mây, tăng từ gần 70% vào năm 2020.
Điều đó thật tuyệt vời. Nhưng Kubernetes kiểm soát, triển khai và mở rộng các container. Nó không giám sát chúng.
Giám sát rất phức tạp. Các container là tạm thời. Chúng quay lên và xuống trong vài phút. Một container Kubernetes trung bình chỉ tồn tại trong một ngày . Các công cụ bạn sử dụng để giám sát các ứng dụng truyền thống chạy trên máy chủ ảo hoặc máy chủ bare metal không đủ khả năng thực hiện nhiệm vụ. Vào thời điểm chương trình giám sát của bạn yêu cầu báo cáo, container có thể đã biến mất khỏi tầm nhìn, mang theo mọi nhật ký bên trong.
Lợi ích của việc giám sát container
Mặc dù phức tạp, nhưng việc giám sát container là rất quan trọng. Như quản trị viên hệ thống Gary Williams đã nói, ” Bạn không thể giám sát quá nhiều “. Gary nói đúng.
Lợi ích của việc giám sát container bao gồm:
- Xác định vấn đề một cách chủ động để tránh tình trạng ngừng hoạt động của hệ thống.
- Theo dõi dữ liệu chuỗi thời gian để giúp ứng dụng chạy tốt hơn.
- Tối ưu hóa phân bổ nguồn lực.
- Phát hiện vấn đề sớm nhất có thể để giải quyết nhanh chóng.
Giám sát container cũng rất quan trọng vì các ứng dụng dựa trên container liên tục bị tấn công bởi ransomware và các cuộc tấn công tiền điện tử. Tóm lại, cả về mặt bảo mật và hiệu suất, việc giám sát container của bạn là điều bắt buộc. Đây là những lý do tương tự mà bạn giám sát tất cả các hệ thống của mình và container cũng không ngoại lệ.
Các chương trình giám sát phải đối mặt với những thách thức khác khi thu thập dữ liệu khả năng quan sát từ các container. Có một số phương pháp thu thập dữ liệu. Chúng bao gồm:
- Triển khai tác nhân giám sát chuyên dụng làm ứng dụng lưu trữ hoặc vùng chứa.
- Triển khai bộ định tuyến nhật ký để tự động thu thập nhật ký do các container tạo ra.
- Sử dụng trình điều khiển ghi nhật ký Docker để lưu trữ nhật ký container vào máy chủ.
- Thu thập số liệu thông qua Docker stats , đường dẫn số liệu Kubernetes hoặc API tương tự.
Giám sát container bao gồm các số liệu cơ bản như sử dụng bộ nhớ, sử dụng CPU, giới hạn CPU và giới hạn bộ nhớ. Chương trình giám sát của bạn cũng nên cung cấp nhật ký phát trực tuyến theo thời gian thực, theo dõi và khả năng quan sát.
Ở cấp độ cao hơn, bên cạnh việc thu thập và tập trung dữ liệu giám sát từ các container và máy chủ của chúng, bạn cần thu thập và phân tích toàn bộ dữ liệu của ứng dụng, thay vì từng container riêng lẻ.
Như Minh Dao của LogDNA đã nói, “hãy tưởng tượng rằng bạn có một ứng dụng web ba tầng, với mỗi tầng chạy như một container riêng biệt. Bây giờ hãy tưởng tượng rằng tầng phụ trợ của bạn đột nhiên bắt đầu tạo ra lỗi và các container bị sập do đó. Việc kéo nhật ký và số liệu từ các container riêng lẻ sẽ giúp phân tích nguyên nhân gốc rễ, nhưng điều đó sẽ không giúp bạn thấy lỗi trong bối cảnh của toàn bộ ứng dụng. Vấn đề có thể là cụ thể đối với container hoặc có thể chỉ ra một vấn đề rộng hơn, trên toàn ứng dụng. “
Kết hợp tất cả lại với nhau thì không còn nghi ngờ gì nữa. Bạn phải theo dõi các thùng chứa của mình.
Năm công cụ giám sát container tốt nhất
Nhiều chương trình giám sát container tốt nhất là các chương trình mã nguồn mở. Linode cung cấp những điều cơ bản để bắt đầu với ngăn xếp Elasticsearch, Logstash và Kibana (ELK) bằng cách sử dụng Filebeat và Metricbeat với Kibana và phân tích chuỗi thời gian với Graphite và Grafana Dashboard . Với một chút nỗ lực, bạn có thể xây dựng hệ thống giám sát container của riêng mình.
Các chương trình trong danh sách dưới đây được sắp xếp theo thứ tự bảng chữ cái, không theo thứ tự từ tốt nhất đến tệ nhất. Đó là vì bạn không thể xếp hạng chúng một cách công bằng. Tất cả chúng đều có điểm mạnh và điểm yếu riêng và thường đo lường các số liệu khác nhau. Vì vậy, khả năng là nếu bạn nghiêm túc muốn theo dõi chặt chẽ các container của mình, bạn cần sử dụng một số chương trình này.
Cố vấn Container (cAdvisor)
Container Advisor (cAdvisor) của Google là một chương trình giám sát mã nguồn mở. Nó chạy như một daemon thu thập, tổng hợp và xuất dữ liệu về hiệu suất và mức sử dụng tài nguyên của các container mục tiêu. Nó theo dõi các tham số cô lập tài nguyên của từng container, mức sử dụng tài nguyên trong lịch sử, biểu đồ tần suất sử dụng tài nguyên trong lịch sử hoàn chỉnh và số liệu thống kê mạng. Dữ liệu này được xuất theo container và trên toàn máy.
Chương trình đi kèm với hỗ trợ container Docker gốc và được thiết kế để hỗ trợ hầu hết mọi loại container khác ngay khi xuất xưởng. Nó cũng hiển thị số liệu của Prometheus. Nói cách khác, cAdvisor thu thập dữ liệu, trong khi Prometheus thu thập dữ liệu. Sự trừu tượng hóa container của CAdvisor dựa trên lmctfy nên các container vốn có được lồng nhau theo thứ bậc.
Bạn có thể cài đặt cAdvisor builds dưới dạng hình ảnh trên máy chủ Docker của mình. Chương trình cũng cung cấp cả giao diện người dùng web (UI) và Giao diện lập trình ứng dụng REST (API). Với điều này, bạn có thể theo dõi trực tiếp các container Docker của mình và tích hợp số liệu vào ứng dụng bên ngoài thông qua các điểm cuối dịch vụ web.
Dữ liệu
Datadog được Docker khuyến nghị vì lý do chính đáng. Nó cung cấp nhiều công cụ giám sát theo dõi các số liệu liên quan đến container, cơ sở hạ tầng và ứng dụng.
Giao diện người dùng và bảng điều khiển của nó cũng rất tiện dụng. Với dữ liệu thời gian thực, bạn có thể thiết lập nhiều hình ảnh trực quan khác nhau, bao gồm chuỗi thời gian, giá trị truy vấn, danh sách hàng đầu, bảng, bản đồ nhiệt, bản đồ cây, biểu đồ hình tròn, bản đồ máy chủ, luồng nhật ký, danh sách, giá trị cảnh báo, bản đồ dịch vụ, v.v. Nó tự động liên kết dữ liệu và trực quan hóa hành vi bất thường.
Bản chất của Datadog là độc quyền, nhưng chương trình Datadog và tất cả các chương trình khác chạy trên máy tính và đám mây của bạn đều là mã nguồn mở.
Giám sát có sẵn thông qua các yêu cầu Trace, cung cấp hình ảnh đồ họa và cảnh báo. Chương trình thu thập dữ liệu liên quan đến các dịch vụ, ứng dụng và nền tảng thông qua dữ liệu nhật ký chi tiết.
Chương trình là một hệ sinh thái giám sát. Ngoài các container của bạn, nó giám sát hầu như mọi thứ. Nó thực hiện điều này một phần bằng cách hỗ trợ hầu hết các chương trình và giao thức đo từ xa như StatsD , OpenMetrics và OpenTelemetry .
Mặc dù chủ yếu được bán dưới dạng phần mềm dưới dạng dịch vụ (SaaS), nhưng nó cũng có thể được triển khai tại chỗ.
Elasticsearch và Kibana
Elasticsearch là một công cụ tìm kiếm mã nguồn mở dựa trên Java có nguồn gốc từ thư viện Apache Lucene . Nó cung cấp một công cụ tìm kiếm toàn văn bản, có khả năng đa thuê bao, phân tán với giao diện web HTTP và các tài liệu JSON không có lược đồ. Đây là trái tim của ngăn xếp ELK.
Chương trình đối tác của nó, Kibana , là một giao diện người dùng mở, miễn phí để trực quan hóa dữ liệu Elasticsearch của bạn và điều hướng ELK Stack. Bạn có thể theo dõi tải truy vấn để xem các yêu cầu chảy qua các ứng dụng của bạn như thế nào với nó. Kibana đi kèm với các bảng điều khiển giao diện người dùng cổ điển thông thường: biểu đồ histogram, biểu đồ đường, biểu đồ hình tròn, biểu đồ sunburst, v.v. Và tất nhiên, bạn có thể tìm kiếm trên tất cả các tài liệu của mình.
Đối với mục đích giám sát container, bạn sử dụng Filebeat và Metricbeat để tự động thu thập dữ liệu container. Filebeat tự động tìm container và lưu trữ nhật ký của chúng trong Elasticsearch. Bạn triển khai Metricbeat tự động trong container của mình. Khi đã ở đó, nó sẽ thu thập số liệu thống kê về mức sử dụng CPU, bộ nhớ, hệ thống tệp, IO đĩa và IO mạng ở cấp hệ thống. Các mô-đun của nó, được viết bằng Go, cũng có thể theo dõi các chương trình trong container như Apache, NGINX, MongoDB , MySQL , PostgreSQL và Prometheus. Sau đó, tất cả dữ liệu này có thể được truy cập bằng Kibana.
Rất linh hoạt. Bạn cần dành nhiều thời gian để học cách cấu hình và sử dụng nó, nhưng nó rất đáng giá.
Prometheus và Grafana
Giống như Elasticsearch và Kibana, Prometheus và Grafana là các chương trình mã nguồn mở mà bạn có thể sử dụng để xây dựng hệ thống giám sát của riêng mình. Nó phức tạp, nhưng công sức bỏ ra là xứng đáng.
Prometheus lưu trữ dữ liệu dưới dạng chuỗi thời gian. Trong chuỗi thời gian, dữ liệu được lưu giữ dưới dạng luồng giá trị có dấu thời gian cho cùng một số liệu và cùng một tập hợp các chiều có nhãn.
Prometheus, một dự án CNCF, thu thập số liệu trực tiếp từ các container hoặc bằng cách sử dụng cổng đẩy. Các mẫu thu thập được lưu trữ cục bộ và các quy tắc được áp dụng cho dữ liệu của nó để tổng hợp và tạo chuỗi thời gian mới hoặc tạo cảnh báo do người dùng xác định.
Trọng tâm chính của Prometheus là độ tin cậy hơn là độ chính xác. Chương trình thực hiện điều này bằng cách tạo ra mỗi máy chủ Prometheus độc lập với bộ lưu trữ cơ sở dữ liệu chuỗi thời gian cục bộ để tránh phụ thuộc vào bất kỳ dịch vụ từ xa nào. Thiết kế này khiến Prometheus trở thành một công cụ lý tưởng để nhanh chóng xác định các vấn đề và nhận phản hồi theo thời gian thực. Do đó, nó thường được sử dụng trong các hệ thống có tính động cao như các dịch vụ vi mô dựa trên container chạy trên đám mây.
Prometheus có bảng điều khiển web riêng hoặc bạn có thể trích xuất dữ liệu từ đó bằng API của nó. Grafana được sử dụng làm giao diện mặc định.
Hệ thống
Sysdig là một nền tảng giám sát đám mây thương mại hoạt động song song với Prometheus. Điều này cho phép bạn truy cập dữ liệu chuỗi thời gian mà không cần phải xây dựng hệ thống giám sát Prometheus của riêng bạn.
Sysdig theo dõi dữ liệu Docker trực tiếp từ siêu dữ liệu container để cho phép bảo mật và giám sát. Docker khuyến nghị Sysdig là giải pháp giám sát cho các ứng dụng container.
Sysdig cũng tích hợp các chương trình giám sát Linux vào một giao diện duy nhất, nhất quán. Chương trình thực hiện điều này ở cấp độ hệ điều hành bằng cách tích hợp với hạt nhân Linux. Nó ghi lại các cuộc gọi hệ thống và các sự kiện hệ điều hành khác.
Sự kết hợp độc đáo giữa Prometheus và khả năng phân tích hệ điều hành cấp thấp khiến nó trở thành một công cụ giám sát mạnh mẽ.
Phần kết luận
Giám sát container là điều bắt buộc, không phải là một điều tốt đẹp. Nếu không giám sát, việc vận hành container giống như lái xe trên đường cao tốc quanh co, tối tăm mà không có đèn pha.
Chương trình giám sát bạn chọn phụ thuộc vào trường hợp sử dụng, ngân sách và các nguồn lực CNTT có sẵn trong tổ chức của bạn. Bạn có thể tạo hệ thống giám sát container của riêng mình bằng nhiều chương trình nguồn mở có sẵn hoặc sử dụng gói thương mại. Bất kể bạn quyết định sử dụng chương trình giám sát nào, thì đó là thành phần thiết yếu cho sức khỏe và tính ổn định của các ứng dụng web container của bạn.
Nguồn: https://www.linode.com/docs/guides/monitoring-docker-containers/