Skip to content

Commit

Permalink
1
Browse files Browse the repository at this point in the history
  • Loading branch information
goodsxx committed Jul 4, 2024
1 parent c539ce1 commit 2eab188
Show file tree
Hide file tree
Showing 8 changed files with 4,684 additions and 2,844 deletions.
7,099 changes: 4,255 additions & 2,844 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

74 changes: 74 additions & 0 deletions src/articles/distributed-middleware/opentelemetry/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---
title: OpenTelemetry 简介
date: 2024-07-04
dir:
text: OpenTelemetry
order: 11
category:
- 分布式中间件
---
<!-- more -->

::: tip ✨✨✨✨✨
:::

## 什么是 OpenTelemetry?

### 简短说明 OpenTelemetry 是什么,不是什么。

OpenTelemetry 是一个可观测性框架和工具包, 旨在创建和管理遥测数据,如链路、 指标和日志。 重要的是,OpenTelemetry 是供应商和工具无关的,这意味着它可以与各种可观测性后端一起使用, 包括 Jaeger 和 Prometheus 这类开源工具以及商业化产品。

OpenTelemetry 不是像 Jaeger、Prometheus 或其他商业供应商那样的可观测性后端。 OpenTelemetry 专注于遥测数据的生成、采集、管理和导出。 OpenTelemetry 的一个主要目标是, 无论应用程序或系统采用何种编程语言、基础设施或运行时环境,你都可以轻松地将其仪表化。 重要的是,遥测数据的存储和可视化是有意留给其他工具处理的。

## 什么是可观测性?

可观测性具备检查系统输出来理解系统内部状态的能力。 在软件的上下文中,这意味着通过检查遥测数据(包括链路、指标和日志)来理解系统的内部状态。

要使系统可观测,必须对其进行仪表化。也就是说,代码必须发出链路、指标或日志。 然后,仪表化的数据必须发送到可观测性后端。

## 为什么选择 OpenTelemetry?

随着云计算、微服务架构和日益复杂的业务需求的兴起,软件和基础设施的可观测性需求比以往任何时候都要强烈。

OpenTelemetry 满足可观测性的需求,并遵循两个关键原则:

1. 你所生成的数据归属于你自己,不会被供应商锁定。
2. 你只需要学习一套 API 和约定。

这两个原则的结合赋予团队和组织在当今现代计算世界中所需的灵活性。

如果你想了解更多信息,请查阅 OpenTelemetry 的使命、愿景和价值观。

## 主要的 OpenTelemetry 组件

OpenTelemetry 包括以下主要组件:

- 适用于所有组件的规范
- 定义遥测数据形状的标准协议
- 为常见遥测数据类型定义标准命名方案的语义约定
- 定义如何生成遥测数据的 API
- 实现规范、API 和遥测数据导出的语言 SDK
- 实现常见库和框架的仪表化的库生态系统
- 可自动生成遥测数据的自动仪表化组件,无需更改代码
- OpenTelemetry Collector:接收、处理和导出遥测数据的代理
- 各种其他工具, 如用于 Kubernetes 的 OpenTelemetry Operator、 OpenTelemetry Helm Charts 和 FaaS 的社区资产

OpenTelemetry 广泛应用于许多已集成 OpenTelemetry 提供默认可观测性的库、服务和应用。

OpenTelemetry 得到众多供应商的支持,其中许多为 OpenTelemetry 提供商业支持并直接为此项目做贡献。

## 可扩展性

OpenTelemetry 被设计为可扩展的。一些扩展 OpenTelemetry 的例子包括:

- 向 OpenTelemetry Collector 添加接收器以支持来自自定义源的遥测数据
- 将自定义仪表化库加载到 SDK 中
- 创建适用于特定用例的 SDK 或 Collector 的分发
- 为尚不支持 OpenTelemetry 协议(OTLP)的自定义后端创建新的导出器
- 为非标准上下文传播格式创建自定义传播器

尽管大多数用户可能不需要扩展 OpenTelemetry,但此项目几乎每个层面都可以实现扩展。

## 历史

OpenTelemetry 是云原生计算基金会 (CNCF)的一个项目,是由 OpenTracing 和 OpenCensus 项目合并而诞生的。OpenTracing 和 OpenCensus 这两个项目合并而成的。原来这两个项目都是为解决同样的问题而创建的: 缺乏一种标准的方法来为代码进行仪表化并将遥测数据发送到可观测性后端。 由于这两个项目都无法独立解决这个问题,所以将其合并成立了 OpenTelemetry, 吸收了双方的优势,提供了统一的解决方案。
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
title: Collector 简介
date: 2024-07-04
dir:
text: Collector
order: 1
category:
- 分布式中间件
---
<!-- more -->

::: tip ✨✨✨✨✨
提供与供应商无关的方式来接收、处理和导出遥测数据。
:::

![OTEL Collector](./image/README/1720080699923.png)

## 介绍

OpenTelemetry Collector 提供了一种与供应商无关的实现方式,用于接收、处理和导出遥测数据。它消除了运行、操作和维护多个代理/收集器的需求。该收集器具有改进的可扩展性,支持开源可观察性数据格式(例如 Jaeger、Prometheus、Fluent Bit 等),可以将数据发送到一个或多个开源或商业后端。本地 Collector 代理是仪器库导出其遥测数据的默认位置。

## 目标

- **可用性**:合理的默认配置,支持流行协议,开箱即用地运行和收集数据。
- **性能**:在不同负载和配置下高度稳定和高效。
- **可观察性**:作为可观察服务的典范。
- **可扩展性**:无需修改核心代码即可定制。
- **统一性**:单一代码库,可部署为代理或收集器,支持追踪、指标和日志。

## 何时使用收集器

对于大多数语言特定的仪器库,您可以使用流行后端和 OTLP 的导出器。您可能会想,在哪些情况下使用收集器发送数据,而不是让每个服务直接发送到后端?

在尝试和开始使用 OpenTelemetry 时,直接将数据发送到后端是快速获得价值的好方法。此外,在开发或小规模环境中,您可以在没有收集器的情况下获得不错的结果。

然而,一般来说,我们建议将收集器与服务一起使用,因为它可以让您的服务快速卸载数据,收集器可以处理额外的操作,例如重试、批处理、加密甚至敏感数据过滤。

设置收集器也比您想象的更容易:每种语言的默认 OTLP 导出器都假设一个本地收集器端点,所以如果您启动一个收集器,它将自动开始接收遥测数据。

## 状态和发布

收集器的状态是:混合的,因为核心收集器组件目前具有混合的稳定性。

收集器组件的成熟度水平各不相同。每个组件的稳定性记录在其 README.md 中。您可以在注册表中找到所有可用收集器组件的列表。

有关发布内容,包括最新版本,请参见 Releases。
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
title: 部署模式
date: 2024-07-04
order: 3
category:
- 分布式中间件
---

::: tip ✨✨✨✨✨
您可以应用于部署OpenTelemetry收集器的模式

OpenTelemetry收集器由单个二进制文件组成,您可以根据不同的用例以不同的方式使用它。本节描述了部署模式、它们的用例以及优缺点,以及跨环境和多后端部署的收集器配置的最佳实践。

## No Collector
为什么以及如何直接从应用程序发送信号到后端

## Agent
为什么以及如何将信号发送到收集器,然后从那里发送到后端

## Gateway
为什么以及如何将信号发送到一个单一的OTLP端点,然后从那里发送到后端
:::


<!-- more -->

# No Collector

最简单的模式是不使用收集器。这种模式包括使用OpenTelemetry SDK进行应用程序的instrumentation,该应用程序直接将遥测信号(跟踪、指标、日志)导出到后端:

![无收集器](./image/deployment/1720083191871.png)

## 示例
查看编程语言的代码instrumentation以获取具体的端到端示例,了解如何直接从您的应用程序向后端导出信号。

## 权衡
### 优点:
- 易于使用(特别是在开发/测试环境中)
- 无需额外的操作部件(在生产环境中)
### 缺点:
- 如果收集、处理或摄入发生变化,需要更改代码
- 应用程序代码与后端之间存在强耦合
- 每种语言实现中可用的导出器数量有限
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
---
title: 安装 Collector
date: 2024-07-04
order: 2
category:
- 分布式中间件
---

::: tip ✨✨✨✨✨
您可以将OpenTelemetry收集器部署在各种操作系统和架构上。以下说明显示了如何下载并安装最新稳定版本的收集器。

如果您不熟悉适用于OpenTelemetry收集器的部署模型、组件和仓库,首先请查看数据收集和部署方法页面。
:::


<!-- more -->

## Docker

以下命令拉取Docker镜像并在容器中运行收集器。将0.104.0替换为您要运行的收集器版本。

::: tabs
@tab:active DockerHub
```shell
docker pull otel/opentelemetry-collector-contrib:0.104.0
docker run otel/opentelemetry-collector-contrib:0.104.0
```
:::

若要从工作目录加载自定义配置文件,请将该文件作为卷挂载:

::: tabs
@tab:active DockerHub
```shell
docker run -v $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml otel/opentelemetry-collector-contrib:0.104.0
```
:::

## Docker Compose

您可以在现有的docker-compose.yaml文件中添加OpenTelemetry收集器,例如:

```yaml
otel-collector:
image: otel/opentelemetry-collector-contrib
volumes:
- ./otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml
ports:
- 1888:1888 # pprof扩展
- 8888:8888 # Collector暴露的Prometheus指标
- 8889:8889 # Prometheus导出器指标
- 13133:13133 # health_check扩展
- 4317:4317 # OTLP gRPC接收器
- 4318:4318 # OTLP http接收器
- 55679:55679 # zpages扩展
```
## Kubernetes
以下命令部署一个作为 daemonset 和一个单一网关实例的代理:
```sh
kubectl apply -f https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/v0.104.0/examples/k8s/otel-config.yaml
```

此示例旨在作为起点,在实际生产使用前需要进行扩展和自定义。对于生产就绪的自定义和安装,请参阅 OpenTelemetry Helm 图表。

您还可以使用 OpenTelemetry Operator 来管理和维护 OpenTelemetry 收集器实例,具有自动升级处理、基于 OpenTelemetry 配置的 Service 配置、自动将 sidecar 注入部署等功能。

有关如何使用收集器与 Kubernetes 的指南,请参阅 Kubernetes 入门。

## Nomad

您可以在 HashiCorp Nomad 上的 Getting Started with OpenTelemetry 找到参考作业文件,以将收集器作为agent、gateway和全功能示例部署。

## Linux

每个收集器发布版本都包括针对 Linux amd64/arm64/i386 系统的 APK、DEB 和 RPM 打包。安装后,您可以在 /etc/otelcol/config.yaml 中找到默认配置。

:::tip
systemd 是自动服务配置所必需的。
:::

## APK安装

要在Alpine系统上开始使用,请运行以下命令:

::: tabs
@tab:active AMD64
```shell
apk update
apk add wget shadow
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.104.0/otelcol_0.104.0_linux_amd64.apk
apk add --allow-untrusted otelcol_0.104.0_linux_amd64.apk
```
:::

## DEB安装

要在Debian系统上开始使用,请运行以下命令:

::: tabs
@tab:active AMD64
```shell
sudo apt-get update
sudo apt-get -y install wget systemctl
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.104.0/otelcol_0.104.0_linux_amd64.deb
sudo dpkg -i otelcol_0.104.0_linux_amd64.deb
```
:::

## RPM安装

要在Red Hat系统上开始使用,请运行以下命令:

::: tabs
@tab:active AMD64
```shell
sudo yum update
sudo yum -y install wget systemctl
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.104.0/otelcol_0.104.0_linux_amd64.rpm
sudo rpm -ivh otelcol_0.104.0_linux_amd64.rpm
```
:::

## 手动Linux安装

Linux发布版本适用于各种架构。您可以下载包含二进制文件的文件,并在您的机器上手动安装:

```sh
curl --proto '=https' --tlsv1.2 -fOL https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.104.0/otelcol_0.104.0_linux_amd64.tar.gz
tar -xvf otelcol_0.104.0_linux_amd64.tar.gz
```

## 自动服务配置

默认情况下,安装后,otelcol systemd服务会使用--config=/etc/otelcol/config.yaml选项启动。

要使用不同的设置,请在/etc/otelcol/otelcol.conf系统d环境文件中设置OTELCOL_OPTIONS变量,以适当的命令行选项。您可以运行/usr/bin/otelcol --help来查看所有可用的选项。您可以通过向此文件添加它们,向otelcol服务传递额外的环境变量。

如果您修改了收集器配置文件或/etc/otelcol/otelcol.conf,请运行以下命令重启otelcol服务以应用更改:

```sh
sudo systemctl restart otelcol
```

要检查otelcol服务的输出,请运行:

```sh
sudo journalctl -u otelcol
```

## macOS

macOS发布版本适用于Intel和ARM系统。发布版本打包为gzipped tarball (.tar.gz)。解压后,每个收集器发布版本都包含一个otelcol可执行文件。

## Windows

Windows发布版本打包为gzipped tarball (.tar.gz)。每个收集器发布版本都包含一个otelcol.exe可执行文件。

## 从源代码构建

您可以使用以下命令基于本地操作系统构建最新版本的收集器:

```sh
git clone https://github.com/open-telemetry/opentelemetry-collector.git
cd opentelemetry-collector
make install-tools
make otelcorecol
```
Loading

0 comments on commit 2eab188

Please sign in to comment.