原由与方案
为了更好地优化clickhouse的性能,需要对clickhouse集群进行监控。网上很多监控方案都是clickhouse + grafana + prometheus,因此打算使用此方案。
要想使用prometheus就得先安装exporter,clickhouse有第三方提供的clickhouse_exporter,也有容器版本,并且提供了grafana的dashboard版本: https://grafana.net/dashboards/882。由于我们在集群中使用了代理CHproxy,但CHproxy也同时实现了exporter的功能,并且提供了更多的特性以及grafana dashboard模板https://github.com/Vertamedia/chproxy/blob/master/chproxy_overview.json,所以我们也就直接使用。
安装部署
我们使用了docker进行部署,并且使用docker-compose进行编排,并且将配置文件和重要数据挂载到宿主机。
docker-compose如下:
1 | version: '3' |
CHproxy的配置文件config.xml
,省略,参考上篇文章。
prometheus的配置文件prometheus.xml
如下:
1 | my global config |
可通过http://ip:9090/targets
查看prometheus配置文件中配置的job是否成功。
请注意:
- 因为docker-compose中使用的网络模式为
host
,所以在prometheus的配置文件中ip地址都写为localhost
,并且要填上对应容器的端口。 - grafana容器可将
/var/lib/grafana
和/etc/grafana
目录拷贝出来放到宿主机上并且重新挂载到容器中这样的话删除并且重启容器时不会导致数据丢失。docker-compose中grafana和prometheus容器可能需要将user
设为root
,这样的话当宿主机的用户为root
时就有权限写mount的目录。 - 当通过docker-compose编排好之后,通过’http://ip:3000'登录grafana,并且配置好prometheus数据源,再将dashboard模板https://github.com/Vertamedia/chproxy/blob/master/chproxy_overview.json导入之后发现没有数据,连左上角的job下拉框都没有任何数据。然后我通过当前dashboard的`Variables`发现下拉框job的内容是通过prometheus中`go_info`来获取的,但是我通过promql查询`go_info`中没有`prometheus.yml`中配置的`-job_name`为`clickhouse-chproxy`的内容。但是我发现`go_goroutines`中有,于是我将`go_info`替换成了`go_goroutines`。
- 经过测试返现只有CHproxy至少经过一次的使用查询之后
go_goroutines
中才有-job_name
为clickhouse-chproxy
的内容,其他metrics也是才会出现。
go_goroutines
go_info没有别的信息,需要使用接口发送一次查询
grafana mount 需要 root user 当前host 为root
题外话
我直接在grafana容器中安装了clickhouse DataSource插件,并且制作成了镜像,这样的话grafana也可以直接查询clickhouse了哦,参考:https://github.com/Vertamedia/clickhouse-grafana,https://grafana.com/plugins/vertamedia-clickhouse-datasource/installation。