监控IIS的运行状态

IIS经常出现假死的情况,具体什么时候会出现假死,我就不说了,今天我要写的是如何监控IIS的状态

程序的功能是:如果IIS是为运行的状态,就重启IIS,如果IIS的连接数达到了设置的连接数,也重启IIS。我写了一个window服务,时刻监控着IIS的运行状态。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Management;
using System.Diagnostics;
using System.ServiceProcess;
using System.Configuration;
namespace IISWatcher
{
    public partial class IISWatcher : ServiceBase
    {
        public IISWatcher()
        {
            InitializeComponent();
        }

        System.Timers.Timer tmr;
        protected override void OnStart(string[] args)
        {
            tmr = new System.Timers.Timer();
            tmr.Interval = 6000;
            tmr.Elapsed += new System.Timers.ElapsedEventHandler(tmr_Elapsed);
            tmr.Enabled = true;
        }

        void tmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            string currentAnonymousUsers = "";
            string timeOut = "";
            try
            {
                currentAnonymousUsers = ConfigurationManager.AppSettings["CurrentAnonymousUsers"];
                timeOut = ConfigurationManager.AppSettings["TimeOut"];

                ServiceController winSc = new ServiceController("WAS");
                if (winSc.Status != System.ServiceProcess.ServiceControllerStatus.Running && winSc.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
                {
                    StartService("WAS");
                }

                ServiceController sc = new ServiceController("W3SVC");
                if (sc.Status != System.ServiceProcess.ServiceControllerStatus.Running && sc.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
                {
                    StartService("W3SVC");
                }
                else
                {
                    SelectQuery query = new SelectQuery("Select " + currentAnonymousUsers + " from Win32_PerfRawData_W3SVC_WebService where name=\"_total\"");
                    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
                    int currentAnonUsers = 0;
                    foreach (ManagementBaseObject disk in searcher.Get())
                    {
                        int.TryParse(disk[currentAnonymousUsers].ToString(), out currentAnonUsers);
                    }
                    if (currentAnonUsers > Convert.ToInt32(timeOut))
                    {
                        StartService("W3SVC");
                    }
                }
            }
            catch (Exception ex)
            {
                EventLog.WriteEntry("IISWatcherRecord", "ErrorMessage:" + ex.Message, EventLogEntryType.Error);
            }
        }

        static private void StartService(string serviceName)
        {
            ServiceController sc = new ServiceController(serviceName);
            sc.Start();
            for (int i = 0; i < 5; i++)
            {
                sc.Refresh();
                System.Threading.Thread.Sleep(1000);
                if (sc.Status == System.ServiceProcess.ServiceControllerStatus.Running)
                {
                    break;
                }
                if (i == 4)
                {
                    throw new Exception(serviceName + "启动失败!启动时间超过5秒!");
                }
            }
        }
        protected override void OnStop()
        {
            tmr.Stop();
        }
    }
}
时间: 2024-10-06 00:40:12

监控IIS的运行状态的相关文章

用powershell脚本实现zabbix LLD 监控IIS站点

需求: 生产环境中需要实现IIS 站点监控自动化,需要获取到站点名和站点进程的PID.有了站点名可以用windows内置的key获取相关监控项的值.例如站点的get.post请求数,站点的版本信息等.但是还需要监控IIS站点的SQL连接数,这需要IIS站点被访问,并且有SQL进程.然后通过进程号来判断是各个站点的SQL连接数. 脚本内容: get.sitename [email protected]() [System.Collections.ArrayList]$arraylist=$site

zabbix企业应用:利用自动发现监控IIS站点

如果一台windows server有许多个IIS站点,我们想实现这样一个监控目标:监控每个站点的状态.请求.流量.连接数,而且以后新增加的站点也可以自动加入到监控里,不需要再手动添加. 利用zabbix的自动发现(LLD)功能结合脚本可以实现上面的需求,实现对IIS站点的动态添加,动态监控. 先看一下监控的效果: 上图中的"Web Service(wskh)"是指IIS网站名称为wskh:"Web Service(_Total)"是指IIS下所有的站点. 网站流量

zabbix3.0自动发现监控IIS

说明此处配置针对的是zabbix3.0版本 利用zabbix的自动发现(LLD)功能结合脚本可以实现上面的需求,实现对IIS站点的动态添加,动态监控. 效果图: 具体配置步骤: 1.  zabbix服务端配置 配置过滤正则表达式: 依次选择Administration->General->Regular expressions.创建新的正则表达式"IISSite for discovery",会在后面的模板中引用.正则表达式的名字不能有错,否则导入模板报错. 导入模块 将内

监控MYSQL主从同步配置中监控从库运行状态的脚本

代码如下: [java] view plain copy #!/bin/bash #Check MySQL Slave's Runnning Status #Crontab time 00:10 MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'` MYSQLIP=`ifconfig eth0|grep "inet addr" 

实战Nagios网络监控(1)——监控本机运行状态和Mysq主机

Nagios是一个监视系统运行状态和网络信息的监视系统.Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等. Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等 实验环境: 物理主机 redhat7.0 内核版本 3.10.0-123.el7.x86_64 虚拟机 redhat6.5 内核版本 2.6.32-431.el6.x86_64 服务器端: server1.exampl

SCOM 2016监控IIS 网页服务

各位好,很高兴今天又能和大家一起分享一下关于System Center 2016 - Operations Manager 的一些小功能.之前讲到了 SCOM 2016对于通过分发在客户端的Agent来进行的监控报警. 今天准备和大家一起学习一下SCOM 2016对于IIS网页服务的监控和配置. 其实对于IIS的监控需求,我相信大家还是有很多硬性的需要的,因为企业内部或多或少会有一些用到 IIS Web Service的服务,比如 Exchange / SharePoint / CRM 等等.

loadrunner监控iis指标

开启服务器上的network DDE和Remote Registry服务 ,并在客户机上用net use 命令与服务器建立连接 按需使用 IIS Global Active Flushed Entries Active Flushed Entries 是缓存文件句柄,当前传输全部完成后将关闭此句柄.IIS Global 对象. Web Anonymous Users/Sec 用户通过 Web 服务进行的匿名连接数. IIS Global BLOB Cache Flushes 自服务器启动后的 B

使用 pm2-web 监控 pm2 服务运行状态

pm2-web 是一款 pm2 服务状态监控程序,基于 web . 安装 $ npm install -g pm2-web 运行(默认是在8080端口) $ pm2-web 配置 pm2-web 将会加载默认的配置文件(如果存在) pm2-web will load one of the following files if they exist (in order of preference) A file specified by the --config /path/to/config.j

Zabbix 监控 IIS

1.创建脚本iis.bat@echo offSETLOCAL ENABLEDELAYEDEXPANSION echo {echo "data":[for /F "tokens=* delims= " %%i IN ('typeperf -qx^|find "Web Service"^|find "Current Connections"') DO (set j=%%ifor /F "tokens=1 delims=\