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

连接 Splunk 到 ClickHouse

Splunk 是一种流行的安全和可观测性技术。它也是一个强大的搜索和仪表板引擎。有数百个 Splunk 应用程序可用于解决不同的用例。

对于 ClickHouse,我们特别利用了 Splunk DB Connect App,它与高性能 ClickHouse JDBC 驱动程序进行了简单集成,可以直接查询 ClickHouse 中的表。

此集成的理想用例是当您将 ClickHouse 用于大型数据源时,例如 NetFlow、Avro 或 Protobuf 二进制数据、DNS、VPC 流日志和其他 OTEL 日志,这些日志可以与您的团队在 Splunk 上共享,以进行搜索和创建仪表板。通过使用这种方法,数据不会被摄取到 Splunk 索引层中,而是直接从 ClickHouse 查询,类似于其他可视化集成,例如 MetabaseSuperset

目标​

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

通过本指南,您将能够创建一个连接到 ClickHouse 的仪表板,类似于这样

Splunk 1

注意

本指南使用 纽约市出租车数据集。您可以从 我们的文档 中使用许多其他数据集。

先决条件

在开始之前,您需要

  • Splunk Enterprise 以使用搜索头功能
  • Java 运行时环境 (JRE) 要求安装在您的操作系统或容器上
  • Splunk DB Connect
  • 对您的 Splunk Enterprise OS 实例的管理员或 SSH 访问权限
  • ClickHouse 连接详细信息(如果您正在使用 ClickHouse Cloud,请参阅 此处

在 Splunk Enterprise 上安装和配置 DB Connect

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

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

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

  • 登录到 Splunk Web 并转到 Apps > Find More Apps
  • 使用搜索框查找 DB Connect
  • 单击 Splunk DB Connect 旁边的绿色“Install”按钮
  • 单击“Restart Splunk”

如果您在安装 DB Connect App 时遇到问题,请参阅 此链接 以获取更多说明。

一旦您验证 DB Connect App 已安装,请将 java_home 路径添加到 Configuration -> Settings 中的 DB Connect App,然后单击“save”然后“reset”。

Splunk 2

为 ClickHouse 配置 JDBC

ClickHouse JDBC 驱动程序 下载到 DB Connect Drivers 文件夹,例如

$SPLUNK_HOME/etc/apps/splunk_app_db_connect/drivers

然后,您必须编辑 $SPLUNK_HOME/etc/apps/splunk_app_db_connect/default/db_connection_types.conf 的连接类型配置,以添加 ClickHouse JDBC 驱动程序类详细信息。

将以下节添加到文件中

[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 3

将 Splunk Search 连接到 ClickHouse

导航到 DB Connect App Configuration -> Databases -> Identities:为您的 ClickHouse 创建一个身份。

从 Configuration -> Databases -> Connections 创建到 ClickHouse 的新连接,然后选择“New Connection”。


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

Splunk 5

保存连接后,您将成功连接到 ClickHouse 到 Splunk!

注意

如果您收到错误,请确保您已将 Splunk 实例的 IP 地址添加到 ClickHouse Cloud IP 访问列表。有关更多信息,请参阅 文档

运行 SQL 查询

我们现在将运行 SQL 查询以测试一切正常。

从 DB Connect App 的 DataLab 部分选择 SQL Explorer 中的连接详细信息。我们在此演示中使用 trips

Splunk 6

trips 表上执行 SQL 查询,该查询返回表中所有记录的计数

Splunk 7

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

创建仪表板

让我们创建一个仪表板,该仪表板利用 SQL 和强大的 Splunk 处理语言 (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"

选择可视化选项卡以查看创建的柱状图

Splunk 8

我们现在将通过单击“Save As”>“Save to a Dashboard”来创建一个仪表板。

让我们添加另一个查询,显示基于乘客数量的平均票价。

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

这次,让我们创建一个条形图可视化并将其保存到之前的仪表板。

Splunk 9

最后,让我们添加另一个查询,显示乘客数量与行程距离之间的相关性

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 10

时间序列数据

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