Odigos项目:如何添加新的可观测性数据目的地

Odigos项目:如何添加新的可观测性数据目的地

odigos Distributed tracing without code changes. 🚀 Instantly monitor any application using OpenTelemetry and eBPF odigos 项目地址: https://gitcode.com/gh_mirrors/odi/odigos

前言

在现代云原生环境中,可观测性数据(包括指标、日志和追踪)的高效收集与分析至关重要。Odigos作为一个创新的可观测性数据路由平台,能够自动检测应用并收集遥测数据,然后将其发送到各种可观测性后端服务。

本文将详细介绍如何在Odigos项目中添加新的可观测性数据目的地(Destination),使平台能够支持更多的可观测性后端服务。

准备工作

在开始添加新目的地之前,需要了解几个关键概念:

  1. 目的地类型:指可观测性后端服务的类型,如Prometheus、Jaeger等
  2. 信号类型:Odigos支持三种信号类型 - 追踪(Traces)、指标(Metrics)和日志(Logs)
  3. 收集器配置:Odigos使用OpenTelemetry收集器来处理和转发遥测数据

添加新目的地的步骤

添加新目的地需要完成两个主要部分的工作:用户界面扩展和收集器配置实现。

第一步:扩展用户界面

1. 添加目的地Logo

destinations/logos/目录下添加新目的地的Logo文件,要求使用SVG格式,例如mydest.svg

2. 创建目的地配置文件

destinations/data/目录下创建YAML配置文件,例如mydest.yaml。这个文件定义了目的地在UI中的显示和行为:

apiVersion: internal.odigos.io/v1beta1
kind: Destination
metadata:
  type: mydest
  displayName: My Destination
  category: managed
spec:
  image: mydest.svg
  signals:
    traces:
      supported: true
    metrics:
      supported: true
    logs:
      supported: false
  fields:
    - name: MYDEST_URL
      displayName: URL
      componentType: input
      componentProps:
        required: true
    - name: MYDEST_REGION
      displayName: Region
      componentType: input
      componentProps:
        required: true
    - name: MYDEST_API_KEY
      displayName: API Key
      componentType: input
      componentProps:
        type: password
        required: true
      secret: true

配置说明:

  • type: 目的地的唯一标识符
  • displayName: 在UI中显示的名称
  • category: 目的地类别(如managed表示托管服务)
  • signals: 指定支持哪些信号类型
  • fields: 定义用户在UI中需要填写的配置字段

第二步:实现收集器配置

1. 添加目的地类型枚举

common/dests.go文件中添加新目的地的枚举值:

const (
    // 其他目的地类型...
    MyDestDestinationType DestinationType = "mydest"
)
2. 创建收集器配置文件

autoscaler/controllers/gateway/config目录下创建Go文件,例如mydest.go,实现目的地特定的收集器配置逻辑:

package config

import (
    "errors"
    "fmt"
    "github.com/odigos-io/odigos/common"
)

const (
    regionKey = "MYDEST_REGION"
    urlKey    = "MYDEST_URL"
    apiKeyKey = "MYDEST_API_KEY"
)

type MyDest struct{}

func (m *MyDest) DestType() common.DestinationType {
    return common.MyDestDestinationType
}

func (m *MyDest) ModifyConfig(dest ExporterConfigurer, currentConfig *Config) error {
    config := dest.GetConfig()
    apiKey, exists := config[apiKeyKey]
    if !exists {
        return errors.New("My Destination API key(\"MYDEST_API_KEY\") not specified, MyDest will not be configured")
    }

    region, exists := config[regionKey]
    if !exists {
        region = "us"
    }

    endpoint, exists := config[urlKey]
    if !exists {
        endpoint = fmt.Sprintf("https://%s.mydest.com:4317", region)
    }

    exporterName := "otlp/mydest-" + dest.GetID()
    currentConfig.Exporters[exporterName] = GenericMap{
        "endpoint": endpoint,
        "headers": GenericMap{
            "x-mydest-header-apikey": apiKey,
        },
    }

    if isTracingEnabled(dest) {
        tracesPipelineName := "traces/mydest-" + dest.GetID()
        currentConfig.Service.Pipelines[tracesPipelineName] = Pipeline{
            Exporters: []string{exporterName},
        }
    }

    if isMetricsEnabled(dest) {
        metricsPipelineName := "metrics/mydest-" + dest.GetID()
        currentConfig.Service.Pipelines[metricsPipelineName] = Pipeline{
            Exporters: []string{exporterName},
        }
    }

    return nil
}

关键点说明:

  • DestType()方法返回新添加的目的地枚举值
  • ModifyConfig()方法负责修改OpenTelemetry收集器配置
  • 确保为每个导出器和管道使用唯一名称(使用dest.GetID()保证唯一性)
  • 使用isTracingEnabledisMetricsEnabled等工具方法检查启用的信号类型
3. 注册新目的地

最后,在common/config/root.go文件中注册新目的地:

var availableConfigers = []Configer{/* 其他目的地 */, &MyDest{}}

最佳实践

  1. 错误处理:为所有必需的配置参数添加适当的错误检查
  2. 默认值:为可选参数提供合理的默认值
  3. 命名规范:遵循现有的命名约定,确保导出器和管道名称唯一
  4. 安全考虑:正确处理敏感信息(如API密钥)

测试与验证

添加新目的地后,建议进行以下测试:

  1. 在UI中验证新目的地是否显示正确
  2. 测试配置表单的验证逻辑
  3. 验证数据是否能正确发送到新目的地
  4. 测试不同信号类型的组合

总结

通过本文的指导,我们了解了如何在Odigos项目中添加新的可观测性数据目的地。这个过程包括UI扩展和收集器配置两个主要部分。添加新目的地可以扩展Odigos的功能,使其支持更多的可观测性后端服务,为用户提供更多选择。

记住,每个目的地可能有其特定的配置要求和数据处理方式,因此在实现时需要充分了解目标服务的API和协议规范。

odigos Distributed tracing without code changes. 🚀 Instantly monitor any application using OpenTelemetry and eBPF odigos 项目地址: https://gitcode.com/gh_mirrors/odi/odigos

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

严微海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值