> ## Documentation Index
> Fetch the complete documentation index at: https://docs.molesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 数据接入

> 面向 OpenTelemetry、Prometheus、日志、云发送端与应用事件的原生及协议兼容采集。

MoleSignal 支持原生及协议兼容采集，因此许多现有 Agent 与 SDK 只需少量配置即可发送数据。除推送型
[connector](/zh-Hans/connectors)（用 connector token）外，每个接入端点都需 `Authorization: Bearer <jwt>`
认证（或使用 API token，见 [安全](/zh-Hans/security)）。

## 支持的协议

| 协议                       | 端点                                       | 兼容发送端                            |
| ------------------------ | ---------------------------------------- | -------------------------------- |
| OTLP gRPC                | `:4317`                                  | OpenTelemetry SDK / Collector    |
| OTLP HTTP                | `POST /api/v1/logs`、`/metrics`、`/traces` | OTel HTTP exporter               |
| Prometheus remote\_write | `POST /api/v1/prometheus/api/v1/write`   | Prometheus / VictoriaMetrics     |
| Elasticsearch `_bulk`    | `POST /api/v1/_bulk`                     | Filebeat、Vector ES sink、Logstash |
| Loki JSON push           | `POST /api/v1/loki/api/v1/push`          | 能发送 Loki JSON 请求结构的客户端           |
| Kinesis Firehose         | `POST /api/v1/_kinesis_firehose`         | AWS Firehose                     |
| Cloudflare Logpush       | `POST /api/v1/_cloudflare`               | Cloudflare Logpush               |
| Heroku log drain         | `POST /api/v1/_heroku`                   | Heroku                           |
| 原生 HTTP JSON             | `POST /api/v1/intake/{type}/{stream}`    | curl / 应用 SDK                    |

<Note>
  Kinesis Firehose、Cloudflare Logpush、Heroku log drain 按源单独配置——见
  [Connector](/zh-Hans/connectors) 指南。
</Note>

## 原生 HTTP JSON

最简单的方式。把一个记录数组 POST 到 `intake/{logs,metrics,traces}/{stream}`。时间戳为 Unix 纪元起
的微秒数，放在 `_timestamp` 字段。

```bash theme={null}
curl -X POST http://localhost:5080/api/v1/intake/logs/app \
  -H "authorization: Bearer $MS_JWT" \
  -H 'content-type: application/json' \
  -d '[{"_timestamp":1700000000000000,"level":"error","msg":"db pool exhausted","trace_id":"abc123"}]'
```

流在首次写入时创建，schema 随新字段出现自动演进。

## OpenTelemetry

<Tabs>
  <Tab title="OTLP HTTP">
    把 OTel HTTP exporter 指向 MoleSignal：

    ```yaml theme={null}
    exporters:
      otlphttp:
        endpoint: http://localhost:5080/api/v1
        headers:
          authorization: "Bearer ${MS_JWT}"
    ```

    日志、指标、追踪分别 POST 到 `/api/v1/logs`、`/api/v1/metrics`、`/api/v1/traces`。
  </Tab>

  <Tab title="OTLP gRPC">
    对外标准 OTLP gRPC Receiver 默认监听 `4317` 端口：

    ```yaml theme={null}
    exporters:
      otlp:
        endpoint: localhost:4317
        headers:
          authorization: "Bearer ${MS_JWT}"
    ```

    `5082` 端口保留给可信内部集群 gRPC，不应作为公开 OTLP 端点。
  </Tab>
</Tabs>

## Prometheus remote\_write

在 `prometheus.yml` 中把 MoleSignal 加为远程写入目标：

```yaml theme={null}
remote_write:
  - url: http://localhost:5080/api/v1/prometheus/api/v1/write
    authorization:
      credentials: "${MS_JWT}"
```

## Loki 与 Elasticsearch

<CodeGroup>
  ```text Loki push theme={null}
  POST /api/v1/loki/api/v1/push
  # 只接受 JSON 请求结构，不解析 snappy-protobuf。
  ```

  ```text Elasticsearch _bulk theme={null}
  POST /api/v1/_bulk
  # 适配 Filebeat、Logstash 与 Vector ES sink。
  ```
</CodeGroup>

Loki 端点接受 `{"streams":[{"stream":{...},"values":[["<unix_nano>","<line>"]]}]}`。
通过 `stream-name` 选择 MoleSignal 日志流。请把发送端配置为 JSON，而不是 Loki 默认的
snappy-protobuf 编码。

## 管道函数（Pipeline functions）

可在接入热路径上用**管道函数**转换事件。管道函数是挂在管道步骤上的可复用变换。运行时支持：

* **VRL** —— 始终可用。按 `(function_id, updated_at)` 编译，使用 `vrl::compiler` 标准库
  （`del`、`parse_json`、`to_int`、`match`、`encrypt`/`decrypt` 等）。
* **JavaScript** —— 可选，基于 `deno_core`（V8）。只有二进制使用 `--features js-runtime`
  构建时可用，没有运行时 TOML 开关。
* **LLM 评估** —— 适合低吞吐流水线；需设置 `[functions].llm_eval_enabled = true`，且组织内有已
  启用的模型供应商。每条事件都会触发一次模型请求。

<Warning>
  JS isolate 刻意做得极简：没有 `fetch`、`setTimeout`、`import`、`npm`。每个事件有 50 ms 墙钟预算与
  32 MiB 堆。任何超出单次同步执行的逻辑在设计上都不支持。
</Warning>

```js theme={null}
// 把 `severity` 字段小写化，写入新的 `level` 字段。
molesignal.set("level", molesignal.fields.severity.toLowerCase());
// 删除一个敏感字段。
molesignal.del("pw");
```
