上一篇 使用 ELK 查看 Ceph 读写速度(一) 里,我们通过 ceph monit api 接口,抓取到了需要的数据。接下来,我们就要把这些数据图形化展示出来了。
首先我们使用还在实验阶段的 Visual Builder 建立一个曲线图。进入 Visualize 页面,点击 + 号新建一个 Visual Builder。
然后按照下图所示,分 3 部分填写。你就能得到最上面的曲线图了。
然后保存这个 visual 面板。接着新建一个 Dashboard,把建好的 visual 面板加入。观察效果,发现有断流现象。
通过查看我们上一篇里建立的 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。