Deadman Checks trong Grafana

0 0 0

Người đăng: Kansu Leg

Theo Viblo Asia

Bài đăng này là một lưu ý kỹ thuật nhanh về cách thiết lập kiểm tra deadman trong Grafana với InfluxDB làm nguồn dữ liệu và cách xử lý trường hợp đặc biệt khi máy chủ không báo cáo và cảnh báo chuyển sang trạng thái đã giải quyết .

Thông tin

Sau khi sử dụng InfluxDB trong hơn bốn năm, tôi đang dần chuyển sang Grafana với nhiều nguồn dữ liệu khác nhau. Một trong những tính năng hữu ích nhất của ngăn xếp InfluxDB là Telegraf . Tôi vẫn đang sử dụng Telegraf để thu thập số liệu từ máy chủ của mình với InfluxDB làm lớp duy trì. Mặc dù tôi không sử dụng Giao diện người dùng InfluxDB nữa, nhưng tôi vẫn dựa vào cảnh báo InfluxDB.

Gần đây, tôi đã thiết lập cảnh báo Grafana với InfluxDB làm nguồn dữ liệu của mình, ngoại trừ Deadman Checks . Sau đó, tôi quyết định thiết lập deadman checking trong Grafana để có thể chạy cảnh báo Grafana và InfluxDB song song cho đến khi tôi chắc chắn rằng mọi thứ đang hoạt động như mong đợi, để cuối cùng loại bỏ cảnh báo InfluxDB.

Thiết lập Deadman Checks

Hóa ra Grafana không có "deadman check" ngay từ đầu. Điều này có lý, vì đó là công việc của nguồn dữ liệu: chúng ta không muốn kéo tất cả dữ liệu từ InfluxDB vào Grafana để thực hiện lọc và chuyển đổi. May mắn thay, tôi đã tìm ra cách sử dụng hàm monitor.deadman của InfluxDB để tạo deadman check trong Grafana:

import "date"
import "influxdata/influxdb/monitor" // You can read it as follows: If the host does not report for `90s`, ...
x_duration = 90s from(bucket: "my-bucket") |> range(start: v.timeRangeStart) |> filter(fn: (r) => r._measurement == "system") |> filter(fn: (r) => r._field == "uptime") |> group(columns: ["host"]) |> monitor.deadman(t: date.sub(d: x_duration, from: now())) |> map(fn: (r) => ({ time: r._time, host: r.host, dead: if r.dead == true then 0 else 1 }))

Phần khó nhất là hiểu tại sao đoạn mã trên không hoạt động nếu không có thao tác map cuối cùng. Cần phải chuyển đổi kết quả sang định dạng mà Grafana có thể hiểu được.

Về bản chất, mã trên quét dữ liệu trong một khoảng thời gian tính bằng X phút được đặt làm tùy chọn trên truy vấn, ví dụ 10m. Sau đó, hàm monitor.deadman sẽ kiểm tra xem máy chủ có báo cáo trong khoảng thời gian 10m gần nhất nhưng không phải trong khoảng thời gian 90s gần nhất hay không.

Cho đến nay, giải pháp này vẫn hiệu quả và rất đáng khích lệ.

Cạm bẫy: Giải quyết sai

Tuy nhiên, tôi đã gặp phải một hành vi gây hiểu lầm:

  • Nếu máy chủ ngừng báo cáo và cảnh báo chuyển sang trạng thái kích hoạt , sau khi cửa sổ 10m hết hạn và không có dữ liệu mới nào đến, cảnh báo mới sẽ được kích hoạt ở trạng thái đã giải quyết .
  • Điều này xảy ra vì chuỗi máy chủ bị thiếu trong kết quả truy vấn, điều mà Grafana coi là bình thường -- ngay cả khi máy chủ vẫn ngừng hoạt động.

Rõ ràng, cấu hình "Cấu hình không có dữ liệu và xử lý lỗi" cho quy tắc cảnh báo áp dụng cho toàn bộ truy vấn, không áp dụng cho chuỗi bị thiếu trong kết quả truy vấn. Đây có vẻ là hành vi dự định . Điều duy nhất chúng ta có thể làm trong Grafana v12 là đặt số lượng đánh giá thành số cao hơn trước khi chuyển sang trạng thái đã giải quyết .

Giải pháp thay thế và suy nghĩ cuối cùng

Tôi nghĩ điều này không lý tưởng, nhưng khi tôi nghĩ về nó, Grafana không thể làm gì về điều đó. Hãy xem xét điều này: nếu chúng ta ngừng hoạt động máy chủ thì sao? Nó sẽ ở trạng thái cảnh báo mãi mãi.

Giải pháp duy nhất là tìm thông tin về máy chủ nào đang hoạt động và dự kiến ​​báo cáo, sau đó kết hợp thông tin đó với kết quả kiểm tra máy chủ chết.

Tôi không biết cách lấy dữ liệu từ hai nguồn khác nhau và kết hợp chúng trong Grafana. Có lẽ có thể thực hiện việc này với sự trợ giúp của gói yêu cầu trong Flux. Nhưng hiện tại tôi sẽ bỏ qua cảnh báo kiểm tra deadman trong trạng thái resolved. Thậm chí còn có một tùy chọn trong cấu hình "Contact Points" để dừng gửi thông báo cho các cảnh báo đã giải quyết.

Phần kết luận

Thiết lập này hiện tại đã đủ tốt, nhưng tôi sẽ khám phá các cách để tham chiếu chéo dữ liệu có nguồn từ các nhà cung cấp khác nhau. Trước đó, tôi cần đảm bảo rằng tôi có thể ngừng hoạt động các cảnh báo InfluxDB và chỉ dựa vào Grafana.

Bình luận

Bài viết tương tự

- vừa được xem lúc

[K8S] Phần 8 - Monitoring trên Kubernetes Cluster dùng Prometheus và Grafana

Lời tựa. Chào các bạn, hôm nay chúng ta sẽ đến với một topic khá hot khi làm việc với Kubernetes đó là Monitoring, cụ thể hơn là Prometheus và Grafana - Cái mà hầu như ai làm với K8S sẽ đều phải va ch

0 0 138

- vừa được xem lúc

Giám sát mọi thứ với Python Exporter cho Prometheus

Python Exporter là gì. Nếu như các bạn đã quen với việc dựng các service database, web server, queue,.

0 0 49

- vừa được xem lúc

[P1] Cài đặt Prometheus + Grafana trên Ubuntu 20.04

Cài đặt Prometheus. . Lấy link cài đặt mới nhất tại: https://prometheus.io/download/.

0 0 51

- vừa được xem lúc

[Logging] Sử dụng grafana xem log từ file

Như bài viết trước mình đã có hướng dẫn sử dụng Zap và Golang để write log ra file, anh em xem lại đây nhé. .

0 0 37

- vừa được xem lúc

Server monitoring với combo thần thánh Grafana, Prometheus, Cavisor, Node-exporter và Docker

Nếu bạn đang ở một level trung trung và đang bắt đầu tập tành chạy các app của mình trên vps/server thì với số lượng nhỏ nhỏ có thể chưa có vấn đề gì. Tuy nhiên khi số lượng lớn có thể là chạy nhiều a

0 0 42

- vừa được xem lúc

[Monitor] Cách giám sát hệ thống đơn giản với Prometheus và Grafana

Chào các bạn,. Các bạn là một IT sysadmin thì việc giám sát hệ thống hay gọi tắt là monitor là việc không thể bỏ qua.

0 0 28