Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: add Alloy to open source GreptimeDB #1413

Merged
merged 4 commits into from
Jan 2, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add the ZH alloy document
  • Loading branch information
nicecui committed Dec 26, 2024
commit 0089d431467c7f03fd6fe3abe9be8e7a9369d168
2 changes: 2 additions & 0 deletions docs/user-guide/ingest-data/for-observerbility/alloy.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ otelcol.exporter.otlphttp "greptimedb_logs" {
- `GREPTIME_HOST`: GreptimeDB host address, e.g., `localhost`.
- `GREPTIME_DB`: GreptimeDB database name, default is `public`.
- `GREPTIME_USERNAME` and `GREPTIME_PASSWORD`: The [authentication credentials](/user-guide/deployments/authentication/static.md) for GreptimeDB.
- `LOG_TABLE_NAME`: The name of the table to store logs, default table name is `opentelemetry_logs`.
- `EXTRACT_KEYS`: The keys to extract from the attributes, separated by commas (`,`), e.g., `filename,log.file.name,loki.attribute.labels`, see [HTTP API documentation](opentelemetry.md#otlphttp-api-1) for details.

For details on the log data model transformation from OpenTelemetry to GreptimeDB, refer to the [Data Model](/user-guide/ingest-data/for-observerbility/opentelemetry.md#data-model-1) section in the OpenTelemetry guide.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ The OTLP metrics data model is mapped to the GreptimeDB data model according to

## Logs

GreptimeDB is an observability backend to consume OpenTelemetry Logs natively via [OTLP/HTTP](https://opentelemetry.io/docs/specs/otlp/#otlphttp) protocol.
GreptimeDB consumes OpenTelemetry Logs natively via [OTLP/HTTP](https://opentelemetry.io/docs/specs/otlp/#otlphttp) protocol.

### OTLP/HTTP API API

Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
---
keywords: [Grafana Alloy, Prometheus Remote Write, OpenTelemetry, 数据管道]
description: 绍了如何将 GreptimeDB 配置为 Grafana Alloy 的数据接收端,包括 Prometheus Remote Write 和 OpenTelemetry 的配置示例。通过这些配置,你可以将 GreptimeDB 集成到可观测性数据管道中,实现对指标和日志的高效管理和分析。
---

# Grafana Alloy

[Grafana Alloy](https://grafana.com/docs/alloy/latest/) 是一个用于 OpenTelemetry (OTel)、Prometheus、Pyroscope、Loki 等其他指标、日志、追踪和分析工具的可观测性数据管道。
你可以将 GreptimeDB 集成为 Alloy 的数据接收端。

## Prometheus Remote Write

将 GreptimeDB 配置为远程写入目标:

```hcl
prometheus.remote_write "greptimedb" {
endpoint {
url = "${GREPTIME_SCHEME:=http}://${GREPTIME_HOST:=greptimedb}:${GREPTIME_PORT:=4000}/v1/prometheus/write?db=${GREPTIME_DB:=public}"

basic_auth {
username = "${GREPTIME_USERNAME}"
password = "${GREPTIME_PASSWORD}"
}
}
}
```

- `GREPTIME_HOST`: GreptimeDB 主机地址,例如 `localhost`。
- `GREPTIME_DB`: GreptimeDB 数据库名称,默认是 `public`。
- `GREPTIME_USERNAME` 和 `GREPTIME_PASSWORD`: GreptimeDB的[鉴权认证信息](/user-guide/deployments/authentication/static.md)。

有关从 Prometheus 到 GreptimeDB 的数据模型转换的详细信息,请参阅 Prometheus Remote Write 指南中的[数据模型](/user-guide/ingest-data/for-observerbility/prometheus.md#数据模型)部分。

## OpenTelemetry

GreptimeDB 也可以配置为 OpenTelemetry Collector 的目标。

### 指标

```hcl
otelcol.exporter.otlphttp "greptimedb" {
client {
endpoint = "${GREPTIME_SCHEME:=http}://${GREPTIME_HOST:=greptimedb}:${GREPTIME_PORT:=4000}/v1/otlp/"
headers = {
"X-Greptime-DB-Name" = "${GREPTIME_DB:=public}",
}
auth = otelcol.auth.basic.credentials.handler
}
}

otelcol.auth.basic "credentials" {
username = "${GREPTIME_USERNAME}"
password = "${GREPTIME_PASSWORD}"
}
```

- `GREPTIME_HOST`: GreptimeDB 主机地址,例如 `localhost`。
- `GREPTIME_DB`: GreptimeDB 数据库名称,默认是 `public`。
- `GREPTIME_USERNAME` 和 `GREPTIME_PASSWORD`: GreptimeDB 的[认证凭据](/user-guide/deployments/authentication/static.md)。

有关从 OpenTelemetry 到 GreptimeDB 的指标数据模型转换的详细信息,请参阅 OpenTelemetry 指南中的[数据模型](/user-guide/ingest-data/for-observerbility/opentelemetry.md#数据模型)部分。

### 日志

以下示例设置了一个使用 Loki 和 OpenTelemetry Collector (otelcol) 的日志管道,将日志转发到 GreptimeDB:

```hcl
loki.source.file "greptime" {
targets = [
{__path__ = "/tmp/foo.txt"},
]
forward_to = [otelcol.receiver.loki.greptime.receiver]
}

otelcol.receiver.loki "greptime" {
output {
logs = [otelcol.exporter.otlphttp.greptimedb_logs.input]
}
}

otelcol.auth.basic "credentials" {
username = "${GREPTIME_USERNAME}"
password = "${GREPTIME_PASSWORD}"
}

otelcol.exporter.otlphttp "greptimedb_logs" {
client {
endpoint = "${GREPTIME_SCHEME:=http}://${GREPTIME_HOST:=greptimedb}:${GREPTIME_PORT:=4000}/v1/otlp/"
headers = {
"X-Greptime-DB-Name" = "${GREPTIME_DB:=public}",
"X-Greptime-Log-Table-Name" = "${LOG_TABLE_NAME}",
"X-Greptime-Gog-Extract-Keys" = "${EXTRACT_KEYS}",
}
auth = otelcol.auth.basic.credentials.handler
}
}
```

- Loki source 配置
- `loki.source.file "greptime"` 块定义了 source,用于 Loki 从位于 `/tmp/foo.txt` 的文件中读取日志。
- `forward_to` 数组指示从该文件读取的日志应转发到 `otelcol.receiver.loki.greptime.receiver`。
- OpenTelemetry Collector Receiver 配置:
- `otelcol.receiver.loki "greptime"` 在 OpenTelemetry Collector 中设置了一个 receiver,以接收来自 Loki 的日志。
- `output` 指定接收到的日志应转发到 `otelcol.exporter.otlphttp.greptimedb_logs.input`。
- OpenTelemetry Collector Exporter 配置:
- `otelcol.exporter.otlphttp "greptimedb_logs"` 块配置了一个 HTTP Exporter,将日志发送到 GreptimeDB。
- `GREPTIME_HOST`: GreptimeDB 主机地址,例如 `localhost`。
- `GREPTIME_DB`: GreptimeDB 数据库名称,默认是 `public`。
- `GREPTIME_USERNAME` 和 `GREPTIME_PASSWORD`: GreptimeDB 的[认证凭据](/user-guide/deployments/authentication/static.md)。
- `LOG_TABLE_NAME`: 存储日志的表名,默认表名为 `opentelemetry_logs`。
- `EXTRACT_KEYS`: 从属性中提取对应 key 的值到表的顶级字段,用逗号分隔,例如 `filename,log.file.name,loki.attribute.labels`,详情请看 [HTTP API 文档](opentelemetry.md#otlphttp-api-1)。

有关从 OpenTelemetry 到 GreptimeDB 的日志数据模型转换的详细信息,请参阅 OpenTelemetry 指南中的[数据模型](/user-guide/ingest-data/for-observerbility/opentelemetry.md#数据模型-1)部分。

:::tip 提示
上述示例代码可能会过时,请参考 OpenTelemetry 和 Grafana Alloy 的官方文档以获取最新信息。
:::

有关示例代码的更多信息,请参阅你首选编程语言的官方文档。

Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,29 @@ description: 介绍如何使用 OpenTelemetry Protocol (OTLP) 将观测数据(

[OpenTelemetry](https://opentelemetry.io/) 是一个供应商中立的开源可观测性框架,用于检测、生成、收集和导出观测数据,例如 traces, metrics 和 logs。
OpenTelemetry Protocol (OTLP) 定义了观测数据在观测源和中间进程(例如收集器和观测后端)之间的编码、传输机制。

## Metrics

### OTLP/HTTP
GreptimeDB 通过原生支持 [OTLP/HTTP](https://opentelemetry.io/docs/specs/otlp/#otlphttp) 协议,可以作为后端存储服务来接收 OpenTelemetry 指标数据。

### OTLP/HTTP API

使用下面的信息通过 Opentelemetry SDK 库发送 Metrics 到 GreptimeDB:

* URL: `https://<host>/v1/otlp/v1/metrics`
* Headers:
* `X-Greptime-DB-Name`: `<dbname>`
* `Authorization`: `Basic` 认证,是 `<username>:<password>` 的 Base64 编码字符串。更多信息请参考 [鉴权](https://docs.greptime.cn/user-guide/deployments/authentication/static/) 和 [HTTP API](https://docs.greptime.cn/user-guide/protocols/http#authentication)。

import Includeotlpmetrycsintegration from '../../../db-cloud-shared/clients/otlp-metrics-integration.md'
请求中使用 binary protobuf 编码 payload,因此你需要使用支持 `HTTP/protobuf` 的包。例如,在 Node.js 中,可以使用 [`exporter-trace-otlp-proto`](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-proto);在 Go 中,可以使用 [`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`](https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp);在 Java 中,可以使用 [`io.opentelemetry:opentelemetry-exporter-otlp`](https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-exporter-otlp);在 Python 中,可以使用 [`opentelemetry-exporter-otlp-proto-http`](https://pypi.org/project/opentelemetry-exporter-otlp-proto-http/)。

:::tip 注意
包名可能会根据 OpenTelemetry 的发展发生变化,因此建议你参考 OpenTelemetry 官方文档以获取最新信息。
:::

<Includeotlpmetrycsintegration/>
请参考 Opentelementry 的官方文档获取它所支持的编程语言的更多信息。

#### 示例代码
### 示例代码

下面是一些编程语言设置请求的示例代码:

Expand Down Expand Up @@ -95,7 +109,7 @@ exporter = OTLPMetricExporter(

关于示例代码,请参考 Opentelementry 的官方文档获取它所支持的编程语言获取更多信息。

#### 数据模型
### 数据模型

OTLP 指标数据模型按照下方的规则被映射到 GreptimeDB 数据模型中:

Expand All @@ -108,57 +122,34 @@ OTLP 指标数据模型按照下方的规则被映射到 GreptimeDB 数据模型

## Logs

### OTLP/HTTP

import Includeotlplogintegration from '../../../db-cloud-shared/clients/otlp-logs-integration.md'

<Includeotlplogintegration/>

#### 示例代码

以下是一些关于如何使用 Grafana Alloy 将 OpenTelemetry 日志发送到 GreptimeDB 的示例代码:

```hcl
loki.source.file "greptime" {
targets = [
{__path__ = "/tmp/foo.txt"},
]
forward_to = [otelcol.receiver.loki.greptime.receiver]
}

otelcol.receiver.loki "greptime" {
output {
logs = [otelcol.exporter.otlphttp.greptimedb_logs.input]
}
}

otelcol.auth.basic "credentials" {
username = "${GREPTIME_USERNAME}"
password = "${GREPTIME_PASSWORD}"
}

otelcol.exporter.otlphttp "greptimedb_logs" {
client {
endpoint = "${GREPTIME_SCHEME:=http}://${GREPTIME_HOST:=greptimedb}:${GREPTIME_PORT:=4000}/v1/otlp/"
headers = {
"X-Greptime-DB-Name" = "${GREPTIME_DB:=public}",
"x-greptime-log-table-name" = "demo_logs",
"x-greptime-log-extract-keys" = "filename,log.file.name,loki.attribute.labels",
}
auth = otelcol.auth.basic.credentials.handler
}
}
```
GreptimeDB 是能够通过 [OTLP/HTTP](https://opentelemetry.io/docs/specs/otlp/#otlphttp) 协议原生地消费 OpenTelemetry 日志。

### OTLP/HTTP API

要通过 OpenTelemetry SDK 库将 OpenTelemetry 日志发送到 GreptimeDB,请使用以下信息:

* **URL:** `https://<host>/v1/otlp/v1/logs`
* **Headers:**
* `X-Greptime-DB-Name`: `<dbname>`
* `Authorization`: `Basic` 认证,这是一个 Base64 编码的 `<username>:<password>` 字符串。更多信息,请参考 [鉴权](https://docs.greptime.cn/user-guide/deployments/authentication/static/) 和 [HTTP API](https://docs.greptime.cn/user-guide/protocols/http#authentication)。
* `X-Greptime-Log-Table-Name`: `<table_name>`(可选)- 存储日志的表名。如果未提供,默认表名为 `opentelemetry_logs`。
* `X-Greptime-Log-Extract-Keys`: `<extract_keys>`(可选)- 从属性中提取对应 key 的值到表的顶级字段。key 应以逗号(`,`)分隔。例如,`key1,key2,key3` 将从属性中提取 `key1`、`key2` 和 `key3`,并将它们提升到日志的顶层,设置为标签。如果提取的字段类型是数组、浮点数或对象,将返回错误。如果提供了 pipeline name,此设置将被忽略。
* `X-Greptime-Log-Pipeline-Name`: `<pipeline_name>`(可选)- 处理日志的 pipeline 名称。如果未提供,将使用 `X-Greptime-Log-Extract-Keys` 来处理日志。
* `X-Greptime-Log-Pipeline-Version`: `<pipeline_version>`(可选)- 处理日志的 pipeline 的版本。如果未提供,将使用 pipeline 的最新版本。

此示例监听文件的变化,并通过 OTLP 协议将最新的值发送到 GreptimeDB
请求使用二进制 protobuf 编码负载,因此您需要使用支持 `HTTP/protobuf` 的包

:::tip 提示
上述示例代码可能会因 OpenTelemetry 的更新而过时。我们建议您参考 OpenTelemetry 和 Grafana Alloy 的官方文档以获取最新信息
包名可能会根据 OpenTelemetry 的更新而变化,因此我们建议您参考官方 OpenTelemetry 文档以获取最新信息
:::

有关示例代码的更多信息,请参考您首选编程语言的官方文档。
有关 OpenTelemetry SDK 的更多信息,请参考您首选编程语言的官方文档。

#### 数据模型
### 示例代码

请参考 [Alloy 文档](alloy.md#日志)中的示例代码,了解如何将 OpenTelemetry 日志发送到 GreptimeDB。

### 数据模型

OTLP 日志数据模型根据以下规则映射到 GreptimeDB 数据模型:

Expand Down Expand Up @@ -188,4 +179,5 @@ OTLP 日志数据模型根据以下规则映射到 GreptimeDB 数据模型:

- 您可以使用 `X-Greptime-Log-Table-Name` 指定存储日志的表名。如果未提供,默认表名为 `opentelemetry_logs`。
- 所有属性,包括资源属性、范围属性和日志属性,将作为 JSON 列存储在 GreptimeDB 表中。
- 日志的时间戳将用作 GreptimeDB 中的时间戳索引,列名为 `timestamp`。建议使用 `time_unix_nano` 作为时间戳列。如果未提供 `time_unix_nano`,将使用 `observed_time_unix_nano`。
- 日志的时间戳将用作 GreptimeDB 中的时间戳索引,列名为 `timestamp`。建议使用 `time_unix_nano` 作为时间戳列。如果未提供 `time_unix_nano`,将使用 `observed_time_unix_nano`。

Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ GreptimeDB 可以作为 Prometheus 的长期存储解决方案,提供无缝集

## 配置 Remote Write

### Prometheus 配置文件

要将 GreptimeDB 集成到 Prometheus 中,
请按照以下步骤更新你的 [Prometheus 配置文件](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file)(`prometheus.yml`):

Expand All @@ -32,6 +34,10 @@ remote_read:
- URL 中的 `db` 参数表示要写入的数据库。它是可选的。默认情况下,数据库设置为 `public`。
- `basic_auth` 是身份鉴权配置。如果 GreptimeDB 启用了鉴权,请填写用户名和密码。请参阅 [鉴权认证文档](/user-guide/deployments/authentication/overview.md)。

### Grafana Alloy 配置文件

如果你使用 Grafana Alloy,请在 Alloy 配置文件(`config.alloy`)中配置 Remote Write。有关更多信息,请参阅 [Alloy 文档](alloy.md#prometheus-remote-write)。

## 数据模型

在 GreptimeDB 的[数据模型](/user-guide/concepts/data-model.md)中,数据被组织成具有 tag、time index 和 field 的表。
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
keywords: [Alloy, Grafana Alloy, GreptimeDB]
description: 将 GreptimeDB 与 Grafana Alloy 集成。
---

# Grafana Alloy

你可以将 GreptimeDB 设置为 Grafana Alloy 的数据接收端。
更多信息,请参考[通过 Grafana Alloy 写入数据](/user-guide/ingest-data/for-observability/alloy.md)指南。