基于grafana和loki的轻量级日志平台目前有2种选择Promtail和alloy,查阅各方资料都说Promtail将在后续版本迭代中放弃,deep seek对两者对比如下

deepseek对将来组件分析以及预测,长远来看因我们是新项目所以直接使用alloy,这样不需要将来考虑迁移以及版本升级问题

如下进入对alloy部署
alloy版本:https://github.com/grafana/alloy/releases
alloy升级日志:https://github.com/grafana/alloy/blob/main/CHANGELOG.md
因网络不稳定原因下载了很多次,终于下载成功,在此上传csdn平台,如遇同样问题可以这里下载最新版本1.12.1:https://download.csdn.net/download/goodlook0123/92533514
centos7在github上下载的包

下载完成后,直接解压并非一个文件夹是一个文件


bash
# 1. 查看解压出的文件
ls -lh alloy-linux-amd64
# 2. 检查文件类型(应该是可执行二进制文件)
file alloy-linux-amd64
# 3. 查看文件大小(应该比较大,几十MB)
du -h alloy-linux-amd64
# 4. 检查是否有执行权限
ls -la alloy-linux-amd64
# 5.添加执行权限
chmod +x alloy-linux-amd64
执行如上命令会有如下结果为正常

bash
#移动到系统目录,方便执行命令,systemd 服务容易配置
mv alloy-linux-amd64 /usr/local/bin/alloy
#遵循linux的结构标准(FHS)标准,/etc/ - 配置文件(静态,可读) /var/lib/ - 状态数据(动态,可写)、/var/log/ - 日志文件、/var/run/ - 运行时文件、/tmp/ - 临时文件
mkdir -p /etc/alloy /var/lib/alloy
#授权
chown -R alloy:alloy /etc/alloy /var/lib/alloy
bash
sudo chown -R root:root /etc/alloy # 配置文件:root 所有
sudo chown -R root :root /var/lib/alloy # 数据文件:alloy 所有
sudo chown -R root :root /var/log/alloy # 日志文件:alloy 所有
# 设置权限
sudo chmod 755 /etc/alloy # root可读写,其他只读执行
sudo chmod 750 /var/lib/alloy # alloy可读写,其他无权限
sudo chmod 750 /var/log/alloy # alloy可读写,其他无权限

查看启动状态
bash
#加载配置
systemctl daemon-reload
#启动服务
systemctl start alloy
#停止服务
systemctl stop alloy
#查看启动状态
systemctl status alloy
# 查看 Alloy 服务的实时日志
sudo journalctl -u alloy -f
# 查看完整的服务日志
sudo journalctl -u alloy
# 查看特定时间段的日志
sudo journalctl -u alloy --since "10:00" --until "11:00"
# 查看最近100行日志
sudo journalctl -u alloy -n 100
# 以 JSON 格式输出日志
sudo journalctl -u alloy -o json
# 查看错误级别的日志
sudo journalctl -u alloy -p err

至此启动完成,但是有个问题就是推送9090端口有点问题继续调试

登录控制台



上述问题调整中遇到了很多问题,最终配置信息如下,复制粘贴即可使用
重要配置文件 vim alloy_config.conf
bash
// 方法2:为每个应用配置不同的 loki.write
loki.source.file "cloudapp_a_logs" {
targets = [{
__path__ = "xxxx日志文件.log",
}]
forward_to = [loki.write.a.receiver]
}
loki.source.file "bn_logs" {
targets = [{
__path__ = "xxxx日志文件2.log",
}]
forward_to = [loki.write.b.receiver]
}
// 后端应用写入配置
loki.write "a" {
endpoint {
url = "http://loki的ip:13100/loki/api/v1/push"
}
external_labels = {
job = "a",
app = "cloudapp",
type = "a",
host = "iZ2zegh3s8azjnbtcvatevZ",
env = "production",
}
}
// 区块链应用写入配置
loki.write "bn" {
endpoint {
url = "http://loki的ip:13100/loki/api/v1/push"
}
external_labels = {
job = "b",
app = "cloudapp",
type = "b",
host = "iZ2zegh3s8azjnbtcvatevZ",
env = "production",
}
}
~
~
创建并启动脚本如下
cat << EOF | sudo tee /etc/systemd/system/alloy.service
bash
[Unit]
Description=Grafana Alloy
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/bin/alloy run 上述配置文件.conf
#/etc/alloy/alloy_config.conf
# 将所有输出(stdout/stderr)重定向到 journal
StandardOutput=journal
StandardError=journal
SyslogIdentifier=alloy
# 设置日志标签,便于过滤
LogExtraFields=SYSLOG_IDENTIFIER=alloy
# 创建日志目录(如果需要文件备份)
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /日志文件夹路径/logs
ExecStartPre=/bin/chown -R root:root /日志文件夹路径
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
上述配置完成,启动后


我是单机,红线为集群问题没有深入研究,查看启动日志如下 journalctl -u alloy -f

上述配置完成,测试推送后在granfa上可以正常查看日志

为此在2处配置label信息,label配置信息对照alloy_config.conf配置文件
TypeScript
1. job(必填 - 最重要的标签)
含义:标识具体的服务/应用名称
示例:
a - 云应用后端服务
b - 云区块链服务
user-service - 用户服务
order-service - 订单服务
建议:使用应用的唯一标识名,在 Grafana 中常用作筛选条件
2. app(推荐)
含义:标识应用组/产品线
示例:
cloudapp - 云应用产品线
finance-app - 金融应用
erp-system - ERP系统
建议:同一业务线的多个微服务使用相同的 app 标签
3. type(推荐)
含义:标识服务类型/角色
示例:
backend - 后端服务
frontend - 前端服务
api-gateway - API网关
database - 数据库
cache - 缓存服务
middleware - 中间件
blockchain - 区块链服务
建议:用于按技术栈分类
4. host(推荐)
含义:运行的主机标识
示例:
iZ2zegh3s8azjnbtc - 主机名
192.168.1.100 - IP地址
server-01 - 服务器编号
建议:使用主机名或易于识别的标识
5. env(必填)
含义:环境标识
示例:
production - 生产环境
staging - 预发布环境
testing - 测试环境
development - 开发环境
uat - 用户验收测试环境
建议:区分不同环境,便于权限控制和故障排查