由于项目需要监控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查看状态。

grafana 显示 grafana 显示全部节点状态_监控类


注:这个地方似乎页面上有个bug,8124的这个它也显示的是up,但是后面读到的指标确实正确的。

4. grafana制作

grafana连接上文prometheus的数据源,和状态相关的指标是probe_success,使用Stat类型的图表来做呈现,如下配置:

grafana 显示 grafana 显示全部节点状态_服务器_02

5. 拓展

基于此方法,还可以在监控仪表盘上加上CH实例各个tcp端口状态、zookeeper节点状态等。