介绍

集群监控对于一个生产应用的重要性不言而喻。今天我们就来看下clickhouse集群监控的实践。对于还不熟悉clickhouse相关组件的朋友,本节有必要先介绍一些工具。

chproxy

首先在使用ck集群时,我们通常会利用到 chproxy 这个开源的代理工具,主要用于负载均衡、并发控制、用户权限控制等操作。

grafana

grafana支持多种数据源,丰富的图表展示,是一款美观、强大的可视化监控指标展示工具。

prometheus

监控需要我们采集系统数据,那么源源不断采集的数据我们也需要有个地方进行存储,所以这里采用prometheus这款优秀的时序数据库

安装配置

chproxy

  • 下载
    我们在releases中选择最新的版本。
# 下载
wget https://github.com/Vertamedia/chproxy/releases/download/v1.14.0/chproxy-linux-amd64-v1.14.0.tar.gz

# 解压
tar zxvf chproxy-linux-amd64-v1.14.0.tar.gz
  • 配置
    然后新建一个配置文件config.ymlgithub 中有样例配置参考。
    我这里配置两个节点,用户名是default,密码为空。可以自定义监听的端口,我这里配置的19000,后续的prometheus中会用到。
# config.yml简单配置,
server:
  http:
      listen_addr: ":19000"
      allowed_networks: ["192.168.9.225","192.168.9.226"]

users:
  - name: "default"
    to_cluster: "dc_sit"
    to_user: "default"
    password: "" 


clusters:
  - name: "dc_sit"

    nodes: [
      "dc-sit-225:8123",
      "dc-sit-226:8123"
    ]

    heartbeat_interval: 30s

    users:
      - name: "default"
        password: ""
  • 启动
    命令:./chproxy -config=config.yml
    如果日志打印如下successful则为正常启动。否则根据提示处理下异常。
INFO: 2020/05/12 04:58:13 main.go:53: Loading config "config.yml": successful
INFO: 2020/05/12 04:58:13 main.go:152: Serving http on ":19000"
  • 测试
# 外网限制
sun_mac:~ sun$  echo 'SELECT 1' | curl 'http://dc-sit-225:19000/?user=default' --data-binary @-
http connections are not allowed from 192.168.64.49:62164

# 内网通过
[root@dc-sit-225 ~]# echo 'SELECT 1' | curl 'http://dc-sit-225:19000/?user=default' --data-binary @-
1
  • chproxy去除网络限制
    默认情况下chproxy是有安全检查的,因为代理中配置账号密码,对allowed_networks: ["0.0.0.0/0"]这种开放网络是限制不推荐的。但如果自己来保证网络安全的话,也可以通过在最外层配置hack_me_please: true来禁用所有与安全相关的检查。这样注释掉之前allowed_networks配置,就可以实现对外开放了。这个部分github上有说明。

prometheus

wget https://github.com/prometheus/prometheus/releases/download/v2.18.1/prometheus-2.18.1.linux-amd64.tar.gz
  • 配置
    解压后修改配置文件prometheus.yml,主要修改scrape_configs部分配置,这里的命名我们指定clickhouse-chproxy

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'clickhouse-chproxy'
    scrape_interval: 10s
    static_configs:
    - targets: ['dc-sit-225:19000']
      labels:
          instance: 'dc_sit'
  • 启动
    命令:./prometheus --config.file=prometheus.yml
  • 校验
    启动后打开 http://localhost:9090/targets,查看chproxy状态是否正常。
    在这里插入图片描述

grafana

  • 安装
    grafana我们可以采用简洁的docker安装。
# 获取镜像
docker pull grafana/grafana
# 后台启动容器,将23000映射到容器的3000
docker run -d -p 23000:3000 --name=my-grafana -v /data/grafana:/var/lib/grafana grafana/grafana

监控配置

配置DataSources

设置 -> Data Sources -> Add data source -> 选择prometheus类型。
在这里插入图片描述

  • settings
    根据自身配置修改,我这里命名的Prometheus-225,然后Save & Test
    在这里插入图片描述

导入模板

首先下载chproxy的exporter模板,保存为chproxy.json。之前在grafana中选择 + 号import,
在这里插入图片描述
名称可以自定义、prometheus数据源选择上面我们配置的Prometheus-225,然后导入。
在这里插入图片描述

查看效果

dashboard可以看到各时段的请求数、请求时长、用户并发数、各节点状态等多项指标。非常方便我们获取到集群的运行状况。
在这里插入图片描述

结尾

因为控制篇幅的因素,本节主要描述集群监控部分。还有些重要的模块、如prometheus提供的报警组件alertmanager,报警hook服务等之后再介绍。
另外grafana和prometheus的组合还常用来监控集群各节点的状态,node_exporter,以及clickhouse单个组件监控clickhouse_exporter,如果上述集群能配置出来,相信单个节点大家也不会有太大问题。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐