看门狗Wawa使用说明

来自MDCS wiki
Bruce讨论 | 贡献2024年6月22日 (六) 12:28的版本 →‎2.1.1 Medulla启动脚本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

1. 关于Wawa

Wawa是看门狗,自动启动须监控的应用程序,并在其进程异常退出时重启。Wawa与MDCS配套,可在Windows、Ubuntu上实现各子系统的守护监控功能,并通过Web API实现与上位机集成。

在开发站 下载Wawa

2. 安装

Wawa使用 .NET 6.0开发,支持跨平台运行。请参考微软 .NET 官网安装 .NET 6.0 Download .NET 6.0 (Linux, macOS, and Windows) (microsoft.com) 。

Wawa的目录结构如下:

WAWA
├─logs					// app.log是Wawa运行日志,最多5个文件,文件最大100M
├─programs				// 被监控的应用程序目录。本例是Ubuntu环境的目录结构
│  ├─DetourLite			// DetourLite目录
│  │  └─log
│  └─Medulla			// Medulla目录
│      └─log
├─run					// 由Wawa启动的进程Id存在此目录

Wawa的进程监控逻辑如下:

  1. Wawa启动时读入配置文件,根据AutoStart参数(默认是true)判断是否启动programs目录下的程序。如须启动,则扫描programs目录(含子目录)下的可执行程序,Linux是"*.sh",Windows是"*.exe"。程序启动后将其进程Id保存到run目录下,文件格式是"{程序文件名}.pid"。
  2. Wawa定时扫描已启动程序,如发现程序进程退出,且不是Wawa关闭,则重启并记录日志。

appsettings.json是Wawa配置文件。

{
    "Token": {
        "secret": "HRwOi8vc2NoZW1hcy5",
        "issuer": "logimind.com.cn",
        "audience": "WebApi",
        "accessExpiration": 30,
        "refreshExpiration": 60
    },
    "Urls": "http://0.0.0.0:7100",			// Web服务监听地址
    "Kestrel": {
        "Endpoints": {
          "Http": {
            "Url": "http://0.0.0.0:7100"
          }
        }
    },
    "AllowedHosts": "*",
    "Wawa": {
        "AutoStart": true,					// 自动启动被监控程序
        "WatchdogScanInterval": 3			// 扫描间隔为3秒
    }
}

用户可用Wawa的Web API手动启动或停止程序。Wawa会监视由其启动的程序进程。如程序进程由Wawa停止,则不会自动重启,如此可方便用户执行维护操作,比如调试程序期间手动启停程序。

图 2-1 Wawa Web API

使用浏览器输入"http://{ip}:7100/swagger/index.html"(把"{ip}"替换为Wawa所在PC的IP地址),打开wawa的swagger页面。Wawa提供了以下功能接口:

接口名称 路径 用途
操作系统性能 /Top/SystemUsage 返回Wawa所在PC的CPU占用率、内存占用率。
监控程序列表 /Watchdog/Program 返回programs目录下的可执行文件清单。在使用启动和停止程序接口时以此为参数。
启动程序 /Watchdog/Start 启动程序。如果程序已运行则忽略。
停止程序 /Watchdog/Stop 停止程序。如果程序已退出则忽略。成功停止程序后,Wawa删除run目录下对应的pid文件,将其移出监控队列。
进程状态 /Watchdog/ProcessState 返回运行中程序状态,包括其当前和峰值内存占用量(字节单位)。

提示:如果需要手动启停程序,记得用“停止程序”接口将其停止,以免Wawa自动重启。生产环境下,在配置调试工作结束后,应启动程序,并用“进程状态”接口复核。

2.1 Ubuntu

提示:由于Medulla所需的Mono支持Ubuntu 18 & 20,因此Wawa在这两个发行版通过测试。如果您使用Wawa监控MDCS以外程序也可以。

设安装Wawa的Ubuntu用户为"bruce"。懒书开发站的Wawa安装包区分x64和arm64架构,其中脚本均以"/home/bruce"为HOME,安装时请修改为实际使用账号目录。把Wawa安装包解压到Home目录(/home/bruce/wawa,wawa可执行程序在该目录下)。

2.1.1 Medulla启动脚本

注意:Medulla需要Mono 6.0以上版本。如果启动失败,用"mono --version"查看版本,Ubuntu16的mono源是4.1,用它启动Medulla.exe就会报错。安装指南详见Wiki的”安装Detour“文章。

编辑programs/Medulla/medulla.sh,这是启动Medulla的脚本,复核路径配置参数。

#!/bin/bash
# MEDULLA_HOME是Medulla的安装目录
MEDULLA_HOME=/home/bruce/Wawa/programs/Medulla
# mono被apt安装在/use/bin目录下,在PATH环境变量中,因此不需要指定mono的路径
# Medulla的控制台输出被重定向到medulla.out,如启动错误可查看此文件
mono $MEDULLA_HOME/Medulla.exe > $MEDULLA_HOME/log/medulla.out

把Medulla程序拷贝到programs/Medulla目录下,然后使用medulla.sh启动,以验证Medulla安装正确。

提示:Wawa的Medulla目录只有启动脚本,不包含Medulla程序。

2.1.2 DetourLite启动脚本

编辑programs/DetourLite/detour.sh,这是启动DetourLite的脚本,复核路径配置参数。

#!/bin/bash
# 检查dotnet安装目录。.NET 6.0安装脚本使用~/dotnet作为安装目录,
# .NET 8.0安装脚本使用~/.dotnet作为安装目录
DOTNET_HOME=/home/bruce/dotnet
DETOUR_HOME=/home/bruce/wawa/programs/DetourLite
$DOTNET_HOME/dotnet $DETOUR_HOME/DetourLite.dll > $DETOUR_HOME/log/detour.out

把DetourLite程序拷贝到programs/DetourLite目录下,然后使用detour.sh启动,以验证DetourLite安装正确。

2.1.3 配置Wawa服务

编辑wawa.service,检查工作目录与用户名。

[Unit]
Description=Wawa is a watchdog for MDCS.
After=network.target

[Service]
# Wawa的工作目录
WorkingDirectory=/home/bruce/wawa
# 启动Wawa的命令
ExecStart=/home/bruce/wawa/wawa
Restart=always
RestartSec=10
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
# 启动wawa.service的用户及其组
# Medulla & Detour可以在非root账号下运行,如果用root账号运行
# 也可以,WorkingDirectory赋予root读写权限
User=bruce
Group=bruce

[Install]
WantedBy=multi-user.target

wawa.service复核后,使用以下指令安装到Ubuntu systemd,实现服务启动启动。

# 拷贝到systemd目录下
sudo cp wawa.service /etc/systemd/system

# 启动wawa service
sudo systemctl start wawa.service
# 如果wawa.service内容有修改,使用 sudo systemctl daemon-reload 让系统重新加载服务配置

# 检查wawa service是否正确启动
sudo systemctl status wawa.service
# Wawa启动后的状态输出如下,上半部分是Wawa服务状态,由systemd给出;下半部分是Wawa服务的控制台输出,已经绑定7100端口。
● wawa.service - Wawa is a watchdog for MDCS.
   Loaded: loaded (/etc/systemd/system/wawa.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2024-06-20 09:13:53 CST; 1h 18min ago
 Main PID: 826 (dotnet)
    Tasks: 41 (limit: 4653)
   CGroup: /system.slice/wawa.service
           ├─826 /home/bruce/wawa/wawa
           ├─993 /bin/bash /home/bruce/wawa/programs/Medulla/medulla.sh
           ├─995 mono /home/bruce/wawa/programs/Medulla/Medulla.exe
           ├─996 /bin/bash /home/bruce/wawa/programs/DetourLite/detour.sh
           └─997 /home/bruce/dotnet/dotnet /home/bruce/wawa/programs/DetourLite/DetourLite.dll

6月 20 09:13:56 bruce-ubuntu dotnet[826]: warn: Microsoft.AspNetCore.Server.Kestrel[0]
6月 20 09:13:56 bruce-ubuntu dotnet[826]:       Overriding address(es) 'http://0.0.0.0:7100'. Binding to endpoints defined via IConfiguration and/or UseKestrel() instead.
6月 20 09:13:56 bruce-ubuntu dotnet[826]: info: Microsoft.Hosting.Lifetime[14]
6月 20 09:13:56 bruce-ubuntu dotnet[826]:       Now listening on: http://0.0.0.0:7100
6月 20 09:13:56 bruce-ubuntu dotnet[826]: info: Microsoft.Hosting.Lifetime[0]
6月 20 09:13:56 bruce-ubuntu dotnet[826]:       Application started. Press Ctrl+C to shut down.
6月 20 09:13:56 bruce-ubuntu dotnet[826]: info: Microsoft.Hosting.Lifetime[0]
6月 20 09:13:56 bruce-ubuntu dotnet[826]:       Hosting environment: Production
6月 20 09:13:56 bruce-ubuntu dotnet[826]: info: Microsoft.Hosting.Lifetime[0]
6月 20 09:13:56 bruce-ubuntu dotnet[826]:       Content root path: /home/bruce/Playground/Wawa

# 把Wawa服务配置为随系统启动
sudo systemctl enable wawa.service

2.2 Windows

把Wawa.zip解压到"c:\mdcs\wawa"目录下。

备注:Wawa所在分区应有100G以上磁盘空间,用于存储Detour、Medulla生成的配置和日志数据。

把Detour、Medulla、Clumsy拷贝到"programs"目录下,删除"programs\DetourLite"目录。

备注:DetourLite用于Ubuntu,Detour用于Windows。

使用管理员角色启动PowerShell,如下图。

图 2-2 以管理员身份启动Power Shell

切换到Wawa目录下,使用Power Shell的"New-Service"指令,把Wawa注册到系统服务。如下图。

图 2-3 注册Wawa服务

注意:BinaryPathName应使用完整路径,本例是"c:\temp\Wawa\wawa.exe"

打开任务管理器,在服务标签中可见“Wawa看门狗”服务,点击“启动”。