Giám sát và Khả năng quan sát: Sự khác biệt thực sự, với nhật ký, số liệu và dấu vết

  1. Trang chủ
  2. Blog
  3. DevOps

DevOps

Giám sát và Khả năng quan sát: Sự khác biệt thực sự, với nhật ký, số liệu và dấu vết

Giám sát cho bạn biết rằng có điều gì đó không ổn. Khả năng quan sát giúp bạn tìm ra lý do tại sao, ngay cả khi thất bại là điều bạn không bao giờ lường trước được. Theo dõi sự cố thanh toán để xem cả hai làm việc cùng nhau như thế nào.

Đọc 9 phút
Giám sát và khả năng quan sát: sự khác biệt thực sự, với nhật ký, số liệu và dấu vết

Điểm chính

  • Giám sát theo dõi các vấn đề đã biết bằng cách sử dụng các chỉ số và cảnh báo được xác định trước.
  • Khả năng quan sát là mức độ bạn có thể hiểu được trạng thái bên trong của hệ thống từ kết quả đầu ra của nó.
  • Nhật ký, số liệu và dấu vết là những tín hiệu phổ biến nhưng việc thu thập chúng không đảm bảo thông tin chi tiết.
  • Chúng hoạt động cùng nhau: việc giám sát sẽ đưa ra cảnh báo và khả năng quan sát giúp bạn tìm ra nguyên nhân.

Bảng điều khiển có màu xanh lá cây nhưng khách hàng lại phàn nàn rằng việc thanh toán bị hỏng. Nếu bạn đã ở vị trí này, bạn đã hiểu sự khác biệt giữa giám sát và khả năng quan sát. Việc giám sát của bạn chỉ kiểm tra những gì bạn nghĩ cần kiểm tra và lỗi này là một điều gì đó mới mẻ.

Hướng dẫn này giải thích cả hai ý tưởng mà không cần ngôn ngữ tiếp thị và theo dõi một sự cố hư cấu từ cảnh báo đến nguyên nhân cốt lõi. Nhật ký, dấu vết và số được phát minh để minh họa quá trình. Bạn cũng nên biết rằng các nhà cung cấp và những người hành nghề vẽ đường này một cách khác nhau và một số người coi đó một phần là sự phân biệt về mặt tiếp thị. Chúng tôi tập trung vào phần thực tế.

Câu trả lời ngắn gọn

Giám sát là một hoạt động. Bạn quyết định trước những gì cần xem, chẳng hạn như CPU, tỷ lệ lỗi hoặc dung lượng ổ đĩa và bạn đặt các ngưỡng kích hoạt cảnh báo. Nó trả lời: “Có phải điều tôi lo lắng đã xảy ra không?”

Khả năng quan sát là một thuộc tính của hệ thống của bạn. Thuật ngữ này xuất phát từ lý thuyết điều khiển, trong đó nó mô tả mức độ bạn có thể suy ra trạng thái bên trong của hệ thống từ các đầu ra bên ngoài của nó. Trong thực tế, nó trả lời: “Điều gì đang xảy ra và tại sao, kể cả những vấn đề mà tôi chưa bao giờ lường trước được?”

Hãy nghĩ về một chiếc xe hơi. Các đèn cảnh báo trên bảng đồng hồ đang theo dõi. Chúng bao gồm một tập hợp các vấn đề đã biết. Cổng chẩn đoán đầy đủ của thợ cơ khí, cho phép ai đó đặt câu hỏi mới về bất kỳ bộ phận nào của động cơ, gần với khả năng quan sát hơn.

Giám sát và khả năng quan sát cạnh nhau

Khía cạnh Giám sát Khả năng quan sát
Câu hỏi chính Có gì đó không ổn à? Tại sao nó sai?
Tốt nhất cho Các chế độ lỗi đã biết Thất bại chưa biết và mới lạ
Cách tiếp cận Kiểm tra và bảng điều khiển được xác định trước Khám phá mở dữ liệu phong phú
Đầu ra điển hình Cảnh báo và biểu đồ trạng thái Câu trả lời cho câu hỏi mới
Chi tiết dữ liệu Thường được tổng hợp Chi tiết, theo yêu cầu nếu có thể
thiết lập Định cấu hình kiểm tra từ bên ngoài Yêu cầu thiết bị mã của bạn
Được sử dụng bởi Nhân viên vận hành, trực ca Nhà phát triển và nhân viên trực

Đây không phải là sự lựa chọn giữa hai người. Bạn vẫn cần thông báo để cho bạn biết khi nào cần xem xét.

Tại sao chỉ giám sát thôi là chưa đủ

Với một ứng dụng trên một máy chủ, danh sách những sự cố có thể xảy ra khá ngắn nên bạn có thể xem tất cả. Một hệ thống hiện đại có thể có hàng tá dịch vụ, hàng đợi và API của bên thứ ba, cùng với vùng chứa đến và đi. Thất bại trở thành sự kết hợp mà không ai có thể đoán trước được: một khu vực, một loại khách hàng, một phiên bản ứng dụng cụ thể và một sự phụ thuộc chậm chạp.

Bạn không thể viết trước bảng điều khiển cho một câu hỏi mà bạn chưa nghĩ tới. Bạn cần dữ liệu cho phép bạn hỏi nó sau đó.

Nhật ký, số liệu và dấu vết

Ba loại phép đo từ xa này thường được gọi là trụ cột của khả năng quan sát. Mỗi người trả lời một câu hỏi khác nhau:

tín hiệu Nó là gì Câu trả lời Điểm yếu
Số liệu Những con số theo thời gian Bao nhiêu? Nó đang trở nên tồi tệ hơn? Chi tiết nhỏ về các sự kiện đơn lẻ
Nhật ký Ghi chép các sự kiện riêng lẻ Chính xác thì chuyện gì đã xảy ra? Có thể tốn kém và ồn ào
Dấu vết Đường dẫn của yêu cầu thông qua các dịch vụ Thời gian đã đi đâu? Yêu cầu thiết bị đo và thường được lấy mẫu

Số liệu

http_requests_total{service="checkout", status="500"} 1832
http_request_duration_seconds{service="checkout", quantile="0.95"} 2.4

Các số liệu có chi phí lưu trữ thấp và truy vấn nhanh, điều này khiến chúng trở nên lý tưởng cho trang tổng quan và cảnh báo. Hãy cảnh giác với các nhãn có lượng số cao, chẳng hạn như ID người dùng, trong nhiều hệ thống số liệu vì chúng có thể làm tăng mạnh chi phí.

Dấu vết

Dấu vết theo sau một yêu cầu trên các dịch vụ. Mỗi bước là một span với thời gian bắt đầu và thời lượng:

POST /checkout                      2410 ms
├─ auth-service: verify token         18 ms
├─ cart-service: load cart            42 ms
├─ pricing-service: calculate       2290 ms   <-- slow
│  └─ SELECT coupons ...            2265 ms
└─ payment-service: not reached

Dấu vết làm cho bước chậm trở nên rõ ràng, rất khó nhìn thấy trong nhật ký riêng biệt với các dịch vụ riêng biệt.

Nhật ký

Nhật ký cung cấp chi tiết về những gì đã xảy ra tại một thời điểm. Chúng tôi xem xét cách làm cho chúng hữu ích trong giây lát.

Hướng dẫn sự cố

Đây là cách các mảnh khớp với nhau, trong một ví dụ hư cấu.

Bước tín hiệu Những gì chúng tôi học được
1. Cảnh báo cháy Số liệu Độ trễ của Checkout p95 đã vượt qua mục tiêu 1 giây
2. Chia nhỏ nó ra Số liệu Chỉ có ứng dụng di động bị ảnh hưởng, không phải web
3. Kiểm tra yêu cầu Dấu vết Đã đến lúc thực hiện dịch vụ định giá, truy vấn phiếu giảm giá
4. Đọc chi tiết Nhật ký Tất cả các yêu cầu chậm đều sử dụng phiếu giảm giá từ chiến dịch ngày hôm nay
5. Xác nhận nguyên nhân Kế hoạch truy vấn Tra cứu phiếu giảm giá không có chỉ mục phù hợp
6. Sửa nó Triển khai Thêm chỉ mục và xem độ trễ phục hồi

Giám sát được xử lý ở bước 1. Mọi thứ sau đó là khả năng quan sát được. Lưu ý mỗi câu hỏi đến từ câu trả lời trước đó như thế nào. Không ai có thể xây dựng trước một trang tổng quan cho “truy vấn phiếu giảm giá ứng dụng di động từ chiến dịch ngày hôm nay”. Để khắc phục, hướng dẫn của chúng tôi về Tối ưu hóa truy vấn SQL sẽ chỉ ra cách đọc loại kế hoạch đó.

Nhật ký tốt hơn

Nhật ký văn bản thuần túy được tạo cho mắt người và khó truy vấn. Nhật ký có cấu trúc sử dụng các trường mà máy có thể lọc:

# Hard to search
ERROR Payment failed for user 42 after 3 tries

# Easy to search
{"level":"error","event":"payment_failed","user_id":"42",
 "attempts":3,"provider":"acme","trace_id":"a1b2c3","duration_ms":2410}

Với biểu mẫu thứ hai, bạn có thể hỏi ngay “có bao nhiêu nhà cung cấp thất bại trong một giờ qua?” Trường trace_id đặc biệt có giá trị vì nó liên kết dòng nhật ký với toàn bộ yêu cầu, trên mọi dịch vụ mà nó chạm vào.

Không bao giờ đăng nhập mật khẩu, mã thông báo hoặc số thẻ và cẩn thận với dữ liệu cá nhân. Như hướng dẫn của chúng tôi giải thích, JWT có thể được sử dụng lại bởi bất kỳ ai đọc chúng từ nhật ký.

Mẹo: Thêm ngữ cảnh mà bạn muốn khi xảy ra sự cố, chẳng hạn như phiên bản, khu vực, cấp khách hàng và trạng thái cờ tính năng. Việc có thể nói “chỉ phiên bản 2.14 trong một khu vực” thường tự giải quyết được vấn đề.

Những tín hiệu vàng

Bạn không chắc chắn nên theo dõi những gì? Cuốn sách Kỹ thuật độ tin cậy trang web của Google gợi ý bốn tín hiệu cho các hệ thống hướng tới người dùng:

tín hiệu Câu hỏi Ví dụ
Độ trễ Yêu cầu mất bao lâu? thời gian phản hồi p95 và p99
Giao thông Có bao nhiêu nhu cầu? Yêu cầu mỗi giây
Lỗi Có bao nhiêu yêu cầu thất bại? Tỷ lệ 5xx phản hồi
Độ bão hòa Hệ thống đầy đủ đến mức nào? Sử dụng CPU, bộ nhớ, nhóm kết nối

Sử dụng phần trăm cho độ trễ, vì mức trung bình sẽ ẩn các yêu cầu chậm, như chúng tôi đã trình bày trong thử nghiệm tải so với thử nghiệm căng thẳng.

Cảnh báo mọi người tin tưởng

Nếu cảnh báo liên tục xuất hiện, mọi người sẽ ngừng đọc chúng. Những cái tốt tuân theo một số quy tắc:

  • Cảnh báo về các triệu chứng mà người dùng cảm thấy. “Lỗi thanh toán trên 2%” đánh bại “CPU ở mức 85%”. CPU cao mà không hại ai thì không nên đánh thức ai cả.
  • Làm cho mọi cảnh báo có thể thực hiện được. Nếu không ai cần làm gì, hãy đặt cảnh báo đó thành một mục trên trang tổng quan hoặc xóa cảnh báo đó.
  • Liên kết tới sổ tay. Nói cho người trả lời biết nơi cần tìm và những gì cần thử.
  • Xem lại chúng thường xuyên. Xóa hoặc sửa bất kỳ cảnh báo nào bị bỏ qua trong tháng trước.

Mục tiêu cấp độ dịch vụ

SLO biến “trang web phải nhanh và đáng tin cậy” thành mục tiêu có thể đo lường được, chẳng hạn như “99,9% yêu cầu thanh toán thành công sau 30 ngày”. Điều đó cho phép xảy ra khoảng 0,1% số lần thất bại, được gọi là ngân sách lỗi. Nếu còn nhiều, bạn có thể vận chuyển nhanh hơn và nếu gần hết, bạn có thể ưu tiên độ tin cậy. Đó là một cách hữu ích để giải quyết các tranh cãi giữa tốc độ phân phối và độ ổn định.

OpenTelemetry và các công cụ

OpenTelemetry là một tiêu chuẩn nguồn mở, trung lập với nhà cung cấp để tạo và xuất dữ liệu đo từ xa. Đây là một dự án của Tổ chức Điện toán Đám mây. Việc trang bị nó có nghĩa là bạn có thể thay đổi phần phụ trợ sau này mà không cần viết lại mã. Bản thân nó không phải là sản phẩm lưu trữ hoặc bảng điều khiển, vì vậy bạn kết hợp nó với một sản phẩm:

Mục đích Ví dụ về nguồn mở Ví dụ thương mại
Số liệu Prometheus Datadog, Di tích mới
Trang tổng quan Grafana Datadog, Dynatrace
Nhật ký Loki, Tìm kiếm mở Splunk, đàn hồi
Dấu vết Jaeger, nhịp độ Tổ ong, Datadog

Hãy tự kiểm tra các tính năng hiện tại và định giá vì những sản phẩm này thay đổi thường xuyên. Chi phí có thể tăng nhanh theo khối lượng dữ liệu, vì vậy hãy sử dụng phương pháp lấy mẫu và đặt giới hạn lưu giữ.

Làm thế nào để bắt đầu

  1. Bắt đầu với những tín hiệu vàng cho dịch vụ quan trọng nhất của bạn.
  2. Thêm một hoặc hai cảnh báo về các triệu chứng mà người dùng nhận thấy.
  3. Chuyển sang nhật ký có cấu trúc, có ID yêu cầu ở mỗi dòng.
  4. Thêm tính năng theo dõi vào hành trình người dùng chính của bạn với OpenTelemetry, vì công cụ đo lường tự động có thể bao gồm nhiều khung phổ biến.
  5. Liên kết các hoạt động triển khai với biểu đồ của bạn, để bạn có thể biết liệu bản phát hành từ quy trình CI/CD của bạn có gây ra thay đổi hay không.
  6. Tìm hiểu từ mỗi sự cố. Sau mỗi sự cố, hãy hỏi xem dữ liệu nào sẽ giúp giải quyết nhanh hơn và bổ sung dữ liệu đó.

Một nhóm nhỏ với một dịch vụ không cần một nền tảng lớn. Số liệu cơ bản, nhật ký tốt và một vài cảnh báo có thể rất nhiều. Truy tìm kiếm được lợi nhuận khi số lượng dịch vụ tăng lên.

Những lỗi thường gặp

  • Mua một công cụ và gọi nó là khả năng quan sát. Giá trị đến từ công cụ đo lường tốt và cách bạn sử dụng dữ liệu.
  • Xử lý ba trụ cột như một danh sách kiểm tra. Phân tách dữ liệu mà không có cách nào để liên kết dữ liệu đó khiến bạn phải tìm kiếm khắp các tab. ID được chia sẻ quan trọng.
  • Thu thập mọi thứ. Việc đo từ xa không được lọc sẽ trở nên đắt đỏ và gây thêm tiếng ồn.
  • Quá nhiều trang tổng quan. Một vài lượt xem đáng tin cậy đánh bại cả trăm lượt xem mà không ai mở.
  • Suy nghĩ rằng nó thay thế việc thử nghiệm. Bạn vẫn cần thử nghiệm trước khi phát hành. Tuy nhiên, các bản phát hành của Canary kết hợp tốt với các tín hiệu này.

Lời kết

Việc giám sát cho bạn biết có điều gì đó không ổn và khả năng quan sát cho bạn phương tiện để tìm hiểu lý do. Thử nghiệm thực tế rất đơn giản: khi một vấn đề lạ xuất hiện, bạn có thể tìm ra nguyên nhân mà không cần gửi mã mới không? Lần tới khi bạn gặp sự cố, hãy viết ra mọi câu hỏi mà bạn không thể trả lời. Danh sách đó là lộ trình của bạn.

Câu hỏi thường gặp

Sự khác biệt giữa giám sát và khả năng quan sát là gì?

Giám sát theo dõi các số liệu và cảnh báo được xác định trước về các vấn đề đã biết. Khả năng quan sát là khả năng hiểu trạng thái của hệ thống từ kết quả đầu ra của nó, bao gồm cả các sự cố không mong muốn.

Ba trụ cột của khả năng quan sát là gì?

Chúng là nhật ký, số liệu và dấu vết. Nhật ký ghi lại các sự kiện, số liệu đo lường giá trị theo thời gian và dấu vết tuân theo một yêu cầu duy nhất trên các dịch vụ.

Tôi có cần khả năng quan sát nếu tôi có giám sát không?

Đối với một hệ thống nhỏ, đơn giản, việc giám sát và ghi nhật ký tốt có thể là đủ. Khi các hệ thống trở nên phân tán và các lỗi khó dự đoán hơn, khả năng quan sát sẽ trở nên có giá trị hơn.

OpenTelemetry là gì?

Đây là một tiêu chuẩn nguồn mở và bộ công cụ để tạo và xuất nhật ký, số liệu và dấu vết, do đó bạn không bị ràng buộc với đại lý của một nhà cung cấp duy nhất.

Bốn tín hiệu vàng là gì?

Chúng là độ trễ, lưu lượng truy cập, lỗi và độ bão hòa. Hướng dẫn SRE của Google khuyến nghị đây là điểm khởi đầu để giám sát các hệ thống hướng tới người dùng.

Tiếp tục học hỏi

Làm việc với Stack Quora

Cần trợ giúp về kiểm tra, WordPress hoặc SEO?

Chúng tôi giúp các nhóm phát triển phần mềm tốt hơn và phát triển trang web của họ. Hãy cho chúng tôi biết bạn đang làm gì và chúng tôi sẽ đề xuất bước tiếp theo rõ ràng.

Tiếp tục đọc

Thêm hướng dẫn về thử nghiệm, AI và phát triển hiện đại

Bạn thích bài viết này? Chọn một chủ đề và chuyển ngay sang phần hướng dẫn mới nhất của chúng tôi.

Trí tuệ nhân tạo

Giải thích về ảo giác AI: Tại sao các mô hình ngôn ngữ lại tạo nên mọi thứ và cách giảm thiểu nó

Ảo giác AI đã giải thích: chúng là gì, tại sao mô hình ngôn ngữ tạo ra chúng, các loại phổ biến, cách giảm thiểu chúng bằng cách căn cứ và nhắc nhở …

Đọc bài viết →
DevOps

Giải thích về các biến môi trường: Tệp .env, bí mật và cấu hình được thực hiện đúng

Các biến môi trường được giải thích bằng các ví dụ Python mà chúng tôi đã chạy: đọc và thiết lập chúng, tại sao mọi giá trị đều là một chuỗi, tệp .e…

Đọc bài viết →
Phát triển phần mềm

Giải thích về giới hạn tỷ lệ API: Thuật toán, tiêu đề và xử lý lỗi 429

Giới hạn tốc độ API được giải thích bằng mô phỏng mà chúng tôi đã chạy: nhóm mã thông báo, cửa sổ cố định, cửa sổ trượt, 429 phản hồi, tiêu đề giới …

Đọc bài viết →
Tự động hóa kiểm thử

Chế giễu bằng Python: unittest.mock, patch và những sai lầm khiến bài kiểm tra nói dối

Mô phỏng bằng Python với unittest.mock, đã được thử nghiệm: Mock và return_value, side_effect, vá lỗi nơi sử dụng tên, thông số kỹ thuật và thông số…

Đọc bài viết →
Kiểm thử phần mềm

Giải thích về phạm vi bảo hiểm của mã: Phạm vi tuyến so với chi nhánh và ý nghĩa thực sự 100%

Phạm vi bảo hiểm mã được giải thích bằng cách chạy phạm vi bảo hiểm thực tế: phạm vi bảo hiểm dòng, chi nhánh và điều kiện, đọc báo cáo, lý do tại s…

Đọc bài viết →
Cơ sở dữ liệu & SQL

DELETE vs TRUNCATE vs DROP trong SQL: Sự khác biệt, khôi phục và thời điểm sử dụng mỗi loại

DELETE vs TRUNCATE vs DROP được giải thích bằng SQL đã được thử nghiệm: mỗi loại loại bỏ, khôi phục, kích hoạt, đặt lại danh tính, tốc độ và Postgre…

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích về Chế độ xem SQL: Tạo, sử dụng và tránh những cạm bẫy, kèm theo ví dụ

Chế độ xem SQL được giải thích bằng các truy vấn chúng tôi đã chạy: tạo chế độ xem, kết quả trực tiếp, ẩn cột, hiệu suất, chế độ xem có thể cập nhật…

Đọc bài viết →
Phát triển phần mềm

Giao diện TypeScript so với loại: Sự khác biệt thực sự, được thử nghiệm bằng trình biên dịch

Giao diện TypeScript so với loại, được kiểm tra bằng trình biên dịch thực: cả hai có thể làm gì, chỉ một người có thể làm gì, hợp nhất khai báo, mở …

Đọc bài viết →
Phát triển phần mềm

Giải thích về Python *args và **kwargs: Hàm linh hoạt với ví dụ rõ ràng

Python *args và **kwargs được giải thích bằng mã chúng tôi đã chạy: đóng gói và giải nén, thứ tự tham số, đối số chỉ từ khóa và chỉ vị trí, trình tr…

Đọc bài viết →
Phát triển phần mềm

Hàm Lambda của Python: Cú pháp, cách sử dụng thực tế và khi nào không nên sử dụng chúng

Các hàm lambda của Python được giải thích bằng mã chúng tôi đã chạy: cú pháp, sắp xếp bằng khóa, bản đồ và bộ lọc, các phần đóng, bẫy liên kết muộn …

Đọc bài viết →
Trí tuệ nhân tạo

Đại lý AI là gì? Cách chúng hoạt động, với vòng lặp tác nhân đơn giản, bạn có thể chạy

Tác nhân AI là gì? Hướng dẫn đơn giản về vòng lặp tác nhân, công cụ, bộ nhớ và lan can, với một vòng lặp Python nhỏ mà chúng tôi đã chạy, những rủi …

Đọc bài viết →
DevOps

Giám sát và Khả năng quan sát: Sự khác biệt thực sự, với nhật ký, số liệu và dấu vết

Giải thích về giám sát và khả năng quan sát: lỗi đã biết và chưa biết, nhật ký, số liệu và dấu vết, hướng dẫn về sự cố thanh toán, tín hiệu vàng, Op…

Đọc bài viết →
DevOps

Docker Volumes vs Bind Mounts: Duy trì dữ liệu vùng chứa đúng cách

Giải thích về khối lượng Docker và liên kết gắn kết: tại sao dữ liệu vùng chứa biến mất, khối lượng được đặt tên, liên kết gắn kết, tmpfs, ví dụ về …

Đọc bài viết →
Tự động hóa kiểm thử

TDD vs BDD: Key Differences, One Feature Built Both Ways and When to Use Each

TDD và BDD được giải thích bằng một tính năng giảm giá được xây dựng theo cả hai cách: tái cấu trúc màu đỏ-xanh với mã chúng tôi đã chạy, kịch bản C…

Đọc bài viết →
Phát triển phần mềm

Git merge vs rebase: khác biệt, ví dụ và khi nào dùng cái nào

Git merge vs rebase được giải thích bằng đầu ra log thực tế, bảng so sánh, quy tắc vàng của rebase và quy trình làm việc nhóm an toàn.

Đọc bài viết →
Phát triển phần mềm

List comprehension trong Python: cú pháp, ví dụ và khi nào nên tránh

List comprehension trong Python: cú pháp, lọc dữ liệu, if-else, vòng lặp lồng nhau, thời gian đo thực tế và khi nào vòng lặp for thông thường tốt hơn.

Đọc bài viết →
Cơ sở dữ liệu & SQL

Giải thích SQL JOIN kèm ví dụ (Inner, Left, Right, Full)

Hiểu SQL JOIN từng bước với bảng và truy vấn mẫu: INNER, LEFT, RIGHT, FULL, CROSS và SELF, cùng lỗi thường gặp và mẹo hiệu năng.

Đọc bài viết →