From 29fe30eef860cd1f0075e9f64af55cbb7d07875c Mon Sep 17 00:00:00 2001 From: Kris Date: Mon, 6 May 2024 19:22:56 +0200 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=AD=E6=96=87=E6=96=87?= =?UTF-8?q?=E6=A1=A3=EF=BC=8C=E4=BF=AE=E6=94=B9=E4=BA=86=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E6=8E=92=E7=89=88=EF=BC=8C=E6=9B=B4=E6=96=B0=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/guide/agent.md | 40 ++++-- docs/guide/agentq.md | 3 +- docs/guide/dashboard.md | 47 ++++--- docs/guide/dashboardq.md | 8 +- docs/guide/loginq.md | 9 +- docs/guide/notifications.md | 265 ++++++++++++++++++++---------------- docs/guide/q8.md | 24 ++-- docs/guide/servers.md | 115 ++++++---------- docs/guide/services.md | 0 9 files changed, 273 insertions(+), 238 deletions(-) mode change 100644 => 100755 docs/guide/dashboard.md mode change 100644 => 100755 docs/guide/notifications.md mode change 100644 => 100755 docs/guide/q8.md mode change 100644 => 100755 docs/guide/services.md diff --git a/docs/guide/agent.md b/docs/guide/agent.md index a445c06d..b6eabaff 100644 --- a/docs/guide/agent.md +++ b/docs/guide/agent.md @@ -19,7 +19,6 @@ Agent 二进制文件仓库地址为: ### 在 Linux 中一键安装 (Ubuntu、Debian、CentOS) - * 首先在管理面板中添加一台服务器 * 点击新添加的服务器旁,绿色的 Linux 图标按钮,复制一键安装命令 * 在被控端服务器中运行复制的一键安装命令,等待安装完成后返回到 Dashboard 主页查看服务器是否上线 @@ -42,6 +41,8 @@ Agent 二进制文件仓库地址为: + 点击展开/收起 * 首先在管理面板中添加一台服务器 * 在被控服务器中,运行脚本(位于中国大陆的服务器请使用镜像): @@ -58,13 +59,16 @@ curl -L https://gitee.com/naibahq/nezha/raw/master/script/install.sh -o nezha.sh * 选择“安装监控 Agent” * 输入通信域名,如:”data.example.com“ -* 输入面板通信端口( gRPC 端口),默认为 5555 +* 输入面板通信端口(gRPC 端口),默认为 5555 * 输入 Agent 密钥,Agent 密钥在管理面板中添加服务器时生成,可以在管理面板中的“服务器”页中找到 * 等待安装完成后返回 Dashboard 主页查看服务器是否上线 +
### 在 其他 Linux 如 Alpine 使用 Openrc 的发行版 安装 Agent - +
+ 点击展开/收起 + 本节内容由 [unknown0054](https://github.com/unknwon0054) 贡献 * 修改 SERVER、SECRET、TLS 然后在 shell 中执行 @@ -151,6 +155,7 @@ EOF ```shell rc-update add nezha-agent ``` +
### 在 Windows 中手动安装 Agent @@ -159,6 +164,8 @@ EOF
### 在 群晖DSM 中安装 Agent +
+ 点击展开/收起 * 请参考社区文章: [群晖 DSM 7.x 安装 哪吒监控 Agent](https://blog.mitsea.com/3929551d08bd4bb0a8baa453e2d92b0c/) @@ -208,10 +215,12 @@ EOF ‼️修改对应信息后‼️ 使用 `root` 账号执行上述命令即可安装完成 - +

-### 在 MacOS 中安装 Agent +### 在 macOS 中安装 Agent +
+ 点击展开/收起 ***本节内容改编自 [Mitsea Blog](https://blog.mitsea.com/e796f93db38d49e4b18df234c6ee75f5),改编已获得原作者授权***
@@ -276,16 +285,22 @@ launchctl stop nezha_agent ```shell launchctl remove nezha_agent ``` - +

### 在 macOS 中使用 Homebrew 安装 Agent +
+ 点击展开/收起 ***本节内容改编自 [🐿️松鼠收集🌰](https://blog.mre.red/archives/install_nezha_monitoring_agent_service_with_homebrew),改编已获得原作者授权*** * 添加 Homebrew 第三方仓库 +::: danger +请注意,此 Homebrew 仓库由第三方维护,与哪吒监控无关。 +Nezha 项目组不对该仓库的可用性和安全性等方面作出背书。在使用前,请自行评估风险!! +::: +*由于暂未提交到 Homebrew Core 官方库,暂时放在上述博客作者参与维护的第三方 Homebrew 仓库中* -***由于暂未提交到 Homebrew Core 官方库,暂时放在上述博客作者参与维护的第三方 Homebrew 仓库中*** ```sh brew tap brewforge/chinese @@ -300,7 +315,7 @@ brew install nezha-agent * 添加环境变量 ```sh -echo 'export HOMEBREW_NEZHA_AGENT_PASSWORD="你的密钥,在你的服务页面获取"' >> ~/.zshrc +echo 'export HOMEBREW_NEZHA_AGENT_PASSWORD="通信密钥,在服务页面获取"' >> ~/.zshrc echo 'export HOMEBREW_NEZHA_AGENT_SERVER="你的服务器和端口,格式 your.domain:5555 "' >> ~/.zshrc source ~/.zshrc ``` @@ -328,10 +343,12 @@ brew services stop nezha-agent ```sh brew rm nezha-agent ``` - +

### 在 OpenWRT 中安装 Agent +
+ 点击展开/收起 **如何 一步到位,解决安装过程疑难杂症** * 请参考项目: @@ -374,11 +391,10 @@ restart() { * 运行 `chmod +x /etc/init.d/nezha-service` 赋予执行权限 * 启动服务: `/etc/init.d/nezha-service enable && /etc/init.d/nezha-service start` -
- +

-## FAQ +## 常见问题 ### Agent 有 Docker 镜像吗? diff --git a/docs/guide/agentq.md b/docs/guide/agentq.md index db4d0f5b..43cbf2ae 100644 --- a/docs/guide/agentq.md +++ b/docs/guide/agentq.md @@ -9,7 +9,8 @@ outline: deep ## 一键脚本安装时出错 ### curl: Failed to connect to raw.githubusercontent.com...... -多出现在国内主机中,目前一键脚本只从 Github 直接获取安装脚本,您可以多尝试几次,或者[手动安装 Agent](/guide/agent.html#其他方式安装agent),别忘了使用镜像。 +多出现在国内主机中,目前一键脚本只从 Github 直接获取安装脚本,您可以多尝试几次,或者[手动安装 Agent](/guide/agent.html#其他方式安装agent)。 +另外,也可以自行寻找第三方 Github 加速服务或者镜像,并在一键安装脚本中设置。 ### sudo: command not found 请先手动安装 sudo。 diff --git a/docs/guide/dashboard.md b/docs/guide/dashboard.md old mode 100644 new mode 100755 index b12f3c0a..dd15cba8 --- a/docs/guide/dashboard.md +++ b/docs/guide/dashboard.md @@ -8,8 +8,8 @@ outline: deep 1. 一台可以连接公网的 VPS,防火墙和安全策略需要放行 8008 和 5555 端口,否则会无法访问和无法接收数据。单核 512MB 内存的服务器配置就足以满足大多数使用场景 2. 一个已经设置好 A 记录,指向 Dashboard 服务器 ip 的域名 ::: tip -如果你想使用 CDN,请准备两个域名,一个配置好 CDN 用作公开访问,CDN 需要支持WebSocket 协议;另一个域名不要使用 CDN,用作 Agent 端与 Dashboard 的通信 -本文档分别以 "cdn.example.com" 和 "data.example.com" 两个域名来演示 +如果你想使用 CDN,请准备两个域名,一个配置好 CDN 用作公开访问,CDN 需要支持 WebSocket 协议;另一个域名不要使用 CDN,用作 Agent 端与 Dashboard 的通信 +本文档分别以 "dashboard.example.com" 和 "data.example.com" 两个域名来演示 ::: 3. 一个 Github 账号(或:Gitlab、Gitee) @@ -24,12 +24,27 @@ outline: deep ## 获取 Github 的 Client ID 和密钥 哪吒监控接入 Github、Gitlab、Gitee 作为后台管理员账号 -+ 首先我们需要新建一个验证应用,以 Github 为例,登录 Github 后,打开 https://github.com/settings/developers ,依次选择“OAuth Apps” - “New OAuth App” +1. 首先我们需要新建一个验证应用,以 Github 为例,登录 Github 后,打开 https://github.com/settings/developers ,依次选择“OAuth Apps” - “New OAuth App” `Application name` - 随意填写 -`Homepage URL` - 填写面板的访问域名,如:"http://cdn.example.com" (你的域名) -`Authorization callback URL` - 填写回调地址,如:"http://cdn.example.com/oauth2/callback" (不要忘记`/oauth2/callback`) -+ 点击 “Register application” -+ 保存页面中的 Client ID,然后点击 “Generate a new client secret“,创建一个新的 Client Secret,新建的密钥仅会显示一次,**请妥善保存** +`Homepage URL` - 填写面板的访问域名,如:"http://dashboard.example.com" (你的域名) +`Authorization callback URL` - 填写回调地址,如:"http://dashboard.example.com/oauth2/callback" (不要忘记`/oauth2/callback`) +2. 点击 “Register application” +3. 保存页面中的 Client ID,然后点击 “Generate a new client secret“,创建一个新的 Client Secret,新建的密钥仅会显示一次,**请妥善保存** + +## 获取 Cloudflare Access 作为 OAuth2 提供方 +位于中国大陆的用户可能无法直接连接 Github,如您在使用 Github、Gitlab、Gitee 作为管理员账户登录时遇到问题,您可以优先考虑切换 [使用 Cloudflare Access 作为 OAuth2 提供方](/guide/q8.html)作为登录方式 + +**新建 SaaS-OIDC 应用流程** + +1. 前往 [Zero Trust Dashboard](https://one.dash.cloudflare.com),使用 Cloudflare 账号登录; +2. `My Team` -> `Users` -> `<具体用户>` -> 获取 `User ID` 并保存; +3. `Access` -> `Application` -> `Add an Application`; +4. 选择 `SaaS`,在 `Application` 中输入自定义的应用名称(例如 nezha),选择 `OIDC` 后点击 `Add application`; +5. `Scopes` 选择 `openid`, `email`, `profile`, `groups`; +6. `Redirect URLs` 填写你的 callback 地址,例如 `https://dashboard.example.com/oauth2/callback`; +7. 保存 `Client ID`、`Client Secret`、`Issuer` 地址中协议与域名的部分,例如 `https://xxxxx.cloudflareaccess.com` + +**如使用此方式,安装 Dashboard 完成后,需要修改配置文件 `/opt/nezha/dashboard/data/config.yaml`,将 `Endpoint` 配置修改为之前保存的`Issuer`地址,例如 `https://xxxxx.cloudflareaccess.com`,保存后需重启 Dashboard**
## 在服务器中安装 Dashboard @@ -43,17 +58,17 @@ curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh curl -L https://gitee.com/naibahq/nezha/raw/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh ```` -* 等待Docker安装完毕后,分别输入以下值: -`OAuth提供商` - Github,Gitlab,Gitee 中选择一个 +* 等待 Docker 安装完毕后,分别输入以下值: +`OAuth提供商` - github,cloudflare,gitlab,gitee 中选择一个 `Client ID` - 之前保存的 Client ID -`Client Secret` - 之前保存的密钥 -`用户名` - OAuth 提供商中的用户名 +`Client Secret` - 之前保存的 Client Secret +`用户名` - OAuth 提供商中的用户名/User ID `站点标题` - 自定义站点标题 `访问端口` - 公开访问端口,可自定义,默认 8008 `Agent的通信端口` - Agent 与 Dashboard 的通信端口,默认 5555 * 输入完成后,等待拉取镜像 -安装结束后,如果一切正常,此时你可以访问域名+端口号,如 “http://cdn.example.com:8008” 来查看面板 +安装结束后,如果一切正常,此时你可以访问域名+端口号,如 “http://dashboard.example.com:8008” 来查看面板 * 将来如果需要再次运行脚本,可以运行: ```bash @@ -65,7 +80,7 @@ curl -L https://gitee.com/naibahq/nezha/raw/master/script/install.sh -o nezha.sh ## 配置反向代理 -* 在宝塔面板中新建一个站点,域名填写公开访问域名,如 “http://cdn.example.com“ ,然后点击“设置”进入站点设置选项,选择“反向代理” - “新建反向代理” +* 在宝塔面板中新建一个站点,域名填写公开访问域名,如 “http://dashboard.example.com“ ,然后点击“设置”进入站点设置选项,选择“反向代理” - “新建反向代理” * 自定义一个代理名称,在下方“目标 URL”中填入 `http://127.0.0.1` 然后点击“保存” @@ -87,7 +102,7 @@ location ~ ^/(ws|terminal/.+)$ { #PROXY-END/ ```` * 点击“保存” -现在,你应该可以直接使用域名,如:“http://cdn.example.com“ 来访问面板了 +现在,你应该可以直接使用域名,如:“http://dashboard.example.com“ 来访问面板了
#### 扩展内容: @@ -112,9 +127,9 @@ location ~ ^/(ws|terminal/.+)$ { 首先,先暂时关闭反向代理 正如在其他网站中配置 SSL 证书一样,进入站点设置中的 “SSL”,你可以选择自动申请 Let´s Encrypt 证书或手动配置已有的证书 -完成 SSL 的设置后,你需要回到 https://github.com/settings/developers ,编辑之前创建的验证应用程序,将之前我们填入的 "Homepage URL" 和 "Authorization callback URL" 中的域名全部从`http`改为`https`,如:"https://cdn.example.com" 和 "https://cdn.example.com/oauth2/callback" ,**不更改此项可能会导致你无法登录面板后台** +完成 SSL 的设置后,你需要回到 https://github.com/settings/developers ,编辑之前创建的验证应用程序,将之前我们填入的 "Homepage URL" 和 "Authorization callback URL" 中的域名全部从`http`改为`https`,如:"https://dashboard.example.com" 和 "https://dashboard.example.com/oauth2/callback" ,**不更改此项可能会导致你无法登录面板后台** -## FAQ +## 常见问题 ### 启用 HTTPS 后 /terminal 或 /ws 不能正常连接怎么办? 常常是由于证书不完整造成的,请在 agent 运行参数中添加 -d,若 log 中有 x509:certificate signed by unknown authority,更换完整证书则可解决该问题。 diff --git a/docs/guide/dashboardq.md b/docs/guide/dashboardq.md index 5d3a5857..1d973e93 100644 --- a/docs/guide/dashboardq.md +++ b/docs/guide/dashboardq.md @@ -32,7 +32,7 @@ systemctl status docker 这个问题也可能与内核有关,也可以尝试更换官方内核。 ## 面板重启失败:Invalid hostPort: nz_site_port 等 -通常不会出现这个情况,如出现可以通过安装脚本修改配置,或者直接修改 `/opt/nezha/dashboard/docker-compose.yaml`文件。 +如出现可以通过安装脚本修改配置,或者直接修改 `/opt/nezha/dashboard/docker-compose.yaml`文件。 ## 面板布局错误、CSS 资源无法被加载 如果出现 Dashboard 页面布局出现错误,通常的原因是 CSS 文件丢失或无法被加载 @@ -54,4 +54,8 @@ location ~ .*\.(js|css)?$ 填入的DDNS provider的值有误,目前仅支持 `webhook`、`cloudflare`,`tencentcloud` 和 `dummy`。 ## 面板更新DDNS崩溃:panic: interface conversion: interface {} is nil, not []interface {} -填入的DDNS `AccessID` 或 `AccessSecret` 有误。 \ No newline at end of file +填入的DDNS `AccessID` 或 `AccessSecret` 有误。 + +## 打开网络监控页显示:server monitor history not found +出现此错误说明没有在服务页中设置 TCP-Ping 和 ICMP-Ping 类型的监控或者监控数据还未生成。 +如已经设置完毕,可以等待一段时间后再查看。 \ No newline at end of file diff --git a/docs/guide/loginq.md b/docs/guide/loginq.md index 1853bf18..e360adf2 100644 --- a/docs/guide/loginq.md +++ b/docs/guide/loginq.md @@ -4,7 +4,7 @@ outline: deep ## 登录回调后页面卡住\拒绝连接\响应时间过长 还有其他一些表现形式,总之登录后浏览器无法正常显示。 -1. 您的服务器无法连接到 Github/Gitee,最常见于国内服务器配置 Github 情况下,可以考虑多尝试几次或者切换到 Gitee。 +1. 您的服务器无法连接到 Github/Gitee,最常见于国内服务器配置 Github 情况下,可以考虑多尝试几次或者切换到 Cloudflare Access。 2. 您配置错了回调地址,确保您的回调地址正确且**端口与协议**均正确! 3. Dashboard 发生未知错误,您可以使用脚本查看日志。 @@ -19,7 +19,7 @@ outline: deep ## 登录后面板报错 ### http: named cookie not present -1. 清理cookies后重新登录,或换个浏览器 +1. 清理 cookies 后重新登录,或换个浏览器 2. 检查回调地址,确保您的回调地址正确且**端口与协议**均正确!发起请求的地址需要和回调地址处于同域,端口、协议和域名(或IP)都需要一致。 ### lookup xxx @@ -36,11 +36,12 @@ outline: deep 无法解决的话建议更换 Github 等。 ### 该用户不是本站点管理员,无法登录 -您登陆错了账号或者配置错了用户名,注意**用户名不是邮箱**,可使用脚本修改。 +您登陆错了账号或者配置错了用户名,注意**用户名不是邮箱**,可使用脚本修改。 +Cloudflare Access 用户请注意,您的用户名不是邮箱,而是User ID。 ### dial tcp xxx:443 i/o timeout 网络问题,可先重启 Docker,`sudo systemctl restart docker`,再使用脚本重启面板。 -如为国内服务器配置 Github 登陆方式,则建议切换到Jihulab以避免网络干扰。 +如为国内服务器配置 Github 登陆方式,则建议切换到 Cloudflare Access 以避免网络干扰。 ### net/http: TLS handshake timeout 同上。 diff --git a/docs/guide/notifications.md b/docs/guide/notifications.md old mode 100644 new mode 100755 index 74786809..e5ede318 --- a/docs/guide/notifications.md +++ b/docs/guide/notifications.md @@ -7,152 +7,177 @@ outline: deep
## 灵活的通知方式 -在面板消息中,占位符 `#DATETIME#` 代表事件发生的时间戳。当通知被触发时,面板会自动将 `#DATETIME#` 替换为事件的实际时间。 +- 在面板消息中,占位符 `#DATETIME#` 代表事件发生的时间戳。当通知被触发时,面板会自动将 `#DATETIME#` 替换为事件的实际时间。 +- `#NEZHA#` 是面板消息占位符,面板触发通知时会自动用实际消息替换占位符 +- Body 内容是`JSON` 格式的:**当请求类型为 FORM 时**,值为 `key:value` 的形式,`value` 里面可放置占位符,通知时会自动替换。**当请求类型为 JSON 时** 只会简单进行字符串替换后直接提交到`URL`。 +- URL 里面也可放置占位符,请求时会进行简单的字符串替换。 -`#NEZHA#` 是面板消息占位符,面板触发通知时会自动用实际消息替换占位符 +**请参考以下的通知方式示例,也可以根据自己的需求灵活设置推送方式** -Body 内容是`JSON` 格式的:**当请求类型为 FORM 时**,值为 `key:value` 的形式,`value` 里面可放置占位符,通知时会自动替换。**当请求类型为 JSON 时** 只会简单进行字符串替换后直接提交到`URL`。 +### Bark 示例 +
+ 点击展开/收起 -URL 里面也可放置占位符,请求时会进行简单的字符串替换。 + - 名称:Bark + - URL 组成: 第一个部分是 key,之后有三个匹配 /:key/:body or /:key/:title/:body or /:key/:category/:title/:body + - 请求方式: GET + - 请求类型: 默认 + - Body: 空 -**- 你可以参考以下的通知方式示例,也可以根据自己的需求灵活设置推送方式** + - 名称:Bark + - URL 组成: /push + - 请求方式: POST + - 请求类型: form + - Body: `{"title": "#SERVER.NAME#","device_key":"xxxxxxxxx","body":"#NEZHA#","icon":"https://xxxxxxxx/nz.png"}` +
- - **Bark 示例** +### Server 酱示例 +
+ 点击展开/收起 - - 名称:Bark - - URL 组成: 第一个部分是 key,之后有三个匹配 /:key/:body or /:key/:title/:body or /:key/:category/:title/:body - - 请求方式: GET - - 请求类型: 默认 - - Body: 空 - - 名称:Bark - - URL 组成: /push - - 请求方式: POST - - 请求类型: form - - Body: `{"title": "#SERVER.NAME#","device_key":"xxxxxxxxx","body":"#NEZHA#","icon":"https://xxxxxxxx/nz.png"}` + - 名称:Server 酱 + - URL:https://sc.ftqq.com/SCUrandomkeys.send?title=哪吒告警信息&desp=#NEZHA# + - 请求方式: GET + - 请求类型: 默认 + - Body: 空 - - **Server 酱示例** + **Server 酱进阶** + - 名称:Server 酱 + - URL:https://sc.ftqq.com/SCUrandomkeys.send + - 请求方式: POST + - 请求类型: FORM + - Body: + ```json + { + "title": "#SERVER.NAME#", + "desp":"**#NEZHA#\n\n + 平均负载: \"#SERVER.LOAD1#\",\"#SERVER.LOAD5#\",\"#SERVER.LOAD15#\"\n\n + ## [点击访问面板](https://你的面板域名)\n\n + ![logo](https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg)" + } + ``` + ![展示](https://github.com/iilemon/nezhahq.github.io/blob/main/docs/images/photo_2023-03-16_00-22-47a.jpg?raw=true) +
- - 名称:Server 酱 - - URL:https://sc.ftqq.com/SCUrandomkeys.send?title=哪吒告警信息&desp=#NEZHA# - - 请求方式: GET - - 请求类型: 默认 - - Body: 空 - - **Server 酱进阶** - - 名称:Server 酱 - - URL:https://sc.ftqq.com/SCUrandomkeys.send - - 请求方式: POST - - 请求类型: FORM - - Body: - ```json - { - "title": "#SERVER.NAME#", - "desp":"**#NEZHA#\n\n - 平均负载: \"#SERVER.LOAD1#\",\"#SERVER.LOAD5#\",\"#SERVER.LOAD15#\"\n\n - ## [点击访问面板](https://你的面板域名)\n\n - ![logo](https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg)" - } - ``` - ![展示](https://github.com/iilemon/nezhahq.github.io/blob/main/docs/images/photo_2023-03-16_00-22-47a.jpg?raw=true) - - - **wxpusher 示例,需要关注你的应用** +### wxpusher 示例 +**需要提前关注你的应用** +
+ 点击展开/收起 - - 名称: wxpusher - - URL:http://wxpusher.zjiecode.com/api/send/message - - 请求方式: POST - - 请求类型: JSON - - Body: `{"appToken":"你的appToken","topicIds":[],"content":"#NEZHA#","contentType":"1","uids":["你的uid"]}` + - 名称: wxpusher + - URL:http://wxpusher.zjiecode.com/api/send/message + - 请求方式: POST + - 请求类型: JSON + - Body: `{"appToken":"你的appToken","topicIds":[],"content":"#NEZHA#","contentType":"1","uids":["你的uid"]}` +
- - **Telegram 示例 贡献者:[@haitau](https://github.com/haitau)** +### Telegram 示例 贡献者:[@haitau](https://github.com/haitau) +
+ 点击展开/收起 - - 名称:telegram 机器人消息通知 - - URL:https://api.telegram.org/botXXXXXX/sendMessage?chat_id=YYYYYY&text=#NEZHA# - - 请求方式: GET - - 请求类型: 默认 - - Body: 空 - - URL 参数获取说明:botXXXXXX 中的 XXXXXX 是在 telegram 中关注官方 @Botfather ,输入/newbot ,创建新的机器人(bot)时,会提供的 token(在提示 Use this token to access the HTTP API:后面一行)这里 'bot' 三个字母不可少。创建 bot 后,需要先在 telegram 中与 BOT 进行对话(随便发个消息),然后才可用 API 发送消息。YYYYYY 是 telegram 用户的数字 ID。与机器人@userinfobot 对话可获得。 + - 名称:telegram 机器人消息通知 + - URL:https://api.telegram.org/botXXXXXX/sendMessage?chat_id=YYYYYY&text=#NEZHA# + - 请求方式: GET + - 请求类型: 默认 + - Body: 空 + - URL 参数获取说明:botXXXXXX 中的 XXXXXX 是在 telegram 中关注官方 @Botfather ,输入/newbot ,创建新的机器人(bot)时,会提供的 token(在提示 Use this token to access the HTTP API:后面一行)这里 'bot' 三个字母不可少。创建 bot 后,需要先在 telegram 中与 BOT 进行对话(随便发个消息),然后才可用 API 发送消息。YYYYYY 是 telegram 用户的数字 ID。与机器人@userinfobot 对话可获得。 +
- - **邮件通知示例 - SendCloud 贡献者:[@白歌](https://github.com/cantoblanco)** - **注意:SendCloud 有每日免费发送邮件限额限制,这里仅作示例,你可以选择付费服务或其他类似的免费服务,使用方法类似。** +### 邮件通知示例 - SendCloud 贡献者:[@白歌](https://github.com/cantoblanco) +
+ 点击展开/收起 - - 名称:邮件告警 - - URL:https://api.sendcloud.net/apiv2/mail/send?apiUser=<替换APIUSER>apiKey=<替换APIKEY>&from=<自定义发件邮箱>&fromName=Nezha&to=<自定义收件邮箱>&subject=Nezha-Notification&html=#NEZHA# - - 请求方式: POST - - 请求类型: JSON - - Header: 留空 - - Body: 留空 - - URL 参数获取说明:此方式需提前在 [SendCloud](https://www.sendcloud.net/) 注册账号,创建发件邮箱,然后在[这里](https://www.sendcloud.net/sendSetting/apiuser)获取 APIUSER 和 APIKEY,替换 URL 中的 <替换APIUSER> 和 <替换APIKEY> 为自己的 APIUSER 和 APIKEY,替换 URL 中的 <自定义发件邮箱> 和 <自定义收件邮箱> 为自己的发件邮箱和收件邮箱。 +**注意:SendCloud 有每日免费发送邮件限额限制,这里仅作示例,你可以选择付费服务或其他类似的免费服务,使用方法类似。** - - **钉钉群机器人配置 示例** + - 名称:邮件告警 + - URL:https://api.sendcloud.net/apiv2/mail/send?apiUser=<替换APIUSER>apiKey=<替换APIKEY>&from=<自定义发件邮箱>&fromName=Nezha&to=<自定义收件邮箱>&subject=Nezha-Notification&html=#NEZHA# + - 请求方式: POST + - 请求类型: JSON + - Header: 留空 + - Body: 留空 + +URL 参数获取说明:此方式需提前在 [SendCloud](https://www.sendcloud.net/) 注册账号,创建发件邮箱,然后在[这里](https://www.sendcloud.net/sendSetting/apiuser)获取 APIUSER 和 APIKEY,替换 URL 中的 <替换APIUSER> 和 <替换APIKEY> 为自己的 APIUSER 和 APIKEY,替换 URL 中的 <自定义发件邮箱> 和 <自定义收件邮箱> 为自己的发件邮箱和收件邮箱。 +
- - 名称: 哪吒探针小跟班 - - URL:https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxx - - 请求方式: POST - - 请求类型: JSON - - Header: `{"Content-Type": "application/json"}` - - Body: `{"msgtype": "text","text": {"content":"哪吒探针:\n#NEZHA#"}}` - - URL 参数获取说明:机器人URL在钉钉群-管理机器人-创建机器人后获取,安全方式选择自定义关键词,Body中content中需包含该关键词 +### 钉钉群机器人配置 示例 +
+ 点击展开/收起 - - **企业微信 群机器人 示例 贡献者:[@ChowRex](https://github.com/ChowRex)** + - 名称: 哪吒探针小跟班 + - URL:https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxx + - 请求方式: POST + - 请求类型: JSON + - Header: `{"Content-Type": "application/json"}` + - Body: `{"msgtype": "text","text": {"content":"哪吒探针:\n#NEZHA#"}}` + - URL 参数获取说明:机器人URL在钉钉群-管理机器人-创建机器人后获取,安全方式选择自定义关键词,Body中content中需包含该关键词 +
- 支持的占位符一览 +### 企业微信 群机器人 示例 贡献者:[@ChowRex](https://github.com/ChowRex) +
+ 点击展开/收起 - ```json - { - "content": "#NEZHA#", - "ServerName": "#SERVER.NAME#", - "ServerIP": "#SERVER.IP#", - "ServerIPV4": "#SERVER.IPV4#", - "ServerIPV6": "#SERVER.IPV6#", - "CPU": "#SERVER.CPU#", - "MEM": "#SERVER.MEM#", - "SWAP": "#SERVER.SWAP#", - "DISK": "#SERVER.DISK#", - "NetInSpeed": "#SERVER.NETINSPEED#", - "NetOutSpeed": "#SERVER.NETOUTSPEED#", - "TransferIn": "#SERVER.TRANSFERIN#", - "TranferOut": "#SERVER.TRANSFEROUT#", - "Load1": "#SERVER.LOAD1#", - "Load5": "#SERVER.LOAD5#", - "Load15": "#SERVER.LOAD15#", - "TCP_CONN_COUNT": "#SERVER.TCPCONNCOUNT", # 无效 - "UDP_CONN_COUNT": "#SERVER.UDPCONNCOUNT", # 无效 - } - ``` + 支持的占位符一览 - > [群机器人配置说明 - 文档 - 企业微信开发者中心](https://developer.work.weixin.qq.com/document/path/91770#markdown%E7%B1%BB%E5%9E%8B) + ```json + { + "content": "#NEZHA#", + "ServerName": "#SERVER.NAME#", + "ServerIP": "#SERVER.IP#", + "ServerIPV4": "#SERVER.IPV4#", + "ServerIPV6": "#SERVER.IPV6#", + "CPU": "#SERVER.CPU#", + "MEM": "#SERVER.MEM#", + "SWAP": "#SERVER.SWAP#", + "DISK": "#SERVER.DISK#", + "NetInSpeed": "#SERVER.NETINSPEED#", + "NetOutSpeed": "#SERVER.NETOUTSPEED#", + "TransferIn": "#SERVER.TRANSFERIN#", + "TranferOut": "#SERVER.TRANSFEROUT#", + "Load1": "#SERVER.LOAD1#", + "Load5": "#SERVER.LOAD5#", + "Load15": "#SERVER.LOAD15#", + "TCP_CONN_COUNT": "#SERVER.TCPCONNCOUNT", # 无效 + "UDP_CONN_COUNT": "#SERVER.UDPCONNCOUNT", # 无效 + } + ``` - - 名称:企业微信群机器人 + > [群机器人配置说明 - 文档 - 企业微信开发者中心](https://developer.work.weixin.qq.com/document/path/91770#markdown%E7%B1%BB%E5%9E%8B) - - URL:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_BOT_KEY + - 名称:企业微信群机器人 - - 请求方式: POST + - URL:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_BOT_KEY - - 请求类型: JSON + - 请求方式: POST - - Body: + - 请求类型: JSON - ```json - { - "msgtype": "markdown", - "markdown": { - "content": "# 哪吒通知消息\n\n\"#NEZHA#\"\n\n> 名称: \"#SERVER.NAME#\"\n> IP: \"#SERVER.IP#\"\n> IPv4: \"#SERVER.IPV4#\"\n> IPv6: \"#SERVER.IPV6#\"\n> CPU: \"#SERVER.CPU#\"\n> 内存: \"#SERVER.MEM#\"\n> 交换分区: \"#SERVER.SWAP#\"\n> 存储: \"#SERVER.DISK#\"\n> 实时上传速度: \"#SERVER.NETINSPEED#\"\n> 实时下载速度: \"#SERVER.NETOUTSPEED#\"\n> 总上传: \"#SERVER.TRANSFERIN#\"\n> 总下载: \"#SERVER.TRANSFEROUT#\"\n> 1分钟内负载: \"#SERVER.LOAD1#\"\n> 5分钟内负载: \"#SERVER.LOAD5#\"\n> 15分钟内负载: \"#SERVER.LOAD15#\"\n> TCP连接数: \"#SERVER.TCPCONNCOUNT\"\n> UDP连接数: \"#SERVER.UDPCONNCOUNT\"\n\n" - } - } - ``` - - 根据需求删减相关内容信息即可 - - ![通知效果](https://user-images.githubusercontent.com/30169860/223605620-eac53ee6-09f9-4583-94fa-9b0cdedba81c.png) + - Body: - - **飞书群机器人配置 示例 贡献者:[@eya46](https://github.com/eya46)** - - 名称: 哪吒面板Bot - - URL:https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxx - - 请求方式: POST - - 请求类型: JSON - - Body: `{"content":{"text":"#NEZHA#\n#DATETIME#"},"msg_type":"text"}` - - URL 参数获取说明:机器人URL通过飞书群-群机器人-添加机器人-自定义机器人(webhook)创建后获取 + ```json + { + "msgtype": "markdown", + "markdown": { + "content": "# 哪吒通知消息\n\n\"#NEZHA#\"\n\n> 名称: \"#SERVER.NAME#\"\n> IP: \"#SERVER.IP#\"\n> IPv4: \"#SERVER.IPV4#\"\n> IPv6: \"#SERVER.IPV6#\"\n> CPU: \"#SERVER.CPU#\"\n> 内存: \"#SERVER.MEM#\"\n> 交换分区: \"#SERVER.SWAP#\"\n> 存储: \"#SERVER.DISK#\"\n> 实时上传速度: \"#SERVER.NETINSPEED#\"\n> 实时下载速度: \"#SERVER.NETOUTSPEED#\"\n> 总上传: \"#SERVER.TRANSFERIN#\"\n> 总下载: \"#SERVER.TRANSFEROUT#\"\n> 1分钟内负载: \"#SERVER.LOAD1#\"\n> 5分钟内负载: \"#SERVER.LOAD5#\"\n> 15分钟内负载: \"#SERVER.LOAD15#\"\n> TCP连接数: \"#SERVER.TCPCONNCOUNT\"\n> UDP连接数: \"#SERVER.UDPCONNCOUNT\"\n\n" + } + } + ``` + + 根据需求删减相关内容信息即可 + + ![通知效果](https://user-images.githubusercontent.com/30169860/223605620-eac53ee6-09f9-4583-94fa-9b0cdedba81c.png) +
+### 飞书群机器人配置 示例 贡献者:[@eya46](https://github.com/eya46) +
+ 点击展开/收起 + + - 名称: 哪吒面板Bot + - URL:https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxx + - 请求方式: POST + - 请求类型: JSON + - Body: `{"content":{"text":"#NEZHA#\n#DATETIME#"},"msg_type":"text"}` + - URL 参数获取说明:机器人URL通过飞书群-群机器人-添加机器人-自定义机器人(webhook)创建后获取 +


@@ -239,7 +264,7 @@ URL 里面也可放置占位符,请求时会进行简单的字符串替换。 > >`[{"type":"transfer_out_cycle","max":1099511627776,"cycle_start":"2022-01-01T00:00:00+08:00","cycle_interval":1,"cycle_unit":"month","cover":1,"ignore":{"3":true,"4":true}}]` -## 通知触发模式说明 +## 通知触发模式 - 始终触发:每当 Agent 上报的状态符合告警的规则时,都会触发一次通知 - 单次触发:仅状态改变时触发一次通知,如从正常状态改变为异常状态,或异常状态恢复为正常状态 diff --git a/docs/guide/q8.md b/docs/guide/q8.md old mode 100644 new mode 100755 index 30bcbb9d..a826eaa4 --- a/docs/guide/q8.md +++ b/docs/guide/q8.md @@ -1,3 +1,4 @@ +相较于 Github,Cloudflare Access 对于中国大陆用户更加友好。如您当前使用 Github、Gitlab、Gitee 作为管理员账户登录时遇到问题,您可以考虑切换 Cloudflare Access 作为 OAuth2 提供方 ## 示例配置: ```yaml @@ -5,7 +6,7 @@ Oauth2: Admin: 701b9ea6-9f56-48cd-af3e-cbb4bfc1475c ClientID: 3516291f53eca9b4901a01337e41be7dc52f565c8657d08a3fddb2178d13c5bf ClientSecret: 0568b67c7b6d0ed51c663e2fe935683007c28f947a27b7bd47a5ad3d8b56fb67 - Endpoint: "https://akkia.cloudflareaccess.com" + Endpoint: "https://xxxxx.cloudflareaccess.com" Type: cloudflare ``` @@ -17,13 +18,18 @@ Oauth2: | ClientID/ClientSecret | `Access` -> `Application` -> `Add an Application`
-> `SaaS` -> `OIDC` | | Endpoint | `Access` -> `Application` -> `Application URL` -> `只保留协议+域名的部分,路径不需要` | -### 新建SaaS-OIDC应用流程 +### 新建 SaaS-OIDC 应用流程 -Zero Trust Dashboard: https://one.dash.cloudflare.com +前往 Zero Trust Dashboard: https://one.dash.cloudflare.com -1. `Access` -> `Application` -> `Add an Application`; -2. 选择 `SaaS`,在`Application`中输入自定义的应用名称(例如nezha),选择`OIDC`后点击`Add application`; -3. `Scopes`选择`openid`, `email`, `profile`, `groups`; -4. `Redirect URLs`填写你的CallBack地址,例如 `https://monitor.example.com/oauth2/callback`; -5. 记录`Client ID`、`Client Secret`、`Issuer`地址中协议与域名的部分,例如`https://akkia.cloudflareaccess.com` -6. 编辑Dashboard配置文件(通常在`/opt/nezha/dashboard/data/config.yaml)`,参考示例配置修改`Oauth2`配置,并重启Dashboard服务 \ No newline at end of file +1. `My Team` -> `Users` -> `<具体用户>` -> 获取 `User ID` 并保存; +2. `Access` -> `Application` -> `Add an Application`; +3. 选择 `SaaS`,在 `Application` 中输入自定义的应用名称(例如 nezha),选择 `OIDC`后点击 `Add application`; +4. `Scopes` 选择 `openid`, `email`, `profile`, `groups`; +5. `Redirect URLs` 填写你的 CallBack 地址,例如 `https://dashboard.example.com/oauth2/callback`; +6. 记录 `Client ID`、`Client Secret`、`Issuer` 地址中协议与域名的部分,例如 `https://xxxxx.cloudflareaccess.com` +7. 编辑 Dashboard 配置文件(通常在`/opt/nezha/dashboard/data/config.yaml)`,参考示例配置修改 `Oauth2` 配置,并重启 Dashboard 服务 +
+### 身份验证策略配置 + +在完成 Dashboard 的设置后,您还需要在 Zero Trust Dashboard 中 `Access`-> `Applications` -> `<应用名>` -> `Policies` 配置验证策略。您可以选择包括邮件OTP验证、硬件密钥验证、等十多种 SSO 验证方式,详细配置请参考 [Cloudflare Zero Trust 文档](https://developers.cloudflare.com/cloudflare-one/) \ No newline at end of file diff --git a/docs/guide/servers.md b/docs/guide/servers.md index a1bd4944..f84ccf4e 100644 --- a/docs/guide/servers.md +++ b/docs/guide/servers.md @@ -36,14 +36,14 @@ Linux 和 Windows 均可用,可使用 Ctrl+Shift+V 粘贴。 注意在线终端功能中,Agent 也是通过 WebSocket 连接到**公开访问域名**,而非通过 gRPC 交互。 ## DDNS 功能 -DDNS 功能适用于使用动态 IP 的服务器,当 Agent 上报了一个新的 IP,Dashboard 会根据配置自动更新 DNS 记录。 +DDNS 功能适用于使用动态 IP 的服务器,当 Agent 上报了一个新的 IP,Dashboard 会根据配置自动更新 DNS 记录 ### 为什么我要使用哪吒监控的 DDNS 功能? -- 方便集中管理 DDNS 设置,而不是在每台机器上都部署一个 DDNS 服务; -- 仅在面板机上保存您的机密信息,防止外泄。 +- 方便集中管理 DDNS 设置,而不是在每台机器上都部署一个 DDNS 服务 +- 仅在面板机上保存您的机密信息,防止外泄 ### 配置说明 -目前 DDNS 功能支持两种形式的配置:单配置和多配置。如使用单配置,则所有 Agent 服务器都使用相同的配置更新 DDNS;如使用多配置,则可为每台服务器指定一个配置更新 DDNS,灵活性更强。 +目前 DDNS 功能支持两种形式的配置:单配置和多配置。如使用单配置,则所有 Agent 服务器都使用相同的配置更新 DDNS;如使用多配置,则可为每台服务器指定一个配置更新 DDNS,灵活性更强 #### 单配置 ```yaml @@ -59,63 +59,35 @@ DDNS: MaxRetries: 3 Profiles: null ``` -##### Enable -布尔值,选择是否开启 DDNS 功能。 -##### Provider -DDNS 供应商的名称。目前支持 `webhook`、`cloudflare` 以及 `tencentcloud`。 -##### AccessID -DDNS 供应商的令牌 ID。 +- `Enable` 布尔值,选择是否开启 DDNS 功能 +- `Provider` DDNS 供应商的名称;目前支持 `webhook`、`cloudflare` 以及 `tencentcloud` +- `AccessID` DDNS 供应商的令牌 ID;仅适用于供应商 `tencentcloud` +- `AccessSecret` DDNS 供应商的令牌 Secret;仅适用于供应商 `cloudflare` 及 `tencentcloud` +- `WebhookMethod` Webhook 的请求方法。例如 `GET`、`POST`等;仅适用于供应商 `webhook` +- `WebhookURL` Webhook 的请求地址;仅适用于供应商 `webhook` +- `WebhookRequestBody` Webhook 的请求体;仅适用于供应商 `webhook` +- `WebhookHeaders` Webhook 的请求头;仅适用于供应商 `webhook` +- `MaxRetries`当请求失败时,重试请求的次数 +- `Profiles` 多配置设定;在单配置设定中,此项忽略 -仅适用于供应商 `tencentcloud`。 -##### AccessSecret -DDNS 供应商的令牌 Secret。 +`WebhookURL`、`WebhookRequestBody` 以及`WebhookHeaders`可以包含以下参数: +- `{ip}` - 主机当前IP +- `{domain}` - ddns域名 +- `{type}` - IP类型,可能为"ipv4"和"ipv6" +- `{access_id}` - 凭据1 +- `{access_secret}` - 凭据2 -仅适用于供应商 `cloudflare` 及 `tencentcloud`。 -##### WebhookMethod -Webhook 的请求方法。例如 `GET`、`POST`等。 - -仅适用于供应商 `webhook`。 -##### WebhookURL -Webhook 的请求地址。 - -仅适用于供应商 `webhook`。 -##### WebhookRequestBody -Webhook 的请求体。 - -仅适用于供应商 `webhook`。 -##### WebhookHeaders -Webhook 的请求头。 - -仅适用于供应商 `webhook`。 -##### MaxRetries -当请求失败时,重试请求的次数。 -##### Profiles -多配置设定。在单配置设定中,此项不进行处理。 - -:::tip -`WebhookURL`、`WebhookRequestBody` 以及`WebhookHeaders`可以使用如下参数: - -`{ip}` - 主机当前IP - -`{domain}` - ddns域名 - -`{type}` - IP类型,可能为"ipv4"和"ipv6" - -`{access_id}` - 凭据1 - -`{access_secret}` - 凭据2 - -例如以下配置: +配置示例: ``` WebhookHeaders: | a:{access_id} b:{access_secret} WebhookRequestBody: '{"domain": "{domain}", "ip": "{ip}", "type": "{type}"}' ``` -::: +
#### 多配置 -当使用多配置时,请将 `DDNS.Provider` 留空。如 `DDNS.Provider` 的值不为空,多配置设定将被无视。 +当使用多配置时,请将 `DDNS.Provider` 留空。如 `DDNS.Provider` 的值不为空,多配置设定将被忽略 ```yaml DDNS: Enable: true @@ -130,36 +102,31 @@ DDNS: WebhookRequestBody: "" WebhookHeaders: "" ``` -##### Profiles -多配置设定。 -##### example -你的 DDNS 配置名,可填任意字符串。 +- `Profiles` 多配置设定 +- `example` 可替换为 DDNS 配置名,可填任意字符串 -其它选项请参考[单配置](#单配置)段。 +其它选项请参考[单配置](#单配置)段。 +
-### Dashboard 配置 -修改好配置文件后,还需要在 Dashboard 中修改服务器设置才能使 DDNS 生效。 +#### Dashboard 配置 +修改配置文件后,还需要在 Dashboard 中修改服务器设置才能使 DDNS 生效 +
DDNS 相关选项说明: -- 启用DDNS -为此服务器启用 DDNS 功能。 -- 启用DDNS IPv4 -更新 DDNS 记录时,启用 IPv4 解析。 -- 启用DDNS IPv6 -更新 DDNS 记录时,启用 IPv6 解析。 -- DDNS域名 -记录指向的域名。 -- DDNS配置 -在多配置情况下,要使用的 DDNS 配置。 +- `启用DDNS` 为此服务器启用 DDNS 功能 +- `启用DDNS IPv4` 更新 DDNS 记录时,启用 IPv4 解析 +- `启用DDNS IPv6` 更新 DDNS 记录时,启用 IPv6 解析 +- `DDNS域名` 记录指向的域名 +- `DDNS配置` 在多配置情况下,要使用的 DDNS 配置名 -::: tip -在 Dashboard 设置中修改配置并保存时,会在 `config.yaml` 中填入默认配置选项,此时 DDNS 段中会同时存在单配置和多配置的选项。 +::: warning +在 Dashboard 设置中修改配置并保存时,会在 `config.yaml` 中填入默认配置选项,此时 DDNS 段中会同时存在单配置和多配置 -如需使用单配置,请无视 `Profiles` 选项相关内容。 - -如需使用多配置,请将 `DDNS.Provider` 留空。如 `DDNS.Provider` 的值不为空,多配置设定将被无视。 +- 如需使用单配置,请配置`DDNS.Provider`,并忽略 `Profiles` 选项相关内容。 +- 如需使用多配置,请将 `DDNS.Provider` 留空。如 `DDNS.Provider` 的值不为空,多配置设定将被忽略。 ::: +
-### 查看日志 +#### 查看日志 在 Dashboard 的日志中,可以看到 DDNS 功能的相关日志,配置正确时,更新 DNS 记录时会有相应的日志记录。 ```shell dashboard_1 | 2024/03/16 23:16:25 NEZHA>> 正在尝试更新域名(ddns.example.com)DDNS(1/3) diff --git a/docs/guide/services.md b/docs/guide/services.md old mode 100644 new mode 100755