菜单
开源

组件

组件 是 Alloy 的构建块。每个组件处理单个任务,例如检索秘密或收集 Prometheus 指标。

组件由以下组成部分组成

  • 参数: 配置组件的设置。
  • 导出: 组件公开给其他组件的命名值。

每个组件都有一个描述它负责什么的名称。例如,local.file 组件负责检索磁盘上的文件内容。

您通过首先用用户指定的标签提供组件的名称,然后提供配置组件的参数来指定配置文件中的组件。

alloy
discovery.kubernetes "pods" {
  role = "pod"
}

discovery.kubernetes "nodes" {
  role = "node"
}

您通过组合组件名称及其标签来参考组件。例如,您可以将标记为 foolocal.file 组件引用为 local.file.foo

组件的名称及其标签的组合必须在配置文件中是唯一的。将组件名称与标签组合意味着您可以定义多个组件实例,只要每个实例具有不同的标签值。

管道

配置文件中组件的大多数参数都是常量值,例如将 log_level 属性设置为引号字符串 "debug"

alloy
log_level = "debug"

您使用 表达式 来动态计算参数在运行时的值。您可以使用表达式检索环境变量的值(log_level = env("LOG_LEVEL"))或引用另一个组件的导出字段(log_level = local.file.log_level.content)。

当组件的参数引用另一个组件的导出字段时,您将创建一个依赖关系。组件的参数现在依赖于另一个组件的导出。每当引用的组件的导出更新时,组件的输入都会重新评估。

组件之间的引用集形成的数据流构成一个 管道

以下是一个示例管道:

  1. local.file 组件监视包含 API 密钥的文件。
  2. prometheus.remote_write 组件配置为接收指标并将它们转发到使用来自 local.file 的 API 密钥进行身份验证的外部数据库。
  3. discovery.kubernetes 组件发现并导出可以收集指标的 Kubernetes Pods。
  4. prometheus.scrape 组件引用先前组件的导出,并将收集的指标发送到 prometheus.remote_write 组件。
Example of a pipeline

以下配置文件表示该管道。

alloy
// Get our API key from disk.
//
// This component has an exported field called "content", holding the content
// of the file.
//
// local.file will watch the file and update its exports any time the
// file changes.
local.file "api_key" {
  filename  = "/var/data/secrets/api-key"

  // Mark this file as sensitive to prevent its value from being shown in the
  // UI.
  is_secret = true
}

// Create a prometheus.remote_write component, which other components can send
// metrics to.
//
// This component exports a "receiver" value, which can be used by other
// components to send metrics.
prometheus.remote_write "prod" {
  endpoint {
    url = "https://prod:9090/api/v1/write"

    basic_auth {
      username = "admin"

      // Use the password file to authenticate with the production database.
      password = local.file.api_key.content
    }
  }
}

// Find Kubernetes pods where we can collect metrics.
//
// This component exports a "targets" value, which contains the list of
// discovered pods.
discovery.kubernetes "pods" {
  role = "pod"
}

// Collect metrics from Kubernetes pods and send them to prod.
prometheus.scrape "default" {
  targets    = discovery.kubernetes.pods.targets
  forward_to = [prometheus.remote_write.prod.receiver]
}