我正在尝试为 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
但我不知道如何从上一行的计算开始。你能给我指出一个方向还是你有什么想法?谢谢!