alloy 配置解析
alloy 配置解析
// ============================================
// 全局配置
// ============================================
logging {
level = "info" // 设置 Alloy 自身日志级别为 info,用于日常监控和问题排查
}
// ============================================
// 本地 Loki 输出(全量日志)
// ============================================
loki.write "local" {
endpoint {
url = "http://192.168.2.32:3100/loki/api/v1/push" // 本地 Loki 的 API 地址
batch_size = "512KiB" // 每批日志大小上限 512KB,达到后立即发送
batch_wait = "5s" // 最多等待 5 秒,即使未满也会发送
min_backoff_period = "500ms" // 发送失败后首次重试等待 0.5 秒
max_backoff_period = "15s" // 重试间隔最大 15 秒(指数退避)
max_backoff_retries = 10 // 最多重试 10 次,之后丢弃
}
}
// ============================================
// 远程 Loki 输出 - 全量日志(租户 puxian)
// ============================================
loki.write "remote" {
endpoint {
url = "https://loki-central.alex.com/loki/api/v1/push" // 远端中央 Loki 地址
tenant_id = "puxian" // Loki 多租户模式下的租户 ID
batch_size = "256KiB" // 每批 256KB(网络传输比本地更保守)
batch_wait = "10s" // 等待 10 秒(减少网络请求次数)
min_backoff_period = "1s" // 重试起始等待 1 秒
max_backoff_period = "60s" // 重试最大等待 60 秒
max_backoff_retries = 10
}
}
// ============================================
// 远程 Loki 输出 - 仅错误日志(租户 huilai)
// ============================================
loki.write "error_remote" {
endpoint {
url = "https://loki-central.alex.com/loki/api/v1/push" // 同远端地址
tenant_id = "huilai" // 不同租户 ID,用于隔离错误日志
batch_size = "256KiB"
batch_wait = "10s"
min_backoff_period = "1s"
max_backoff_period = "60s"
max_backoff_retries = 10
}
}
// ============================================
// 错误日志过滤器:只保留 ERROR/SEVERE/FATAL 级别的日志
// ============================================
loki.process "error_filter" {
// 处理后的日志发送到 error_remote 输出组件
forward_to = [loki.write.error_remote.receiver]
// match 阶段:匹配条件满足时执行指定动作
stage.match {
// selector: LogQL 标签选择器 + 过滤表达式
// {project=~".+"} → 只处理带有 project 标签的日志
// !~ "... " → 不匹配以下正则表达式的日志
// (?i) → 不区分大小写
// ERROR|SEVERE|FATAL → 匹配这三种级别
// 整体含义:如果日志内容不包含 ERROR/SEVERE/FATAL,则执行 drop
selector = "{project=~\".+\"} !~ \"(?i)(ERROR|SEVERE|FATAL)\""
action = "drop" // 丢弃匹配到的日志(即非错误日志被丢弃,错误日志被保留)
}
}
// ============================================
// Bootstrap 应用的日志采集配置
// ============================================
// 1. 文件发现:定义要监控哪些日志文件
local.file_match "bootstrap" {
path_targets = [
{
__path__ = "/data/logs/bootstrap/*.log", // 匹配该目录下所有 .log 文件
// ========== 以下为自定义标签,会附加到每条日志上 ==========
project = "project-huilai", // 项目名称
product = "aiboche", // 产品名称
logtype = "app", // 日志类型(应用日志)
ipaddr = "192.168.0.18", // 服务器 IP
host = "host-192-168-0-18",// 主机名
app = "bootstrap", // 应用名称
},
{
__path__ = "/data/logs/bootstrap/**/*.log", // ** 递归匹配所有子目录下的 .log 文件
// 标签与上面完全相同
project = "project-huilai",
product = "aiboche",
logtype = "app",
ipaddr = "192.168.0.18",
host = "host-192-168-0-18",
app = "bootstrap",
},
]
}
// 2. 标签重写:过滤掉不需要的日志文件
discovery.relabel "bootstrap" {
// 从 local.file_match 获取发现的所有文件目标
targets = local.file_match.bootstrap.targets
// 规则:如果文件路径包含 "catalina",则丢弃该目标
rule {
source_labels = ["__path__"] // 从文件路径标签取值
regex = ".*catalina.*" // 匹配包含 catalina 的路径(Tomcat 日志)
action = "drop" // 丢弃匹配到的目标,不采集这些文件
}
}
// 3. 日志读取:实际读取文件内容
loki.source.file "bootstrap" {
// 使用经过 relabel 过滤后的目标列表
targets = discovery.relabel.bootstrap.output
// 关键:日志处理完成后发送到 bootstrap 处理组件
forward_to = [loki.process.bootstrap.receiver]
tail_from_end = true // 从文件末尾开始读取,不读历史内容
// 记录文件读取进度的位置文件路径(防止重启后重复读取)
legacy_positions_file = "/tmp/alloy-positions-bootstrap.yaml"
}
// 4. 日志处理/分发:决定日志流向哪里
loki.process "bootstrap" {
// 收到的日志同时发给三个下游:
forward_to = [
loki.write.local.receiver, // ① 本地 Loki(全量)
loki.write.remote.receiver, // ② 远端 Loki 租户 puxian(全量)
loki.process.error_filter.receiver, // ③ 错误日志过滤器(仅错误会继续流向 error_remote)
]
}
本文来自博客园,作者:liwenchao1995,转载请注明原文链接:https://www.cnblogs.com/liwenchao1995/p/19982173

浙公网安备 33010602011771号