# log-agent-deployer **Repository Path**: erlang-boy/log-agent-deployer ## Basic Information - **Project Name**: log-agent-deployer - **Description**: ai工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-03 - **Last Updated**: 2026-05-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # log-agent-deployer > 通过 SSH 自动将 Promtail 部署到目标服务器,支持 keyboard-interactive 认证、admin 特殊 Shell 激活流程、SFTP 上传。 ## 系统架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ 部署服务器 (deploy-all.sh) │ │ │ │ servers.json ──→ log-agent-deployer ──→ SSH/SFTP ──→ 目标 │ │ │ │ 1. 上传 promtail 二进制 │ │ 2. 配置 /etc/promtail/config.yml │ │ 3. 启动 promtail 服务 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────┐ │ Loki + Grafana │ │ (日志存储 + 可视化) │ └─────────────────────┘ ``` ## 功能特性 - **多方式 SSH 认证**:密码 / keyboard-interactive / admin 特殊 Shell - **SSH 激活流程**:支持 admin 用户登录特殊 Shell 执行 `upsshd start` 激活 62222 端口 - **SFTP 上传**:自动通过 SFTP 上传 Promtail 二进制到目标服务器 - **自动服务管理**:自动检测 systemd / 非 systemd 环境并启动服务 - **幂等设计**:重复执行安全,不会重复部署 - **批量部署**:支持 JSON 格式服务器列表,批量并发部署 ## 快速开始 ### 方式一:一键部署(推荐) ```bash # 下载脚本 curl -O https://gitee.com/erlang-boy/log-agent-deployer/raw/master/deploy-all.sh chmod +x deploy-all.sh # 运行(自动安装 Docker + 启动 Loki + Grafana + Promtail) sudo ./deploy-all.sh ``` ### 方式二:手动部署 ```bash # 1. 克隆代码 git clone https://gitee.com/erlang-boy/log-agent-deployer.git cd log-agent-deployer # 2. 下载 log-agent-deployer 二进制 # 从 Release 页面下载编译好的二进制,或自行编译: # go build -o log-agent-deployer ./cmd/deployer # 3. 启动 Loki + Grafana docker compose up -d loki grafana # 4. 部署 Promtail 到目标服务器 ./log-agent-deployer deploy \ --host 192.168.1.10 \ --user root \ --password your_password \ --logs /var/log/app,/var/log/nginx \ --loki-addr http://your-loki-server:3100 ``` ## 工具使用 ### deploy 命令 ```bash ./log-agent-deployer deploy [参数] 参数: --host 目标服务器 IP --user SSH 用户名(默认 root) --password SSH 密码 --port SSH 端口(默认 62222) --admin-user admin 用户名(用于 SSH 激活) --admin-password admin 密码 --admin-port admin SSH 端口(默认 60022) --activate-cmd 激活命令(默认 upsshd start) --logs 日志路径,多个用逗号分隔 --loki-addr Loki 服务器地址 --promtail-bin Promtail 二进制路径(可选,默认自动下载) --labels 自定义标签,格式: k=v,k2=v2 ``` ### batch 命令(批量部署) ```bash ./log-agent-deployer batch --file servers.json ``` `servers.json` 示例: ```json [ { "host": "192.168.1.10", "root_port": 62222, "admin_port": 60022, "root_user": "root", "root_password": "xxx", "admin_user": "admin", "admin_password": "xxx", "activate_cmd": "upsshd start", "logs": ["/var/log/app", "/var/log/nginx"], "loki_addr": "http://loki-server:3100", "labels": {"env": "prod"} } ] ``` ### check 命令(检测连接) ```bash ./log-agent-deployer check --host 192.168.1.10 --user root --password xxx --port 62222 ``` ## SSH 连接流程 ``` 1. 优先尝试 root@62222 直接连接 └─ 成功 → 直接部署 └─ 失败 → 2 2. 尝试 admin@60022 登录特殊 Shell ├─ 执行 activate_cmd(默认 upsshd start) ├─ 退出 admin Shell └─ 重试 root@62222 3. 连接成功后检测 SFTP,不可用则自动修复 sshd_config 4. 通过 SFTP 上传 Promtail + 配置 + 启动服务 ``` ## 服务地址 | 服务 | 地址 | 默认账号 | |------|------|---------| | Loki | http://localhost:3100 | - | | Grafana | http://localhost:3000 | admin / admin123 | | Promtail | http://localhost:9080 | - | ## Grafana 查询示例 ```logql # 查看所有日志 {job="custom"} # 按标签过滤 {job="custom", env="prod"} # 搜索关键词 {job="custom"} |= "ERROR" # JSON 格式解析 {job="custom"} | json ``` ## 编译 ```bash # 需要 Go 1.21+ go build -o log-agent-deployer ./cmd/deployer ``` ## 项目结构 ``` log-agent-deployer/ ├── cmd/deployer/main.go # 主程序入口 ├── internal/ │ ├── config/ # 配置加载 │ ├── ssh/ # SSH 连接器(含 keyboard-interactive) │ ├── sftp/ # SFTP 上传 │ └── promtail/ # Promtail 部署器 ├── configs/ # 服务器配置示例 ├── docs/ # 设计文档 ├── test-env/ # 测试环境 Docker ├── deploy-all.sh # 一键部署脚本 ├── docker-compose.yaml # Loki + Grafana └── README.md ``` ## License MIT