上一篇 使用 ELK 查看 Ceph 读写速度(一) 里,我们通过 ceph monit api 接口,抓取到了需要的数据。接下来,我们就要把这些数据图形化展示出来了。

首先我们使用还在实验阶段的 Visual Builder 建立一个曲线图。进入 Visualize 页面,点击 + 号新建一个 Visual Builder。
Screenshot-2018-1-19-Kibana

然后按照下图所示,分 3 部分填写。你就能得到最上面的曲线图了。
Screenshot-2018-1-19-Ceph-Cluster-R-W-Timeseries---Kibana
查看大图

Screenshot-2018-1-19-Ceph-Cluster-R-W-Timeseries---Kibana-1-
查看大图

Screenshot-2018-1-19-Ceph-Cluster-R-W-Timeseries---Kibana-2-
查看大图

然后保存这个 visual 面板。接着新建一个 Dashboard,把建好的 visual 面板加入。观察效果,发现有断流现象。
Screenshot-from-2017-12-28-21-58-08
查看大图

通过查看我们上一篇里建立的 search,我发现了有数据为空的记录。再通过查看日志原文,发现原来是因为 ceph 接口返回的数据里,read 单位值有 kB/s、B/s 和 MB/s 三种。我的 logstash filter 只对应了其中一种,自然就匹配缺失了。所以,我们改进一下 filter。

filter {
  if "ceph-pg-stat" in [tags] {
  
    grok {
      match => {
        "message" => [
          "%{GREEDYDATA}avail; %{INT:[ceph][cluster][read]} kB\/s rd, %{INT:[ceph][cluster][write]} kB\/s wr, %{INT:[ceph][cluster][op]} op\/s"
        ]
      }
      remove_field => "message"
    }
    
    grok {
      match => {
        "message" => [
          "%{GREEDYDATA}avail; %{INT:[ceph][cluster][read]} B\/s rd, %{INT:[ceph][cluster][write]} kB\/s wr, %{INT:[ceph][cluster][op]} op\/s"
        ]
      }
      add_tag => ["low_speed"]
      remove_field => "message"
    }
    # Convert B/s to kB/s
    if "low_speed" in [tags] {
      ruby {
        code => "event['ceph.cluster.read'] = Integer(event['ceph.cluster.read'].gsub(',','') / 1024)"
        remove_tag => ["low_speed"]
      }
    }
    
    grok {
      match => {
        "message" => [
          "%{GREEDYDATA}avail; %{INT:[ceph][cluster][read]} MB\/s rd, %{INT:[ceph][cluster][write]} kB\/s wr, %{INT:[ceph][cluster][op]} op\/s"
        ]
      }
      add_tag => ["high_speed"]
      remove_field => "message"
    }
    # Convert MB/s to kB/s
    if "high_speed" in [tags] {
      ruby {
        code => "event['ceph.cluster.read'] = Integer(event['ceph.cluster.read'].gsub(',','') * 1024)"
        remove_tag => ["high_speed"]
      }
    }
    mutate {
      convert => { "[ceph][cluster][read]" => "integer" }
      convert => { "[ceph][cluster][write]" => "integer" }
      convert => { "[ceph][cluster][op]" => "integer" }
    }
    
  }
}

问题就解决啦。大家举一反三,可以做出以下这样的 dashboard。
Screenshot-2017-12-22-Ceph-Dashboard---Kibana-2--1
查看大图