编辑
2024-01-23
Linux
00
请注意,本文编写于 380 天前,最后修改于 263 天前,其中某些信息可能已经过时。

目录

准备工作
获取 Github/Jihulab 的 Client ID 和密钥
在服务器中安装 哪吒监控面板端
设置面板
在管理后台中新增服务器
设置服务器监控服务
任务
告警
灵活的通知方式
Server 酱示例
Server 酱进阶
告警规则说明
安装被控端
操作步骤

准备工作

搭建一个哪吒监控,你需要:

  1. 一台可以连接公网的 VPS,防火墙和安全策略需要放行 8008 和 5555 端口,否则会无法访问和无法接收数据。单核 512MB 内存的服务器配置就足以满足大多数使用场景
  2. 一个已经设置好 A 记录,指向 Dashboard 服务器 ip 的域名

TIP

如果你想使用 CDN,请准备两个域名,一个配置好 CDN 用作公开访问,CDN 需要支持WebSocket 协议;另一个域名不要使用 CDN,用作 Agent 端与 Dashboard 的通信 本文档分别以 "cdn.example.com" 和 "data.example.com" 两个域名来演示

  1. 一个 Github 账号(或:Gitlab、Jihulab、Gitee)

TIP

如果您位于中国大陆,访问 Github 有困难,我们建议您选择 Jihulab 作为 OAuth 提供商

本文档将以宝塔面板反代面板的过程作为范例,随着未来版本的变化,部分功能的入口可能会发生改变,本文档仅供参考

相关信息

本项目并不依赖宝塔,你可以选择使用你喜欢的任何服务器面板,如果你能力足够,可以手动安装 NginX 或 Caddy 来配置 SSL 和反代。 如果你认为没有必要使用 80、443 端口来访问 Dashboard,你甚至不需要安装 NginX 就可以直接使用安装脚本。

获取 Github/Jihulab 的 Client ID 和密钥

哪吒监控接入 Github、Gitlab、Jihulab、Gitee 作为后台管理员账号

  • 首先我们需要新建一个验证应用,以 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"

  • 点击 “Register application”

  • 保存页面中的 Client ID,然后点击 “Generate a new client secret“,创建一个新的 Client Secret,新建的密钥仅会显示一次,请妥善保存

  • JihuLab 的应用创建入口为:https://jihulab.com/-/profile/applications

  • Redirect URL 中应填入回调地址

  • 在下方范围中勾选 read_user 和 read_api

  • 创建完成后,保存好应用程序 ID 和密码

在服务器中安装 哪吒监控面板端

  • 在面板服务器中,运行安装脚本:
bash
curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh

如果你的面板服务器位于中国大陆,可以使用镜像:

bash
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,Jihulab,Gitee 中选择一个
    Client ID - 之前保存的 Client ID
    Client Secret - 之前保存的密钥
    用户名 - OAuth 提供商中的用户名
    站点标题 - 自定义站点标题
    访问端口 - 公开访问端口,可自定义,默认 8008
    Agent的通信端口 - Agent与Dashboard的通信端口,默认 5555

  • 输入完成后,等待拉取镜像 安装结束后,如果一切正常,此时你可以访问域名+端口号,如 “http://cdn.example.com:8008” 来查看面板

  • 将来如果需要再次运行脚本,可以运行: 来打开管理脚本

    bash
    ./nezha.sh

配置反向代理

  • 在宝塔面板中新建一个站点,域名填写公开访问域名,如 “http://cdn.example.com“ ,然后点击“设置”进入站点设置选项,选择“反向代理” - “新建反向代理”

  • 自定义一个代理名称,在下方“目标 URL”中填入 http://127.0.0.1 然后点击“保存”

  • 打开刚刚新建的反向代理右边的“配置文件”,将配置文件替换为以下内容:

nginx
#PROXY-START/ location / { proxy_pass http://127.0.0.1:8008; proxy_set_header Host $http_host; proxy_set_header Upgrade $http_upgrade; } location ~ ^/(ws|terminal/.+)$ { proxy_pass http://127.0.0.1:8008; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $http_host; } #PROXY-END/

在宝塔面板中配置 SSL 首先,先暂时关闭反向代理 正如在其他网站中配置 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" ,不更改此项可能会导致你无法登录面板后台

设置面板

在管理后台中新增服务器

image.png

设置服务器监控服务

image.png

  • 名称(随意)
  • 目标
    1. 类型为 HTTP-GET 时输入URL(带 http/https, HTTPS协议的会顺带监控SSL证书);
    2. 类型为 ICMP-Ping 时输入域名/IP,不带端口;
    3. 类型为 TCP-Ping 时输入域名/IP + 端口号:example.com:22
  • 类型
    1. HTTP-GET(可以一起监控ssl证书)
    2. ICMP-Ping(直接检测连通性)
    3. TCP-Ping(测试端口连通性)
  • 请求间隔(秒)
  • 覆盖范围(默认即可)
  • 特定服务器(选择服务器ID)
  • 通知方式组(在下一节中的告警方式中提前设置)
  • 故障通知(同样使用告警设置)
  • 最大延迟(设置服务器最大监控的ms)
  • 最小延迟(在最大延长和最小延迟中的区间高即为不正常,低即为正常)

任务

告警

灵活的通知方式

在面板消息中,占位符 #DATETIME#代表事件发生的时间戳。当通知被触发时,面板会自动将 #DATETIME#替换为事件的实际时间。

#NEZHA#是面板消息占位符,面板触发通知时会自动用实际消息替换占位符

Body内容是JSON 格式的:当请求类型为 FORM 时,值为 key:value 的形式,value 里面可放置占位符,通知时会自动替换。当请求类型为 JSON 时 只会简单进行字符串替换后直接提交到URL

Server 酱示例

名称:Server 酱
URL:https://sc.ftqq.com/你的key.send?title=哪吒报警信息&desp=#NEZHA#
请求方式: GET
请求类型: 默认
Body: 空

Server 酱进阶

名称:Server 酱
URL:https://sc.ftqq.com/你的key.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)" }

演示

image.png

server酱通知展示

image.png

告警规则说明

基本规则
type:可选取一个或多个类型,如在一个规则中选择了多个类型,需要同时满足所有选择的类型才会触发通知(可参考后面的示例)
cpu、memory、swap、disk
net_in_speed 入站网速、net_out_speed 出站网速、net_all_speed 双向网速、transfer_in 入站流量、transfer_out 出站流量、transfer_all 双向流量
offline 离线监控
load1、load5、load15 负载

process_count 进程数 目前取线程数占用资源太多,暂时不支持
tcp_conn_count、udp_conn_count 连接数
duration:持续数秒,数秒内采样记录 30% 以上触发阈值才会报警(防数据插针)
min 或 max:
流量、网速类数值 为字节(1KB=1024B,1MB = 1024*1024B)

内存、硬盘、CPU 以占用百分比计数
离线监控无需设置此项
cover:
0 监控所有,通过 ignore 忽略特定服务器
1 忽略所有,通过 ignore 监控特定服务器
报警规则分享
名称:离线报警
规则:[{"Type":"offline","Duration":10}] 解释:每10s坚持一次,如果离线会发通知。(10s感觉太短,我改成600,也就是10分钟感觉比较合适)

名称:CPU过高警告
规则:[{"type":"cpu","max":90,"duration":300}] 解释:CPU超过90%发通知警告。300s一周期。(90和300自行修改为自己合适)

名称:内存过高警告
规则:[{"type":"memory","max":90,"duration":300}] 解释:内存占用超过90%发通知警告,300s一周期。(90和300自行修改为自己合适)

名称:硬盘即将爆满
规则:[{"type":"disk","max":80,"duration":43200}] 解释:硬盘占用超过80%发通知警告,12小时一周期。(80和43200自行修改为自己合适)

名称:TCP链接过多异常
规则:[{"type":"tcp_conn_count","max":20,"duration":300}] 解释:TCP链接数超过20个发通知报警,300s为周期。

名称:出站网速过快警告
规则:[{"type":"net_out_speed","max":524288000,"duration":300}] 解释:出站网速超过500M警告发通知,周期为300s。(524288000和300自行修改为自己合适)

名称:周期内流量警告
规则: [{"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}}]

解释:ID 为 3 和 4 的服务器(ignore 里面定义),以每月 1 号为统计周期,周期内统计的出站月流量达到 1TB 时报警

  • type之中transfer_out_cycle表示周期内的入站流量。大家可以修改为transfer_out_cycle 周期内的出站流量、 transfer_all_cycle 周期内双向流量和

  • max之后的1099511627776为1TB流量,这里使用的单位应该是B,大家可以自行修改。如:200GB为214748364800

  • cycle_start: 是统计周期开始日期(可以是你机器计费周期的开始日期),时间格式为RFC3339,例如北京时间为2022-01-11T08:00:00.00+08:00

  • cycle_interval:每隔多少个周期单位(例如,周期单位为天,该值为 7,则代表每隔 7 天统计一次)

  • cycle_unit 统计周期单位,默认hour,可选(hour, day, week, month, year)

  • cover参考基本规则 【0 监控所有,通过 ignore 忽略特定服务器 、1 忽略所有,通过 ignore 监控特定服务器】

  • ignore内定义要监控的VPS 的ID。

安装被控端

在服务器界面负责一键安装代码,直接复制到被监控端直接运行即可

image.png

但是国内的服务器无法正常安装哪吒探针,即使是脚本提供的国产镜像也不行

探针下载

image.png 根据服务器选择合适的版本下载,下载完后是一个二进制代码文件,无后缀

以下内容来自nezha.sh
NZ_BASE_PATH="/opt/nezha" NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" NZ_AGENT_SERVICE="/etc/systemd/system/nezha-agent.service" 1. "/opt/nezha" 为面板核心的存放目录,包括Dashboard 和 Agent 2. "/opt/nezha/agent" 结合上文,此目录就为代理端核心文件的存放位置 3. "/etc/systemd/system/nezha-agent.service" 对Liunx系统比较熟悉的小伙伴就会知道这个文件决定的哪吒代理端的开机启动

根据上述内容判断出核心存放目录和存放位置

操作步骤

  1. 在服务器上创建“/opt/nezha/agent”目录,将nezha-agent放入

  2. “/etc/systemd/system/”目录新建一个nezha-agent.service文件,将完成替换的代码保存进其中

    [Unit] Description=Nezha Agent After=syslog.target #After=network.target #After=nezha-dashboard.service [Service] # Modify these two values and uncomment them if you have # repos with lots of files and get an HTTP error 500 because # of that ### #LimitMEMLOCK=infinity #LimitNOFILE=65535 Type=simple User=root Group=root WorkingDirectory=/opt/nezha/agent/ ExecStart=/opt/nezha/agent/nezha-agent -s IP地址:5555 -p 密钥 Restart=always #Environment=DEBUG=true # Some distributions may not support these hardening directives. If you cannot start the service due # to an unknown option, comment out the ones not supported by your version of systemd. #ProtectSystem=full #PrivateDevices=yes #PrivateTmp=yes #NoNewPrivileges=true [Install] WantedBy=multi-user.target
  3. 最后在脚本中重新更改探针配置后重启即可上线

本文作者:Casear

本文链接:

版权声明:摘自[哪吒面板官方文档](https://nezha.wiki/guide/dashboard.html)和网络搜集