组件控制器
组件控制器是 Alloy 的核心部分,用于在运行时管理组件。
组件控制器
- 读取并验证配置文件。
- 管理已定义组件的生命周期。
- 评估用于配置组件的参数。
- 报告已定义组件的健康状况。
组件图
当表达式将一个组件的参数设置为另一个组件的导出字段时,组件之间就形成了关系。
所有组件及其关系的集合定义了一个有向无环图(DAG)。此图告知组件控制器哪些引用有效以及评估组件的顺序。
有效的配置文件中,组件不能引用自身或创建循环引用。
// INVALID: local.file.some_file can't reference itself:
local.file "self_reference" {
filename = local.file.self_reference.content
}
// INVALID: cyclic reference between local.file.a and local.file.b:
local.file "a" {
filename = local.file.b.content
}
local.file "b" {
filename = local.file.a.content
}
组件评估
组件评估是将表达式计算为具体值的过程。这些值配置组件的运行时行为。一旦所有组件都被评估、配置并运行,组件控制器就完全加载了。
组件控制器仅在其所有依赖项评估完成后才评估该组件。没有依赖项的组件可以在此过程中的任何时候进行评估。
组件重新评估
组件是动态的,可以在其生命周期内多次更新其导出。
当组件更新其导出时,会发生控制器重新评估。组件控制器会重新评估引用了发生更改组件的任何组件及其依赖组件,直到所有受影响的组件都被重新评估。
组件健康状况
在任何时候,组件都可以处于以下健康状态之一
- 未知:默认状态。组件尚未运行。
- 健康:组件按预期工作。
- 不健康:组件未按预期工作。
- 已退出:组件已停止且不再运行。
默认情况下,组件控制器决定组件的健康状况。如果组件正在运行且最近一次评估成功,则控制器将其标记为健康。
一些组件可以报告自己的健康信息。例如,如果其监控的文件被删除,local.file
组件会报告自身不健康。
组件的整体健康状况是通过结合控制器报告的组件健康状况和组件特定的健康信息来确定的。
组件的健康状况与其引用的任何组件的健康状况无关。即使组件引用了不健康组件的导出字段,它也可以是健康的。
评估失败
当组件评估失败时,它将被标记为不健康,并附带失败原因。
尽管发生失败,组件会继续正常运行。它使用上次有效的评估参数集,并可以继续导出新值。
此行为可防止故障传播。例如,如果您的 local.file
组件(负责监控 API 密钥)停止工作,其他组件将继续使用上次有效的 API 密钥,直到该组件恢复。
内存流量
暴露 HTTP 端点的组件(例如prometheus.exporter.unix
)可以使用内部地址绕过网络并在内存中进行通信。同一进程中的组件可以通信,无需像身份验证或相互 TLS 这样的网络级别保护。
内部地址默认为 alloy.internal:12345
。如果此地址与您的网络上的真实目标冲突,请在使用run命令时通过 --server.http.memory-addr
标志进行更改。
组件必须选择使用内存流量。请查阅各个组件的文档以了解是否支持内存流量。
配置文件更新
/-/reload HTTP 端点和 SIGHUP 信号会通知组件控制器重新加载配置文件。重新加载时,控制器会将正在运行的组件与配置文件同步。它会移除不再定义的组件,并创建文件中新增的组件。重新加载后,控制器会重新评估所有受管理的组件。