snapshot: AlertCenter拆分前快照
This commit is contained in:
1 parent
6a40956afa
commit
805cb767a8
23 files changed
+1560
-404
No files matched your search
Executable
BIN
Binary file not shown.
+122
-30
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
# AIOps Agent 一键安装脚本 — 支持 RHEL/CentOS/Rocky/Alma/Amazon/Aliyun/Debian/Ubuntu 全系列
|
||||
# 用法: curl -fsSL http://YOUR_SERVER/agent/install.sh | bash -s -- --server http://YOUR_SERVER:8080 --token TOKEN
|
||||
# AIOps Agent 一键安装脚本 — 支持 Linux(systemd) 和 macOS(launchd)
|
||||
# 用法: curl -fsSL http://YOUR_SERVER/agent/install.sh | sudo bash -s -- --server http://YOUR_SERVER:8080 --token TOKEN
|
||||
# 署名 Logan.Li
|
||||
|
||||
set -e
|
||||
@@ -10,8 +10,24 @@ AIOPS_SERVER=""
|
||||
AGENT_TOKEN=""
|
||||
INSTALL_DIR="/usr/local/bin"
|
||||
SERVICE_NAME="aiops-agent"
|
||||
PLIST_LABEL="com.ezops.aiops-agent"
|
||||
ARCH=$(uname -m)
|
||||
OS=$(cat /etc/os-release 2>/dev/null | grep '^ID=' | cut -d'"' -f2 || echo "unknown")
|
||||
KERNEL=$(uname -s) # Linux 或 Darwin
|
||||
|
||||
# 检测 OS 显示名
|
||||
detect_os() {
|
||||
if [ "$KERNEL" = "Darwin" ]; then
|
||||
echo "$(sw_vers -productName 2>/dev/null || echo 'macOS') $(sw_vers -productVersion 2>/dev/null || echo '')"
|
||||
elif [ -f /etc/os-release ]; then
|
||||
. /etc/os-release 2>/dev/null && echo "${PRETTY_NAME:-${NAME:-Linux}}" || echo "Linux"
|
||||
else
|
||||
echo "Linux"
|
||||
fi
|
||||
}
|
||||
OS_DISPLAY=$(detect_os)
|
||||
|
||||
# OS 小写 (linux / darwin)
|
||||
OS_LOWER=$(echo "$KERNEL" | tr '[:upper:]' '[:lower:]')
|
||||
|
||||
# 解析命令行参数
|
||||
while [[ $# -gt 0 ]]; do
|
||||
@@ -30,14 +46,17 @@ echo " ╔═══════════════════════
|
||||
echo " ║ AIOps Agent 一键安装 ║"
|
||||
echo " ╚══════════════════════════════════════════╝"
|
||||
echo ""
|
||||
echo " 系统: ${OS} (${ARCH})"
|
||||
echo " 系统: ${OS_DISPLAY} (${ARCH})"
|
||||
echo " 内核: ${KERNEL}"
|
||||
echo " 版本: ${AGENT_VERSION}"
|
||||
echo " 后端: ${AIOPS_SERVER:-未指定}"
|
||||
echo ""
|
||||
|
||||
# 检查 root 权限
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "❌ 请使用 root 用户或 sudo 执行此脚本"
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "❌ 请使用 root 或 sudo 执行此脚本"
|
||||
echo " 推荐用法: curl -fsSL <url> | sudo bash -s -- --server <url> --token <token>"
|
||||
echo " (sudo 放在 bash 前,不是 curl 前)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -50,10 +69,10 @@ case "$ARCH" in
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
echo " 匹配: linux/${DOWNLOAD_ARCH}"
|
||||
echo " 匹配: ${OS_LOWER}/${DOWNLOAD_ARCH}"
|
||||
echo ""
|
||||
|
||||
# 安装依赖工具(curl 在大多数发行版自带,这里确保有)
|
||||
# 安装依赖工具
|
||||
if command -v curl &> /dev/null; then
|
||||
echo "✓ curl 已安装"
|
||||
else
|
||||
@@ -64,6 +83,8 @@ else
|
||||
dnf install -y curl
|
||||
elif command -v apt-get &> /dev/null; then
|
||||
apt-get update -qq && apt-get install -y curl
|
||||
elif command -v brew &> /dev/null; then
|
||||
brew install curl
|
||||
else
|
||||
echo "❌ 无法确定包管理器,请手动安装 curl"
|
||||
exit 1
|
||||
@@ -76,11 +97,15 @@ if [ -z "$AIOPS_SERVER" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BINARY_URL="${AIOPS_SERVER}/agent/aiops-agent-linux-${DOWNLOAD_ARCH}"
|
||||
BINARY_URL="${AIOPS_SERVER}/agent/aiops-agent-${OS_LOWER}-${DOWNLOAD_ARCH}"
|
||||
echo "→ 下载 Agent: ${BINARY_URL}"
|
||||
|
||||
curl -fSL -o /tmp/aiops-agent "${BINARY_URL}" || {
|
||||
echo "❌ 下载失败,请检查后端地址和网络"
|
||||
echo "❌ 下载失败: ${BINARY_URL}"
|
||||
echo " 请检查: 1) 后端地址是否正确 2) 该平台是否有对应二进制"
|
||||
if [ "$OS_LOWER" = "darwin" ]; then
|
||||
echo " 提示: macOS 二进制需要后端编译 darwin 版本 (make build-darwin-arm64)"
|
||||
fi
|
||||
exit 1
|
||||
}
|
||||
chmod +x /tmp/aiops-agent
|
||||
@@ -88,13 +113,79 @@ mv /tmp/aiops-agent "${INSTALL_DIR}/aiops-agent"
|
||||
|
||||
echo "✓ 安装到 ${INSTALL_DIR}/aiops-agent"
|
||||
|
||||
# 配置 systemd 服务
|
||||
if [ -z "$AGENT_TOKEN" ]; then
|
||||
echo "⚠ 未提供 --token,使用空令牌"
|
||||
AGENT_TOKEN="none"
|
||||
fi
|
||||
|
||||
cat > /etc/systemd/system/${SERVICE_NAME}.service << EOF
|
||||
# ─── 平台分支: Linux(systemd) / macOS(launchd) ───
|
||||
|
||||
if [ "$OS_LOWER" = "darwin" ]; then
|
||||
# ===== macOS: launchd 服务 =====
|
||||
PLIST_PATH="/Library/LaunchDaemons/${PLIST_LABEL}.plist"
|
||||
|
||||
mkdir -p "$(dirname "$PLIST_PATH")"
|
||||
|
||||
cat > "$PLIST_PATH" << EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>${PLIST_LABEL}</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>${INSTALL_DIR}/aiops-agent</string>
|
||||
<string>-server</string>
|
||||
<string>${AIOPS_SERVER}</string>
|
||||
<string>-interval</string>
|
||||
<string>10</string>
|
||||
<string>-token</string>
|
||||
<string>${AGENT_TOKEN}</string>
|
||||
</array>
|
||||
<key>RunAtLoad</key>
|
||||
<true/>
|
||||
<key>KeepAlive</key>
|
||||
<true/>
|
||||
<key>StandardOutPath</key>
|
||||
<string>/var/log/aiops-agent.log</string>
|
||||
<key>StandardErrorPath</key>
|
||||
<string>/var/log/aiops-agent.err.log</string>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
echo "✓ 创建 launchd 服务 ($PLIST_PATH)"
|
||||
|
||||
# 停止旧实例(如果存在)
|
||||
launchctl unload "$PLIST_PATH" 2>/dev/null || true
|
||||
# 加载并启动
|
||||
launchctl load -w "$PLIST_PATH"
|
||||
|
||||
sleep 2
|
||||
|
||||
# 检查运行状态
|
||||
if launchctl list | grep -q "$PLIST_LABEL"; then
|
||||
echo ""
|
||||
echo "✅ 安装成功!Agent 已启动并设置为开机自启"
|
||||
echo ""
|
||||
echo " 查看状态: launchctl list | grep aiops"
|
||||
echo " 查看日志: tail -f /var/log/aiops-agent.log"
|
||||
echo " 手动停止: launchctl unload $PLIST_PATH"
|
||||
echo " 手动启动: launchctl load -w $PLIST_PATH"
|
||||
echo " 卸载: launchctl unload $PLIST_PATH && rm -f ${INSTALL_DIR}/aiops-agent $PLIST_PATH"
|
||||
echo ""
|
||||
else
|
||||
echo "❌ Agent 启动失败,请检查日志:"
|
||||
echo " cat /var/log/aiops-agent.err.log"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
else
|
||||
# ===== Linux: systemd 服务 =====
|
||||
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
|
||||
|
||||
cat > "$SERVICE_FILE" << EOF
|
||||
[Unit]
|
||||
Description=AIOps Monitoring Agent
|
||||
After=network-online.target
|
||||
@@ -111,25 +202,26 @@ LimitNOFILE=65536
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
echo "✓ 创建 systemd 服务"
|
||||
echo "✓ 创建 systemd 服务"
|
||||
|
||||
# 启动服务
|
||||
systemctl daemon-reload
|
||||
systemctl enable ${SERVICE_NAME}
|
||||
systemctl restart ${SERVICE_NAME}
|
||||
# 启动服务
|
||||
systemctl daemon-reload
|
||||
systemctl enable ${SERVICE_NAME}
|
||||
systemctl restart ${SERVICE_NAME}
|
||||
|
||||
sleep 2
|
||||
sleep 2
|
||||
|
||||
if systemctl is-active --quiet ${SERVICE_NAME}; then
|
||||
echo ""
|
||||
echo "✅ 安装成功!Agent 已启动并设置为开机自启"
|
||||
echo ""
|
||||
echo " 查看状态: systemctl status ${SERVICE_NAME}"
|
||||
echo " 查看日志: journalctl -u ${SERVICE_NAME} -f"
|
||||
echo " 卸载: ${0} --uninstall || systemctl stop ${SERVICE_NAME} && rm -f ${INSTALL_DIR}/aiops-agent /etc/systemd/system/${SERVICE_NAME}.service && systemctl daemon-reload"
|
||||
echo ""
|
||||
else
|
||||
echo "❌ Agent 启动失败,请检查日志:"
|
||||
echo " journalctl -u ${SERVICE_NAME} -n 20"
|
||||
exit 1
|
||||
if systemctl is-active --quiet ${SERVICE_NAME}; then
|
||||
echo ""
|
||||
echo "✅ 安装成功!Agent 已启动并设置为开机自启"
|
||||
echo ""
|
||||
echo " 查看状态: systemctl status ${SERVICE_NAME}"
|
||||
echo " 查看日志: journalctl -u ${SERVICE_NAME} -f"
|
||||
echo " 卸载: systemctl stop ${SERVICE_NAME} && rm -f ${INSTALL_DIR}/aiops-agent ${SERVICE_FILE} && systemctl daemon-reload"
|
||||
echo ""
|
||||
else
|
||||
echo "❌ Agent 启动失败,请检查日志:"
|
||||
echo " journalctl -u ${SERVICE_NAME} -n 20"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
Reference in new issue
Block a user