# 使用 OpenSearch Dashboards 探索 Manticore 数据

将 OpenSearch Dashboards 连接到 Manticore Search，在 Discover 中探索数据，并使用熟悉的界面构建可视化和仪表盘。

OpenSearch Dashboards 提供了一个熟悉的可视化界面，可用于探索数据、构建图表以及组合交互式仪表盘。虽然它通常与 OpenSearch 搭配使用，但你也可以将它直接连接到 Manticore Search。

![主视图](./manticore-opensearch-dashboards-integration/main_view.png)

这种集成让你可以继续将 Manticore 作为搜索和分析后端，同时使用 **Discover**、**Visualize** 和 **Dashboards** 作为用户界面。对于日志和事件数据尤其有用：Logstash、Filebeat、Fluent Bit 和 Vector 等工具可以把数据发送到 Manticore，而 OpenSearch Dashboards 则为你的团队提供了一个便捷的查看方式。

在本教程中，我们将配置连接、添加一个小型示例数据集、在 Discover 中探索它，并创建一个可视化。

## 集成工作原理

OpenSearch Dashboards 通过 HTTP API 与其后端通信。Manticore 在其 HTTP 监听器上提供了兼容的 API，默认使用端口 `9308`。

这种兼容层由 [Manticore Buddy](https://manual.manticoresearch.com/Installation/Manticore_Buddy) 中的 **EmulateElastic** 插件提供。它处理 OpenSearch Dashboards 启动、索引发现、搜索、过滤和受支持聚合所需的请求。Buddy 通常会随 `searchd` 自动启动，因此标准的 Manticore 安装已经包含所需组件。

这是一种 API 兼容性集成，而不是内嵌的 OpenSearch 集群。Manticore 负责存储和查询数据，而 OpenSearch Dashboards 提供可视化界面。

## 前提条件

本操作指南需要：

- 一个正在运行的 Manticore Search 实例，其 HTTP 端点可通过 `http://localhost:9308` 访问
- 已安装并运行的 Manticore Buddy
- OpenSearch Dashboards **3.4.0**，这是当前已测试并推荐的版本
- 以实时模式运行的 Manticore

其他 OpenSearch Dashboards 版本也可能可用，但测试覆盖不如这一版本充分。Manticore 报告的版本也必须与 OpenSearch Dashboards 的版本一致。

## 第 1 步：配置 Manticore

打开你的 Manticore 配置文件，确保 HTTP 监听器已启用。将 `kibana_version_string` 设置为你计划运行的 OpenSearch Dashboards 版本：

```ini
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
}
```

`kibana_version_string` 这个名称保留是为了兼容现有的 Elasticsearch 风格 API。OpenSearch Dashboards 会在启动时检查后端版本，因此版本不匹配可能会产生警告，或者阻止应用启动。

修改配置后重启 Manticore。

如果 Manticore 和 OpenSearch Dashboards 运行在不同主机或不同容器中，不要只把 HTTP 监听器绑定到 `127.0.0.1`。应将其绑定到 OpenSearch Dashboards 可访问的地址，并通过网络或防火墙配置限制访问。

## 第 2 步：配置 OpenSearch Dashboards

打开 `opensearch_dashboards.yml`。在 [tarball 安装](https://docs.opensearch.org/latest/install-and-configure/install-opensearch/tar/) 中，它通常位于 `config/opensearch_dashboards.yml`；软件包安装则可能放在 `/etc/opensearch-dashboards/opensearch_dashboards.yml`。

将 `opensearch.hosts` 指向 Manticore 的 HTTP 端点：

```yaml
opensearch.hosts: ["http://localhost:9308"]
```

Manticore 不提供 OpenSearch Security 插件，因此必须禁用对应的 Dashboards 插件。

对于 tarball 安装，停止 OpenSearch Dashboards 并移除该插件：

```bash
./bin/opensearch-dashboards-plugin remove securityDashboards
```

如果你在 Docker 中运行 OpenSearch Dashboards，请通过环境变量提供这两个设置：

```yaml
environment:
  OPENSEARCH_HOSTS: '["http://manticore:9308"]'
  DISABLE_SECURITY_DASHBOARDS_PLUGIN: "true"
```

这里的 `manticore` 是 OpenSearch Dashboards 容器可访问的主机名或容器名。在该容器内使用 `localhost` 指向的是容器自身，而不是 Manticore。

启动 OpenSearch Dashboards，并打开 [http://localhost:5601](http://localhost:5601)。

## 第 3 步：向 Manticore 添加示例数据

如果你已经有一个实时表，可以跳过这一步。否则，请通过其 MySQL 兼容端口连接到 Manticore：

```bash
mysql -h127.0.0.1 -P9306
```

创建一张用于存放少量应用事件的表：

```sql
CREATE TABLE app_events (
    message text,
    service string,
    status_code uint,
    response_time float,
    event_time timestamp
);
```

插入几条文档：

```sql
INSERT INTO app_events
    (message, service, status_code, response_time, event_time)
VALUES
    ('Request completed', 'catalog', 200, 0.12, 1786924800),
    ('Request completed', 'checkout', 200, 0.31, 1786928400),
    ('Upstream timeout', 'checkout', 504, 2.75, 1786932000),
    ('Product not found', 'catalog', 404, 0.08, 1786935600),
    ('Request completed', 'catalog', 200, 0.15, 1786939200),
    ('Payment rejected', 'payments', 422, 0.44, 1786942800);
```

这个 schema 为我们提供了可搜索的文本、可分组的维度、可聚合的指标，以及用于时间序列图表的时间戳。

## 第 4 步：创建索引模式

OpenSearch Dashboards 使用 **index pattern** 来选择在 Discover 和可视化中显示的数据源。在这个集成中，该模式对应一个 Manticore 表名。

1. 打开 **Management > Dashboards Management**。
2. 进入 **Index Patterns**，然后选择 **Create index pattern**。
3. 输入 `app_events`。
4. 选择 `event_time` 作为时间字段。
5. 保存索引模式。

`app_events` 的字段现在应该已经可以在 OpenSearch Dashboards 中使用了。

## 第 5 步：在 Discover 中探索数据

打开 **Discover** 并选择 `app_events` 索引模式。现在你可以：

- 查看单个文档
- 搜索 `message` 字段
- 按 `service` 或 `status_code` 等字段过滤
- 更改时间范围
- 在结果中添加或移除列

例如，添加一个 `status_code` 大于或等于 `400` 的过滤条件，以聚焦失败请求。然后，你可以将 `service`、`message`、`status_code` 和 `response_time` 作为列添加进去，得到一个紧凑的错误视图。

简单的 Dashboard Query Language 搜索可以与该集成配合使用。高级 DQL 功能，包括嵌套字段搜索、正则表达式、模糊搜索、近邻搜索和词项加权，可能与 Manticore 不兼容。

## 第 6 步：构建可视化

打开 **Visualize**，创建一个新的可视化，并选择 `app_events` 索引模式。OpenSearch Dashboards 可以通过 Manticore 使用以下 bucket 聚合：

- `terms`
- `histogram`
- `date_histogram`
- `range`
- `date_range`

支持的 metric 聚合包括：

- `max`
- `min`
- `sum`
- `avg`

作为第一张图表，创建一张按服务统计事件数量的柱状图：

1. 将 `Count` 作为 metric。
2. 使用 `service` 字段添加一个 `Terms` bucket。
3. 应用更改。
4. 将该可视化保存为 **按服务统计的事件**。

你也可以使用 `event_time` 上的 `Date Histogram` 创建时间序列图表，或者在 `response_time` 上使用 `avg` metric 绘制平均延迟图。

保存可视化后，打开 **Dashboards**，创建一个仪表盘并添加这些可视化。应用在仪表盘级别的过滤器可以让你把整个视图聚焦到某个服务、状态码或时间范围上。

## 支持范围

此集成覆盖了主要的数据探索流程：

- 在 Discover 中搜索和过滤文档
- 为 Manticore 表创建索引模式
- 使用受支持的 bucket 和 metric 聚合构建可视化
- 保存可视化并将其组合到仪表盘中
- 在 Dashboards Management 中管理索引模式和已保存对象

Manticore 还会模拟 OpenSearch Dashboards 启动期间所需的集群级请求，包括节点版本信息、集群设置、配置对象和索引列表。

## 当前限制

OpenSearch Dashboards 包含许多依赖 OpenSearch 特定 API 或字段类型的功能。这些功能不在此集成范围内。

不支持的字段类型包括：

- 地理和笛卡尔字段，例如 `geo_point`、`geo_shape`、`xy_point` 和 `xy_shape`
- 范围类型，例如 `integer_range`、`ip_range` 和 `date_range`
- 专用搜索类型，例如 `semantic`、`rank_feature` 和 `percolator`
- OpenSearch 向量类型，例如 `knn_vector` 和 `sparse_vector`
- 关系类型，例如 `nested` 和 `join`
- 高级字符串类型，例如 `completion` 和 `search_as_you_type`

普通的 `text` 和 `keyword` 字段是受支持的。Manticore 自身的向量搜索仍可通过其 SQL 和 JSON API 使用，但 OpenSearch Dashboards 无法通过 OpenSearch 的向量字段类型来表示它。

不支持嵌套聚合，也就是一个 `aggs` 块里再包含另一个 `aggs` 块。metric 函数仅限于 Manticore 已实现的那些。

OpenSearch 特定的应用和管理工具也不可用，包括：

- 地理空间可视化
- 可观测性和链路分析
- 告警和异常检测
- 安全分析
- 索引状态管理和索引管理
- 性能分析器
- OpenSearch Security 插件工作流

这些限制不会影响上面所述的核心 Discover、可视化和仪表盘工作流。

## 接入真实数据

连接成功后，你可以用自己的数据管道替换示例表。Manticore 可与 [Logstash](https://manual.manticoresearch.com/Integration/Logstash)、[Filebeat](https://manual.manticoresearch.com/Integration/Filebeat)、[Fluent Bit](https://manual.manticoresearch.com/Integration/Fluent_Bit) 和 [Vector](https://manual.manticoresearch.com/Integration/Vector) 集成。这些工具可以在把日志或事件发送到 Manticore 的 Elasticsearch 兼容 HTTP 端点之前，对其进行收集和转换。

最终的工作流很简单：

1. 代理或管道收集你的数据。
2. Manticore 实时索引这些数据。
3. OpenSearch Dashboards 通过 HTTP 查询 Manticore。
4. 用户在熟悉的界面中探索数据并构建仪表盘。

## 结论

OpenSearch Dashboards 集成为 Manticore 用户提供了一个实用的可视化层，用于日志分析和数据探索。只需少量配置，你就可以在 Discover 中搜索文档，基于受支持的聚合构建图表，并把它们组合成仪表盘，而 Manticore 负责存储和查询执行。

如需查看最新的兼容性细节和配置说明，请参阅 [OpenSearch Dashboards 集成文档](https://manual.manticoresearch.com/dev/Integration/Opensearch_Dashboards)。
