组件
组件 是 Alloy 的构建块。每个组件处理单个任务,例如检索秘密或收集 Prometheus 指标。
组件由以下组成部分组成
- 参数: 配置组件的设置。
- 导出: 组件公开给其他组件的命名值。
每个组件都有一个描述它负责什么的名称。例如,local.file
组件负责检索磁盘上的文件内容。
您通过首先用用户指定的标签提供组件的名称,然后提供配置组件的参数来指定配置文件中的组件。
discovery.kubernetes "pods" {
role = "pod"
}
discovery.kubernetes "nodes" {
role = "node"
}
您通过组合组件名称及其标签来参考组件。例如,您可以将标记为 foo
的 local.file
组件引用为 local.file.foo
。
组件的名称及其标签的组合必须在配置文件中是唯一的。将组件名称与标签组合意味着您可以定义多个组件实例,只要每个实例具有不同的标签值。
管道
配置文件中组件的大多数参数都是常量值,例如将 log_level
属性设置为引号字符串 "debug"
。
log_level = "debug"
您使用 表达式 来动态计算参数在运行时的值。您可以使用表达式检索环境变量的值(log_level = env("LOG_LEVEL")
)或引用另一个组件的导出字段(log_level = local.file.log_level.content
)。
当组件的参数引用另一个组件的导出字段时,您将创建一个依赖关系。组件的参数现在依赖于另一个组件的导出。每当引用的组件的导出更新时,组件的输入都会重新评估。
组件之间的引用集形成的数据流构成一个 管道。
以下是一个示例管道:
local.file
组件监视包含 API 密钥的文件。prometheus.remote_write
组件配置为接收指标并将它们转发到使用来自local.file
的 API 密钥进行身份验证的外部数据库。discovery.kubernetes
组件发现并导出可以收集指标的 Kubernetes Pods。prometheus.scrape
组件引用先前组件的导出,并将收集的指标发送到prometheus.remote_write
组件。
以下配置文件表示该管道。
// 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]
}