我正在尝试为 Icinga2 数据库生成报告。
我想查看每个主机每个服务每天的状态时间。
我有以下数据结构:
列:
State_Time > 监控对象状态从A变为B的时间
状态> 对象现在的状态(A,B..)
Last_State > 对象在当前时间之前的状态
主机名> 主机对象的名称
Servicename > 服务对象的名称
我希望报告看起来像这样:
host | service | day | State A % | State B %
a.b.c | srvxyz |1.1.1| 70 | 30
这样我基本上就可以看到可用性的百分比。
根据我的想法,我需要:
- 按主机名分组、按服务名称分组、按日期时间字段的日期分组
- 根据状态计算并汇总每个事件相对于前一个事件的时间
到目前为止我所拥有的是:
select
sum(state_time_usec),
max(name1),
max(name2),
max(date(state_time)),
max(state)
from
icinga_statehistory
inner join icinga_objects on icinga_objects.object_id = icinga_statehistory.object_id
group by icinga_objects.object_id,date(state_time),state
order by state_time desc
但是我不知道如何从上一行的计算开始。你能给我指出一个方向或者你有什么想法吗? 谢谢!
最佳答案
您可以为您的表格创建排名,例如:
@curRank := @curRank + 1 AS 排名
并内连接到同一个表
@curRank := @curRank + 2 AS 排名
所以你将得到以前的值。通过这张表格,您将能够计算出您需要的内容。
关于mysql计算前一行时间戳差异并按多个对象分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50061863/