OpenSearch Dashboards 是一个可视化界面,可用于浏览、可视化并为日志数据创建仪表板。它通过 HTTP API 连接到后端。Manticore 会在其 HTTP 监听端点上提供该 API,因此你可以将 OpenSearch Dashboards 指向 Manticore,并以类似于 Kibana 的方式使用 Discover、Visualize 和 Dashboards。借助此集成,你可以构建图表和仪表板,在 Discover 中执行即席搜索,并继续使用 Logstash 和 Filebeat 等熟悉的采集工具来加载日志和事件数据进行分析。
- 下载 OpenSearch Dashboards:请确保下载与 Manticore 兼容的 OpenSearch Dashboards 版本。目前,3.4.0 版本已测试并推荐使用。其他版本可能可用,但可能会引入问题。请在 Manticore 中将
kibana_version_string设置为与你的 OpenSearch Dashboards 版本一致(参见下方 配置)。 - 验证 Manticore:请确保你的 Manticore 实例正在运行,并且其 HTTP API 可访问(默认:
http://localhost:9308)。 - Manticore Buddy:请确保 Manticore Buddy 已安装并正在运行。OpenSearch Dashboards 集成由 Buddy 的 EmulateElastic 插件实现,该插件模拟 Dashboards 期望的 Elasticsearch 兼容 HTTP API(与 Kibana 走的是同一代码路径)。除非你通过
buddy_path禁用它,否则 Buddy 会随searchd自动启动。
-
打开 OpenSearch Dashboards 配置文件(
opensearch_dashboards.yml;常见路径包括 tar 包布局中的config/opensearch_dashboards.yml,或某些软件包中的/etc/opensearch-dashboards/opensearch_dashboards.yml)。 -
设置你的 Manticore 实例 URL:
opensearch.hosts: ["http://localhost:9308"]在 Docker 中运行 OpenSearch Dashboards 时,你也可以通过
OPENSEARCH_HOSTS环境变量设置相同的值。由于 Manticore 不提供 OpenSearch Security 插件,你还需要在 OpenSearch Dashboards 中禁用 security dashboards 插件:
- Docker:在容器环境中设置
DISABLE_SECURITY_DASHBOARDS_PLUGIN=true。 - Tar 包安装:先停止 OpenSearch Dashboards,然后运行:
./bin/opensearch-dashboards-plugin remove securityDashboards。之后重新启动 OpenSearch Dashboards。
有关详细信息,请参阅禁用和启用 Security 插件。
- Docker:在容器环境中设置
-
启动 OpenSearch Dashboards,并在浏览器中打开
http://localhost:5601。如有需要,请将localhost替换为你的服务器 IP 或主机名。
注意:要与 OpenSearch Dashboards 集成,Manticore 必须工作在实时模式下。
将 kibana_version_string 设置为与你安装的 OpenSearch Dashboards 相同的版本。OpenSearch Dashboards 会检查 Manticore 返回的后端版本,如果版本不匹配,可能会显示警告或无法启动。
searchd {
listen = 127.0.0.1:9308:http
pid_file = /var/run/manticore/searchd.pid
data_dir = /var/lib/manticore
kibana_version_string = 3.4.0
}
- 使用 Discover 选项卡可在 Manticore 表中交互式搜索和筛选文档。
- 转到 Visualizations 以创建自定义可视化:
- 创建一个与 Manticore 表名匹配的 索引模式。
- 选择一种可视化类型(例如柱状图、折线图或饼图),其底层依赖于受支持的聚合:
terms、histogram、date_histogram、range、date_range,以及指标聚合max、min、sum、avg。 - 配置你的可视化,执行它,并浏览你的数据。
- 保存可视化以便日后使用。
- 进入 Dashboards 以创建或查看交互式仪表板:
- 添加已保存的可视化、筛选器或控件,获得个性化体验。
- 直接在仪表板中与你的数据交互。
- 保存仪表板以便日后使用。
- 使用 Management > Dashboards Management 管理索引模式和已保存对象(可视化、仪表板)。
- Dashboards 启动所需的堆栈级请求会被模拟(node 版本、集群设置、配置对象、索引列表)。针对 Manticore 无法进行完整的 OpenSearch 集群管理。
- 目前,OpenSearch Dashboards 3.4.0 版本已测试并推荐使用。其他版本可能可用,但可能会引发问题。你必须在 Manticore 中将
kibana_version_string设置为与你使用的 OpenSearch Dashboards 版本一致。 - 以下 OpenSearch 字段类型 不受支持:
- 地理字段类型 (
geo_point,geo_shape) - 笛卡尔字段类型 (
xy_point,xy_shape) - 范围字段类型 (
integer_range,long_range,double_range,float_range,ip_range,date_range) - 专用搜索字段类型 (
semantic,rank_feature,rank_features,percolator,star_tree,derived) - 向量字段类型 (
knn_vector,sparse_vector) - 自动完成字段类型 和 高级字符串字段类型(
completion、search_as_you_type、match_only_text,以及类似类型;普通text和keyword受支持) - 关系字段类型 (
nested、join)
- 地理字段类型 (
- 指标聚合函数仅限于 Manticore 支持的函数。
- 不支持嵌套聚合(
aggs里面再嵌套aggs)。 - 高级 Dashboards Query Language (DQL) 功能(嵌套字段搜索、正则表达式、模糊搜索、邻近搜索、词项提升等)在 Manticore 上可能无法正常工作。
- 以下 OpenSearch Dashboards 工具和插件不受支持:
- Geospatial(依赖地理字段类型的地图可视化)
- Observability – 用于监控基础设施指标、浏览日志和追踪分析的应用
- Alerting – 面向 OpenSearch API 的监视器、触发器和通知
- Anomaly Detection – 用于检测时序数据异常值的探测器
- Security Analytics – 用于威胁检测和调查的 SIEM 工作流
- 监控:
- Index State Management – 自动化索引生命周期策略
- Performance Analyzer – 集群性能指标和根因分析
- Index Management – 用于管理 OpenSearch 索引、模板、别名和生命周期设置的界面
- Security plugin 流程 - 在 Manticore 上不可用
将 Manticore 与 Logstash、Filebeat、Fluentbit 或 Vector.dev 等工具集成,即可从 Web 日志等来源采集数据。数据加载到 Manticore 之后,你就可以在 OpenSearch Dashboards 中对其进行探索和可视化。
NOTE: 此功能需要 Manticore Buddy。如果不起作用,请确保已安装 Buddy。
Manticore 支持通过 Kafka 源和物化视图与 Apache Kafka 实时数据摄取集成,允许实时数据索引和搜索。目前,apache/kafka 版本 3.7.0-4.1.0 已经过测试并支持。
要开始,请执行以下步骤:
- 定义源: 指定 Manticore Search 将从中读取消息的 Kafka 主题。此设置包括有关代理的主机、端口和主题名称的详细信息。
- 设置目标表: 选择一个 Manticore 实时表来存储传入的 Kafka 数据。
- 创建物化视图: 设置物化视图 (
mv) 以处理从 Kafka 到 Manticore Search 目标表的数据转换和映射。在这里,您将定义字段映射、数据转换以及传入数据流中的任何过滤器或条件。
source 配置允许您定义 broker、主题列表、消费者组 以及消息结构。
使用 Manticore 字段类型(如 int、float、text、json 等)定义模式。
CREATE SOURCE <source name> [(column type, ...)] [source_options]
所有模式键都是大小写不敏感的,这意味着 Products、products 和 PrOdUcTs 被视为相同的。它们都会转换为小写。
如果您的字段名不符合 Manticore Search 允许的 字段名语法(例如,包含特殊字符或以数字开头),则必须定义模式映射。例如,$keyName 或 123field 是 JSON 中的有效键,但在 Manticore Search 中不是有效的字段名。如果您尝试使用无效的字段名而没有适当的映射,Manticore 将返回错误并导致源创建失败。
要处理此类情况,请使用以下模式语法将无效字段名映射到有效字段名:
allowed_field_name 'original JSON key name with special symbols' type
例如:
price_field '$price' float -- maps JSON key '$price' to field 'price_field'
field_123 '123field' text -- maps JSON key '123field' to field 'field_123'
- SQL
- JSON
CREATE SOURCE kafka
(id bigint, term text, abbrev '$abbrev' text, GlossDef json)
type='kafka'
broker_list='kafka:9092'
topic_list='my-data'
consumer_group='manticore'
num_consumers='2'
batch=50POST /sql?mode=raw -d "CREATE SOURCE kafka (id bigint, term text, abbrev '$abbrev' text, GlossDef json) type='kafka' broker_list='kafka:9092' topic_list='my-data' consumer_group='manticore' num_consumers='2' batch=50"Query OK, 2 rows affected (0.02 sec)[
{
"total": 2,
"error": "",
"warning": ""
}
]| 选项 | 允许值 | 描述 |
|---|---|---|
type |
kafka |
设置源类型。目前,仅支持 kafka |
broker_list |
host:port [, ...] |
指定 Kafka 代理 URL |
topic_list |
string [, ...] |
列出要从中消费的 Kafka 主题 |
consumer_group |
string |
定义 Kafka 消费者组,默认为 manticore。 |
num_consumers |
int |
处理消息的消费者数量。 |
partition_list |
int [, ...] |
用于读取的分区列表 更多。 |
batch |
int |
在继续之前处理的消息数量。默认为 100;超时后处理剩余消息。 |
目标表是一个常规的实时表,其中存储了 Kafka 消息处理的结果。此表应定义为符合传入数据的模式要求,并针对应用程序的查询性能需求进行优化。有关创建实时表的更多信息,请参阅 这里。
- SQL
- JSON
CREATE TABLE destination_kafka
(id bigint, name text, short_name text, received_at text, size multi);POST /sql?mode=raw -d "CREATE TABLE destination_kafka (id bigint, name text, short_name text, received_at text, size multi)"Query OK, 0 rows affected (0.02 sec)[
{
"total": 0,
"error": "",
"warning": ""
}
]物化视图允许从 Kafka 消息中进行数据转换。您可以重命名字段、应用 Manticore Search 函数,并执行排序、分组和其他数据操作。
物化视图充当从 Kafka 源到目标表移动数据的查询,让您使用 Manticore Search 语法自定义这些查询。确保物化视图中的 select 字段与源中的字段匹配。
CREATE MATERIALIZED VIEW <materialized view name>
TO <destination table name> AS
SELECT [column|function [as <new name>], ...] FROM <source name>
- SQL
CREATE MATERIALIZED VIEW view_table
TO destination_kafka AS
SELECT id, term as name, abbrev as short_name,
UTC_TIMESTAMP() as received_at, GlossDef.size as size FROM kafkaQuery OK, 2 rows affected (0.02 sec)数据以批次的形式从 Kafka 转移到 Manticore Search,并在每次运行后清除。对于跨批次的计算,例如 AVG,请谨慎使用,因为这些可能不会按预期工作,因为是按批次处理的。
以下是基于上述示例的映射表:
| Kafka | 源 | 缓冲 | 物化视图 | 目标 |
|---|---|---|---|---|
id |
id |
id |
id |
id |
term |
term |
term |
term as name |
name |
unnecessary_key which we're not interested in |
- | - | ||
$abbrev |
abbrev |
abbrev |
abbrev as short_name |
short_name |
| - | - | - | UTC_TIMESTAMP() as received_at |
received_at |
GlossDef |
glossdef |
glossdef |
glossdef.size as size |
size |
要在 Manticore Search 中查看源和物化视图,请使用以下命令:
SHOW SOURCES:列出所有配置的源。SHOW MVS:列出所有物化视图。SHOW MV view_table:显示特定物化视图的详细信息。
- SQL
- JSON
SHOW SOURCESPOST /sql?mode=raw -d "SHOW SOURCES"+-------+
| name |
+-------+
| kafka |
+-------+[
{
"total": 1,
"error": "",
"warning": "",
"columns": [
{
"name": {
"type": "string"
}
}
],
"data": [
{
"name": "kafka"
}
]
}
]- SQL
- JSON
SHOW SOURCE kafka;POST /sql?mode=raw -d "SHOW SOURCE kafka"+--------+-------------------------------------------------------------------+
| Source | Create Table |
+--------+-------------------------------------------------------------------+
| kafka | CREATE SOURCE kafka |
| | (id bigint, term text, abbrev '$abbrev' text, GlossDef json) |
| | type='kafka' |
| | broker_list='kafka:9092' |
| | topic_list='my-data' |
| | consumer_group='manticore' |
| | num_consumers='2' |
| | batch=50 |
+--------+-------------------------------------------------------------------+[
{
"total": 1,
"error": "",
"warning": "",
"columns": [
{
"Source": {
"type": "string"
}
},
{
"Create Table": {
"type": "string"
}
}
],
"data": [
{
"Source": "kafka",
"Create Table": "CREATE SOURCE kafka \n(id bigint, term text, abbrev '' text, GlossDef json)\ntype='kafka'\nbroker_list='kafka:9092'\ntopic_list='my-data'\nconsumer_group='manticore'\nnum_consumers='2'\n batch=50"
}
]
}
]- SQL
- JSON
SHOW MVSPOST /sql?mode=raw -d "SHOW MVS"+------------+
| name |
+------------+
| view_table |
+------------+[
{
"total": 1,
"error": "",
"warning": "",
"columns": [
{
"name": {
"type": "string"
}
}
],
"data": [
{
"name": "view_table"
}
]
}
]- SQL
- JSON
SHOW MV view_tablePOST /sql?mode=raw -d "SHOW MV view_table"+------------+--------------------------------------------------------------------------------------------------------+-----------+
| View | Create Table | suspended |
+------------+--------------------------------------------------------------------------------------------------------+-----------+
| view_table | CREATE MATERIALIZED VIEW view_table TO destination_kafka AS | 0 |
| | SELECT id, term as name, abbrev as short_name, UTC_TIMESTAMP() as received_at, GlossDef.size as size | |
| | FROM kafka | |
+------------+--------------------------------------------------------------------------------------------------------+-----------+[
{
"total": 1,
"error": "",
"warning": "",
"columns": [
{
"View": {
"type": "string"
}
},
{
"Create Table": {
"type": "string"
}
},
{
"suspended": {
"type": "string"
}
}
],
"data": [
{
"View": "view_table",
"Create Table": "CREATE MATERIALIZED VIEW view_table TO destination_kafka AS SELECT id, term as name, abbrev as short_name, UTC_TIMESTAMP() as received_at, GlossDef.size as size FROM kafka",
"suspended": 0
}
]
}
]您可以通过修改物化视图来暂停数据消费。
如果您删除了source但没有删除物化视图,它会自动暂停。重新创建源后,需要使用ALTER命令手动取消暂停物化视图。
目前,只能修改物化视图。要更改source参数,请删除并重新创建源。
- SQL
- JSON
ALTER MATERIALIZED VIEW view_table suspended=1POST /sql?mode=raw -d "ALTER MATERIALIZED VIEW view_table suspended=1"Query OK (0.02 sec)[
{
"total": 2,
"error": "",
"warning": ""
}
]您还可以为每个 Kafka 主题指定partition_list。
这种方法的主要好处之一是能够通过 Kafka 为您的表实现分片。
为此,您应该为每个分片创建一条独立的source → 物化视图 → 目标表链:
源:
CREATE SOURCE kafka_p1 (id bigint, term text)
type='kafka' broker_list='kafka:9092' topic_list='my-data'
consumer_group='manticore' num_consumers='1' partition_list='0' batch=50;
CREATE SOURCE kafka_p2 (id bigint, term text)
type='kafka' broker_list='kafka:9092' topic_list='my-data'
consumer_group='manticore' num_consumers='1' partition_list='1' batch=50;
目标表:
CREATE TABLE destination_shard_1 (id bigint, name text);
CREATE TABLE destination_shard_2 (id bigint, name text);
物化视图:
CREATE MATERIALIZED VIEW mv_1 TO destination_shard_1 AS SELECT id, term AS name FROM kafka_p1;
CREATE MATERIALIZED VIEW mv_2 TO destination_shard_2 AS SELECT id, term AS name FROM kafka_p2;
- 在此设置中,重新均衡必须手动管理。
- Kafka 默认情况下不使用轮询策略分发消息。
- 若要在发送数据时实现类似轮询的分发,请确保您的 Kafka 生产者配置了:
parse.key=truekey.separator={your_delimiter}
否则,Kafka 会根据其内部规则分发消息,这可能导致分区不均。
Kafka 在每个批次后或处理超时时提交偏移量。如果物化视图查询过程中意外停止,您可能会看到重复条目。为避免此情况,请在您的模式中包含一个id字段,使 Manticore Search 能够防止表中的重复。
- 工作线程初始化: 配置源和物化视图后,Manticore Search 会设置专用工作线程处理来自 Kafka 的数据摄取。
- 消息映射: 消息根据源配置的模式映射,转换为结构化格式。
- 批处理: 消息被分组为批次以提高处理效率。批大小可调整以满足性能和延迟需求。
- 缓冲: 映射后的数据批次存储在缓冲表中,以便高效的批量操作。
- 物化视图处理: 对缓冲表中的数据应用视图逻辑,执行任何转换或过滤。
- 数据传输: 处理后的数据随后传输到目标的实时表。
- 清理: 每个批次完成后清空缓冲表,确保为下一批数据做好准备。
NOTE: 与DBeaver的集成需要Manticore Buddy。如果不起作用,请确保已安装Buddy。
DBeaver 是一个SQL客户端软件应用程序和数据库管理工具。对于MySQL数据库,它通过JDBC驱动程序使用JDBC应用程序编程接口与它们进行交互。
Manticore允许您使用DBeaver与存储在Manticore表中的数据进行操作,就像这些数据存储在MySQL数据库中一样。目前,已测试并推荐使用版本25.2.0。其他版本可能也能工作,但可能会引入问题。
要开始使用DBeaver中的Manticore,请按照以下步骤操作:
- 在DBeaver的UI中选择
新建数据库连接选项 - 选择
SQL->MySQL作为DBeaver的数据库驱动 - 设置
服务器主机和端口选项,对应于您的Manticore实例的主机和端口(保持数据库字段为空) - 设置
root/<空密码>作为身份验证凭据
由于Manticore不完全支持MySQL,因此在使用Manticore时,DBeaver的部分功能是不可用的。
您可以:
- 查看、创建、删除和重命名表
- 添加和删除表列
- 插入、删除和更新列数据
您无法:
- 使用数据库完整性检查机制(
MyISAM将是唯一可用的存储引擎) - 使用MySQL存储过程、触发器、事件等
- 管理数据库用户
- 设置其他数据库管理选项
一些MySQL数据类型目前不被Manticore支持,因此在使用DBeaver创建新表时无法使用。此外,支持的一些数据类型在转换时会被转换为最接近的Manticore类型,类型精度在转换时会被忽略。以下是MySQL数据类型及其映射到的Manticore类型列表:
BIGINT UNSIGNED=>bigintBOOL=>booleanDATE,DATETIME,TIMESTAMP=>timestampFLOAT=>floatINT=>intINT UNSIGNED,SMALLINT UNSIGNED,TINYINT UNSIGNED,BIT=>uintJSON=>jsonTEXT,LONGTEXT,MEDIUMTEXT,TINYTEXT,BLOB,LONGBLOB,MEDIUMBLOB,TINYBLOB=>textVARCHAR,LONG VARCHAR,BINARY,CHAR,VARBINARY,LONG VARBINARY=>string
您可以在此处找到更多关于Manticore数据类型的详细信息 这里。
Manticore能够处理DATE、DATETIME和TIMESTAMP数据类型,但需要Manticore的Buddy启用。否则,尝试操作这些类型之一将导致错误。
请注意,TIME类型不受支持。
-
DBeaver的
首选项->连接->客户端标识选项必须不被关闭或覆盖。 为了正确使用DBeaver,Manticore需要能够区分其请求与其他请求。为此,它使用DBeaver在请求头中发送的客户端通知信息。禁用客户端通知将破坏这种检测,从而影响Manticore的正确功能。 -
当第一次尝试更新表中的数据时,您将看到
无唯一键弹出消息,并被要求定义一个自定义唯一键。 当您收到此消息时,请执行以下步骤:- 选择
自定义唯一键选项 - 在列列表中仅选择
id列 - 点击
确定
- 选择
之后,您将能够安全地更新您的数据。
注意:与 Apache Superset 的集成需要 Manticore Buddy。如果无法使用,请确保已安装 Buddy。
Apache Superset 是一个现代的数据探索和可视化平台。Manticore Search 可以与 Apache Superset 集成,使用户能够充分利用 Manticore Search 的强大功能进行数据分析和可视化。
注意:此集成仅适用于 Apache Superset 3.x 分支,暂不支持版本 4 或更新版本。
在将 Manticore Search 与 Apache Superset 集成之前,请确保:
- Manticore Search(版本 6.2.0 或更高)已正确安装并配置在您的服务器上。请参阅 官方 Manticore Search 安装指南 寻求帮助。
- Apache Superset 已在您的系统上设置完成。请按照 官方 Apache Superset 安装指南 进行安装。
将 Manticore Search 连接到 Apache Superset 的步骤:
- 登录到您的 Apache Superset 控制面板。
- 点击顶部导航栏中的“+”,选择“数据库连接”。
- 点击“+ DATABASE”添加新数据库。
- 选择数据库类型为“MySQL”。
- 在配置页面中填写以下信息:
- 数据库名称:数据库名称(例如,“Manticore”)
- 主机:您的 Manticore Search 服务器主机
- 端口:Manticore Search 运行的端口
- 用户名:您的 Manticore Search 用户名
- 显示名称:连接的显示名称
- 点击“Connect”验证连接并保存。
连接 Manticore Search 到 Apache Superset 后,您可以使用 Manticore 数据创建图表和仪表板:
- 在 Apache Superset 控制面板,点击顶部导航栏的“Dashboards”,选择“New dashboard”。
- 打开仪表板,点击“+”图标添加新图表。
- 选择已连接到 Manticore Search 的数据集。
- 选择想要创建的图表类型(例如,条形图、折线图、饼图)。
- 使用 Apache Superset 的查询构建器或编写 SQL 查询,从 Manticore Search 数据库中提取数据。
- 根据需要自定义图表的外观、标签和其他设置。
- 点击“UPDATE CHART”更新图表。
- 添加图表名称,点击“Save”将其永久保存在仪表板中。
通过 Apache Superset 使用 Manticore Search,您可以:
- 查看并查询 Manticore Search 表中的数据
- 基于 Manticore 数据创建各种类型的可视化
- 使用这些可视化构建和定制仪表板
Manticore Search 的数据类型在与 Apache Superset 交互时会映射为 MySQL 数据类型。有关支持的数据类型及其映射的详细信息,请参阅 Manticore Search 文档。
- 通过 Apache Superset 使用 Manticore Search 时,一些高级 MySQL 功能可能不可用。
- 与直接操作 MySQL 数据库相比,某些数据操作可能有所限制。
通过遵循这些步骤和指南,您可以有效地将 Manticore Search 与 Apache Superset 集成,实现强大的数据探索和可视化功能。
有关 Apache Superset 和 Manticore Search 的更多信息,请参阅以下资源: