在现代的系统监控和报告中,清晰直观地展示系统状态是至关重要的。SQL Server Reporting Service (SSRS) 是用来为系统提供动力的仪表盘引擎之一。传统的条形图或折线图可能并不足以精确地表达系统在过去24小时内的可用性(正常/降级/宕机)。一种更用户友好的方法是使用颜色编码的系统可用性时间线视图。可以有两种基本的显示模型:第一种是过去24小时的连续时间线,第二种是按小时分解的时间线。使用红色表示系统宕机时间,黄色表示系统降级,绿色表示系统健康。经过一些研究和调整,找到了一个相当简单的解决方案,可以在SSRS中创建这种类型的图表。以下是步骤。
查看源数据。系统监控数据在数据库中看起来如下。状态1代表健康,2代表降级,3代表停机时间。周期是数据更新频率的指标。120意味着120秒,正如从时间戳列中看到的。
SELECT
service_name,
time_stamp,
DATENAME(HOUR, time_stamp) +
‘:’ +
right(
‘0’ + DATENAME(mi, time_stamp),
2
) as time,
status,
1 as dummy
FROM monitoring_data
就像所有的SSRS报告一样,必须首先创建数据源,然后使用上面的查询来创建数据集。创建数据集后,将列图表插入报告中。
通常会删除图表图例、标题、x轴数据标记和x轴标题,只是为了让时间线看起来更干净。将“dummy”拖到值窗格,“time”拖到类别组窗格。需要按time_stamp列对类别组进行排序,这是实际的datetime列,以便获得正确的时间序列。如所见,“Dummy”是一个常数,在报告中是1。这个列用于显示值,这样可以强制图表中的所有列具有相同的高度,时间线将看起来像一条直线的均匀条纹。
为了使图表看起来像文章开头所示的样子,需要在当前图表上进行三处更改。
第一件事是去除所有空白,使其看起来像一个连续的时间线。点击列系列。转到属性的“常规”部分。展开“自定义属性”。将“PointWidth”属性更改为1。SSRS将一个列和列右侧的空白视为一个总宽度单位。PointWidth属性用于设置列宽度的百分比,以总宽度单位为单位。如果这个值设置为1,列将占据所有空间,所以可以消除空白。
第二件事需要更改的是列的颜色。点击列系列,然后转到“外观”属性部分。更改颜色设置以使用表达式。输入以下公式。当然,这个公式是基于数据的;这部分的实质是为每个单独的列定义颜色,以实现颜色编码的可视化。
想做的最后一个更改是确保所有时间标记以一小时的间隔显示。在情况中,每2分钟有一个列,这使得每小时有30个列。点击图表x轴。转到“标签”属性部分。将“LabelInterval”属性更改为30。
VOILÀ! 系统可用性时间线将如下显示。可以根据需要和数据结构调整这种方法。
文章开头提到了两种可用性可视化。第一个已经在上面解释过了。第二个实际上非常接近第一个。不会详细说明逐步细节。但以下是需要从先前过程中调整的一些差异。
将图表类型从列图表更改为堆叠列图表。
由于这是按小时分解的,需要在查询中分别解析小时和分钟。修改查询:
SELECT
service_name,
time_stamp,
DATENAME(HOUR, time_stamp) +
‘:’ +
right(
‘0’ + DATENAME(mi, time_stamp),
2
) as time,
status,
1 as dummy,
DATENAME(HOUR, time_stamp) as hours,
right(
‘0’ + DATENAME(mi, time_stamp),
2
) as minutes
FROM monitoring_data
将“hours”添加到类别组窗格,将“minutes”添加到系列组窗格。