# Nezha Monitoring

哪吒监控 (opens new window):开源、轻量、易用的服务器监控、运维工具

TIP

结合视频食用更香!油管 (opens new window)B站 (opens new window)
如果您正在使用TrueNAS,想把哪吒监控安装到APP里面,可以查看我的《TrueNAS Scale终极教程》 (opens new window)
这里只记录我所用到的功能,更多详细内容请查看官方 (opens new window)文档

# 0x01 安装

# 接入GitHub作为后台管理员账号

  • 打开Developer Settings (opens new window),依次选择OAuth Apps - New OAuth App 新建授权应用。
  • 填写应用信息
    • Application name - 随意填写
    • Homepage URL - 填写面板的访问域名,如:"https://bigdata.icu/"
    • Authorization callback URL- 填写回调地址,如:"https://bigdata.icu/oauth2/callback"
  • Register application 注册应用

# 运行面板安装脚本

# GitHub 源
curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh  -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh
# Gitee 源
curl -L https://gitee.com/naibahq/nezha/raw/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh
1
2
3
4

填写相关信息

  • 请输入 OAuth2 提供商(github/gitlab/jihulab/gitee,默认 github): - 直接回车,默认github
  • 请输入 Oauth2 应用的 Client ID: - 输入刚才GitHub创建的授权应用的Client ID
  • 请输入 Oauth2 应用的 Client Secret: - 点击授权应用中的Generate a new client secret
  • 请输入 GitHub/Gitee 登录名作为管理员,多个以逗号隔开: - 填写你的用户名,不是你登陆的账号或者自定义的别名,比如我的项目地址是 https://github.com/bihell,后面的bihell就是用户名。
  • 请输入站点标题: - 随意
  • 输入站点访问端口: (默认 8008) - 服务面板的访问端口
  • 请输入用于 Agent 接入的 RPC 端口: (默认 5555) - 客户端和服务面板的通讯端口

# 0x02 Docker 部署文件

TIP

如果有自己的Docker服务器,不想使用官方的一键脚本。那么直接修改配置文件/data/config.yaml (opens new window)oauth2该为自己的,然后部署即可。

如果你正在使用TrueNAS,或者对NAS感兴趣,那么可以参考我《TrueNAS Scale终极教程》 (opens new window)来自定义APP安装哪吒监控。

配置文件地址:https://github.com/bihell/nezha-docker (opens new window)

# 0x03 反代配置

#PROXY-START/
location / {
    proxy_pass http://192.168.50.116:8008;
    proxy_set_header Host $http_host;
    proxy_set_header      Upgrade $http_upgrade;
}
location ~ ^/(ws|terminal/.+)$  {
    proxy_pass http://192.168.50.116: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/
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 0x04 Agent 设置

# 设定Agent数据传输域名/IP

Settings->Dashboard Server Domain/IP without CDN

# 在 OpenWRT 中安装 Agent

  • 下载release (opens new window)的二进制包,解压到 /opt,运行 chmod +x /opt/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 /opt/nezha-agent -s 面板通信地址:端口 -p 秘钥 -d
 procd_set_param respawn
 procd_close_instance
}

stop_service() {
    killall nezha-agent
}

restart() {
 stop
 sleep 2
 start
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  • 运行 chmod +x /etc/init.d/nezha-service 赋予执行权限
  • 启动服务: /etc/init.d/nezha-service enable && /etc/init.d/nezha-service start

# 自定义的网卡和分区

执行/opt/nezha/agent/nezha-agent --edit-agent-config

# 其他运行参数

编辑/etc/systemd/system/nezha-agent.service然后在 ExecStart= 这一行的末尾加上参数

参数清单:

  • --report-delay 控制系统信息上报的间隔,默认为 1 秒,可以设置为 3 来进一步降低 agent 端系统资源占用(配置区间 1-4)
  • --skip-conn 不监控连接数,推荐 机场/连接密集型 服务器或CPU占用较高的服务器设置
  • --skip-procs 不监控进程数,也可以降低 Agent 占用
  • --disable-auto-update 禁止 自动更新 Agent(安全特性)
  • --disable-force-update 禁止 强制更新 Agent(安全特性)
  • --disable-command-execute 禁止在 Agent 上执行定时任务、打开在线终端(安全特性)
  • --tls 启用 SSL/TLS 加密(使用 nginx 反向代理 Agent 的 grpc 连接,并且 nginx 开启 SSL/TLS 时,需要启用该项配置)

重启服务:

sudo vim /etc/systemd/system/nezha-agent.service
sudo systemctl daemon-reload
sudo systemctl restart nezha-agent
sudo systemctl status nezha-agent
1
2
3
4

# 0x05 延迟监控

地区 电信 移动 联通 教育
上海 202.96.209.133 183.194.219.220 210.22.97.1 202.120.2.119
北京 49.7.37.74 112.34.111.194 111.206.209.44 166.111.4.100
广州 183.47.126.35 120.233.18.250 157.148.58.29 202.116.64.8
河北 27.185.242.215 111.62.229.100 61.182.138.156
山西 1.71.157.41 183.201.244.91 60.221.18.41
辽宁 123.184.58.41 36.131.156.145 218.61.211.132
吉林 123.172.127.217 111.27.127.176 122.143.8.41
黑龙江 42.101.84.132 111.42.190.25 113.7.211.140
江苏 58.215.210.220 36.156.92.132 122.96.235.165
浙江 115.220.14.91 117.147.213.41 101.69.194.224
安徽 223.247.108.251 112.29.198.100 112.132.208.41
福建 106.126.10.28 112.50.96.88 36.248.48.139
江西 106.227.22.132 117.168.150.249 116.153.69.224
山东 144.123.160.140 120.220.145.91 112.240.56.143
河南 171.15.110.220 111.7.99.220 123.6.65.101
湖北 111.170.8.60 111.47.131.101 122.189.226.138
湖南 113.240.117.108 120.226.192.91 116.162.28.220
广东 183.36.23.111 183.240.65.191 112.90.211.100
海南 124.225.43.220 111.29.29.219 153.0.226.35
四川 118.123.218.220 183.220.151.41 101.206.163.49
贵州 58.42.61.132 61.243.18.220 117.187.254.132
云南 222.221.102.220 36.147.44.219 14.204.150.41
陕西 124.115.14.100 111.19.148.100 123.139.127.132
甘肃 118.182.228.91 117.157.16.41 59.81.94.53
青海 223.221.216.219 111.12.152.170 116.177.237.137
内蒙古 110.76.186.70 117.161.76.41 116.114.98.41
广西 222.217.93.55 36.136.112.41 171.39.5.51
西藏 113.62.176.89 117.180.234.41 43.242.165.35
宁夏 222.75.44.220 111.51.155.214 116.129.226.28
新疆 110.157.243.45 36.189.208.164 116.178.77.40
天津 42.81.98.35 111.31.236.35 116.78.119.56
重庆 119.84.131.101 221.178.81.101 113.207.69.190

# 0x06 Dashboard 配置

# 调整最大TCPPing值

修改文件:/nezha/data/config.yaml,调整MaxTCPPingValue值。

# 隐藏服务中的状态文字

Settings->Custom Codes (Style and Script)

<style>
.service-status .delay-today-text{display: none;visibility: hidden;}
</style>
1
2
3

# 设置页面宽度

<style>
.container {
  width: 1540px;
}
</style>
1
2
3
4
5

# 0x07 服务器监控

# 基本规则

  • type:可选取一个或多个类型,如在一个规则中选择了多个类型,需要同时满足所有选择的类型才会触发通知(可参考后面的示例)
    • cpumemoryswapdisk
    • net_in_speed 入站网速、net_out_speed 出站网速、net_all_speed 双向网速、transfer_in 入站流量、transfer_out 出站流量、transfer_all 双向流量
    • offline 离线监控
    • load1load5load15 负载
    • process_count 进程数 目前取线程数占用资源太多,暂时不支持
    • tcp_conn_countudp_conn_count 连接数
  • duration:持续数秒,数秒内采样记录 30% 以上触发阈值才会报警(防数据插针)
  • minmax
    • 流量、网速类数值 为字节(1KB=1024B,1MB = 1024*1024B)
    • 内存、硬盘、CPU 以占用百分比计数
    • 离线监控无需设置此项
  • cover
    • 0 监控所有,通过 ignore 忽略特定服务器
    • 1 忽略所有,通过 ignore 监控特定服务器
    • 例如:[{"type":"offline","duration":10, "cover":0, "ignore":{"5": true}}]
  • ignore: 选择忽略特定服务器,搭配 cover 使用,内容为服务器 id 和布尔值,例如:{"1": true, "2":false}

# 流量监控

属性:

  • type:
    • transfer_in_cycle 周期内的入站流量
    • transfer_out_cycle 周期内的出站流量
    • transfer_all_cycle 周期内双向流量和
  • cycle_start: 统计周期开始日期(可以是你机器计费周期的开始日期),时间格式为RFC3339,例如北京时间为2022-01-11T08:00:00.00+08:00
  • cycle_interval:每隔多少个周期单位(例如,周期单位为天,该值为 7,则代表每隔 7 天统计一次)
  • cycle_unit 统计周期单位,默认hour,可选(hour, day, week, month, year)
  • min/maxcoverignore 参考基本规则配置

配置:

[{"type":"transfer_all_cycle","max":1649267441408,"cycle_start":"2024-03-08T00:00:00+08:00","cycle_interval":1,"cycle_unit":"month","cover":1,"ignore":{"100":true}}]

# 报警机器人

# Telegram

关注官方机器人@Botfather,创建机器人

访问地址:https://api.telegram.org/bot这里填写密钥/sendMessage?chat_id=这里填写用户id&text=#NEZHA#

密钥就是机器人创建后@Botfather返回的 token
id可以通过与机器人@userinfobot对话获得
创建好机器人之后我们先要与其对话一次才可使用

Notifications->Add Notification Method

# 到达额定流量关机

配置关机任务

Tasks->Add Schedule Task

配置告警

Notifications->Add Notification Rule

# 离线报警

[{"Type":"offline","Duration":10}]

# 网速报警

[{"Type":"net_out_speed","Duration":10,"max":10485760,"cover":1,"ignore":{"18":true}}]

# CPU+内存

CPU 持续 10s 超过 50% 且 内存持续 20s 占用低于 20% 的报警

[{"Type":"cpu","Min":0,"Max":50,"Duration":10},{"Type":"memory","Min":20,"Max":0,"Duration":20}]

更新时间: 3/24/2024, 5:07:01 PM