分类存档: 系统管理 - 第3页

更新awstats的robots

有了google analytics之后,awstats的作用相对降低了,不过在统计search engine的抓取时还是非常有效的。这个方面主要可以参考车东的博客中搜索引擎配置更新,不过今天我也发现了一个问题,网易的搜索是YodaoBot,而实际我们在日志里看到的只有YoudaoBot和YodaoBot-Image,貌似现在youdao主要的更新都在这里了,于是修改robots.pm如下:

856 'yodaobot',
857 'youdaobot',

1506 'yodaobot','<a href="http://www.yodao.com/help/webmaster/spider/" title="YodaoBot">OutfoxBot/YodaoBot</a>',
1507 'yuodaobot','<a href="http://www.yodao.com/help/webmaster/spider/" title="YuodaoBot">OutfoxBot/YuodaoBot</a>',

VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)

提升Awstats统计性能

1.用Databasebreak=day甚至hour来提升统计速度,设置步骤如下:

A. 由于databasebreak这个awstats的参数不能再awstatsupdateall.pl中支持,更新起来比较麻烦,我们写了一个脚本,自动更新多个子域:
#!/bin/bash
configfiles="www member buy"
domain=sasacity.com
command=/usr/local//wwwroot/cgi-bin/.pl
static_command="/usr/local/awstats/tools/awstats_buildstaticpages.pl dir=/usr/local/awstats/wwwroot/cgi-bin/data/ -lang=cn -configdir=/usr/local/awstats/wwwroot/cgi-bin/ -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl"
for conf in ${configfiles};
do
        ${command} -update -config=${conf}.${domain} -Databasebreak=month;
        ${command} -update -config=${conf}.${domain} -Databasebreak=day;
done

或者直接修改awstatsupdateall.pl

153             $command2=$command." -Databasebreak=month";
154             $command.=" -Databasebreak=day";
155             if ($LastLine) {
156                 $command.=" -lastline=$LastLine";
157             }
158             # Run command line
159             print "Running '$command' to update config $domain\n";
160             my $output = `$command 2>&1`;
161             print "$output\n";
162             my $output = `$command2 2>&1`;
163             print "$output\n";

B.awstats没有按天显示的入口链接但可以手工输入

/awstats.pl?config=www.mysite.com&DatabaseBreak=day&day=21&month=12&year=2008

C.perl写的一个日历插件,用来按月,日,年查询:
vi calendar.pl for awstats

2. 对于大内存的服务器,可以修改awstats.pl,把LIMITFLUSH=50000(或更高),以提高统计速度
VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)

IP数据库的自动更新

我们这里介绍几个免费IP数据库的更新,对于国外IP数据,我们使用Maxmind的开源项目GeoIP,而国内IP数据我们使用纯真的QQWry, 由于QQWry是rara格式的,我们首先在系统安装unrar
wget http://www.rarlab.com/rar/unrar-3.7.7-centos.gz
gzip -d unrar-3.7.7-centos.gz
mv unrar-3.7.7-centos /usr/local/bin/

编写以下脚本用于自动同步IP数据到/usr/local/share目录下
vi update_ipdata.sh
#!/bin/bash
if [ ! -d /usr/local/share/GeoIP ] ; then
mkdir /usr/local/share/GeoIP
fi
if [ ! -d /usr/local/share/qqIP ] ; then
mkdir /usr/local/share/qqIP
fi
wget -t 5 -O /tmp/GeoIP.dat.gz http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget -t 5 -O /tmp/GeoLiteCity.dat.gz http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget -t 5 -O /tmp/GeoIPASNum.dat.gz http://geolite.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz
wget -t 5 -O /tmp/qqwry.rar http://update.cz88.net/soft/qqwry.rar

gzip -df /tmp/GeoIP.dat.gz
gzip -df /tmp/GeoLiteCity.dat.gz
gzip -df /tmp/GeoIPASNum.dat.gz
/usr/local/bin/unrar e -nQQWry.Dat -o+ /tmp/qqwry.rar /tmp/
mv -f /tmp/Geo*.dat /usr/local/share/GeoIP/
mv -f /tmp/QQWry.Dat /usr/local/share/qqIP/

我们在每周三早晨6点20更新一次ip数据库:
20 6 * * 3 /usr/local//update-ipdata-cron.sh
最后我们需要确认一下目录配置, 查看awstats.common.conf,修改以下三行:
LoadPlugin="geoip GEOIP_STANDARD /usr/local/share/GeoIP/GeoIP.dat"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /usr/local/share/GeoIP/GeoLiteCity.dat"
LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /usr/local/share/GeoIP/GeoIPASNum.dat"

在awstats/wwwroot/cgi-bin/plugins目录下修改qqwry.pl,将
my $ipfile=”/QQWry.Dat”;
修改为:
my $ipfile=”/usr/local/share/qqIP/QQWry.Dat”;

以上GeoIP的安装介绍参考了Antezenta的awstats博客,纯真数据库格式说明参见LumaQQ的QQWry格式解析,PHP解析QQ格式可以考虑使用QQWry的PHP扩展(C代码)

VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)

使用Rsync同步备份数据

使用rsync的优点:可通过ssh进行网络加密传输,也可以利用ssh客户端密钥建立信任关系。当在两台计算机之间保持大型、复杂目录结构的同步时候,比tar或wget等方式都要快。而且可以做到精确同步。

首先,安装rsync

yum install rsync
以上方法默认安装2.6.8, 建议安装3.0.X,据张宴博客介绍3.0.X的有比较更新(希望是比较智能的)
wget http://rsync.samba.org/ftp/rsync/rsync-3.0.5.tar.gz
tar -xvzf rsync-3.0.5.tar.gz; cd rsync-3.0.5;
./configure; make; make install

使用rsh或ssh方式同步数据

在没有建立rsync服务器的情况下,我们可以利用rsync命令直接进行快速的差异备份:

命令格式:
#rsync [option] 源路径 目标路径
其中[option]为:
a:使用archive模式,等于-rlptgoD,即保持原有的文件权限
z:表示传输时压缩数据
v:显示到屏幕中
e:使用远程shell程序(可以使用rsh或ssh)
–delete:精确保存副本,源主机删除的文件,目标主机也会同步删除
–include=PATTERN:不排除符合PATTERN的文件或目录
–exclude=PATTERN:排除所有符合PATTERN的文件或目录
–password-file:指定用于rsync服务器的用户验证密码

源路径和目标路径可以使用如下格式:

rsync://[USER@]Host[:Port]/Path     <–rsync服务器路径
[USER@]Host::Path                         <–rsync服务器的另一种表示形式
[USER@]Host:Path                          <–远程路径
LocalPath                                       <–本地路径

注意:来源或目的路径最少要有一个是本地路径,如果忽略本地路径,则只会列出远端的文件列表。
把远端机器ssh上789端口下的/home/www/logs/目录中的内容,通过rsync同步到本地的/home/www/logs/目录下:
#rsync -ave “ssh -p 789″ backup@192.168.1.98:/home/www/logs/ /home/www/logs/
注意:源路径结尾时候的/号,后缀/通知rsync复制该目录的内容,但不复制目录本身。

例如,下面命令会把pub目录整个同步到本地/home/ftp/路径中:

#rsync -ave ssh backup:/home/ftp/pub /home/ftp/

使用rsync服务器方式同步数据

当服务器没有开通ssh,或备份方没有ssh权限的时候,我们可以通过建立rsync服务器,进行匿名的数据同步。

要使用rsync服务,需要建立服务端和客户端:

1. 配置rsync服务器:
创建rsyncd的配置文件/etc/rsyncd.conf,内容如下:
uid = nobody
gid = nobody
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[logs]
path = /home/www/logs
ignore errors
read only = true
list = false
hosts allow = 192.168.1.200
hosts deny = 0.0.0.0/32
auth users = backup
secrets file = /etc/backserver.pas
[app1]
path = /app/application1/
ignore errors
read only = true
list = false
hosts allow = 192.168.1.200
hosts deny = 0.0.0.0/32
uid = dev01
gid = dev01
auth users = backup
secrets file = /etc/backserver.pas

帐号密码文件:
#vi /etc/backserver.pas

#格式:帐号:密码 (每行一组,帐号和密码用:号分开)

backup:jeff

保存后,需要保证用户是root,权限是600

#chown root:root /etc/backserver.pas
#chmod 600 /etc/backserver.pas

2.启动rsync服务

/usr/bin/rsync –daemon

服务启动后侦听873/TCP端口

要置开机启动rsync服务, 编辑/etc/rc.d/rc.local,在最后添加上述命令

3.设置rsync客户端设置

如果rsync服务器需要密码验证,可以增加–password-file参数:

#rsync -azv --delete rsync://linuxing@192.168.1.100/test /var/www/html --password-file=/etc/test
crontab -e
00 04 * * * /usr/bin/rsync -arv backup@192.168.1.200::logs /home/www/logs --password-file=/etc/rsync.pass --exclude "*log"
#vi /etc/rsync.pass

#指定访问密码
jeff
#chmod 600 /etc/rsync.pass

rsync是较为传统的代码同步方式,绝大多数网站已经足够使用,当然对于一些文件量大,访问量在千万以上级别的网站可以参考Amazon Dynamo和一篇豆瓣开发人员推荐的大量小文件的实时同步方案

VN:F [1.9.14_1148]
Rating: 8.0/10 (3 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)

Awstats日志统计和其他统计系统的差异

如果你同时使用awstats分析web日志,也用Google Analytics跟踪web访问,通常你会看到GA的数据比Awstats统计的数据小,而且两者相差很大,是awstats统计的问题还是google analytics的统计疏漏呢? 这是有两种统计方法不同所造成的。
首先,我们看一下用户数的统计。定义如下:
唯一用户数: 用ip 地址 + ua 信息的组合来识别不同的用户访问
访问人次: 被识别的唯一用户在最后一次页面访问后又间隔一定时间(30分钟?)后再次访问,算是该用户的第二次访问。
我们看到GA默认的间隔是30分钟,而Awstats的间隔设置不同。所以导致数据统计不一样。
接下来我们再看一下PV的统计
理论上来说awstats的数据来自于web日志,应该比GA更为精确,但是awstats把很多中间页面也统计了进去,造成数据的不准确。为了更精确地统计web日志,我们看看有哪些是被awstats多统计的访问量,并由日志中统计出的PV量要排除掉他们:

  • 1. 搜索引擎爬虫过来的搜索引擎,爬虫这些访问不是用户行为,应该排除
    处理方法: 一般有异常IP地址的访问量和UA信息的判断获得,排除这些因素的PV量
  • 2. 中间跳转页面中间跳转页面,对用户来说只能看到跳转后的页面信息,之前发起跳转的页面对用户不可见,应该排除
    处理方法: 找出设计中存在的跳转页面,排除跳转前的页面或跳转后的页面所汇集的PV量。
    最好在业务设计和程序设计时做考虑处理,减少中间页面跳转这类的处理。
  • 3. 页面中内嵌的页面这类是使用Frame或Div等形式,嵌在一个页面中的一小块信息,
    处理方法:找出这类地址,对其做访问量排除
    如果内嵌的是广告信息等,可以考虑单独做分析
  • 4. Ajax数据交换使用过的接口页面这类地址一般用户看不到,应该排除,
    处理方法:找出这类ajax文件所在目录,然后在统计量中排除对这些地址的访问,最好在程序设计上将其放到一个目录下,这样可以直接排除对某个目录的访问。
  • 5. 内部数据接口交互使用的PV这个不是针对用户的,也应该排除
    处理方法:如果是从localhost或者本地网的可以单独过滤。对于这个方法排除后剩余的文件,可以找出这类的地址,然后在统计量中排除对这些地址的访问,如果能在架构设计时将其放到一个目录下,这样可以直接排除对这些目录的访问。

在awstats的配置文件中我们可以通过设置SkipFiles, SkipHosts参数防止被统计的页面,比如我们不想统计/ajax/和/globalinclude/目录下的文件,可以设置如下:
SkipFiles=”REGEX[^\/globalinclude\/] REGEX[^\/ajax\/] REGEX[^\/scripts] REGEX[^\/css] REGEX[^\/images]  REGEX[^*\.gif]”
SkipHosts=”localhost REGEX[^192\.168\.]”

为了让首页的统计更精确,可以做如下设置:
DefaultFile=”index.htm index.html index.php”

如果程序设计目录对这些方面考虑得不周全,建议从访问量大的文件先开始过滤,相信一段时间之后,你的日志统计就会越来越精确了。

VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)

为Awstats添加自己想要的Extra(扩展)

Awstats允许我们在其标准日志统计报表之外,通过Awstats Extra Sections添加自定义报表,当然每一个Extra section将使Awsats的处理速度降低 8%, 而且错误的设置会导致Awstat耗用过多内存,导致awstat处理失败。
Extra Section可以有多个报表,每个报表有一组参数,以数字为标号。如以下X是一个数字,可以按1,2…编下去,为组号的标号:
ExtraSectionNameX 自定义图表的名称.
ExtraSectionCodeFilterX 必须要匹配的记录中返回代码,比如http日志中的 200 304,空字符不做检测
ExtraSectionConditionX 用来计数的条件,满足的行做计数处理,使用以下条件 (URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOST,extraX)
并在逗号后面用regex来测试满足条件的字符串, 可以使用 “||” 当作 “OR” 做多个项之间的并列条件.
ExtraSectionFirstColumnTitleX 图表第一列的标题
ExtraSectionFirstColumnValuesX 给定条件字段中获取行值的一个regex格式字符串(同行条件部分,不同点是前面是测试满足条件的行,这儿是提取满足条件的值,做结果报表中的行值)
(URL,URLWITHQUERY,QUERY_STRING,REFERER,UA,HOST,VHOST,extraX)逗号跟regex提取值表达式
每个找到的不同值将在列表中有一行数据,计数的值将出现在该行的第一列. 确认获取到的不同值列表是可预计的(不会无限扩展,撑破内存)。例:
ExtraSectionFirstColumnValues1="URL,^\/blog\/([\w]+)\.html"
ExtraSectionFirstColumnFormatX 用来输出值的字符串,如:

ExtraSectionFirstColumnFormat2="<a href='/blog/archives/%s.html' target='new'>%s</a>"
ExtraSectionStatTypesX 想要计数的类型,可以使用标准代码字符(见本文最后的说明).
ExtraSectionAddAverageRowX 在底部添加一个平均值行
ExtraSectionAddSumRowX 在底部添加一个合计行
MaxNbOfExtraX 在图表中显示的最大行数
MinHitExtraX 要在图表中做显示的最小值

统计列说明

在ExtraSectionStatTypes中只有PHBL这几个字段有效
U = Unique visitors
V = Visits
P = Number of pages
H = Number of hits (or mails)
B = Bandwith (or total mail size for mail logs)
L = Last access date
E = Entry pages
X = Exit pages
C = Web compression (mod_gzip,mod_deflate)

VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)

常用Web运维命令

实时查看正在执行的sql语句

1
/usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'

查看http连接

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

查看SYN状态的http连接

1
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more

查看TIME_WAIT状态的http连接

1
2
netstat -tna | cut -b 49- |grep TIME_WAIT | sort |more
netstat -an | grep TIME_WAIT | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more

查看ESTABLISHED状态的http连接

1
2
netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
netstat -an | grep ":80" | grep ESTABLISHED | sort | more

批量kill进程

1
ps -efww|grep sqlr-listener|grep -v grep|cut -c 9-15|xargs kill -9

查看活动的php-cgi连接数

1
netstat -anpo|grep php-cgi|wc -l

按ip查看httpd连接数

1
netstat -anlp | grep 80 | grep tcp | awk {'print $5'} | awk -F: {'print $1'}| sort |uniq -c | sort -nr

禁IP

1
2
3
4
iptables -A INPUT -s IP地址 -j REJECT
iptables -A INPUT -s IP地址/24 -j REJECT
 
route add -net IP地址 netmask 255.255.255.0 reject
VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)

FastCgi的错误调试

今天晚上网站重启后发现问题,公布一下调试的过程

 查看webserver的errlog,发现是php-cgi 104 connection response header 的问题,先查看php-cgi是否存在:

#netstat -anpo|grep php-cgi|wc -l
有18个fastcgi的链接,如果是php-fpm的可以查看php-fpm的日志,由于使用spawn-cgi,只能查看/var/log/messages,发现是segmentfault,后在友人提示下,用
#php-cgi -v
发现是php-extension库被人移动了,遂解决。
VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)

windows下SVN安装汇总

http://www.phpweblog.net/fuyongjie/archive/2009/01/05/6265.html

VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)

Linux下VPN的设定

VPN服务器有两种,一种是SSL ,代表软件有openvpn,这个SSL VPN在Windows下需要另外安装客户端软件,openVPN自带客户端拨号软件;另外一种是pptpd ,Windows自带这种VPN的客户端拨号软件。本文记录了在CentOS 5 VPS下安装pptpd VPN服务器的过程。

首先检查你的VPS的虚拟技术,看其是否支持VPN,virtuozzo的检测方法可以参见parallel网站的kb

内核安装:

pptpd VPN需要内核支持mppe,内核为2.6.15以后的Linux自带的内核支持该选项,所以我们使用的CentOS5可以跳过下马这步。CentOS4.X没有安装可以用以下方式安装mppe:

rpm -ivh http://poptop.sourceforge.net/yum/stable/packages/dkms-2.0.17.5-1.noarch.rpm
rpm -ivh http://poptop.sourceforge.net/yum/stable/packages/kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
检查内核MPPE补丁是否安装成功

# modprobe ppp-compress-18  && echo ok

如果上面没有安装成功,可能是kernal源代码没有安装,用以下方法安装,rpm -e kernel_ppp_mppe
yum install kernel-devel
yum install kernel-smp-devel

cd /lib/modules/2.6.9-67.ELsmp
ln -s /usr/src/kernels/2.6.9-67.EL-i686 build

rpm -ivh kernel_ppp_mppe

如果还有问题,参考这篇trouble shooting Linux PPP connection.

安装VPN pptpd

yum install -y ppp

yum install -y pptpd

配置

#vi /etc/pptpd.conf
在此文件末尾添加如下代码
localip 192.168.0.13
remoteip 192.168.0.234-238,192.168.0.245
添加VPN用户
# vpnuser add testuser test123

或者直接编辑/etc/ppp/chap-secrets文件,有如下信息
# Secrets for authentication using CHAP
# client server secret IP addresses
vpntest * test *
以上设置*意为不限制ip,我们将之改为分配ip为192.168.1.20,也就是说只允许一个用户访问,也可以设置一个ip段
vpntest pptpd test 192.168.1.20
分配的IP只有一個就是192.168.10.20了.說只能一個人同時使用.

启动pptpd:service pptpd start
然后用netstat查看一下1723端口是不是开的,如果是的话则说明服务已成功启动, 如果没有成功,看一下/var/log/messages是什么问题,以后我们vpn进入后有什么调试也可以看这个文件

设置windows拨号,在Properties –> Security Tab 不要选择Require data encryption
如果可以成功连接,说明VPN服务器建立成功了

设置开机自动启动服务
#chkconfig –level 345 pptpd on
#/etc/init.d/pptpd start

最后一步,现在有一个问题,原来这台windows机器可以通过网关192.168.1.1上网,但连了VPN之后就不能上网了。因为数据全到VPN服务器上来了,为解决这个问题,我们可利用iptables发数据转发。
新建一个iptables文件,内容如下
echo 1 >/proc/sys/net/ipv4/ip_forward
以上是零时调整,长期修改,需要膝盖配置文件/etc/sysctl.conf,使net.ipv4.ip_forward = 1

将Linux服务器的1723端口和47端口打开,并打开GRE协议。

iptables -t nat -F
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT –to 67.222.24.91
如果服务器有两块网卡,目标网络/vpn的内部网络为192.168.195.0/24,vpn服务器有2个网卡,其中一个连接公网(eth0),ip地址是61.135.251.51,另外一个网卡连私有网络,ip是192.168.195.166。这样就能正常地路由所涉及的网络了。
/sbin/iptables -t nat -A POSTROUTING -s 192.168.195.0/24 -o eth0 -j SNAT –to-source 67.222.24.91
/sbin/iptables -t nat -A POSTROUTING -s 172.16.195.0/24 -o eth1 -j SNAT –to-source 192.168.195.166
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

/sbin/iptables -A INPUT -p tcp –dport 1723 -j ACCEPT
/sbin/iptables -A INPUT -p tcp –dport 47 -j ACCEPT
/sbin/iptables -A INPUT -p gre -j ACCEPT

pptpd

 

相关:分析pptpd转发测试

http://poptop.sourceforge.net/dox/diagnose-forwarding.phtml

pptpd内核补丁安装问题
http://members.optushome.com.au/~wskwok/poptop_ads_howto_a1.htm
http://bbs.chinaunix.net/viewthread.php?tid=847612
关于MTU问题分析
http://bbs.chinaunix.net/thread-694733-1-1.html
关于GRE封装原理分析
http://www.linuxpf.com.cn/bbs/vi … =page%3D1&frombbs=1
点对点隧道协议PPTP
http://www.linuxpf.com.cn/bbs/vi … =page%3D1&frombbs=1
PPTP流量分析
http://www.microsoft.com/china/t … ableguy/cg0103.mspx

VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)
Page 3 of 612345...Last »