import{_ as s,o as n,c as a,R as l}from"./chunks/framework.1625126e.js";const A=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/agent.md","filePath":"guide/agent.md","lastUpdated":1694095078000}'),p={name:"guide/agent.md"},o=l(`
哪吒监控的被控端服务被称为 Agent,本文档将介绍如何在被控端服务器上安装 Agent,并与 Dashboard 连接
目前哪吒监控已支持在 Windows 和 Linux上一键安装 Agent,遵循本文档的步骤,你可以很轻松的在服务器上部署它
你需要提前在管理面板中设置好通信域名,此域名不可以接入CDN,这里以前面提到过的示例通信域名 “data.example.com” 来做演示
进入后台管理面板,转到“设置”页,在“未接入 CDN 的面板服务器域名/IP”项中填入通信域名,然后点击"保存"
curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh
如果你的被控服务器位于中国大陆,可以使用镜像:
curl -L https://cdn.jsdelivr.net/gh/naiba/nezha@master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh
本节内容由 unknown0054 贡献
cat >/etc/init.d/nezha-agent<< EOF
#!/sbin/openrc-run
SERVER="" #Dashboard 地址 ip:port
SECRET="" #SECRET
TLS="" # 是否启用 tls 是 "--tls" 否留空
NZ_BASE_PATH="/opt/nezha"
NZ_AGENT_PATH="\${NZ_BASE_PATH}/agent"
pidfile="/run/\${RC_SVCNAME}.pid"
command="/opt/nezha/agent/nezha-agent"
command_args="-s \${SERVER} -p \${SECRET} \${TLS}"
command_background=true
depend() {
need net
}
checkconfig() {
GITHUB_URL="github.com"
if [ ! -f "\${NZ_AGENT_PATH}/nezha-agent" ]; then
if [[ $(uname -m | grep 'x86_64') != "" ]]; then
os_arch="amd64"
elif [[ $(uname -m | grep 'i386\\|i686') != "" ]]; then
os_arch="386"
elif [[ $(uname -m | grep 'aarch64\\|armv8b\\|armv8l') != "" ]]; then
os_arch="arm64"
elif [[ $(uname -m | grep 'arm') != "" ]]; then
os_arch="arm"
elif [[ $(uname -m | grep 's390x') != "" ]]; then
os_arch="s390x"
elif [[ $(uname -m | grep 'riscv64') != "" ]]; then
os_arch="riscv64"
fi
local version=$(curl -m 10 -sL "https://api.github.com/repos/naiba/nezha/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\\"//g;s/,//g;s/ //g')
if [ ! -n "$version" ]; then
version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/naiba/nezha/" | grep "option\\.value" | awk -F "'" '{print $2}' | sed 's/naiba\\/nezha@/v/g')
fi
if [ ! -n "$version" ]; then
version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/naiba/nezha/" | grep "option\\.value" | awk -F "'" '{print $2}' | sed 's/naiba\\/nezha@/v/g')
fi
if [ ! -n "$version" ]; then
echo -e "获取版本号失败,请检查本机能否链接 https://api.github.com/repos/naiba/nezha/releases/latest"
return 0
else
echo -e "当前最新版本为: \${version}"
fi
wget -t 2 -T 10 -O nezha-agent_linux_\${os_arch}.zip https://\${GITHUB_URL}/naiba/nezha/releases/download/\${version}/nezha-agent_linux_\${os_arch}.zip >/dev/null 2>&1
if [[ $? != 0 ]]; then
echo -e "Release 下载失败,请检查本机能否连接 \${GITHUB_URL}\${plain}"
return 0
fi
mkdir -p $NZ_AGENT_PATH
chmod 755 -R $NZ_AGENT_PATH
unzip -qo nezha-agent_linux_\${os_arch}.zip && mv nezha-agent $NZ_AGENT_PATH && rm -rf nezha-agent_linux_\${os_arch}.zip README.md
fi
if [ ! -x "\${NZ_AGENT_PATH}/nezha-agent" ]; then
chmod +x \${NZ_AGENT_PATH}/nezha-agent
fi
}
start_pre() {
if [ "\${RC_CMD}" != "restart" ]; then
checkconfig || return $?
fi
}
EOF
增加运行权限
chmod +x /etc/init.d/nezha-agent
运行 Nezha-Agent
rc-service nezha-agent start
添加开机自启动
rc-update add nezha-agent
Systemd 实现 仅适用于 DSM7:
# 客户端路径
EXEC="/PATH/TO/nezha-agent"
# 日志路径地址
LOG="\${EXEC}.log"
# 额外执行参数, 可留空
ARGS="--disable-command-execute"
# 哪吒服务端GRPC地址
SERVER="HOST_OR_IP:GRPC_PORT"
# 上一步获取的主机密钥
SECRET="APP_SECRET"
# 服务运行用户名, *强烈建议使用非root用户执行*
RUN_USER="nezha"
# 写入到systemd服务文件
cat << EOF > /usr/lib/systemd/system/nezha.service
[Unit]
Description=Nezha Agent Service
After=network.target
[Service]
Type=simple
ExecStart=/bin/nohup \${EXEC} \${ARGS} -s \${SERVER} -p \${SECRET} &>> \${LOG} &
ExecStop=ps -fe |grep nezha-agent|awk '{print \\$2}'|xargs kill
User=\${RUN_USER}
Restart=on-abort
[Install]
WantedBy=multi-user.target
EOF
# 重载服务
systemctl daemon-reload
# 启动服务
systemctl start nezha
# 服务自启动
systemctl enable nezha
‼️修改对应信息后‼️
使用 root
账号执行上述命令即可安装完成
本节内容改编自 Mitsea Blog,改编已获得原作者授权
WARNING
安装过程中如提示“macOS 无法验证此 app“,请前往系统设置手动允许程序运行
nezha_agent.plist
的文件并保存,修改文件内容如下:<?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>KeepAlive</key>
<true/>
<key>Label</key>
<string>nezha_agent</string>
<key>Program</key>
<string>在这里修改 Agent 二进制文件的的路径,如:/Users/123/Downloads/nezha-agent</string>
<key>ProgramArguments</key>
<array>
<string>在这里修改 Agent 二进制文件的的路径,同上</string>
<string>--password</string>
<string>通信密钥,如:529664783eeb23cc25</string>
<string>--server</string>
<string>通信网址和RPC端口,如:data.example.com:5555</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
launchctl load /Users/123/Desktop/nezha_agent.plist
launchctl start nezha_agent
launchctl list | grep nezha_agent
launchctl stop nezha_agent
launchctl remove nezha_agent
如何 一步到位,解决安装过程疑难杂症
如何使 旧版 OpenWRT/LEDE 自启动
如何使 新版 OpenWRT 自启动?来自 @艾斯德斯
/root
chmod +x /root/nezha-agent
赋予执行权限,然后创建 /etc/init.d/nezha-service
:#!/bin/sh /etc/rc.common
START=99
USE_PROCD=1
start_service() {
procd_open_instance
procd_set_param command /root/nezha-agent -s 面板通信地址:端口 -p 秘钥 -d
procd_set_param respawn
procd_close_instance
}
stop_service() {
killall nezha-agent
}
restart() {
stop
sleep 2
start
}
chmod +x /etc/init.d/nezha-service
赋予执行权限/etc/init.d/nezha-service enable && /etc/init.d/nezha-service start
Agent 目前没有推出 Docker 镜像。
Agent 的设计思路和 Dashboard 相反,Dashboard 要尽可能不影响宿主机工作,但 Agent 则需要在宿主机中执行监控服务和运行命令。
将 Agent 放入容器中确实可以继续执行监控任务,但 WebShell 等功能无法正常运行,因此不提供 Docker 镜像。