接口被频繁请求,有时候会导致IIS的程序池挂掉,但是接口还是通过,请求过来会有503的问题。现在通过Nginx已经解决掉不会被请求到挂掉的站点上。但是挂掉的还是需要重启的,人为参与的话会造成开发人力资源的浪费,所以我找到了APM,用于自动化重启IIS,这样不用每次挂掉之后,都需要开发参与了。
监视IIS状态,发现站点/程序池挂掉后能够重启
配置连接通讯
当IIS挂掉之后,我们都会进行邮件预警
-
管理=>连接通讯 ,配置路由,如图:
-
进入到 连接通讯 页面后,如图:
- 163邮箱配置方法
按照我截图中的方式进行配置,最后可以测试连接,当出现 连接成功时,就可以点击保存了.
-
office邮箱配置方法
按照我截图中的方式进行配置,最后可以测试连接,当出现 连接成功时,就可以点击保存了.
配置电子邮箱动作
配置好要执行的邮箱动作,用于发送邮件。
务必要优先配置 连接通讯
实现结果如图:
- 动作类型:发送邮件
- 显示名称 我采用 邮件-XXX 用于区分其他的动作,因为在后续监视器里面配置的时候,APM会把所有的动作都在列表里展示,名字区分一下,好选择
- 起始地址 如果配置过 连接通讯 会自动带出来。
- 结束地址 收件人 多个用 英文版半角 逗号 分割
- 主题 邮件的标题
- 消息 我采用的是自定义信息,按照自己要求的固有格式发送
执行程序动作
执行(成功)后通知、执行(失败)后通知 不是必填项,需要成功和失败都发邮件的,那么就必须要把通讯和邮件动作都配置好
实现结果如图:
- 显示名称 自定义名称
- 脚本位置 我选择的是本地服务器,我采用的是单机上配置一个监视服务,用于监视单机IIS的目的。
- 要执行的程序 用 英文半角的双引号 包含执行文件的绝对路径
- 程序工作目录 把程序的上一级目录放入即可
- 执行(成功)后通知 有配置过的 电子邮箱动作 选中自己成功后的动作即可
- 执行(失败)后通知 有配置过的 电子邮箱动作 选中自己失败后的动作即可
新建监视器
-
选择 监视器=>新建监视器=>IIS服务器,最终路径如何如图
-
详细界面如图:
- 显示名称 监视器名称
- 主机名/IP地址 服务器搭建的话,输入 localhost / 127.0.0.1 取决于自己服务器配置
- 子网掩码 查看服务器网络,查看 IPV4 的子网掩码,输入即可
- 端口号 定义一个端口号,我放入的是要监视的IIS端口
- 轮询间隔 监视器会按照定义的时间去监视和执行对应的动作。我是默认,具体的时间看自己要求。
配置 监视器 告警设置
1. 健康状态
当IIS站点挂了之后,健康状态会出现告警
点击关联:
他会自动关联出现动作,选中重启IIS站点的动作
2. 可用性
他会自动关联出现动作,选中重启程序池的动作
取消监视多余的站点、程序池
我的目的是为了监视一个站点,当其他的站点挂了,都会执行重启站点/程序池的动作,所以为了避免重启错误的问题,在动作后面的绿色对钩上,把它X掉,这样就可以达到监视一个站点的效果,如果要监视多个,就配置多个监视器。
这样有人会有疑问,如果我在下面的网站名、应用池名称里都取配置对应的动作管理,这样不就可以达到谁挂了就自动重启谁么。这个方案我试过了,没有用,监视器轮询的时候,只会执行监视器里面配置的动作管理,网站和程序池配置的不会生效。所以只能用蠢一点的办法,在后面的网站和程序池里面去掉它
重启程序池、站点的Dos代码
-- 重启站点
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
c:\windows\system32\inetsrv\AppCmd.exe stop site "站点名称"
c:\windows\system32\inetsrv\AppCmd.exe start site "站点名称"
pause
------------------------------------------------------------------------------------------
-- 重启程序池
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
c:\windows\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"程序池名称"
c:\windows\system32\inetsrv\AppCmd.exe start apppool /apppool.name:"程序池名称"
pause