Skip to content

简单的单体监控工具,适用于少量监控项+服务器资源少的情景。支持钉钉机器人、邮箱等通知方式。

License

Notifications You must be signed in to change notification settings

applebananamilk/Winter.Monitor

Repository files navigation

Winter.Monitor 📺

编写 JSON 进行配置的单体监控告警工具,适用于少量监控项+服务器资源少的情景。

支持钉钉机器人、邮箱等通知方式。

支持的监控项

支持的功能

  • 告警通知(如果监控项触发阈值,则发送一条告警通知。)

    告警通知

  • 恢复通知(如果监控项发送过告警通知,恢复服务之后会发送一条恢复通知,发送通知的时间不代表恢复时间。)

    告警通知

  • 告警收敛(告警收敛是指指定时间段内的监控项告警只通知一次。)

  • 告警静默(屏蔽指定时间段内所有或设置监控项的告警通知。)

  • 定时报告(定时发送健康报告通知。)

使用

你可以通过克隆此仓库,运行 tools\Publish-And-CompressToZip.ps1 脚本进行发布,发布之后选择需要的压缩包。

也可以下载已发布的压缩包进行使用。

安装为服务

程序集成了自安装服务功能,你可以通过下面的命令进行操作(必须在管理员权限下执行)。

如果安装出现问题,可以看 Logs 文件夹中的日志进行排查。

如果想要提前调试的话,可以使用 Winter.Monitor.exe logs 命令在控制台进行调试。

Windows平台

如果出现卡死、超时等情况,可以参考链接 Windows中系统服务出现卡在 停止挂起、stopping、starting等状态的问题解决

Winter.Monitor.exe start // 安装并启动服务
Winter.Monitor.exe stop // 停止并删除服务
Winter.Monitor.exe logs // 控制台输出服务的日志
Winter.Monitor.exe logs filter="key words" // 控制台输出服务的日志
Linux平台

需要安装基础依赖 libicu

sudo ./Winter.Monitor start // 安装并启动服务
sudo ./Winter.Monitor stop // 停止并删除服务
sudo ./Winter.Monitor logs // 控制台输出服务的日志
sudo ./Winter.Monitor logs filter="key words" // 控制台输出服务的日志

配置项说明

🎉 配置项集成了 JSON Schema ,可以方便的对配置进行校验及提示(需要在支持的编辑器中才会生效,例如 VS CodeVS)。

{
    "$schema": "https://raw.githubusercontent.com/applebananamilk/winter.monitor/main/schemas/monitor-schema-v2.0.json"
}

监控配置

{
    "Monitor": {
        "ServerName": "",
    	"PollingIntervalInSeconds": 5
    }
}
  • ServerName : 服务器名称,如果为空则显示计算机名称。建议使用 IP+用途,例如:127.0.0.1(DB)。
  • PollingIntervalInSeconds : 轮询间隔,表示收集监控数据的执行间隔(秒),默认值 5。
告警配置
{
    "Monitor": {
        "AlarmSetting": {
            "RecoveryNotification": {
                "IsEnabled": true
            },
            "Convergence": {
                "IsEnabled": true,
                "EvalInterval": 1800
            },
            "Silence": {
                "IsEnabled": false,
                "MatchAll": true,
                "HealthCheckNames": [
                    "Process@DingTalk"
                ],
                "PeriodStart": "00:00:00",
                "PeriodEnd": "23:59:59"
            }
        }
    }
}
  • RecoveryNotification : 恢复通知设置。
    • IsEnabled : 是否启用,默认启用。
  • Convergence : 告警收敛设置。
    • IsEnabled : 是否启用,默认启用。
    • EvalInterval : 重复告警收敛周期(秒),默认值 600。
  • Silence : 告警静默设置。
    • IsEnabled : 是否启用,默认关闭。
    • MatchAll : 是否对所有检查项生效,默认启用。
    • HealthCheckNames : 生效检查名字,格式为分组@检查名字,例如:OS@Disk、Process@DingTalk。
      • 分组名字:OS、Process、DB、Ping、Tcp。
    • PeriodStart : 静默时段开始,默认值0:00。
    • PeriodEnd : 静默时段结束,默认值0:00。
系统监控配置
{
    "Monitor": {
        "SystemSetting": {
            "ProcessSettings": [
                {
                    "ProcessName": "DingTalk"
                }
            ],
            "WarningThreshold": {
                "Disk": 90,
                "Memory": 95
            }
        }
    }
}
  • ProcessSettings : 进程监控设置。
    • ProcessName : 进程名称,名称唯一。
  • WarningThreshold : 告警阈值。
    • Disk : 磁盘(百分比),如果超过设置的百分之数值,则视为不健康。
    • Memory : 内存(百分比),如果超过设置的百分之数值,则视为不健康。
数据库监控配置
{
    "Monitor": {
        "DatabaseSettings": [
            {
                "Name": "Redis",
                "ConnectionString": "127.0.0.1:6309",
                "DbType": "Redis",
                "WarningThreshold": {
                    "Timeout": 5000
                }
            }
        ]
    }
}
  • Name:名称,数据库监控配置内唯一,非空。
  • ConnectionString : 连接字符串,非空。
  • DbType : 数据库类型,非空。支持:MySQLRedisSqlServerMongoDB
  • WarningThreshold :告警阈值。
    • Timeout : 超时时间(毫秒)。
Ping监控配置
{
    "Monitor": {
        "PingSettings": [
            {
                "Name": "PingName",
                "Host": "127.0.0.1",
                "WarningThreshold": {
                    "Timeout": 2000
                }
            }
        ]
    }
}
  • Name : 名称,Ping监控配置内唯一,非空。
  • Host : Ping的Host地址,非空。
  • WarningThreshold :告警阈值。
    • Timeout : 超时时间(毫秒),默认值2000。
TCP监控配置
{
    "Monitor": {
        "TcpSettings": [
            {
                "Name": "Zhihu",
                "Host": "140.249.84.135",
                "Port": 443,
                "WarningThreshold": {
                    "Timeout": 5000
                }
            }
        ]
    }
}
  • Name : 名称,TCP监控配置内唯一,非空。
  • Host : Ping的Host地址,非空。
  • Port : 端口,非空。
  • WarningThreshold :告警阈值。
    • Timeout : 超时时间(毫秒)。

通知配置

支持多渠道接收通知,但目前只实现了钉钉机器人、邮箱的方式。

{
    "Notifications": {
        "DingTalkRobot": {
            "IsEnabled": true,
            "Webhook": "",
            "AtMobiles": [],
            "IsAtAll": false
        },
        "Email": {
            "IsEnabled": false,
            "Host": "",
            "Port": 465,
            "UserName": "",
            "Password": "",
            "EnableSsl": true,
            "ReceiveEmails": ""
        }
    }
}
  • Notifications
    • DingTalkRobot : 钉钉机器人配置。
      • IsEnabled : 是否启用。
      • Webhook : Webhook地址,为空不会发送。
      • AtMobiles : 被@的人的手机号。
      • IsAtAll : 是否@所有人。
    • Email : 邮箱配置。
      • IsEnabled : 是否启用。
      • Host : 发送邮件服务器。
      • Port : 端口号。
      • UserName : 一般是邮箱完整的地址。
      • Password : 一般是生成的授权码
      • EnableSsl : 是否启用SSL。
      • ReceiveEmails : 接收邮箱地址,多个使用英文逗号分割”,“。

定时报告配置

{
    "PeriodicReportingWorker": {
        "IsEnabled": true,
        "StartNow": false,
        "Cron": "0 15 10 15 * ?"
    }
}
  • IsEnabled : 是否启用。
  • StartNow : 是否立即执行一次发送报告通知。
  • Cron : 定时通知Cron表达式,默认每月15日上午10:15触发。
    • 0 0 15 ? * FRI : 每个星期五的15点执行任务。
    • 0 15 10 15 * ? : 每个月的15号上午10点15分执行任务。
报告内容示例

报告内容

配置模板

{
  "$schema": "https://raw.githubusercontent.com/applebananamilk/winter.monitor/main/schemas/monitor-schema-v1.0.json",
  "Monitor": {
    "ServerName": "",
    "PollingIntervalInSeconds": 5,
    "AlarmSetting": {
      "RecoveryNotification": {
        "IsEnabled": true
      },
      "Convergence": {
        "IsEnabled": true,
        "EvalInterval": 1800
      },
      "Silence": {
        "IsEnabled": false,
        "MatchAll": true,
        "HealthCheckNames": [
          "Process@DingTalk"
        ],
        "PeriodStart": "00:00:00",
        "PeriodEnd": "23:59:59"
      }
    },
    "SystemSetting": {
      "ProcessSettings": [
        {
          "ProcessName": "DingTalk"
        }
      ],
      "WarningThreshold": {
        "Disk": 90,
        "Memory": 95
      }
    },
    "DatabaseSettings": [
      {
        "Name": "Redis",
        "ConnectionString": "127.0.0.1:6309",
        "DbType": "Redis",
        "WarningThreshold": {
          "Timeout": 5000
        }
      }
    ],
    "PingSettings": [
      {
        "Name": "PingName",
        "Host": "127.0.0.1",
        "WarningThreshold": {
          "Timeout": 5000
        }
      }
    ],
    "TcpSettings": [
      {
        "Name": "Zhihu",
        "Host": "140.249.84.135",
        "Port": 443,
        "WarningThreshold": {
          "Timeout": 5000
        }
      }
    ]
  },
  "Notifications": {
    "DingTalkRobot": {
      "IsEnabled": true,
      "Webhook": "Your webhook url.",
      "AtMobiles": [],
      "IsAtAll": false
    }
  },
  "PeriodicReportingWorker": {
    "IsEnabled": true,
    "StartNow": false,
    "Cron": "0 0 15 ? * FRI"
  }
}

About

简单的单体监控工具,适用于少量监控项+服务器资源少的情景。支持钉钉机器人、邮箱等通知方式。

Topics

Resources

License

Stars

Watchers

Forks