最近用 ELK 解析 Ceph 的性能状态,metricbeat 6.x 版本里放出了测试中的 ceph 模块,但是居然没有读写速度参数。所以我们就改用 logstash 的 http_poller 模块,定时去查 ceph api,解析出需要的数据并绘出图形(我们将在第二章里讲到如何建立 kibana 看板)。
首先是 input 部分里,我们使用 http_poller 来抓取。请把 IP 和端口按实际情况修改。http_poller 是个超好玩的模块,按照官方的举例,你可以用它来定时抓取亚马逊的商品页面,再通过一番解析后,可以得到某些商品的价格/销量等走势~~~
input {
http_poller {
urls => {
cephPgStat => "http://192.168.1.1:5000/api/v0.1/pg/stat"
}
request_timeout => 60
schedule => { every => "15s" }
tags => ["ceph-pg-stat","ceph"]
}
}
schedule 里我设置了每 15 秒查询一次,这个可以根据你的实际需求调整数据的粒度。
获取出来的信息是类似这样的
v32768479: 8000 pgs: 8000 active+clean; 8526 GB data, 29741 GB used, 152 TB / 181 TB avail; 347 kB/s rd, 8705 kB/s wr, 2246 op/s
然后我们用 filter 来处理。需要提前说明的是,我们这个 logstash filter 还不是完善的,有坑。在下一篇里我会解释原因并给出解决方法。
filter {
if "ceph" 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"
}
mutate {
convert => { "[ceph][cluster][read]" => "integer" }
convert => { "[ceph][cluster][write]" => "integer" }
convert => { "[ceph][cluster][op]" => "integer" }
}
}
}
output 里,我们给它一个独立的 index,方便以后的 index 清理维护。
output {
if "ceph" in [tags] {
elasticsearch {
hosts => ["127.0.0.1"]
index => "ceph-%{+YYYY.MM.dd}"
}
} else {
elasticsearch {
hosts => ["127.0.0.1"]
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
}
}
}
于是我们在 kibana 里就看到了所需的数据了,这里就不敷述如何建立 search,看图里的参数吧。
下一篇里,我们将会讲解如何通过这些数据,创建一个 Kibana Dashboard,图形化查看 Ceph 集群读写状态。