统一观测|借助 Prometheus 监控 ClickHouse 数据库

news2024/11/15 17:34:39

引言

ClickHouse 作为用于联机分析(OLAP)的列式数据库管理系统(DBMS), 最核心的特点是极致压缩率和极速查询性能。同时,ClickHouse 支持 SQL 查询,在基于大宽表的聚合分析查询场景下展现出优异的性能。因此,获得了广泛的应用。本文旨在分享阿里云可观测监控 Prometheus 版对开源 ClickHouse 的监控实践。

一、ClickHouse 简介

(一)技术特点

  • 列式存储与数据压缩:

在执行数据查询时,列式存储可以减少数据扫描范围和数据传输大小,提高数据查询的效率。

  • 完备的 DBMS 功能
    • DDL (数据定义语言):可以动态地创建、修改或删除数据库、表和视图,而无须重启服务;
    • DML(数据操作语言):可以动态查询、插入、修改或删除数据。
  • 权限控制:

可按照用户粒度设置数据库或表的操作权限,保障数据安全性。

  • 数据备份与恢复

提供数据备份导出与导入恢复机制,满足生产环境要求。

  • 分布式管理

提供集群模式,自动管理多个数据库节点。

(二)ClickHouse 典型适用场景

  • 复杂查询聚合的 OLAP 场景;
  • 需要支持稳定大量数据写入;
  • 不需要高频查询;
  • 不需要高级 DBMS 功能,如事务性;不需要经常很复杂的表间操作,比如 join 操作。

(三)ClickHouse 核心概念

  • ClickHouse 集群(Cluster)

在物理构成上,ClickHouse 集群是由多个 ClickHouse Server 实例组成的分布式数据库。这些 ClickHouse Server 根据规格的不同可以包含 1 个或多个副本(Replica)、1 个或多个分片(Shard)。在逻辑构成上,一个ClickHouse 集群可以包含多个数据库(Database)对象。

  • 分片(Shard)

在超大规模海量数据处理场景下,单台服务器的存储、计算资源会成为瓶颈。为了进一步提高效率,ClickHouse 将海量数据分散存储到多台服务器上,每台服务器只存储和处理海量数据的一部分,在这种架构下,每台服务器被称为一个分片(Shard)。

  • 副本(Replica)

为了在异常情况下保证数据的安全性和服务的高可用性,ClickHouse 提供副本机制,将单台服务器的数据冗余存储在2台或多台服务器上。

  • 数据库(Database)

数据库是云数据库 ClickHouse 集群中的最高级别对象,内部包含表(Table)、列(Column)、视图(View)、函数、数据类型等。

  • 表(Table)

表是数据的组织形式,由多行、多列构成。

二、ClickHouse Metrics 监控参考模型

我们从 Metrics 采集、监控大盘、告警规则等三个方面定义 ClickHouse Metrics 监控的参考模型,以便实现监控闭环。

(一)Metrics 采集

  • 主机节点监控即硬件资源(Node-Exporter)
    • 处理器、内存负载;
    • 磁盘存储;
  • ClickHouse 服务指标监控(集成进 ClickHouse-Exporter)
    • 系统指标(metrics): system.metrics 表用于统计 ClickHouse 服务在运行时,当前正在执行的高层次的概要信息,包括了正在执行的查询总次数、正在发生的合并操作总次数等。具体指标通过执行select * from system.metrics
    • 系统事件(events):system.events 用于统计 ClickHouse 服务在运行过程中已经执行过的高层次的 累积概要信息,包括查询总次数、 SELECT 查询总次数等,具体指标通过执行查询select * from system.events–> 64个指标;
    • 系统异步指标(asynchronous_ metrics):asynchronous_metrics 用于统计 ClickHouse 服务运行过程时,当前正在后台 异步运行的高层次的概要信息,包括当前分配的内存、执行队列中的任务数量等。 具体指标通过执行查询select * from system.asynchronous_metrics --> 500个指标;
    • 查询日志:查询日志目前主要有6种类型,所有查询日志在默认配置下都是关闭状态,需要在 config.xml文件配置,开启日志后可以到对应的日志表进行日志查询system.query_log

(1)主机节点监控

该部分指标主要来源于 Node-Exporter , 提供集群/ ECS 节点 CPU、内存、磁盘、inode 等监控指标。

image.png

(2)ClikcHouse 服务指标

ClikckHouse 内置 Metrics、events 和 asynchronous_metrics 三张系统表用于存放其监控指标,通过预先安装 clickhouse-exporter 将这三张系统表中的数据转化、发送给阿里云可观测监控 Prometheus 版。

image.png

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HnNhT8a5-1690884166323)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4751cbf35ce647358882850f99c9107c~tplv-k3u1fbpfcp-watermark.image?)]

image.png

image.png

⚠️注意: 以上列出的为关键指标,更多详细指标详见: 应用实时监控服务ARMS控制台-Prometheus监控-Prometheus实例列表-选择实例-集成中心-ClickHouse

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eq7CbV73-1690884166324)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d8ff3a8873ab472d8643e9e6ef6f88c5~tplv-k3u1fbpfcp-watermark.image?)]

(二)ClickHouse 监控大盘

我们默认提供了arms-clickhouse-ecsarms-clickhouse-k8s两个大盘,分别针对 ClickHouse 安装在ACK 集群/ ECS 中两个场景,这两个大盘中图标均来自于上述 Metrics 指标。

⚠️注意: 主机节点监控需提前安装 Node-Exporter,以下大盘图示数值仅为展示作用,不具备参考价值,实际数值依 ClickHouse 环境而定

(1)主机节点指标

image.png

(2)ClickHouse Server指标

image.png

(3)MergeTree 指标

image.png

(4)消息队列指标

image.png

(三)告警规则

参考前面对各项主要指标介绍,针对 ClickHouse 可以重点配置以下告警项,这些告警项已内置到arms-clickhouse告警规则中,可依据自身业务情况及经验调整告警阈值:

  • 【L0】CPU 超过 90%
  • 【L0】Mem 超过 90%
  • 【L0】Disk 超过 90%
  • 【L0】Inode 使用率超过 90%
  • 【L0】写入失败率超过 5%
  • 【L1】运行 Query 个数超过 95
  • 【L1】连接数超过 4k
  • 【L1】失败 Query 个数超过 10

(四)相关实践示例

(1)CPU 过高

  • 确认 CPU 占用过高是由 ClickHouse 引起的。可以通过 top 命令top -H -p xxx查看系统的 CPU 占用率,找出占用 CPU 比较高的进程。如果发现 ClickHouse 进程占用了大量 CPU 资源,那么就需要进一步排查。
  • 使用 ClickHouse 内置查询来查看系统的状态。可以使用以下查询:
SHOW PROCESSLIST query WHERE query NOT LIKE '%SYSTEM%' ORDER BY elapsed DESC LIMIT 10

这个查询可以列出最耗时的查询,找到可能引起 CPU 占用过高的查询语句。

  • 检查 ClickHouse 配置。一些配置参数可能导致 ClickHouse 占用大量 CPU 资源。可以查看 ClickHouse 配置文件,确认配置是否合理,是否需要调整。
  • 检查 ClickHouse 日志。ClickHouse 日志中可能包含错误信息或警告信息,可以帮助找出问题所在。
  • 检查硬件资源是否充足。如果系统 CPU、内存等硬件资源不足,那么 ClickHouse 可能会出现 CPU 占用过高的情况。可以检查系统的硬件资源使用情况,确认是否需要升级硬件。
  • 升级 ClickHouse 版本。如果是 ClickHouse 版本的问题,可以考虑升级到更稳定的版本。

(2)内存过高

  • 使用内置查询查看内存占用情况。可以使用以下查询来查看 ClickHouse 系统的内存占用情况:
SELECT * FROM system.metrics WHERE metric LIKE '%memory%';

这个查询会列出 ClickHouse 的各个内存指标,包括总内存、已用内存、缓存内存等。可以根据这些指标来判断内存占用是否过高。

  • 检查 ClickHouse 的配置。一些配置参数可能会导致 ClickHouse 占用大量的内存资源。可以查看 ClickHouse 的配置文件,确认配置是否合理,是否需要调整。
  • 检查系统的内存资源使用情况。如果系统的内存资源不足,那么 ClickHouse 可能会出现内存占用过高的情况。可以使用命令free -m查看系统的内存使用情况。
  • 检查 ClickHouse 的日志。ClickHouse 的日志中可能包含错误信息或警告信息,可以帮助找出问题所在。
  • 升级 ClickHouse 版本。如果是 ClickHouse 版本的问题,可以考虑升级到更稳定的版本。
  • 减少查询语句的数据量和计算量。如果查询语句的数据量和计算量过大,那么 ClickHouse 可能会占用大量的内存资源。可以考虑优化查询语句,减少数据量和计算量。

(3)Disk 占用过高

  • 使用系统工具查看磁盘占用情况。可以使用命令 df -h 来查看系统的磁盘使用情况,查看是否有磁盘空间不足的情况。
  • 检查 ClickHouse 的配置。一些配置参数可能会导致 ClickHouse 占用大量的磁盘资源。可以查看 ClickHouse 的配置文件,确认配置是否合理,是否需要调整。
  • 使用 ClickHouse 内置的查询来查看磁盘占用情况。可以使用以下查询来查看 ClickHouse 的磁盘占用情况:
SELECT database, table, sum(bytes) AS total_size FROM system.parts WHERE active GROUP BY database, table ORDER BY total_size DESC

这个查询会列出 ClickHouse 的各个表的占用磁盘空间情况,可以根据这个查询来判断磁盘占用是否过高。

  • 检查 ClickHouse 的日志。ClickHouse 的日志中可能包含错误信息或警告信息,可以帮助找出问题所在。
  • 清理不必要的数据。如果 ClickHouse 中存在不必要的数据,可以考虑进行清理,释放磁盘空间。

三、如何使用阿里云可观测监控 Prometheus 版监控ClickHouse 服务

(一)安装 Prometheus 监控

(1)前序条件:已根据安装ClickHouse 安装环境,创建对应Prometheus 实例。

根据 ClickHouse 安装方式:

  • 如果 ClickHouse 部署在 ACK 中, 并创建了Prometheus for 容器实例,创建请参考Prometheus for 容器服务
  • 如果 ClickHouse 部署在 ECS 中, 并创建了Prometheus for ECS 实例,创建请参考Prometheus for ECS

(2)安装方式一:Prometheus for 容器服务

Prometheus for 容器服务实例中,ClickHouse 已经默认在集成中心中展示,用户可以在应用实时监控服务ARMS控制台-Prometheus监控-Prometheus实例列表-选择Prometheus for 容器服务实例-集成中心中找到入口,点击 ClickHouse 图标,可以看到常见的指标列表和大盘缩略图。点击+安装可以接入 ClickHouse 监控,配置如下图:

  • Exporter 名称: 自定义 Exporter 名称;
  • ClickHouse Scrape 地址: IP + Port, Exporter 能够访问的 ClickHouse 地址 ;
  • ClickHouse 用户名: 登陆用户名;
  • ClickHouse 密码: 登陆密码;
  • Metrics 采集间隔(秒): 默认 30s 采集一次, 一般不需要更改。

image.png

点击确定后, clickhouse-exporter-填入的名称的 Exporter 会被安装到 arms-prom 命名空间下,并自动完成采集 job 的配置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GA1WKNkd-1690884166325)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f786418e6ef34e38bf36b235c00919c2~tplv-k3u1fbpfcp-watermark.image?)]

可以在应用实时监控服务ARMS控制台-Prometheus监控-Prometheus实例列表-选择Prometheus for 容器服务实例-集成中心-已安装-ClikckHouse中快速浏览相关的 Target/指标/大盘/告警/服务发现/ Exporter 等信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-po1p9fXY-1690884166326)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/19151467be0c4cfcb05491b42c772f70~tplv-k3u1fbpfcp-watermark.image?)]

(3)安装方式二:Prometheus for ECS

安装 ClickHouse 相同 VPC 的Prometheus for ECS实例,由于Prometheus for ECS实例中 ClickHouse 的主机节点监控来自于Node-Exportor,所以先安装 Node-Exportor。用户可以在

应用实时监控服务ARMS控制台-Prometheus监控-Prometheus实例列表-选择Prometheus for ECS实例-集成中心中找到入口,点击Node-Exporter图标,点击+安装可以接入 Node-Exporter 监控,然后选择对应 ECS 实例安装即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vd88MhI2-1690884166326)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/94f139bc30e348fdbbee9d46adada401~tplv-k3u1fbpfcp-watermark.image?)]

用户可以在应用实时监控服务ARMS控制台-Prometheus监控-Prometheus实例列表-选择Prometheus for ECS实例-集成中心中找到入口,点击 ClickHouse 图标,点击+安装可以接入 ClickHouse 监控,配置与上述Prometheus for 容器服务相同。

(4)指标未采集的排查方法

⚠️注意: 下面是Prometheus for 容器实例的排查方法,Prometheus for ECS实例请联系Prometheus值班-美娜

ClickHouse-Exporter 本身的主要工作是指标映射,需要填入正确 ClickHouse 抓取 URL及登陆用户名、密码。如果出现指标采集不到的问题,可以参考如下的排查思路。

  1. 检查 Prometheus Target 状态,如果 Target 显示为Unhealthy状态,请排查clickhouse-exporter Pod 运行状态;如果 Target 状态正常,继续下一步。

image.png

  1. 若 Target 状态正常,但抓取指标量很少且指标全为go_相关查看clickhouse-exporter Pod 日志,确认日志中是否有报错信息。

image.png

image.png

  1. 查看clickhouse-exporter Pod 日志,确定 Exporter 抓取目标 URL 是否正常。

image.png

(二)查看大盘

如需要查看 ClickHouse 相关大盘,可以从应用实时监控服务ARMS控制台-Prometheus监控-Prometheus实例列表-实例详情页-集成中心-已安装-ClikckHouse中点选大盘,列出两类大盘arms-clickhouse-ecsarms-clickhouse-k8s,根据环境选择对应的大盘模板。

以下是arms-clickhouse-k8sVariables 参数说明:

  • datasource : 数据源,选择对应的实例名称;
  • job: 新建 clickhouse-exporter 对应 job 名称,与 clickhouse-exporter 名称一致,用于展示ClickHouseServer 指标、MergeTree 指标、消息队列指标;
  • namespace: ClickHouse Pod 所在的命名空间,用于主机节点指标筛选;
  • Pod: 可根据需要选择对应的 ClickHouse Pod,用于主机节点指标筛选。

image.png

以下是arms-clickhouse-ecsVariables参数说明:

  • datasource: 数据源,选择对应的实例名称;
  • job: 新建的 clickhouse-exporter 对应 job 名称,与clickhouse-exporter 名称一致,用于展示ClickHouseServer 指标、MergeTree 指标、消息队列指标;
  • instance: ecs 实例 IP,用于主机节点筛选。

image.png

(三)配置告警

在集成中心安装 ClickHouse 监控时,已经默认增加了arms-clickhouse告警分组的相关规则,但未启用,您只需要简单修改参数并确认启用即可。

可以从应用实时监控服务ARMS控制台-Prometheus监控-Prometheus实例列表-实例详情页-集成中心-已安装-ClikckHouse中选择告警-创建告警规则进入规则新增页面,在其中告警分组选择arms-clickhouse告警分组并根据环境选择您需要启用的告警指标,确认参数阈值并保存,即可完成告警规则的创建。

image.png

四、自建 Prometheus 与阿里云可观测监控 Prometheus 版监控 ClickHouse 优劣对比

Prometheus 作为目前主流可观测开源项目之一,已被众多企业所广泛应用,但还会遇到不少困难与挑战:

  • 每套完整的自建观测系统都需要安装并配置 Prometheus、Grafana、AlertManager 等组件,部署过程复杂、实施周期长,并且每次升级都需要对每个组件进行维护;
  • 开源分享的相关大盘不够专业,更新速度慢,缺少开箱即用的丰富指标;
  • 由于安全、组织管理等因素,用户业务通常部署在多个相互隔离的 VPC,需要在多个 VPC 内都重复、独立部署 Prometheus,导致部署和运维成本高。

针对以上问题,阿里云可观测监控 Prometheus 版进行了以下优化:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8VBeUhSX-1690884166329)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e9e4aa28a9284725a73a048ce209d91d~tplv-k3u1fbpfcp-watermark.image?)]

结束语

阿里云可观测监控 Prometheus 版与阿里云容器服务无缝集成,提供了开源 ClickHouse 的指标采集、用户大盘、告警规则等项目的一键集成,用户免运维,开箱即用,目前 ClickHouse 指标采集功能仍在不断演进中,欢迎大家试用和提出改进意见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/823674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Golang】基于录制,自动生成go test接口自动化用例

目录 背景 框架 ginkgo初始化 抓包&运行脚本 目录说明 ∮./business ∮./conf ∮./utils ∮./testcase testcase 用例目录结构规则 示例 实现思路 解析Har数据 定义结构体 解析到json 转换请求数据 转换请求 转换请求参数 写业务请求数据 写gotest测试…

K8s总结

K8s 是什么 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的机制…

【从零开始学习JAVA | 第三十五篇】IO流综合练习

目录 前言: 1.拷贝文件(含子文件) 思路: 2.文件加密 思路: 3.修改文件中的数据: 思路: 总结: 前言: 在前面我们为大家介绍了FILE类和IO类。这篇文章我们来练习一…

SQL SERVER 中将数据表中的字段按分隔符分成多行多列

SQL SERVER 中将数据表中的字段按分隔符分成多行多列_sql按逗号拆分列为多行_帅气的苹果果的博客-CSDN博客 SELECTa.name,monitors SUBSTRING ( a.monitors, b.number, charindex( ,, a.monitors ,, b.number ) - b.number ) FROM( SELECT name, monitors FROM [dbo].[ssm_vi…

Packet Tracer - 连接有线和无线 LAN

Packet Tracer - 连接有线和无线 LAN 地址分配表 设备 接口 IP 地址 连接到 云 Eth6 N/A Fa0/0 Coax7 N/A Port0 电缆调制解调器 Port0 N/A Coax7 Port1 N/A 互联网 Router0 控制台端口 N/A RS232 Fa0/0 192.168.2.1/24 Eth6 Fa0/1 10.0.0.1/24 Fa…

安科瑞智能照明系统在医院智能建筑中应用的优势

摘要:现阶段,我国的社会经济的发展水平不断提高,为智能照明系统的发展带来了新的契机。文章主要介绍了几类智能照明系统,分析了其优点,并介绍了智能照明系统在医院建筑中的具体应用,具有一定的参考价值。 …

屏幕取色器Mac版_苹果屏幕取色工具_屏幕取色器工具

Sip for Mac 是Mac系统平台上的一款老牌的颜色拾取工具,是设计师和前端开发工作者必不可少的屏幕取色软件,你只需要用鼠标点一下即可轻松地对屏幕上的任何颜色进行采样和编码,并将颜色数据自动存到剪切板,方便随时粘贴出来。 Sip…

Linux|ubuntu下运行python

参考:ubuntu系统下切换python版本的方法 文章目录 python版本问题查看ubuntu下的所有python版本通过apt-get install可以安装不同版本python查看python版本号更新update-alternatives替代列表查看update-alternatives下的python版本切换python版本删除python版本 p…

Windows7+内网, 安装高版本nodejs,使用vite+vue3+typescript开发项目

前言:vite只支持高版本的nodejs,而高版本的nodejs只支持windows8及以上,且vite还对浏览器版本有兼容问题。以下均为vite官网截图 1、安装好低版本的nodejs win7系统建议安装13.及以下,我的是12.12.0这个版本。nodejs低版本官网下载…

20- C++ STL标准模板库-8 (C++)

第十章 10.1 基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C中,但在被引入C之前该技术就已经存在了很长的一段时间。 STL的从广义上讲分为三类:algorithm&#xff0…

【NLP初级概念】 01-稀疏文档表示(第 1/30 部分)

一、介绍 自然语言处理(NLP)是计算方法的应用,不仅可以从文本中提取信息,还可以在其上对不同的应用程序进行建模。所有基于语言的文本都有系统的结构或规则,通常被称为形态学,例如“跳跃”的过去时总是“跳跃”。对于人类来说,这种形态学的理解是显而易见的。 在这篇介…

kafka总结

Kafka是一种高吞吐量的分布式发布订阅消息系统(消息引擎系统),它可以处理消费者在网站中的所有动作流数据。 消息队列应用场景 缓存/削峰 :处理突然激增的大量数据,先放入消息队列,再按照速度去处理, 解…

技术等级 TRL 定义

“不同环境、不同目标下TRL表述不一样” 技术等级 TRL 定义 TRL1 基本原理提出和发现 TRL2 技术应用研究 TRL3 完成概念验证,如叶栅试验、燃烧室头部试验等 TRL4 完成模拟部件试验.如压气机性能试验,燃烧室扇形试验 TRL5 完…

3ds MAX 绘制喷泉

首先绘制一个小圆柱体当做喷头: 在粒子系统内选择【超级喷射】,并设置对应的参数: 轴和平面的扩散代表了我们看到的水柱能占据多大的面积 另外比较重要的参数是粒子运动和粒子计时 前者是粒子移动的时间也就是喷射的速度 后者代表了喷射出的…

渗透测试:Linux提权精讲(三)之sudo方法第三期

目录 写在开头 sudo jjs sudo journalctl sudo knife sudo less sudo man sudo more sudo mount sudo mysql sudo nano sudo neofetch sudo nice sudo nmap sudo node sudo nohup sudo openvpn sudo passwd sudo perl sudo php sudo pico sudo pkexec su…

网络知识介绍

一、TCP 传输控制协议,Transmission Control Protocol。 面向广域网的通信协议,跨域多个网络通信时,为两个通信端点之间提供一条具有如下特点的通信方式: 基于流、面向连接、可靠通信方式、网络状况不佳时尽量降低系统由于重传带…

二十三种设计模式第二十三篇--状态模式

状态模式,是一种行为模式,在软件开发过程中,对象按照不同的情况做出不同的行为,我们把这样的对象称为具有状态的对象,而把影响对象行为的一个或者多个动态变化的属性称为状态。 对这种具有状态的对象变成,…

《Java面向对象程序设计》学习笔记——第 1 章 Java入门

专栏:《Java面向对象程序设计》学习笔记

第28天-Kubernetes架构,集群部署,Ingress,项目部署,Dashboard

1.K8S集群部署 1.1.k8s快速入门 1.1.1.简介 Kubernetes简称k8s,是用于自动部署,扩展和管理容器化应用程序的开源系统。 中文官网:https://kubernetes.io/zh/中文社区:https://www.kubernetes.org.cn/官方文档:https…

git管理工具学习(图解使用git工作流程)

目录 GIT 简介一个最简单的GIT操作流程git的工作流程&命令 GIT 简介 git是什么,在维基百科上是这么介绍的:git是一个分布式的版本控制软件 分布式是相对于集中式而言的,分布式即每一个git库都是一个完整的库。 每个库的地位都是平等的&am…