[Nginx]如何在access Log中记录post请求的参数

nginx log post data

移动互联网行业开发过程中,服务端经常会需要检查是否收到请求,收到什么样的请求,最简单的办法就是看nginx的access log,常见的nginx配置中access log一般都只有GET请求的参数,而POST请求的参数却不行。 http://wiki.nginx.org/NginxHttpCoreModule#.24request_body

$request_body

This variable(0.7.58+) contains the body of the request. The significance of this variable appears in locations with directives proxy_pass or fastcgi_pass.

正如上文件所示,只需要使用$request_body即可打出post的数据,在现存的server段加上下面的设置即可:

log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" "$http_user_agent" $http_x_forwarded_for';
access_log logs/test.access.log access;

ubuntu10.04 下通过usb在G7(desire)上真机调试android程序的设置

android

本文为android开发入门系列,以下是各节传送门:
android 开发入门 http://www.54chen.com/_linux_/androiddev.html android开发入门2:概念建立 http://www.54chen.com/_linux_/androiddev2.html

一、工具介绍
android-sdk-linux_x86/tools下有一堆工具,今天要用的是:Android Debug Bridge,在android开发过程中,这个工具是使用得最多的。(缩写adb,有点像gcc的gdb似的)

adb start-server - 实际上它会启动一个 adb fork-server server
adb kill-server - kill掉
adb devices - 列出所有的设备

二、设置usb权限
因为ubuntu这样的系统都是默认以非root身份在运行的,要使用usb调试,需要sudo支持。

$ lsusb
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 413c:2106 Dell Computer Corp.
Bus 002 Device 002: ID 0461:4d81 Primax Electronics, Ltd
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 010: ID 0bb4:0c87 High Tech Computer Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
列表中,Bus 001 Device 010: ID 0bb4:0c87 High Tech Computer Corp. 这一行为htc手机的usb使用端口,记录一下,id为0bb4(基于上所有的htc都是这个ID)。

$sudo vim /etc/udev/rules.d/70-android.rules

加入以下内容:

SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

运行命令,重启udev:

$sudo chmod a+rx /etc/udev/rules.d/70-android.rules
$sudo service udev restart

三、重新启动adb server
(很重要)拔掉usb重新连上再执行:

sudo ./adb kill-server
./adb devices
./adb root (这一步很重要 感谢小米科技小军献策)

四、使用usb进行调试
eclispe>run as>android application 选择真实机器。

[Java Example]你还在使用while(true) Thread.sleep吗?

java thread

做各种SERVICE的时候,常常会需要一个程序重复定时地执行,基本上常见的山寨写法都是如下所示:

while (true) {
System.out.println("yours code");

Thread.sleep(3000);
}

但实际这样的写法可控性很低,JDK的java.util.concurrent中提供了大量的方法去控制一段代码定时执行,标准的改写上面的代码如下:

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleWithFixedDelay(new Runner(), 0, 3, TimeUnit.SECONDS);
public class Runner implements Runnable {
public void run() {
System.out.println("yours code");
}
}

scheduler下有很多的方法,达到的目的有:定时执行,执行完后一段时间再次执行;而Executors更有更多控制线程的方法,平时不可忽视。

把手机当无线网卡-andriod Usb0 Ssh Tunnle

小公司人员增长快,随着台式机日益加多,网速越来越慢,而wifi使用者却还不慢。于是就有了本文。
android手机通过usb共享网络很简单,只需要连上usb线后在手机设置里找到共享手机网络,打开即可。但是本文并非教如何连接usb线的。 ssh tunnel 图1 usb绑定设置pc共享android手机上网
ubuntu共享上网后,会发现连接不了线上的ssh,会等半天,报出no ruote。猜测是因为andriod手机的安全设置所致。其实本文重点讲如何ssh的。
先用android下载一个支持ssh的工具:connectbot。

打开软件,同时打开ubuntu,执行下面的语句安装sshd服务:
apt-get install openSSL
然后启动sshd服务。
在connectbot中填写ubuntu机器ip,输入密码,ssh到ubuntu机器。 connectbot 图2 用connectBot登录pc

这时按下菜单键,选择端口转发。选远端端口,填写2222,转发到192.168.1.1:22,确定以后,这个转发就建立了。 connectbot端口转发 图3 connectBot端口转发
然后到ubuntu上执行ssh 127.0.0.1 -p2222 ssh tunnel 图4 我建立的端口转发
回车,输入192.168.1.1的密码,大功告成,成功利用端口转发打通了andriod手机共享usb0共享上网时的ssh。
关于ssh tunnel,详细见:http://www.54chen.com/_linux_/the-temporary-break-with-the-ssh-tunnel-restriction-cross-room.html

企业服务器监控及报警配置打造(ganglia and Nagios)-part 1

ganglia 54chen nagios

系统简介:
Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond 的守护进程。它将从作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。
我(54chen)的服务器作系统:centos 5.5 x86_64 (六十四位centOS 5.5) 第一步,修改yum源 # cd /etc/yum.repos.d/
#vim dag.repo
写出如下信息:
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
enabled=1
第二步,通过yum安装所有依赖 yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel \
rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel \
python-devel libXrender-devel zlib libpng freetype libjpeg fontconfig gd libxml2 \
pcre pcre-devel libpcre libconfuse libart_lgpl-develyum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel \
rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel \
python-devel libXrender-devel zlib libpng freetype libjpeg fontconfig gd libxml2 \
pcre pcre-devel libpcre libconfuse libart_lgpl-devel 第三步,通过yum安装rrdtool(画图的数据存储) yum install -y rrdtool perl-rrdtool rrdtool-develyum install -y rrdtool perl-rrdtool rrdtool-devel

第四步,通过rpm安装libconfuse依赖

wget http://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-2.5-4.el5.x86_64.rpm
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/libconfuse-devel-2.5-4.el5.x86_64.rpm
rpm -ivh libconfuse-2.5-4.el5.x86_64.rpm
rpm -ivh libconfuse-devel-2.5-4.el5.x86_64.rpm
第五步,下载源码安装
wget http://cdnetworks-kr-1.dl.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.1.7/ganglia-3.1.7.tar.gz
tar zxvf ganglia-3.1.7.tar.gz
cd ganglia-3.1.7
./configure --with-gmetad --sysconfdir=/etc/ganglia
make
make install
第六步,安装 nginx php环境 略去(54chen的老文章里有多个安装nginx-php的文章,自查之。右侧有搜索框)
cp -a web/* /var/www/html/ganglia/
cp gmetad/gmetad.init /etc/init.d/gmetad
cp gmond/gmond.init /etc/init.d/gmond
gmond -t | tee /etc/ganglia/gmond.conf
mkdir -p /var/lib/ganglia/rrds
chown nobody:nobody /var/lib/ganglia/rrds
第七步,启动gmond gmetad
/etc/init.d/gmond start
/etc/init.d/gmetad start
Q&A 1.gmetad错误处理
检查 /var/lib/ganglia/rrds 是否建立 以及权限是不是正确

2.配置名称等不生效的原因
gmetad/gmond restart可能会不起作用,直接kill.

3.gmond起不来的原因
udp设置有问题,多播模式,请修改那个默认的ip地址(那是一个不存在的地址,用来广播的,gmeta会从广播里抓出来分析),同一组cluster的机器使用同一个广播ip地址

4.节点安装gmond(客户端):不再需要rrdtool,不需要gmetad支持

rpm -ivh libconfuse-2.5-4.el5.x86_64.rpm
rpm -ivh libconfuse-devel-2.5-4.el5.x86_64.rpm

yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel \
rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel \
python-devel libXrender-devel zlib libpng freetype libjpeg fontconfig gd libxml2 \
pcre pcre-devel libpcre libconfuse libart_lgpl-develyum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel \
rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel \
python-devel libXrender-devel zlib libpng freetype libjpeg fontconfig gd libxml2 \
pcre pcre-devel libpcre libconfuse libart_lgpl-devel

./configure --prefix=/opt/soft/ganglia --sysconfdir=/opt/soft/ganglia/etc/
make
make install

/opt/soft/ganglia/sbin/gmond --default_config > /opt/soft/ganglia/etc/gmond.conf 修改cluster_name和多播的那个莫名其妙的ip地址启动即可。

5.安装完成后为什么都正常只有空图却没有显示各节点的数据?
我(54chen)被这个问题搞了半天,最后才发现是因为各节点的服务器时间有问题,
* */2 * * * ntpdate time.windows.com放到crontab里,或者是直接执行一下ntpdate time.windows.com。

6.为什么各个cluster的服务器互相乱窜?
一定要注意,不同的cluster多播到各个不同的ip去,比如ABCD是一组,那全到239.2.11.71,而FGH是另一组,那就全到239.2.11.72。

7.为什么gmond内外网ip地址乱串?
在我的集群中,eth0 是我的系统的公共 IP 地址。但是,监视服务器将通过 eth1 与私有集群网络中的节点进行通信。我需要确保 Ganglia 使用的多点传送将与 eth1 绑定在一起。这可以通过创建 /etc/sysconfig/network-scripts/route-eth1 文件来完成。添加 239.2.11.71 dev eth1 内容。
然后您可以使用 service network restart 重新启动网络并确保路由器显示此 IP 通过 eth1。注:您应当使用 239.2.11.71,因为这是 ganglia 的默认多点传送通道。如果使用其他通道或者增加更多通道,请更改它。

8.为什么gmond里输出的xml里什么关键的数据也没有?
注意看iptables,执行一下iptables -F试试。
下一part讲述nagios搭配ganglia的报警设置。