Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

将 Splunk 连接到 ClickHouse

支持 ClickHouse

Splunk 是一种流行的安全与可观测性技术,也是一款强大的搜索和仪表盘引擎。Splunk 提供了数百种应用,可满足不同的使用场景。

对于 ClickHouse,我们使用 Splunk DB Connect App,它可通过简单集成接入高性能的 ClickHouse JDBC 驱动,从而直接查询 ClickHouse 中的表。

这种集成最适合以下场景:你使用 ClickHouse 存储大型数据源,例如 NetFlow、Avro 或 Protobuf 二进制数据、DNS、VPC 流日志以及其他 OTel 日志,并希望在 Splunk 中与团队共享这些数据,用于搜索和创建仪表盘。采用这种方式时,数据不会被摄取到 Splunk 的索引层,而是像 MetabaseSuperset 这类其他可视化集成一样,直接从 ClickHouse 查询。

目标​

在本指南中,我们将使用 ClickHouse JDBC 驱动将 ClickHouse 连接到 Splunk。我们会安装 Splunk Enterprise 的本地版本,但不会为任何数据建立索引;相反,我们将通过 DB Connect 查询引擎使用其搜索功能。

通过本指南,您将能够创建一个连接到 ClickHouse 的仪表盘,效果类似于下图:

显示 NYC 出租车数据可视化的 Splunk 仪表盘

前置条件

开始之前,您需要准备:

  • 用于使用搜索头功能的 Splunk Enterprise
  • 在您的操作系统或容器中安装满足要求的 Java 运行时环境 (JRE)
  • Splunk DB Connect
  • 对您的 Splunk Enterprise 操作系统实例具有管理员权限或 SSH 访问权限
  • ClickHouse 连接信息 (如果您使用的是 ClickHouse Cloud,请参见此处)

在 Splunk Enterprise 上安装并配置 DB Connect

你必须先在 Splunk Enterprise 实例上安装 Java 运行时环境。如果你使用 Docker,可以使用命令 microdnf install java-11-openjdk

记下 java_home 路径:java -XshowSettings:properties -version

确保已在 Splunk Enterprise 上安装 DB Connect App。你可以在 Splunk Web UI 的 Apps 部分找到它:

  • 登录 Splunk Web,然后前往 Apps > Find More Apps
  • 使用搜索框查找 DB Connect
  • 点击 Splunk DB Connect 旁边绿色的“Install”按钮
  • 点击“Restart Splunk”

如果你在安装 DB Connect App 时遇到问题,请参阅此链接了解更多说明。

确认 DB Connect App 已安装后,在 Configuration -> Settings 中将 java_home 路径添加到 DB Connect App,然后点击 save,再点击 reset。

显示 Java Home 配置的 Splunk DB Connect 设置页面

为 ClickHouse 配置 JDBC

下载 ClickHouse JDBC 驱动 JAR 文件,并将其复制到以下路径中的 DB Connect Drivers 文件夹:

$SPLUNK_HOME/etc/apps/splunk_app_db_connect/drivers

为确保 DB Connect App 能使用所有必需的依赖项,请下载以下任一项:

- clickhouse-jdbc-<VERSION>-shaded-all.jar (if VERSION < 0.9.0)
- clickhouse-jdbc-<VERSION>-all-dependencies.jar (if VERSION >= 0.9.0)

然后,您必须编辑位于 $SPLUNK_HOME/etc/apps/splunk_app_db_connect/local/db_connection_types.conf 的 connection types configuration,加入 ClickHouse JDBC 驱动类的详细信息。将以下配置段添加到 db_connection_types.conf 中:

[ClickHouse]
displayName = ClickHouse
serviceClass = com.splunk.dbx2.DefaultDBX2JDBC
jdbcUrlFormat = jdbc:ch://<host>:<port>/<database>
jdbcUrlSSLFormat = jdbc:ch://<host>:<port>/<database>?ssl=true
jdbcDriverClass = com.clickhouse.jdbc.ClickHouseDriver
ui_default_catalog = $database$

使用 $SPLUNK_HOME/bin/splunk restart 重启 Splunk。

返回 DB Connect App,然后依次进入 Configuration > Settings > Drivers。你应该会在 ClickHouse 旁边看到一个绿色对勾:

Splunk DB Connect 驱动程序页面,显示 ClickHouse 驱动已成功安装

将 Splunk 搜索连接到 ClickHouse

前往 DB Connect App Configuration -> Databases -> Identities:为 ClickHouse 创建一个 Identity。

在 Configuration -> Databases -> Connections 中新建一个到 ClickHouse 的连接,并选择“New Connection”。

Splunk DB Connect 新建连接按钮

添加 ClickHouse 主机详细信息,并确保已勾选“Enable SSL”:

ClickHouse 的 Splunk 连接配置页面

保存该连接后,即表示已成功将 Splunk 连接到 ClickHouse!

运行 SQL 查询

现在我们将运行一条 SQL 查询,测试一切是否正常。

在 DB Connect App 的 DataLab 部分中,在 SQL Explorer 里选择你的连接信息。这里我们使用 trips 表进行演示:

在 Splunk SQL Explorer 中选择到 ClickHouse 的连接

trips 表上执行一条 SQL 查询,返回该表中的记录总数:

Splunk SQL 查询执行,显示 trips 表中的记录总数

如果查询成功,你应该会看到结果。

创建仪表盘

我们来创建一个仪表盘,结合使用 SQL 和强大的 Splunk Processing Language (SPL)。

继续之前,必须先停用 DPL Safeguards

运行以下查询,查看接载最频繁的前 10 个街区:

dbxquery query="SELECT pickup_ntaname, count(*) AS count
FROM default.trips GROUP BY pickup_ntaname
ORDER BY count DESC LIMIT 10;" connection="chc"

选择 visualization 选项卡,查看已创建的柱状图表:

显示前 10 个上车街区的 Splunk 柱状图表可视化

现在,点击 Save As > Save to a Dashboard,将其保存到仪表盘中。

让我们再添加一个查询,根据乘客数量显示平均车费。

dbxquery query="SELECT passenger_count,avg(total_amount)
FROM default.trips GROUP BY passenger_count;" connection="chc"

这次,我们来创建一个柱状图,并将其保存到前面的仪表盘中。

显示按乘客数量统计平均车费的 Splunk 柱状图

最后,我们再添加一个查询,用于展示乘客数量与行程距离之间的相关性:

dbxquery query="SELECT passenger_count, toYear(pickup_datetime) AS year,
round(trip_distance) AS distance, count(* FROM default.trips)
GROUP BY passenger_count, year, distance
ORDER BY year, count(*) DESC; " connection="chc"

最终的仪表盘应如下所示:

最终的 Splunk 仪表盘,包含 NYC 出租车数据的多个可视化图表

时序数据

Splunk 内置了数百个函数,仪表盘可使用这些函数对时序数据进行可视化和呈现。本示例将结合 SQL + SPL,创建一个可用于处理 Splunk 中时序数据的查询

dbxquery query="SELECT time, orig_h, duration
FROM "demo"."conn" WHERE time >= now() - interval 1 HOURS" connection="chc"
| eval time = strptime(time, "%Y-%m-%d %H:%M:%S.%3Q")
| eval _time=time
| timechart avg(duration) as duration by orig_h
| eval duration=round(duration/60)
| sort - duration:

了解更多

如果您想进一步了解 Splunk DB Connect 以及如何构建仪表盘,请访问 Splunk 文档

Navigation