组件控制器
组件控制器是 Alloy 的核心部分,用于在运行时管理组件。
组件控制器负责:
- 读取和验证配置文件。
- 管理已定义组件的生命周期。
- 评估用于配置组件的参数。
- 报告已定义组件的运行状况。
组件图
当使用表达式将一个组件的参数设置为另一个组件的导出字段时,将在 组件 之间创建关系。
所有组件及其之间关系的总和定义了一个 有向无环图 (DAG),该图告知组件控制器哪些引用有效以及组件必须按什么顺序进行评估。
为了使配置文件有效,组件不得引用自身或包含循环引用。
// INVALID: local.file.some_file can not 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
信号可以通知组件控制器重新加载配置文件。发生这种情况时,组件控制器会将正在运行的组件集与配置文件中的组件同步,删除配置文件中不再定义的组件,并创建添加到配置文件中的新组件。重新加载后,控制器管理的所有组件都将被重新评估。