我正在公司基础设施上设置监控。我安装了带有 Prometheus 数据源的 Grafana。我构建了仪表板,并获得了相当“尖锐”的图表。我想知道是否有任何方法可以使其更平滑一些,以便更具可读性。
谢谢 !
答案1
首先我应该说一下,我是一个 Prometheus 新手,自己正在习惯 PromQL。
我应该提醒自己,“速率”只适用于计数器,而不适用于计量器(您的示例对此没有异议)。我将使用主机在 TCP 套接字上调用 connect() 的次数。
node_netstat_Tcp_ActiveOpens
绘制该图表时,它总是在增加,因此很可能是一个计数器,即使节点导出器数据源显示以下内容:
# HELP node_netstat_Tcp_ActiveOpens Statistic TcpActiveOpens.
# TYPE node_netstat_Tcp_ActiveOpens untyped
node_netstat_Tcp_ActiveOpens 20684
我只有一个正在监控的实例,但是让我们在其中添加一个过滤器,这样我们就不会查询太多的时间序列:
node_netstat_Tcp_ActiveOpens{instance="localhost:9100"}
让我们为其添加一个“费率”:
rate(node_netstat_Tcp_ActiveOpens{instance="localhost:9100"})
哦,但是失败了,提示“在调用函数“rate”时预期类型为范围向量,得到即时向量”;要绘制此图,我们需要“即时向量”类型的数据,但我们得到的是“速率向量”。我们需要指定一个量子(我不认为 Prometheus 使用的术语)来聚合/窗口化时间序列数据。
rate(node_netstat_Tcp_ActiveOpens{instance="localhost:9100"}[5m])
好的,这可行,我们可以通过将 5m 改为 20m 等来进行平滑处理...
但是峰值可能是有用的,并且“速率”只是处理数据的一种方式。
我认为查看数据的某个百分位数很有用,这有助于消除异常值,但仍能使显示的数据更加生动。这里我指定了第 90 个百分位数。
quantile(0.9, rate(node_netstat_Tcp_ActiveOpens{instance="localhost:9100"}[5m]))
您将需要尝试这个更现实的数据来找到一个合适的分位数(0.9)和窗口(5m)。
我们假设这些数据具有故障模式,并且我们想将该数据与 1 天前的数据进行比较:
quantile(0.9, rate(node_netstat_Tcp_ActiveOpens{instance="localhost:9100"}[5m]))
- quantile(0.9, rate(node_netstat_Tcp_ActiveOpens{instance="localhost:9100"}[5m] offset 1d))
希望这能给你一些启发;至少对我来说这肯定是有用的:)
干杯,卡梅伦