Перейти к основному содержимому
Перейти к основному содержимому

Подключение Splunk к ClickHouse

ClickHouse Supported
Совет

Хотите сохранять журналы аудита ClickHouse в Splunk? Следуйте руководству "Storing ClickHouse Cloud Audit logs into Splunk".

Splunk — это популярная платформа для безопасности и обсервабилити. Это также мощный движок для поиска и построения дашбордов. Существуют сотни приложений Splunk для решения различных задач.

В случае ClickHouse мы используем Splunk DB Connect App, который обеспечивает простую интеграцию с высокопроизводительным ClickHouse JDBC-драйвером для прямого выполнения запросов к таблицам в ClickHouse.

Идеальный сценарий использования этой интеграции — когда вы применяете ClickHouse для крупномасштабных источников данных, таких как NetFlow, бинарные данные Avro или Protobuf, DNS, журналы VPC flow и другие OTel-журналы, которыми можно делиться с вашей командой в Splunk для поиска и создания дашбордов. При таком подходе данные не принимаются в индексный слой Splunk и просто запрашиваются напрямую из ClickHouse, аналогично другим интеграциям для визуализации, таким как Metabase или Superset.

Цель​

В этом руководстве мы будем использовать JDBC-драйвер ClickHouse, чтобы подключить ClickHouse к Splunk. Мы установим локальную версию Splunk Enterprise, но не будем индексировать какие‑либо данные. Вместо этого мы будем использовать функции поиска через движок запросов DB Connect.

С помощью этого руководства вы сможете создать панель мониторинга, подключенную к ClickHouse, похожую на эту:

Панель Splunk с визуализацией данных такси Нью-Йорка
Примечание

В этом руководстве используется набор данных New York City Taxi. Также вы можете использовать многие другие наборы данных из нашей документации.

Предварительные требования

Перед началом работы вам потребуется:

  • Splunk Enterprise для использования функций search head
  • Установленная в вашей ОС или контейнере Java Runtime Environment (JRE), соответствующая указанным требованиям
  • Splunk DB Connect
  • Права администратора или SSH-доступ к экземпляру ОС, на котором запущен Splunk Enterprise
  • Параметры подключения к ClickHouse (см. здесь, если вы используете ClickHouse Cloud)

Установка и настройка DB Connect в Splunk Enterprise

Сначала необходимо установить Java Runtime Environment на экземпляр Splunk Enterprise. Если вы используете Docker, можно выполнить команду microdnf install java-11-openjdk.

Определите и зафиксируйте путь к java_home: java -XshowSettings:properties -version.

Убедитесь, что приложение DB Connect установлено в Splunk Enterprise. Его можно найти в разделе Apps веб-интерфейса Splunk:

  • Войдите в Splunk Web и перейдите в Apps > Find More Apps
  • Используйте поле поиска, чтобы найти DB Connect
  • Нажмите зелёную кнопку «Install» рядом со Splunk DB Connect
  • Нажмите «Restart Splunk»

Если у вас возникают проблемы с установкой приложения DB Connect, дополнительные инструкции см. по этой ссылке.

После того как вы убедились, что приложение DB Connect установлено, добавьте путь java_home в приложение DB Connect в разделе Configuration -> Settings и нажмите «Save», затем «Reset».

Страница настроек Splunk DB Connect с конфигурацией Java Home

Настройка JDBC для ClickHouse

Скачайте JAR-файл драйвера ClickHouse JDBC и скопируйте его в каталог 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, чтобы добавить сведения о классе драйвера JDBC для ClickHouse. Добавьте в 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 с помощью команды $SPLUNK_HOME/bin/splunk restart.

Вернитесь в приложение DB Connect и перейдите в Configuration > Settings > Drivers. Вы должны увидеть зелёную галочку рядом с ClickHouse:

Страница драйверов Splunk DB Connect, на которой показано, что драйвер ClickHouse успешно установлен

Подключение поиска Splunk к ClickHouse

Перейдите в раздел DB Connect App Configuration -> Databases -> Identities и создайте Identity для подключения к вашему ClickHouse.

Создайте новое подключение к ClickHouse в разделе Configuration -> Databases -> Connections и выберите "New Connection".

Кнопка создания нового подключения в Splunk DB Connect

Укажите параметры хоста ClickHouse и убедитесь, что опция "Enable SSL" включена:

Страница настройки подключения Splunk к ClickHouse

После сохранения подключения вы успешно подключите Splunk к ClickHouse!

Примечание

Если возникает ошибка, убедитесь, что вы добавили IP-адрес своего экземпляра Splunk в ClickHouse Cloud IP Access List. Дополнительную информацию см. в документации.

Выполнение SQL-запроса

Теперь мы выполним SQL-запрос, чтобы проверить, что всё работает.

Выберите параметры подключения в SQL Explorer в разделе DataLab приложения DB Connect. В этом примере мы используем таблицу trips:

Splunk SQL Explorer, выбор подключения к ClickHouse

Выполните SQL-запрос к таблице trips, который возвращает количество записей в таблице:

Выполнение SQL-запроса в Splunk, показывающее количество записей в таблице trips

Если запрос выполнен успешно, вы должны увидеть результаты запроса.

Создайте дашборд

Давайте создадим дашборд, который использует сочетание SQL и мощного Splunk Processing Language (SPL).

Прежде чем продолжить, необходимо сначала отключить защитные механизмы DPL.

Выполните следующий запрос, который показывает 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, показывающая 10 лучших районов посадки

Теперь создадим дашборд, нажав Save As > Save to 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.