R CPU利用率数据中心中的热图

时间:2015-01-25 12:03:19

标签: r

我从数据中心的100台服务器读取数据。读数采用数据帧格式,时间为3列Timehost nameCPU Utilization。读数每10分钟由监测系统产生。我需要绘制CPU利用率的热图,X轴为time,Y轴为% of servers,热图为CPU utilization范围。

例如:如果服务器总数为5。输入数据如下

Time            CPU Hostname
1/25/2015 10:15  19%    H1
1/25/2015 10:15  90%    H2
1/25/2015 10:15  90%    H3
1/25/2015 10:15  50%    H4
1/25/2015 10:15  25%    H5
1/25/2015 10:25  30%    H1
1/25/2015 10:25  85%    H2
1/25/2015 10:25  30%    H3
1/25/2015 10:25  21%    H4
1/25/2015 10:25  21%    H5

所需的输出是一个堆积图表,用于描绘热图中的以下数字。

例如,10:15 280-100%服务器的使用范围为40%,因此值为Range 10:15 10:25 0-20 20% 0% 20-40 20% 80% 40-60 20% 0% 60-80 0% 0% 80-100 40% 20%

xts

需要R中的功能帮助绘制这种热图。尝试使用xts,但我不清楚如何应用{{1}}包的用例。

1 个答案:

答案 0 :(得分:2)

你只需要:

  • cut值到您需要的群组中
  • 找到每组的百分比
  • expand缺少参赛作品
  • 使用geom_tile作为热图

以下代码的许多组成部分都在很多SO帖子中:

library(dplyr)
library(ggplot2)
library(tidyr)
library(scales)

dat <- read.table(text="Time,CPU,Hostname
1/25/2015 10:15,19%,H1
1/25/2015 10:15,90%,H2
1/25/2015 10:15,90%,H3
1/25/2015 10:15,50%,H4
1/25/2015 10:15,25%,H5
1/25/2015 10:25,30%,H1
1/25/2015 10:25,85%,H2
1/25/2015 10:25,30%,H3
1/25/2015 10:25,21%,H4
1/25/2015 10:25,21%,H5", header=TRUE, sep=",", stringsAs=FALSE)


total_hosts <-length(unique(dat$Hostname))

dat %>%
  mutate(Time=as.POSIXct(Time, format="%m/%d/%Y %H:%M"),
         Day=format(Time, format="%Y-%m-%d"),
         HM=format(Time, format="%H:%M"),
         CPU=as.numeric(gsub("%", "", CPU)),
         `CPU Range`=as.character(cut(CPU, 
                                breaks=c(0,20,40,60,80,100), 
                                labels=c("0-20", "20-40", "40-60", 
                                         "60-80", "80-100")))) %>%
  group_by(Day, `CPU Range`, HM) %>%
  summarise(Pct=n()/total_hosts) %>%
  merge(expand(., `CPU Range`, HM, Day), all.y=TRUE) -> dat

gg <- ggplot(dat, aes(x=HM, y=`CPU Range`))
gg <- gg + geom_tile(aes(fill=Pct), color="#7f7f7f")
gg <- gg + scale_fill_distiller(palette="RdPu", na.value="white", 
                                label=percent, name="% Hosts")
gg <- gg + coord_equal()
gg <- gg + labs(x=NULL)
gg <- gg + theme_bw()
gg <- gg + theme(panel.border=element_blank())
gg <- gg + theme(panel.grid=element_blank())
gg

enter image description here

我将Day留在数据框中,以防您需要{需要facet_wrap或由其汇总。