使用 Grafana Alloy 监控 TCP 日志
通过裸 TCP 在网络上写入日志是一种广泛使用的方法,用于在系统之间传输日志数据。这种方法提供了一种直接、面向连接的方式,用于将日志从客户端(例如应用程序或日志代理)发送到远程服务器(例如日志聚合器或中心日志系统)。使用 Alloy,您可以收集日志,将其转发到 Grafana 技术栈,并创建仪表盘来监控系统行为。
alloy-scenarios
仓库包含了 Alloy 部署的完整工作示例。克隆仓库并使用示例部署来了解 Alloy 如何收集、处理和导出遥测信号。
在此示例场景中,Alloy 使用 TCP 端点收集应用程序以 JSON payload 形式写入的日志,并将它们转发到 Loki 目标。
开始之前
请确保您已安装以下项
注意
您需要管理员权限才能运行
docker
命令。
克隆并部署示例
按照以下步骤克隆场景仓库并部署监控示例
克隆 Alloy 场景仓库
git clone https://github.com/grafana/alloy-scenarios.git
启动 Docker 部署 Grafana 技术栈
cd alloy-scenarios/logs-tcp docker compose up -d
验证 Docker 容器状态
docker ps
(可选)在探索完本示例后停止 Docker 关闭 Grafana 技术栈
docker compose down
监控和可视化您的数据
使用 Grafana 监控您的部署健康状况并可视化您的数据。
监控 Alloy
要监控您的 Alloy 部署健康状况,请打开浏览器并访问 https://:12345。
有关 Alloy UI 的更多信息,请参阅调试 Grafana Alloy。
可视化您的数据
要使用 Grafana Logs Drilldown,请打开浏览器并访问 https://:3000/a/grafana-lokiexplore-app。
要创建仪表盘来可视化您的指标和日志,请打开浏览器并访问 https://:3000/dashboards。
理解 Alloy 配置
本示例使用 config.alloy
文件配置用于日志记录的 Alloy 组件。您可以在克隆的仓库中找到 config.alloy
文件,路径为 alloy-scenarios/logs-tcp/
。
配置中包含 livedebugging
,用于将实时数据流式传输到 Alloy UI。
配置 livedebugging
livedebugging
将组件的实时数据直接流式传输到 Alloy UI。有关此功能的更多详细信息,请参阅故障排除文档。
livedebugging
livedebugging
默认禁用。通过 livedebugging
配置块显式启用它,才能在 Alloy UI 中查看调试数据。
livedebugging {
enabled = true
}
配置日志记录
本示例中的日志记录配置需要三个组件
loki.source.api
loki.process
loki-write
loki.source.api
loki.source.api
组件通过 HTTP 接收日志条目,并将其转发到其他 Loki 组件。在此示例中,该组件需要以下参数:
listen_address
: 服务器监听新连接的网络地址。将此参数设置为0.0.0.0
表示服务器监听所有 IP 地址。listen_port
: 服务器监听新连接的端口。forward_to
: 发送日志条目到的接收器列表。
loki.source.api "loki_push_api" {
http {
listen_address = "0.0.0.0"
listen_port = 9999
}
forward_to = [
loki.process.labels.receiver,
]
}
loki.process
loki.process
组件从其他 Loki 组件接收日志条目,应用处理阶段,并将结果转发到接收器列表。在此示例中,该组件需要以下参数:
expressions
: 定义提取的数据名称及其填充值的键值对。values
: 定义要设置的标签及其查找方式的键值对。forward_to
: 发送日志条目到的接收器列表。
loki.process "labels" {
stage.json {
expressions = { "extracted_service" = "service_name",
"extracted_code_line" = "code_line",
"extracted_server" = "server_id",
}
}
stage.labels {
values = {
"service_name" = "extracted_service",
}
}
stage.structured_metadata {
values = {
"code_line" = "extracted_code_line",
"server" = "extracted_server",
}
}
forward_to = [loki.write.local.receiver]
}
loki-write
loki.write
组件将日志写入 Loki 目标。在此示例中,该组件需要以下参数:
url
: 定义发送日志到的 Loki 完整 URL 端点。
loki.write "local" {
endpoint {
url = "http://loki:3100/loki/api/v1/push"
}
}