由于项目需要监控clickhouse集群的状态,首先想到的便是需要监控各个分片的状态,有多少active的,有多少失联的,但是苦苦搜寻发现clickhouse本身并没有提供这样的监控指标,只能寄希望于一些外部程序,其实自己写一个脚本去实现也是可以的,但是意外发现了Prometheus官方开源的blackbox-exporter 程序,一番验证之后决定采用该方法,这样可以与我们其他监控指标使用的Prometheus + Grafana的方案保持一致。
1. blackbox-exporter简介
如同常用的node-exporter工具用来监控服务器节点物理资源使用情况,Prometheus提供此工具主要用来检测一些网络设备的连接状态,其实现的功能主要包括:
- 检测http/https是否可以正常访问:包括get/post等各种请求方式
- 检测某个tcp端口状态是否正常,设置可使用交互式的方式进行验证,比如发送某个请求后验证返回的结果是否符合预期
- 通过ICMP请求验证远程主机是否可以ping通
2. blackbox-exporter部署
- 可以直接从官网
https://github.com/prometheus/blackbox_exporter/releases 下载最新的版本,然后上传到promethues的服务器(可以在任何一台可访问的服务器上,本例只是为了方便) - 解压安装包后进入目录执行:
./blackbox_exporter - 可通过检查9115端口(程序默认,可在配置文件中修改)是否处于监听状态来验证是否启动成功
3. 配置prometheus
本例中10.10.3.22为prometheus所在的服务器,3.25~3.27是三台CH实例组成的集群,在prometheus.yml配置文件中新增如下配置:
- job_name: 'ch_status_check' //prometheus里对应的作业名称,可自定义
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets: ['10.10.3.25:8123','10.10.3.26:8123','10.10.3.27:8124'] //8123端口是clickhouse提供的http通信端口,8124是我故意写错做测试的
labels:
instance: 'ch_status'
group: 'http'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 10.10.3.22:9115 //9115是上面blackbox-exporter提供的端口
然后重启promethues服务,可访问:http://10.10.3.22:8091/targets查看状态。 注:这个地方似乎页面上有个bug,8124的这个它也显示的是up,但是后面读到的指标确实正确的。
4. grafana制作
grafana连接上文prometheus的数据源,和状态相关的指标是probe_success,使用Stat类型的图表来做呈现,如下配置:
5. 拓展
基于此方法,还可以在监控仪表盘上加上CH实例各个tcp端口状态、zookeeper节点状态等。
|