Rootop 服务器运维与web架构

2014-05-08
发表者 Venus
暂无评论

linux监控工具nagios之安装篇

关于nagios的介绍不做过多的描述,下面开始安装过程。
nagios的官方网站:http://www.nagios.org
目前最新版为4.0.6,这里我不用最新版本,采用nagios-3.5.1。
下载地址:http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.5.1.tar.gz
nagios插件下载地址:http://nagios-plugins.org/download/nagios-plugins-2.0.tar.gz
nagios汉化插件下载地址:http://nchc.dl.sourceforge.net/project/nagios-cn/sourcecode/zh_CN%203.2.3/nagios-cn-3.2.3.tar.bz2
nagios需要web服务器和php支持,所以安装Apache(或nginx)+php,mysql到用不上顺便装上留作其它测试用。

安装:

[root@centos-6.5-x64 ~]#useradd -s /sbin/nologin nagios
[root@centos-6.5-x64 ~]#yum install -y gcc gcc-c++ gd gd-devel openssl openssl-devel zlib zlib-devel httpd php php-mysql php-gd php-mbstring mysql mysql-server sendmail
[root@centos-6.5-x64 ~]#tar zxvf nagios-3.5.1.tar.gz
[root@centos-6.5-x64 ~]#cd nagios
[root@centos-6.5-x64 nagios]#./configure --prefix=/usr/local/nagios --with-gd-lib=/usr/lib --with-gd-inc=/usr/include/
[root@centos-6.5-x64 nagios]#make all
[root@centos-6.5-x64 nagios]#make install
[root@centos-6.5-x64 nagios]#make install-init #在/etc/rc.d/init.d目录下创建nagios启动脚本就可以通过service nagios start···管理
[root@centos-6.5-x64 nagios]#make install-commandmode #自动设置相关目录的权限
[root@centos-6.5-x64 nagios]#make install-config #安装nagios配置文件模板

安装nagios插件:

[root@centos-6.5-x64 ~]#tar zxvf nagios-plugins-2.0.tar.gz
[root@centos-6.5-x64 ~]#cd nagios-plugins-2.0
[root@centos-6.5-x64 nagios-plugins-2.0]#./configure --prefix=/usr/local/nagios/
[root@centos-6.5-x64 nagios-plugins-2.0]#make all
[root@centos-6.5-x64 nagios-plugins-2.0]#make install

插件被安装到/usr/local/nagios/libexec/下

安装中文插件:
对于像我这样渣渣英语的同学来说安装个汉化插件不错。

[root@centos-6.5-x64 ~]#tar jxvf nagios-cn-3.2.3.tar.bz2
[root@centos-6.5-x64 ~]#cd nagios-cn-3.2.3
[root@centos-6.5-x64 nagios-cn-3.2.3]#./configure
[root@centos-6.5-x64 nagios-cn-3.2.3]#make all
[root@centos-6.5-x64 nagios-cn-3.2.3]#make install

配置apache:
[root@centos-6.5-x64 ~]#vi /etc/httpd/conf/httpd.conf
User nagios #运行apache的用户、组改为nagios
Group nagios
DirectoryIndex index.php index.html index.html.var
直接跳到最后一行追加:

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
AuthType Basic
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthUserFile /usr/local/nagios/etc/htpasswd #指定密码文件
Require valid-user
</Directory>

ServerName localhost

Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
AuthType Basic
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthUserFile /usr/local/nagios/etc/htpasswd
Require valid-user
</Directory>

因为nagios没有自带用户认证功能,所以通过apache来实现访问授权。
[root@centos-6.5-x64 ~]#htpasswd -c /usr/local/nagios/etc/htpasswd root #添加授权用户root,名字可自己定义。
New password:
Re-type new password:
Adding password for user root
[root@centos-6.5-x64 ~]#service nagios start
[root@centos-6.5-x64 ~]#service httpd start
现在可以访问nagios了。
http://192.168.1.53/nagios/



安装完成。

PS:
安装完成后访问出现的几个错误。

报错1:
错误: 无法正确地读出配置文件中的对象数据!
[root@localhost ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg #检查配置文件
我执行后提示我Line 1043 (UNKNOWN VARIABLE) 1043行有错误。
#service_check_timeout_state=c  #根据检查配置文件命令提示此行错误,屏蔽。

错误2:
The requested URL /nagios/cgi-bin/statusmap.cgi was not found on this server.
到/usr/local/nagios/sbin确认确实没有此文件。
这个错误是最开始安装时没有安装gd和gd-devel包,导致没有statusmap.cgi程序。不过上面我们已经安装了gd和gd-devel所以不会出现,留作提示大家注意下。
[root@localhost sbin]# yum install gd gd-devel 重新编译nagios

./configure --prefix=/usr/local/nagios --with-gd-lib=/usr/lib --with-gd-inc=/usr/include

编译nagios时通过此参数得到statusmap.cgi文件,否则登陆nagios后,点击拓扑图会提示404错误。

2014-05-08
发表者 Venus
暂无评论

netstat与awk命令统计网络连接数的方法

使用netstat与awk命令,统计网络连接数。

代码示例:

netstat -an | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'

得到类似下面的结果:
TIME_WAIT 12
FIN_WAIT1 3
ESTABLISHED 16
LISTEN 4
这条命令可以把当前系统的网络连接状态分类汇总。
以下是对命令中各参数的解释,以帮助大家理解:
/^tcp/
滤出tcp开头的记录,屏蔽udp, socket等无关记录
state[]
相当于定义了一个名叫state的数组
NF
表示记录的字段数,如上所示的记录,NF等于6
$NF
表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT
state[$NF]
表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数
++state[$NF]
表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一
END
表示在最后阶段要执行的命令
for(i in state)
遍历数组
print i,”\t”,state[i]
打印数组的键和值,中间用\t制表符分割

2014-05-08
发表者 Venus
暂无评论

Server 2008 R2 一个小时自动强制关机

安装了win2008R2,试了很多激活方法,终于激活后,不知道什么原因,过了一段时间后,每隔一段时间就自动关机,查了一下,发现是 wlms.exe在作祟,可是这个任务一旦强制关闭,电脑又会自动重启,重启后,这个任务又在运行了。

写一个批处理文件:

taskkill /f /im wlms.exe
ping -n  4 127.0.0.1
shutdown -a

用记事本写下以上的命令,另存为.bat 批处理文件。双击运行,即可。每次开机后,都要运行一次,因为每次重新开机,wlms.exe这个服务都会运行。

taskkill /f /im wlms.exe  :这个表示关闭wlms.exe这个任务,关闭这个任务会引起windows重启。

shutdown -a :表示取消windows重启或者关闭的命令

中间这个命令ping -n  4 127.0.0.1 是为了延时,等到windows重启的命令发布了,shutdown -a才能有效的取消重启的命令。

WLMS.exe (Windows Licensing Monitoring Service) 服务是Windows软件许可状态,杀掉进程后系统会在一分钟内关机。

2014-05-07
发表者 Venus
暂无评论

shell批量解压tar.gz压缩包

在搭建某些环境的时候需要安装N多的tar.gz的源码包,一个个解压实在是累得慌,本想用通配符,结果不支持,后来用for循环解决:

#!/bin/bash
D_DIR='/root/lnmp'

for x in `ls ${D_DIR}`
do
tar zxvf $D_DIR/$x -C $D_DIR
done

把所有的tar.gz包放到/root/lnmp目录下(可自行修改),然后把脚本放到任意位置(/root/lnmp路径除外,因为它会把脚本本身当成压缩包解压,就会报错。)执行即可。

2014-05-07
发表者 Venus
暂无评论

Nginx设置图片防盗链

切记,替换的图片地址要使用没有防盗链的网站图片,否则由于替换的图片其实也处于防盗链情况下,会造成仍旧无法显示设置的图片。
一、全站图片防盗链

在/usr/local/nginx/conf/nginx.conf文件要添加防盗链的server块里添加下面的代码:

location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
expires      30d;
valid_referers none blocked *.rootop.org rootop.org;
if ($invalid_referer) {
rewrite ^/ http://imgs.rootop.org/images/denylink.jpg;
                      }
 }

测试一下配置是否OK
# /usr/local/nginx/sbin/nginx -t
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful

重启nginx。

说明:
1、将代码中的*.rootop.org  rootop.org换成你自己的域名。
2、确保server段中只有一个location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$,否则可能导致代码无效。

如果有下面这段代码,请将其删除或者与上面的代码合并成一段否则不生效:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
再次重启lnmp,发现防盗链设置已经生效。

二:针对图片目录防止盗链 #没测试

location /images/
{
alias /data/images/;
valid_referers none blocked server_names *.rootop.org  rootop.org ;
if ($invalid_referer)
{
return 403;
}
}

三:使用第三方模块HttpAccessKeyModule实现Nginx防盗链 #没测试

实现方法如下:
1. 下载NginxHttpAccessKeyModule模块文件:Nginx-accesskey-2.0.3.tar.gz;http://wiki.nginx.org/File:Nginx-accesskey-2.0.3.tar.gz
2. 解压此文件后,找到nginx-accesskey-2.0.3下的config文件。编辑此文件:替换其中的”$HTTP_ACCESSKEY_MODULE”为”ngx_http_accesskey_module”;
3. 用以下参数重新编译nginx:

./configure –-add-module=../nginx-accesskey

4. 修改nginx的conf文件,添加以下几行:
location /download {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg “key”;
accesskey_signature “mypass$remote_addr”;
}
其中:
accesskey为模块开关;
accesskey_hashmethod为加密方式MD5或者SHA-1;
accesskey_arg为url中的关键字参数;
accesskey_signature为加密值,此处为mypass和访问IP构成的字符串。

访问测试脚本download.php:
$ipkey= md5(“mypass”.$_SERVER[‘REMOTE_ADDR’]);
$output_add_key=”<a href=http://www.domain.com/download/G3200507120520LM.rar?key=”.$ipkey.”>download_add_key</a><br />”;
$output_org_url=”<a href=http://www.domain.com/download/G3200507120520LM.rar>download_org_path</a><br />”;
echo $output_add_key;
echo $output_org_url;
?>
访问第一个download_add_key链接可以正常下载,第二个链接download_org_path会返回403 Forbidden错误。

参考:
NginxHttpAccessKeyModule http://wiki.nginx.org/NginxHttpAccessKeyModule#accesskey