shell 记录apache status并自动更新到数据库

2023-05-16

1. 获取apache status

monitor_log.sh
#!/bin/bash

#连接数
site_connects=$(netstat -ant | grep $ip:80 | wc -l)
#当前连接数
site_cur_connects=$(netstat -ant | grep $ip:80 | grep EST | wc -l)

#apache
apache_speed=$(netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}')

printf "[#start#]\n$(date '+%Y-%m-%d %H:%M:%S')\n"
printf "connects:${site_connects}\n"
printf "cur connects:${site_cur_connects}\n"
printf "apache_speed:\n${apache_speed}\n[#end#]\n\n"

exit 0
在终端设置crontab执行
* * * * * /home/fdipzone/monitor_log.sh >> /home/fdipzone/monitor.log

2. 将apache status log 写入数据库

save_monitor_log.php
<?php

$logfile = dirname(__FILE__).'/monitor.log';

$dbconfig = array(
			'host' => '192.168.1.100',
			'username' => 'username',
			'password' => 'password',
			'dbname' => 'mydb',
			'tabname' => 'monitor_log'
);

$obj = new SaveMonitorLog($dbconfig, 'myweb');
$obj->load($logfile);


// 讀取monitor log,記錄入db,查看db
class SaveMonitorLog{ // class start

	private $_apache_state = array('TIME_WAIT', 'CLOSE_WAIT', 'SYN_SENT', 'SYN_RECV', 'FIN_WAIT1', 'FIN_WAIT2', 'ESTABLISHED', 'LAST_ACK', 'CLOSING');
	private $_dbconfig = array();
	private $_site = null;


	/** init */
	public function __construct($dbconfig=array(), $site='web'){
		if(!isset($dbconfig['host']) || !isset($dbconfig['username']) || !isset($dbconfig['password']) || !isset($dbconfig['dbname']) || !isset($dbconfig['tabname'])){
			$this->debug('dbconfig error');
		}
		$this->_dbconfig = $dbconfig;
		$this->_site = $site;
		$this->connectdb();	
	}


	/** load data
	* @param  String $logfile log文件
	* @return boolean
	*/
	public function load($logfile){

		// 讀取log數據
		if(file_exists($logfile)){
			$logdata = file_get_contents($logfile);
			// 清空monitor.log
			file_put_contents($logfile, '', true);
		}else{
			return false;
		}

		// 正則分析數據 [#start#]*[#end#]
		preg_match_all('/\[#start#\](.*?)\[#end#\].*?/si', $logdata, $data);

		if(isset($data[1]) && count($data[1])>0){
			$alldata = $data[1];
			foreach($alldata as $val){
				$indb = $this->parser($val);
				$newid = $this->addtodb($indb);
			}
		}

	}


	/** parser data
	* @param  Array $data
	* @return Array
	*/
	private function parser($data){
		$indb = array();
		$tmp = explode(chr(10), $data); // 按換行分隔

		$indb['site'] = $this->_site;
		$indb['addtime'] = $tmp[1];
		$indb['connects'] = array_pop(explode(':',$tmp[2]));
		$indb['cur_connects'] = array_pop(explode(':',$tmp[3]));

		for($i=5, $max=count($tmp)-2; $i<$max; $i++){
			list($key, $num) = explode(' ', $tmp[$i]);
			if(in_array($key, $this->_apache_state)){
				$indb[$key] = $num;
			}
		}

		return $indb;
	}


	/** connect db */
	private function connectdb(){
		$conn=@mysql_connect($this->_dbconfig['host'], $this->_dbconfig['username'], $this->_dbconfig['password'])  or die(mysql_error());
		mysql_select_db($this->_dbconfig['dbname'], $conn) or die(mysql_error());
	}


	/** add to db */
	private function addtodb($indb){
		$insertkey = '';
		$insertval = '';
		if($indb){
			foreach($indb as $key=>$val){
				$insertkey .= $insertkey? " ,".$key : $key;
				$insertval .= $insertval? " ,'".mysql_escape_string(trim($val))."'" : "'".mysql_escape_string(trim($val))."'";
			}
			$sqlstr = "insert into ".$this->_dbconfig['tabname']."($insertkey) values($insertval)";
			$query = @mysql_query($sqlstr) or die(mysql_error());
			$id = mysql_insert_id();
			return $id? $id : false;
		}
	}


	/** debug */
	private function debug($msg){
		exit($msg."\r\n");
	}


} // class end

?>
在终端crontab执行
0 0 * * * php /home/fdipzone/save_monitor_log.php
table monitor_log struct
CREATE TABLE IF NOT EXISTS `monitor_log` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `site` varchar(20) NOT NULL,
  `connects` int(10) unsigned NOT NULL DEFAULT '0',
  `cur_connects` int(10) unsigned NOT NULL DEFAULT '0',
  `TIME_WAIT` int(10) unsigned NOT NULL DEFAULT '0',
  `CLOSE_WAIT` int(10) unsigned NOT NULL DEFAULT '0',
  `SYN_SENT` int(10) unsigned NOT NULL DEFAULT '0',
  `SYN_RECV` int(10) unsigned NOT NULL DEFAULT '0',
  `FIN_WAIT1` int(10) unsigned NOT NULL DEFAULT '0',
  `FIN_WAIT2` int(10) unsigned NOT NULL DEFAULT '0',
  `ESTABLISHED` int(10) unsigned NOT NULL DEFAULT '0',
  `LAST_ACK` int(10) unsigned NOT NULL DEFAULT '0',
  `CLOSING` int(10) unsigned NOT NULL DEFAULT '0',
  `addtime` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `connects` (`connects`),
  KEY `cur_connects` (`cur_connects`),
  KEY `TIME_WAIT` (`TIME_WAIT`),
  KEY `CLOSE_WAIT` (`CLOSE_WAIT`),
  KEY `SYN_SENT` (`SYN_SENT`),
  KEY `SYN_RECV` (`SYN_RECV`),
  KEY `FIN_WAIT1` (`FIN_WAIT1`),
  KEY `FIN_WAIT2` (`FIN_WAIT2`),
  KEY `ESTABLISHED` (`ESTABLISHED`),
  KEY `LAST_ACK` (`LAST_ACK`),
  KEY `CLOSING` (`CLOSING`),
  KEY `addtime` (`addtime`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ;
apache status 说明:点击查看


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell 记录apache status并自动更新到数据库 的相关文章

  • php XML文件解释类

    XMLParser class php lt php XML 文件分析类 Date 2013 02 01 Author fdipzone Ver 1 0 func loadXmlFile xmlfile 读入xml文件输出Array loa
  • php CSS Update Class

    CSSUpdate class php lt php css 更新类 更新css文件内图片的版本 Date 2013 02 05 Author fdipzone Ver 1 1 Func update Ver 1 1 增加search ch
  • sh cssupdate

    shell sh 更新 css图片版本 bin bash csstmpl path 61 34 home fdipzone php csstmpl 34 css path 61 34 home fdipzone php css 34 rep
  • JS小游戏-宇宙战机

    游戏介绍 业余时间写的一个飞行射击游戏 xff0c 纵向 xff0c 共六关 游戏需求 1 战机可发射子弹 xff0c 子弹可通过获取道具升级 2 战机可放bomb xff0c 可获取道具增加数量 3 战机可蓄力攻击 4 道具有三种 xff
  • php __call 与 __callStatic

    php 5 3 后新增了 call 与 callStatic 魔法方法 call 当要调用的方法不存在或权限不足时 xff0c 会自动调用 call 方法 callStatic 当调用的静态方法不存在或权限不足时 xff0c 会自动调用 c
  • $CF1153A\ Serval\ and\ Bus$

    看大佬的代码都好复杂 xff08 不愧是大佬 orz 蒟蒻提供一种思路 因为求的是最近的车对吧 qwq 所以我们可以用一个 while 循环所以没必要去用什么 for 至于这是 div2 的第一题还是比较水的 code include lt
  • Sublime Text配置JDK

    操作系统 xff1a Windows 7 SP1 Sublime Text是一款轻量级代码编辑器 虽然收费 xff0c 但可以无限期试用 支持多种语言的代码高亮 xff0c 但一些不能直接编译运行 xff0c 今天我为大家带来Sublime
  • JS小游戏-仙剑翻牌

    游戏介绍 这是一个翻牌配对游戏 xff0c 共十关 1 游戏随机从42张牌中抽取9张进行游戏 xff0c 每组为2张相同的牌 xff0c 共18张牌 2 连续翻到两张相同的为胜利 xff0c 当9组全部翻到则过关 如不是翻到连续两张相同的
  • memcached 常用命令及使用说明

    memcached 查看方法 格式 telnet ip port 例如 telnet localhost 11211 退出命令 xff1a quit 一 存储命令 存储命令格式 xff1a lt command name gt lt key
  • PHPMailer - PHP email transport class

    在服务器安装 sendmail sudo apt get install sendmail 启动 sendmail sudo etc init d sendmail start 修改 php ini mail function SMTP 6
  • PHP 遍历文件夹及文件类及处理类

    FindFile class php 用于遍历目录文件 lt php 遍历文件夹及文件类 Date 2013 03 21 Author fdipzone Ver 1 0 class FindFile public files 61 arra
  • sh autolog backup

    shell sh 每天备份log文件 bin bash 每天备份log文件 log path 61 34 home fdipzone logs 34 log目录 backup path 61 34 home fdipzone logs ba
  • Apache rewrite

    1 开启rewrite sudo a2enmod rewrite 2 停用rewrite sudo a2dismod rewrite 3 服务器环境变量 Apache提供给rewirte模块的环境变量大概分成5个类型 第一部分 HTTP h
  • RewriteCond和13个mod_rewrite应用举例Apache伪静态

    1 xff0e 给子域名加www标记 RewriteCond HTTP HOST a z 43 example com NC RewriteCond HTTP HOST www NC RewriteRule http www xample
  • 正向代理与反向代理的区别

    正向代理的概念 正向代理 也就是传说中的代理 他的工作原理就像一个跳板 简单的说 我是一个用户 我访问不了某网站 但是我能访问一个代理服务器 这个代理服务器呢 他能访问那个我不能访问的网站 于是我先连上代理服务器 告诉他我需要那个无法访问网
  • Apache 搭建虚拟主机

    Apache 搭建虚拟主机方法 DocumentRoot xff1a home fdipzone sites demo fdipzone com ServerName xff1a demo fdipzone com 1 进入apache虚拟
  • sh memcached 进程启动及监控

    memcached 进程启动及监控 1 memcached inc sh 设置路径 xff0c 端口等讯息 bin sh config include HOST 61 hostname SITE 61 34 mysite 34 PORT 6
  • 设置进程的显示名称

    有时候在LINUX下 xff0c fork子进程的时候 xff0c 像nginx里的一样 xff0c 想让子进程的名字可以自定义 参考网上文章之后 xff0c 可以通过修改argv 0 的值来改变子进程的名字 xff0c 但是要注意新标题的
  • 自动登入google play下载app report

    流程 1 登入google play 登入google play需要三步 https play google com apps publish https accounts google com ServiceLogin hl 61 en
  • sh cssupdate 优化

    bin bash 更新css文件内图片的版本 如background url 39 images test jpg 39 更新为 background url 39 images test jpg 20130330121210 39 css

随机推荐

  • php click captcha 验证码类

    需求 xff1a 现在常用的表单验证码大部分都是要用户输入为主 xff0c 但这样对手机用户会不方便 如果手机用户访问 xff0c 可以不用输入 xff0c 而是click某一位置便可确认验证码 xff0c 这样就会方便很多 原理 xff1
  • 快速排序算法

    快速排序 xff1a 代码 xff1a lt php 快速排序算法 1 在数组中找一个元素作为key 一般取数组第一个元素作为key 2 i 61 0 j 61 数组长度 1 3 j 当 arr j lt key arr i 与arr j
  • 利用Apache mod_expires 与 mod_headers 实现文件缓存及mod_deflate压缩输出

    1 使用mod deflate module 压缩输出 启动gzip 开启mod deflate sudo a2enmod deflate sudo etc init d apache2 restart 在httpd conf中添加 lt
  • HTML5 history API 介绍

    HTML5 history API介绍 history是个全局变量 xff0c 即window history 属性和方法如下 xff1a length xff1a 历史堆栈中的记录数 back xff1a 返回上一页 foward xff
  • 冒泡,二分法插入,快速排序算法

    1 冒泡排序算法 过程 xff1a 1 遍历整个数组 xff0c 每两两相邻的元素进行比较 xff0c 如 a i gt a i 43 1 则互换位置 xff0c 每次比较消除一个逆序 2 每一次循环后 xff0c 下次再需要循环的次数减少
  • PHP缩小png图片,保留透明色方法

    将图片缩成合适的尺寸 xff0c jpg图片缩小比较容易 xff0c png图片如果带了透明色 xff0c 按jpg方式来缩小 xff0c 会造成透明色丢失 保存透明色主要利用gd库的两个方法 xff1a imagecolorallocat
  • Ubuntu的常用快捷键

    Ubuntu Gnome的桌面技巧 xff1a 61 61 61 键盘类 61 61 61 1 先同时按住 Alt 43 Ctrl 键 xff0c 再按键盘上的左 右光标 键 可以切换工作区 2 web时按 键 等于 查找功能 桌面或者目录
  • 无人驾驶虚拟仿真(四)--通过ROS系统控制小车行走

    简介 xff1a 实现键盘控制虚拟仿真小车移动 xff0c w s a d 空格 xff0c 对应向前 向后 向左 向右 急停切换功能 xff0c q键退出 1 创建key control节点 进入工作空间源码目录 xff1a cd myr
  • error while loading shared libraries的解決方法

    error while loading shared libraries的解決方法 运行程式時 xff0c 如遇到像下列這種錯誤 xff1a tests error while loading shared libraries xxx so
  • imagemagick安装方法

    1 下载ImageMagick http www imagemagick org download 下载 ImageMagick 6 8 5 10 tar gz xff0c 下载完毕后开始进行安装 cd Downloads tar xzvf
  • ubuntu中安装apache ab命令进行简单压力测试

    1 安裝ab命令 sudo apt get install apache2 utils 2 ab命令参数说明 Usage ab options http s hostname port path Options are 总的请求数 n re
  • 如何查看当前Apache的连接数

    查看了连接数和当前的连接数 netstat ant grep ip 80 wc l netstat ant grep ip 80 grep EST wc l 查看IP访问次数 netstat nat grep 34 80 34 awk 39
  • php 获取页面中的指定内容类

    功能 xff1a 1 获取内容中的url xff0c email xff0c image 2 替换内容中的url xff0c email xff0c image url xff1a lt a href 61 34 url 34 gt xxx
  • memcached启动参数

    memcached启动参数 p 指定端口号 xff08 默认11211 xff09 U lt num gt UDP监听端口 默认 11211 0 时关闭 s lt file gt 用于监听的UNIX套接字路径 xff08 禁用网络支持 xf
  • mysql常用方法

    1 CONCAT str1 str2 mysql gt SELECT CONCAT 39 My 39 39 S 39 39 QL 39 gt 39 MySQL 39 mysql gt SELECT CONCAT 39 My 39 NULL
  • shell 监控网站是否异常的脚本

    shell 监控网站是否异常的脚本 xff0c 如有异常自动发电邮通知管理员 流程 xff1a 1 检查网站返回的http code 是否等于200 xff0c 如不是200视为异常 2 检查网站的访问时间 xff0c 超过MAXLOADT
  • 文件转base64输出

    Data URI scheme是在RFC2397中定义的 xff0c 目的是将一些小的数据 xff0c 直接嵌入到网页中 xff0c 从而不用再从外部文件载入 优点 xff1a 减少http连接数 缺点 xff1a 这种格式的文件不会被浏览
  • php 支持断点续传的文件下载类

    php 支持断点续传 xff0c 主要依靠HTTP协议中 header HTTP RANGE实现 HTTP断点续传原理 Http头 Range Content Range HTTP头中一般断点下载时才用到Range和Content Rang
  • 基于Linkit 7697的红绿灯控制系统

    1 硬件准备 LinkIt 7697 1 xff0c 继电器模块 1 xff0c 面包板 1 xff0c RGB LED灯 1 xff08 共阳极 xff0c 工作电流20mA xff0c 红灯压降2 2 2V xff0c 绿灯蓝灯压降3
  • shell 记录apache status并自动更新到数据库

    1 获取apache status monitor log sh bin bash 连接数 site connects 61 netstat ant grep ip 80 wc l 当前连接数 site cur connects 61 ne