月度存档: 一月 2009 - 第2页

如何在多域名和多子域名情况下用Google Analytics统计

我们已经知道,如果你要跟踪第三方购物车等多域名_setDomainName(“none”),如果你要用GA跟踪多子域,那么应该用_setDomainName(“mymainsite.com”) ,那么如果你既有多域名,又使用第三方购物车,那么应该如何设置呢?可以在本站用考虑设置如下代码:

<script type=”text/javascript”>
var gaJsHost = ((“https:” == document.location.protocol) ? “https://
ssl.” : “http://www.”);
document.write(unescape(“%3Cscript src=’” + gaJsHost + “google-
analytics.com/ga.js’ type=’text/javascript’%3E%3C/script%3E”));
</script>
<script type=”text/javascript”>
var pageTracker = _gat._getTracker(“UA-XXXXXXX-1″);

pageTracker._initData();
pageTracker._setAllowHash(false);
pageTracker._setDomainName(“mymainsite.com”);
pageTracker._setAllowLinker(true);

pageTracker._trackPageview();
</script>

其中SetAllowHash等各个函数的作用,参照GA Migration Guide. 以上所有设置的前提是你能在第三方购物车上安装google analytics代码,如果是你不可以在第三方购物车上安装GA代码请参考如何用跟踪第三方购物车

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

用Google Analytics跟踪第三方购物车

Google Analytics(分析)可跟踪来自您自己域中购物车的数据,如果使用其他一些代码,甚至还可跟踪来自第三方购物车(其他域)的数据。如果你使用老代码可以用如下的代码:

<script src=”http://www.google-analytics.com/urchin.js” type=”text/javascript”> 
</script> 
<script type=”text/javascript”> 
  _uacct=”UA-xxxx-x”; 
  _udn=”none”; 
  _ulink=1;
 
  urchinTracker(); 
</script> 

并修改网站到第三方购物车的链接。如果是link方式传送,则设置如下:

<script type=”text/javascript”> 
document.write(’<a href=”javascript:__utmLinker(’https://www.paypal.com/?store=parameters’);”>Purchase Now</a>’); 
</script> 
<noscript> 
<a href=”https://www.paypal.com/?store=parameters”>Purchase Now</a> 
</noscript> 

如果是POST/GET方式(表单)将信息发送到购物车,则需调用__utmLinkPost() 函数。它会将 Cookie 数据附加到所提供表单的网址中。 
<form action=”http://newdomain.com/form.cgi” onSubmit=”javascript:__utmLinkPost(this)”>  
以上代码在 method=”GET” 处,也可以正常使用

如果你用的是GA新代码,那么可以用如下代码:

pageTracker._setDomainName(“none”);
pageTracker._setAllowLinker(true);

在link到第三方支付之前的页面加入:

onclick=”pageTracker._link(this.href); return false;

并将返回页面url设置成:ThankYou.?utm_nooverride=1 这句可以将此第三方购物车从你GA的“来源”一栏中去掉。

如果你有多个子域,而且要跟踪购物车,以上方法不能使用,请参照多域名和多子域名情况下用Google Analytics统计

VN:F [1.9.14_1148]
Rating: 2.5/10 (2 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 -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 -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)

PHP下处理Excel文件总结

参照这篇总结,貌似php excel比较好:http://xinsync.xju.edu.cn/index.php/archives/3858

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

google Analytics高级过滤器设定

google Analytics最早是由一些工程师设计的,后来被google收购,因此其设计更像一个高级编程工具,而高级过滤器设定这里也就更体现这点,下面简单介绍一下GA的高级设定:
在GA中设定子域名跟踪
默认情况下GA如果您想区分子域,可按照以下设置为配置文件创建高级过滤器,:
过滤器类型:自定义过滤器 > 高级
字段 A:主机名
提取 A:(.*)
字段 B:请求网址
提取 B:(.*)
输出至:请求网址
构造器:/$A1$B1

预定义的过滤器
排除某个网域的所有访问量:使用此过滤器可以排除来自特定网域的访问量,如 ISP 或公司网络。 排除某个 IP 地址的所有点击量:此过滤器可以用来排除特定来源的点击。您可以输入单个 IP 地址或地址范围。这里是一个正则表达式
如过滤IP 地址:^202\.96\.5\.([1-9]|[1-9][0-9 ]|1[01][0-9]|12[0-5])$

自定义过滤器设置

自定义GA过滤器的效果更像是在编程,GA允许用户对不同的过滤器进行排序,不同的过滤器联合起来作用,这样就像Unix下的管道操作。我们可以根据这些制定不同的过滤器来观测我们需要查看的用户行为:

比如我想要查看一下非中国用户,且非ie6用户的行为和统计数据,那我需要先创建一个单独的配置文件,并创建如下三个过滤器

1. 自定义过滤器-〉排除-〉访问者地区,填写china

2. 自定义过滤器-〉包括->访问者浏览器程序,填写Internet Explorer

3. 自定义过滤器-〉包括->访问者浏览器,填写 6

这样我们就对我们当前的主配置文件创建了一张单独观测的报表。

发挥你的创造性,可以把网页追踪和GA结合起来。我们可以把网页追踪想象成主动标记的过程,把GA过滤器当作监控标记的门卫统计人员,这样自定义GA过滤器还可以作很多工作,我就用这个GA来单独观测adwords和adsense的用户行为。

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

设置Google Analytics追踪子域名流量

如果你用的是GA的老代码,需要修改_udn, _ulink选项,这样修改:

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-916653-3";
_udn="domainname.com";
_ulink=1;

urchinTracker();
_uff=0;
</script>

其中_uff主要是你的网站上有多份UA追踪代码(比如你有一个网站联盟帮你带流量和客户)的时候需要重设这个_uff变量

GA新代码可以参照GA官方网站google追踪子域名的帮助,在下面_setDomainName设置你的主域名
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-916653-3");
pageTracker._setDomainName("sasacity.com");
pageTracker._initData();

pageTracker._trackPageview();
} catch(err) {}</script>

这时,依然还没有完成全部步骤。因为如果你要统计的网页是blog.abc.com/google-analytics.,Google Analytics只会将它当作/google-analytics.php来统计,在统计报告里它也只会当作是/blog.abc.com/google-analytics.。因为Google Analytics并不知道你的子域名存在。还需要设定GA追踪子域名,你才可以在报表中查到所有信息。

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)

Nginx日志切割脚本

使用logrotate:

vi /etc/logrotate.d/

/usr/local/nginx/logs/*.access.log error.log{
daily
missingok
#保留365个log
rotate 365
compress
#延后压缩
delaycompress
#无文件不压缩
notifempty
#创建的文件权限设置为644,用户组nobody:root
create 644 nobody root
#多个文件脚本轮换只执行一次
dateext
#在文件末尾添加当前日期
olddir /usr/local/nginx/logs/backlog/
#把备份文件拷贝到老目录,防止再次备份
sharedscripts
prerotate
#rotate之前sleep59秒
sleep 59
endscript
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
/usr/local//tools/_buildstaticpages.pl -update -config=www.sasacity.com -dir=/app/public//data/ -lang=cn -configdir=/usr/local//wwwroot/cgi-bin/ -awstatsprog=/usr/local//wwwroot/cgi-bin/.pl
endscript
}
调试脚本用
/usr/sbin/logrotate -d /etc/logrotate.d/nginx
使用无误后执行一下看看
/usr/sbin/logrotate -f /etc/logrotate.d/nginx
如果执行没有问题,编辑 /etc/crontab,把cron.daily的运行日期改到每天晚上23点59分执行(注意到我们在脚本中sleep了59秒):
59 23 * * * root run-parts /etc/cron.daily

这个方法的缺点是dateext无法自动定制格式,如果文件很多,我们需要放在2008/05/, 2008/06/, 2008/07/这样的目录结构,因此我编写了以下脚本,供参照:
vi /usr/local/nginx/sbin/cut_nginx_log.sh
logs_path="/usr/local/nginx/logs/"
logfiles="www.access.log blog.access.log host.access.log error.log"

server=`hostname`
date=$(date -d "yesterday" +"%Y%m%d")
save_path=${logs_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
mkdir -p ${save_path}

for log in ${logfile};
do mv ${logs_path}/${log} ${save_path}/${log}.${date}.${server};
done

kill -USR1 `cat /var/run/nginx.pid`

for log in ${logfile};
do gzip ${save_path}/${log}.${date}.${server};
done

添加cronjob
crontab -e
0 0 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh

VN:F [1.9.14_1148]
Rating: 8.5/10 (2 votes cast)
VN:F [1.9.14_1148]
Rating: 0 (from 0 votes)
Page 2 of 3123