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
+ "
+ }
+ ```
+ 
+
- - 名称: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
- "
- }
- ```
- 
-
- - **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"
- }
- }
- ```
-
- 根据需求删减相关内容信息即可
-
- 
+ - 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"
+ }
+ }
+ ```
+
+ 根据需求删减相关内容信息即可
+
+ 
+
+### 飞书群机器人配置 示例 贡献者:[@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