Debian服务器上启用360云监控

360的产品不少,但是真正让我觉得好的不多,云监控就是一个
官方提供了有一键安装包,但是再实际部署时,经常会出错
这个安装包其实是国外的一个开源项目Net-snmp,详见 http://www.net-snmp.org/

Debian系统有这个强大的apt-get包管理系统,这里记录下使用apt-get安装snmp的过程

apt-get install snmpd

很短时间就完成安装了,启动snmp

/etc/init.d/snmpd start

接着我们还需要做一点设置并添加一个用户

vi /etc/snmp/snmpd.conf

将下行中的"127.0.0.1"改成你的服务器IP

agentAddress  udp:127.0.0.1:161

或者将这行改成

agentAddress udp:161

在文件最后追加一下两行并保存

rouser 用户名 auth
createUser 用户名 MD5 密码

这里的用户名密码是再360云监控增加服务器的表单里填写的"认证用户名"和"SNMP密匙串",
保存后,重启snmp

/etc/init.d/snmpd restart

最后向防火墙增加几条规则,只允许360的监控ip访问snmp端口(默认:161)

iptables -A INPUT -i eth0 -p udp -s 220.181.150.98 --dport 161 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 180.153.229.230 --dport 161 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 101.199.100.150 --dport 161 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 220.181.150.125 --dport 161 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 103.28.11.237 --dport 161 -j ACCEPT

现在回到360云监控,等待采集结果就OK了

QQ截图20150507132917.png

php curl getinfo的时间分析

在php中可以使用curl调用远程接口,在调用完成以后,能够获取相关的内容和信息,但有时候,我们需要统计这个调用过程的时间, 尤其是在使用curl做并发测试的时候,这个统计就尤为重要,针对其中关于时间的几个统计项,在curl中给出的中文解释非常模糊, 且网上针对这方面的资源并不好找,我在这里做个说明。

2393265753-54ac00895b1db_articlex.png

namelookup_time: 解析时间, 从开始直到解析完远程请求的时间;
connect_time: 建立连接时间,从开始直到与远程请求服务器建立连接的时间;
pretransfer_time: 从开始直到第一个远程请求接收到第一个字节的时间;
starttranster_time: 从开始直到第一个字节返回给curl的时间;
total_time: 从开始直到结束的所有时间。

从上面就能很容易得到不同阶段的时间, 比如实际的远程服务器的处理数据的时间可以用starttransfer_time - pretransfer_time计算得到, 即图示中的第4个小段的时间, 若想得到本地与服务器传输数据所消耗的时间,则把时间段2与时间段5做加法即可, 而时间段2和5均很容易得到。

supervisor 启动报错的解决方法

今天在一台Debian上安装shadowsocks
按照官方的指导安装,如果想使用后台运行的话需要安装supervisor
ok,按照提示安装
最后启动supervisor

service supervisor start

结果报错

Starting supervisor: /usr/bin/python: /usr/local/lib/libz.so.1: no version infor                                                                                                                mation available (required by /usr/bin/python)
Error: Another program is already listening on a port that one of our HTTP serve                                                                                                                rs is configured to use.  Shut this program down first before starting superviso                                                                                                                rd.
For help, use /usr/bin/supervisord -h

看来问题出在 /usr/local/lib/libz.so.1 上,Google之,类似情况还不少
找到的解决方案:
先检查是否存在 /usr/lib/libz.so.1.2.3.4,如果不存在

apt-get install zlib

如果存在:

rm -rf /usr/local/lib/libz.so.1
ln -s /usr/lib/libz.so.1.2.3.4 /usr/local/lib/libz.so.1

如果出现这种错误:

 Starting supervisor: Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.

解决方法:

unlink /var/run/supervisor.sock
unlink /tmp/supervisor.sock

OK,问题解决,现在可以顺利启动supervisor了

为debian更换源

目前在国内的几台服务器大多使用 mirrors.163.com,但近期使用中发现经常出现问题,可能是163源带宽出现瓶颈了吧
于是准备把几台服务器换源,这次使用的是阿里的 mirrors.aliyun.com

deb http://mirrors.aliyun.com/debian/ wheezy main non-free contrib
deb http://mirrors.aliyun.com/debian/ wheezy-proposed-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ wheezy main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ wheezy-proposed-updates main non-free contrib

编辑/etc/apt/sources.list文件, 在文件最前面添加以上条目

Sublime Text 3 安装 Package Control 的方法

刚才有朋友问我,Sublime Text 3 无法安装 Package Control
Sublime Text 2 使用:

import urllib2,os; pf='Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler( ))); open( os.path.join( ipp, pf), 'wb' ).write( urllib2.urlopen( 'http://sublime.wbond.net/' +pf.replace( ' ','%20' )).read()); print( 'Please restart Sublime Text to finish installation')

Sublime Text 3 使用:

import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())

还有离线方法,参见:http://pengblog.com/tech/419.html