跳转到主内容
跳转到主内容

连接 Splunk 与 ClickHouse

ClickHouse Supported
提示

想将 ClickHouse 审计日志存储到 Splunk 中?请按照“将 ClickHouse Cloud 审计日志存入 Splunk”指南操作。

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 的仪表板:

显示纽约出租车数据可视化的 Splunk 仪表板
注意

本指南使用的是 New York City Taxi 数据集。您还可以从我们的文档中使用许多其他数据集。

前提条件

在开始之前,需要准备:

  • 可用于执行搜索头(search head)功能的 Splunk Enterprise
  • 在操作系统或容器中安装满足要求的 Java Runtime Environment (JRE)
  • Splunk DB Connect
  • 对 Splunk Enterprise 操作系统实例的管理员权限或 SSH 访问权限
  • ClickHouse 连接信息(如果你使用的是 ClickHouse Cloud,参见此处

在 Splunk Enterprise 上安装并配置 DB Connect

必须先在 Splunk Enterprise 实例上安装 Java Runtime Environment。如果使用 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,然后点击保存并重置。

Splunk DB Connect 设置页面,展示 Java Home 配置

为 ClickHouse 配置 JDBC

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

$SPLUNK_HOME/etc/apps/splunk_app_db_connect/drivers

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

- 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 中的连接类型配置,在其中添加 ClickHouse JDBC Driver 类的相关信息。将以下配置节添加到 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 应用,依次进入 Configuration > Settings > Drivers。现在应当能在 ClickHouse 旁边看到一个绿色对勾标记:

Splunk DB Connect drivers page showing ClickHouse driver successfully installed

将 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 连接。

注意

如果出现错误,请确认已将 Splunk 实例的 IP 地址添加到 ClickHouse Cloud 的 IP 访问列表中。更多信息请参见文档

运行 SQL 查询

现在我们将运行一个 SQL 查询来验证一切是否正常工作。

在 DB Connect App 的 DataLab 部分中,在 SQL Explorer 中选择连接信息。本演示使用 trips 表:

Splunk SQL Explorer 中选择连接到 ClickHouse

trips 表执行一个 SQL 查询,以返回表中所有记录的总数:

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

如果查询执行成功,应当能够看到结果。

创建一个仪表板

让我们创建一个结合 SQL 与强大 Splunk Processing Language(SPL)的仪表板。

在继续之前,必须先停用 DPL 安全防护

运行以下查询,以查看上车次数最频繁的前 10 个社区(neighborhood):

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

选择 “Visualization” 选项卡以查看创建的柱状图:

Splunk 柱状图可视化,显示前 10 个上车区域

现在通过点击 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 仪表板

时间序列数据

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 文档