Submitted by admin on 2011, August 1, 8:13 PM
以前写了个Squid防盗链,不好用,现在更新了一下,有更加好用的。呵呵.
见下面的内容。我设置的例子是在squid上对mp3和wma进行控制防盗链.其实原理很容易啦,主要是对referer进行控制,更加高级的大家可以研究一下用cookie来进行控制。有空我也写个出来.
acl wmvurl url_regex -i \.mp3$ \.wma$ \.exe$
#要控制的后缀
acl phpoaref referer_regex -i ^http://.*\.php-oa\.com
#可以链接的网站
acl legalplayer browser -i Firefox ^NSPlayer ^contype$ ^rma ^windows-media-player ^foobar2000 ^RealMedia ^RealPlayer
#要在线直播的软件
http_access allow legalplayer wmvurl
http_access allow phpoaref wmvurl
#先让上面这些条件都可以的,让他们可以通过
http_access deny !phpoaref wmvurl
http_access deny !legalplayer wmvurl
#先accept后deny.
deny_info http://www.php-oa.com/error.jpg phpoaref
#deny时出错时,给显示的出错的图
转
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:1213
Submitted by admin on 2011, August 1, 8:12 PM
squid日志里面默认记录的时间都是根据标准时间计算后加上毫秒记录的,不便于查看。
网上搜了搜,仿佛有许多方法都可以进行转换,但是想想还是麻烦,其实squid可以直接改日志的记录格式的。
打开squid的配置文件/etc/squid/squid.conf
找到下面这句,并取消注释
#logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%S
再找到:
access_log /var/log/squid/access.log squid
修改成
access_log /var/log/squid/access.log combined
重启squid
得到的日志格式就跟apache日志格式相似了
转
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:1241
Submitted by admin on 2011, August 1, 8:11 PM
在squid中access访问日志最为重要,位于/var/log/squid/access.log,常用的记录格式如下
例如:
下面来看看意思
1206507660.803 84367 192.168.1.114 TCP_MISS/502 1486 GET
http://123.138.238.114/QQ2008SpringKB1.exe - DIRECT/123.138.238.114 text/html
logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
解释如下:
%ts Seconds since epoch;
%03tu subsecond time (milliseconds);
%6tr Response time (milliseconds);
%>a Client source IP address;
%Ss Squid request status (TCP_MISS etc);
%03Hs HTTP status code;
%<st Reply size including HTTP headers;
%rm Request method (GET/POST etc) ;
%ru Request URL;
%un User name;
%Sh Squid hierarchy status (DEFAULT_PARENT etc);
%<A Client FQDN;
%mt MIME content type
我喜欢下面这样,可以输出 squid 日志的请求头
logformat squid_test_log %{%y%m%d%H%M%S}tl.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt "%>h"
>h Request header. Optional header name argument on the format header[:[separator]element]
<h Reply header. Optional header name argument as for >h
squid的日志很重要。常常要了解的,其中最重要的就是命中率啦,不然反向代理做的用就不大。
#cat access.log|gawk ‘{print $4}’|sort|uniq -c|sort -nr
9568 TCP_IMS_HIT/304
6313 TCP_HIT/200
2133 TCP_MISS/200
1568 TCP_MISS/206
587 TCP_MEM_HIT/200
531 TCP_MISS/304
207 TCP_REFRESH_HIT/200
152 TCP_REFRESH_HIT/304
86 TCP_NEGATIVE_HIT/404
69 TCP_MISS/404
9 TCP_MISS/000
4 TCP_MISS/503
1 TCP_REFRESH_MISS/000
1 TCP_DENIED/400
可以使用上面的方法,大约的分析一下命令中比。什么意思就看下面的详解.
#cat /var/log/squid/access.log |grep TCP_MEM_HIT
如果看到很多的TCP_MEM_HIT ,这表明该文件是从内存缓存读取的,squid已经起作用了!你再用浏览器打开该文件,应该是快如闪电了。。呵呵,大功告成了!还有其他类型的HIT,如TCP_HIT等等,这些是从磁盘读取的,我觉得加速的意义不大,只不过缓解了apache的压力而已。
相应于HTTP请求,下列标签可能出现在access.log文件的第四个域。
TCP_HIT
Squid发现请求资源的貌似新鲜的拷贝,并将其立即发送到客户端。
TCP_MISS
Squid没有请求资源的cache拷贝。
TCP_REFERSH_HIT
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器返回304(未修改)响应,指示squid的拷贝仍旧是新鲜的。
TCP_REF_FAIL_HIT
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。然而,原始服务器响应失败,或者返回的响应Squid不能理解。在此情形下,squid发送现有cache拷贝(很可能是陈旧的)到客户端。
TCP_REFRESH_MISS
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器响应新的内容,指示这个cache拷贝确实是陈旧的。
TCP_CLIENT_REFRESH_MISS
Squid发现了请求资源的拷贝,但客户端的请求包含了Cache-Control: no-cache指令。Squid转发客户端的请求到原始服务器,强迫cache确认。
TCP_IMS_HIT
客户端发送确认请求,Squid发现更近来的、貌似新鲜的请求资源的拷贝。Squid发送更新的内容到客户端,而不联系原始服务器。
TCP_SWAPFAIL_MISS
Squid发现请求资源的有效拷贝,但从磁盘装载它失败。这时squid发送请求到原始服务器,就如同这是个cache丢失一样。
TCP_NEGATIVE_HIT
在对原始服务器的请求导致HTTP错误时,Squid也会cache这个响应。在短时间内对这些资源的重复请求,导致了否命中。 negative_ttl指令控制这些错误被cache的时间数量。请注意这些错误只在内存cache,不会写往磁盘。下列HTTP状态码可能导致否定 cache(也遵循于其他约束): 204, 305, 400, 403, 404, 405, 414, 500, 501, 502, 503, 504。
TCP_MEM_HIT
Squid在内存cache里发现请求资源的有效拷贝,并将其立即发送到客户端。注意这点并非精确的呈现了所有从内存服务的响应。例如,某些cache在内存里,但要求确认的响应,会以TCP_REFRESH_HIT, TCP_REFRESH_MISS等形式记录。
TCP_DENIED
因为http_access或http_reply_access规则,客户端的请求被拒绝了。注意被http_access拒绝的请求在第9域的值是NONE/-,然而被http_reply_access拒绝的请求,在相应地方有一个有效值。
TCP_OFFLINE_HIT
当offline_mode激活时,Squid对任何cache响应返回cache命中,而不用考虑它的新鲜程度。
TCP_REDIRECT
重定向程序告诉Squid产生一个HTTP重定向到新的URI(见11.1节)。正常的,Squid不会记录这些重定向。假如要这样做,必须在编译squid前,手工定义LOG_TCP_REDIRECTS预处理指令。
NONE
无分类的结果用于特定错误,例如无效主机名。
相应于ICP查询,下列标签可能出现在access.log文件的第四域。
UDP_HIT
Squid在cache里发现请求资源的貌似新鲜的拷贝。
UDP_MISS
Squid没有在cache里发现请求资源的貌似新鲜的拷贝。假如同一目标通过HTTP请求,就可能是个cache丢失。请对比UDP_MISS_NOFETCH。
UDP_MISS_NOFETCH
跟UDP_MISS类似,不同的是这里也指示了Squid不愿去处理相应的HTTP请求。假如使用了-Y命令行选项,Squid在启动并编译其内存索引时,会返回这个标签而不是UDP_MISS。
UDP_DENIED
因为icp_access规则,ICP查询被拒绝。假如超过95%的到某客户端的ICP响应是UDP_DENIED,并且客户端数据库激活了(见附录A),Squid在1小时内,停止发送任何ICP响应到该客户端。若这点发生,你也可在cache.log里见到一个警告。
转
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:1196
Submitted by admin on 2011, July 28, 6:39 PM
使用的i909手机的免费流量是2G,不过如果要用手机看美剧,这个流量就有点不足。但是,当前我所被覆盖的无线网,上网需要手动设置上网路由。Android里面我还没有找到现成的能够设置路由的软件,不过经摸索,却找出了通过终端使用超级用户模式手工设置路由的办法。
首先确保机器已经root了,还安装了busybox和Emulator。
启动Emulator,然后输入命令:
# ip route show
172.18.0.0/16 dev eth0 src 172.18.3.80
default via 172.18.1.170 dev eth0
有井号的行是命令,没有的是输出结果。上述命令用于显示手机当前的路由。下面的命令删除手机的默认路由。如果出错,说明可能没有安装好busybox。
查看路由只需要普通权限,删除、添加、修改路由都需要超级用户权限。
# su ip route del default
然后,添加默认路由和一条通往内网另一个网段的路由
# su route add default gw 172.18.1.252
# su route add -net 192.30.1.0 netmask 255.255.255.0 gw 172.18.1.170
最后查看新的路由设置,下面的结果表示设置成功了。
#ip route show
192.30.1.0/24 via 172.18.1.170 dev eth0
172.18.0.0/16 dev eth0 src 172.18.3.80
default via 172.18.1.252 dev eth0
当前我使用的busybox有个问题就是命令返回出错结果,它也不会提示任何信息。此外,使用手机键盘输入实在麻烦,解决的一个办法是使用SSH,通过电脑来控制手机。
注意:不同版本的emulator, busybox, 命令稍微有差异,例如最近升级后,su命令需要而且只要首次单独执行一次,此后都不用su, 其次,route add 命令的格式也与电脑版本Linux更接近,需要用route add -net 此类的语法了。
近期升级后,我手机上修改路由的语句变成了:
su
ip route del default
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.18.1.252
route add -net 192.30.1.0 netmask 255.255.255.0 gw 172.18.1.170
android | 评论:0
| Trackbacks:0
| 阅读:1216
Submitted by admin on 2011, July 28, 12:58 PM
反编译(绝好!)
注意点:
1、需要软件
AXMLPrinter2.jar
baksmali.jar
smali.jar
2、用 AXMLPrinter2.jar查看apk中的布局xml文件
过程:
(1)将AXMLprinter2.jar放入某一文件夹中,建议放入SDK中的Tools中,(能不能放入到其它地方倒没试过!)
(2)然后在CMD中启动此文件,格式为:
D:\\android-sdk_r05-windows\\android-sdk-windows\\tools>
java -jar AXMLprinter2.jar main.xml >main.txt
解释:将当前路径下的main.xml输出至当前下main.txt中。(输出之前,main.xml是乱码,输出后是个文件文件,所有东东全在里面,太TMD强了!)
3、用baksmali.jar反编译classes.dex:
(1)将baksmali.jar放入某一文件夹中,建议放入SDK中的Tools中,(能不能放入到其它地方倒没试过!)
(2)然后在CMD中启动此文件,格式为:
D:\\android-sdk_r05-windows\\android-sdk-windows\\tools>java -jar baksmali-1.2.5.jar -o classout/ classes.dex
(3)此时会在当前目录下生成一个classout文件夹,好东东全在里面了。
4、用smali.jar编译classout成classes.dex:
上一步已经将classes.dex反编译成了.smali文件,好了,我们看看smali文件看够了,在偿试把它编译成classes.dex吧,
输入如下命令:java -jar smali.jar classout/ -o classes.dex.
可以将新生成的classes.dex塞入ApkInstaller.apk里覆盖原来的classes.dex文件,这样我们的apk还是一样能用的哦~
5、特别注意:
反编译可将APK中的各种资源直接利用,例如图标等,特别好用。
android | 评论:0
| Trackbacks:0
| 阅读:1140
Submitted by admin on 2011, July 28, 10:31 AM
关于android中的ramdisk.img及uImage无法包含驱动模块(*.ko)的问题
这几天一起在整理freescale的imx53的android源码,今天在编译android kernel的时候发现make menuconfig中配置成<M>模式的驱动模块没有加入编译
之前一直是按照原厂的资料运行下面命令编译内核的:
通过查看kernel的makefile发些了一些蛛丝马迹,现在将工作笔记记录如下:
在imx_kernel下运行终端,输入如下命令查看kernel编译相关的一些信息
将会看到如下和编译相关的命令和信息
Cleaning targets:
clean - Remove most generated files but keep the config and
enough build support to build external modules
mrproper - Remove all generated files + config + various backup files
distclean - mrproper + remove editor backup and patch files
Configuration targets:
config - Update current config utilising a line-oriented program
nconfig - Update current config utilising a ncurses menu based program
menuconfig - Update current config utilising a menu based program
xconfig - Update current config utilising a QT based front-end
gconfig - Update current config utilising a GTK based front-end
oldconfig - Update current config utilising a provided .config as base
localmodconfig - Update current config disabling modules not loaded
localyesconfig - Update current config converting local mods to core
silentoldconfig - Same as oldconfig, but quietly, additionally update deps
randconfig - New config with random answer to all options
defconfig - New config with default answer to all options
allmodconfig - New config selecting modules when possible
allyesconfig - New config where all options are accepted with yes
allnoconfig - New config where all options are answered with no
Other generic targets:
all - Build all targets marked with [*]
* vmlinux - Build the bare kernel
* modules - Build all modules
modules_install - Install all modules to INSTALL_MOD_PATH (default: /)
firmware_install- Install all firmware to INSTALL_FW_PATH
(default: $(INSTALL_MOD_PATH)/lib/firmware)
dir/ - Build all files in dir and below
dir/file.[oisS] - Build specified target only
dir/file.lst - Build specified mixed source/assembly target only
(requires a recent binutils and recent build (System.map))
dir/file.ko - Build module including final link
modules_prepare - Set up for building external modules
tags/TAGS - Generate tags file for editors
cscope - Generate cscope index
kernelrelease - Output the release version string
kernelversion - Output the version stored in Makefile
headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH
(default: /data/EN3/freescale/i.MX536/i.MX53-QSB-Android-Release3.3/src/kernel_imx/usr)
Static analysers
checkstack - Generate a list of stack hogs
namespacecheck - Name space analysis on compiled kernel
versioncheck - Sanity check on version.h usage
includecheck - Check for duplicate included header files
export_report - List the usages of all exported symbols
headers_check - Sanity check on exported headers
headerdep - Detect inclusion cycles in headers
Kernel packaging:
rpm-pkg - Build both source and binary RPM kernel packages
binrpm-pkg - Build only the binary kernel package
deb-pkg - Build the kernel as an deb package
tar-pkg - Build the kernel as an uncompressed tarball
targz-pkg - Build the kernel as a gzip compressed tarball
tarbz2-pkg - Build the kernel as a bzip2 compressed tarball
Documentation targets:
Linux kernel internal documentation in different formats:
htmldocs - HTML
pdfdocs - PDF
psdocs - Postscript
xmldocs - XML DocBook
mandocs - man pages
installmandocs - install man pages generated by mandocs
cleandocs - clean all generated DocBook files
Architecture specific targets (arm):
* zImage - Compressed kernel image (arch/arm/boot/zImage)
Image - Uncompressed kernel image (arch/arm/boot/Image)
* xipImage - XIP kernel image, if configured (arch/arm/boot/xipImage)
uImage - U-Boot wrapped zImage
bootpImage - Combined zImage and initial RAM disk
(supply initrd image via make variable INITRD=<path>)
install - Install uncompressed kernel
zinstall - Install compressed kernel
Install using (your) ~/bin/installkernel or
(distribution) /sbin/installkernel or
install to $(INSTALL_PATH) and run lilo
ellip;… ………………
可以看到很多编译相关的命令,如:make, make all, make clean, make uImage等等
经过测试发现运行make命令之后,在make menuconfig中配置成<M>的驱动模块都可以加入编译,但是再make uImage生成uImage文件烧到板子上的时候,在目标板上的文件系统里怎么也找不到那些*.ko文件,看了一上午android filesystem相关的资料,总算是找到了解决办法,就是通过修改android生成的ramdisk.img,用脚本把这些*.ko文件导入到android的filesystem中,下面代码就是实现整个过程的脚本:
#!/bin/sh
MAKE_KERNEL=$1
#root dir
KERNEL_DIR=$(pwd)
#out dir
OUT_DIR=${KERNEL_DIR}/../../out
#modules install path
RAMDISK_DIR=ramdisk
INSTALL_MOD_PATH=${OUT_DIR}/tmp/${RAMDISK_DIR}
#echo "make kernel?(y,n)";read MAKE_KERNEL
echo "******************************"
echo "* Make Kernel *"
echo "******************************"
if [ "$MAKE_KERNEL"x = "n"x ]; then
echo "*** skip ***"
else
make -j4
make uImage -j4
cp arch/arm/boot/uImage ${OUT_DIR}
fi
echo "******************************"
echo "* Install modules *"
echo "******************************"
cd ${OUT_DIR}
[ -e "tmp" ] || { echo "mkdir tmp"; mkdir tmp; }
cp ./ramdisk.img ./tmp
#上一次退出状态: 判断ramdisk.img是否存在
case "$?" in
"0")
cd tmp
mv ramdisk.img ramdisk.img.gz
cd ./${RAMDISK_DIR}
gunzip ramdisk.img.gz
[ -e "${RAMDISK_DIR}" ] || { echo "mkdir ${RAMDISK_DIR}"; mkdir ${RAMDISK_DIR}; }
cd ${RAMDISK_DIR}
cpio -i -F ../ramdisk.img
cd ${KERNEL_DIR}
make modules_install #重点在这里,在kernel目录下运行此命令时,会把相关的*.ko文件install到由INSTALL_MOD_PATH指定的目录下!!
cd ${INSTALL_MOD_PATH}
find . | cpio -o -H newc | gzip > ../ramdisk.img
cd ..
echo "******************************"
echo "* Make uramdisk.img *"
echo "******************************"
mkimage -A arm -O linux -T ramdisk -C none -a 0x70308000 -n "Android Root Filesystem" -d ./ramdisk.img ./uramdisk.img
mv uramdisk.img ./..
cd ..
rm -rf ./tmp
cd ${KERNEL_DIR}
echo "***OKAY***"
;;
"1")
echo "ramdisk.img文件不存在!!!!!!"
rm -rf ./tmp
cd ${KERNEL_DIR}
;;
esac
经过这样的处理就可以向android源码生成的ramdisk.img中install任何我们自己的东西了,把uImage和uramdisk.img一起烧到板子上,通过串口查看,得到了我想要的东西,如下:
lrwxrwxrwx radio radio 2011-07-06 08:58 build -> /data/EN3/freescale/i.MX536/i.MX53-QSB-Android-Release3.3/src/kernel_imx
-rw-r--r-- radio radio 81 2011-07-06 08:58 modules.isapnpmap
-rw-r--r-- radio radio 74 2011-07-06 08:58 modules.ofmap
-rw-r--r-- radio radio 43 2011-07-06 08:58 modules.seriomap
-rw-r--r-- radio radio 2908 2011-07-06 08:58 modules.dep.bin
-rw-r--r-- radio radio 1671 2011-07-06 08:58 modules.symbols.bin
lrwxrwxrwx radio radio 2011-07-06 08:58 source -> /data/EN3/freescale/i.MX536/i.MX53-QSB-Android-Release3.3/src/kernel_imx
-rw-r--r-- radio radio 141 2011-07-06 08:58 modules.inputmap
-rw-r--r-- radio radio 11595 2011-07-06 08:58 modules.builtin
-rw-r--r-- radio radio 99 2011-07-06 08:58 modules.pcimap
-rw-r--r-- radio radio 1072 2011-07-06 08:58 modules.symbols
drwxr-xr-x radio radio 2011-07-06 08:58 kernel
-rw-r--r-- radio radio 13189 2011-07-06 08:58 modules.builtin.bin
-rw-r--r-- radio radio 3795 2011-07-06 08:58 modules.alias.bin
-rw-r--r-- radio radio 189 2011-07-06 08:58 modules.usbmap
-rw-r--r-- radio radio 1189 2011-07-06 08:58 modules.dep
-rw-r--r-- radio radio 4404 2011-07-06 08:58 modules.alias
-rw-r--r-- radio radio 1042 2011-07-06 08:58 modules.order
-rw-r--r-- radio radio 69 2011-07-06 08:58 modules.ccwmap
-rw-r--r-- radio radio 73 2011-07-06 08:58 modules.ieee1394map
相关的*.ko驱动模块就在kernel目录下!
android | 评论:0
| Trackbacks:0
| 阅读:1215
Submitted by admin on 2011, July 24, 10:13 PM
nginx貌似没有虚拟目录的说法,因为它本来就是完完全全根据目录来设计并工作的。
如果非要给nginx安上一个虚拟目录的说法,那就只有alias标签比较“像”,干脆来说说alias标签和root标签的区别吧。
最基本的区别:alias指定的目录是准确的,root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。另外,根据前文所述,使用alias标签的目录块中不能使用rewrite的break。
说不明白,看下配置:
location /abc/ {
alias /home/html/abc/;
}
在这段配置下,http://test/abc/a.html就指定的是/home/html/abc/a.html。这段配置亦可改成
location /abc/ {
root /home/html/;
}
这样,nginx就会去找/home/html/目录下的abc目录了,得到的结果是相同的。
但是,如果我把alias的配置改成:
location /abc/ {
alias /home/html/def/;
}
那么nginx将会从/home/html/def/取数据,这段配置还不能直接使用root配置,如果非要配置,只有在/home/html/下建立一个 def->abc的软link(快捷方式)了。
一般情况下,在location /中配置root,在location /other中配置alias是一个好习惯。
至于alias和root的区别,我估计还没有说完全,如果在配置时发现奇异问题,不妨把这两者换换试试。
转
nginx | 评论:0
| Trackbacks:0
| 阅读:1131
Submitted by admin on 2011, July 22, 9:51 PM
主要功能:
用一个网页来监视系统的CPU,NIC,MEM,SWAP,DISK usage, DISK I/O.情况.
里面的script有部分是自已写的,也有部分是下载的.像磁盘空间那个script是下载的,但是觉得功能不是很好用,由于有现成的也就没有再写,如果哪位有更好的script望请共享.
1. 安装.
(1)需要的RPM
RHEL 3.0/4.0的安装CD带有MRTG的RPM安装包. 为了使用MRTG的一些脚本,需要安装其他的一些安装包.
Sysstat.rpm 系统状况监视安装包.(cpu.sh)
Procps.rpm 内存,Swap 使用情况工具等(cpu.sh,mem.sh,swap.sh)
Coreutils.rpm (df.pl,disk.sh)
gd-1.8.4-4
gd-devel-1.8.4-4
perl-5.6.0-17
perl-CGI
mod_perl-1.24_01-3
libpng-1.0.12-2
libpng-devel-1.0.12-2
gcc-2.96-98
gcc-g77-2.96-98
gcc-c++-2.96-98
zlib-1.1.3-24
zlib-devel-1.1.3-24
httpd(apache)
net-snmp
mrtg
检查装有没有上面rpm包.
(2)安装MRTG
Rpm –ivh mrtg -2.9.29-4.ent.i386.rpm
2. 配置SNMP 让他可以配合MRTG工作
编辑/etc/snmp/snmpd.conf
把下面的#号去掉
#view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc #在89行
把下面的语句#在62行
access notConfigGroup "" any noauth exact systemview none none
改为:
access notConfigGroup "" any noauth exact mib2 none none
改完重启一下snmp
Service snmpd restat
3. 配置MRTG
(1) mkdir /var/www/html/mrtg
(2) mkdir /opt/mrtg
(3) 从下面的贴子复制以下几个script 到/opt/mrtg
Cpu.sh , mem.sh , swap.sh, diskperf.sh, disk.pl
(4) cp /var/www/mrtg/* /var/www/html/mrtg
(5) /usr/bin/cfgmaker –output=/var/www/html/mrtg/mrtg.cfg public@10.102.17.100 用来配置一个mrtg配置文件.
(6) 编辑MRTG的配置文件 vi /var/www/html/mrtg/mrtg.cfg
(1)把WorkDir: /var/www/html/mrtg 加入到配置文件的前面.
(2)把Options[_]: growright, bits 前面的#删掉.
(3)把要监测的几个ITEM加入到配置文件里面去.
1) CPU
################CPU######################
Target[cpu]: `/opt/mrtg/cpu.sh`
MaxBytes[cpu]: 12500000
Title[cpu]: CPU -- XMNLINUXTEST02
Options[cpu]: gauge,nopercent,growright
YLegend[cpu]: CPU loading (%)
ShortLegend[cpu]:%
LegendO[cpu]: & CPU USER;
LegendI[cpu]: & CPU SYSTEM;
PageTop[cpu]: <H1>;CPU -- XMNLINUXTEST02</H1>;
2)NIC 用配置文件自动配好的.
3)MEM 这个图最大设为2G,如果服务器有更大的内存,可以修改Maxbytes.
############### MEM 2G #################
Target[managemem]:`/opt/mrtg/mem.sh`
Unscaled[managemem]: dwym
MaxBytes[managemem]: 2048000
Title[managemem]:Memory
ShortLegend[managemem]: &
kmg[managemem]:kB,MB
kilo[managemem]:1024
YLegend[managemem]: Memory Usage
Legend1[managemem]: Total Memory
Legend2[managemem]: Used Memory
LegendI[managemem]: Total Memory
LegendO[managemem]: Used Memory
Options[managemem]: growright,gauge,nopercent
PageTop[managemem]:<H1>;Memory -------XMNLINUXTEST2</H1>;
4)Swap 也是设为2G,根据实际情况改MaxBytes.
################### Swap 2G#######################
Target[swap]:`/opt/mrtg/swap.sh`
Unscaled[swap]: dwym
MaxBytes[swap]: 2048000
Title[swap]:Memory State of Server
ShortLegend[swap]: &
kmg[swap]:kB,MB
kilo[swap]:1024
YLegend[swap]: Swap Usage
Legend1[swap]: Total Swap
Legend2[swap]: Used Swap
LegendI[swap]: Total Swap
LegendO[swap]: Used Swap
Options[swap]: growright,gauge,nopercent
PageTop[swap]:<H1>;Swap-------XMNLINUXTEST02</H1>;
5)设置磁盘使用量 最大为480G,可以根据实际情况修改MaxBytes
################## Disk Space 480G #########################
Target[disk]: `/opt/mrtg/df.pl`
Title[disk]: Disk Space ----XMNLINUXTEST02
Unscaled[disk]: dwym
MaxBytes[disk]: 465247550
kmg[disk]: KB,MB,GB
LegendI[disk]: Total Disk Space
LegendO[disk]: Used Disk Space
Legend1[disk]: Total Disk Space
Legend2[disk]: Used Disk Space
YLegend[disk]: Megabytes
ShortLegend[disk]: &
Options[disk]: growright,gauge,nopercent
PageTop[disk]: <H1>;Disk Space --------XMNLINUXTEST02</H1>;
6)磁盘I/O的检测,如果需要的检,更多的分区,修改并复制这个部分,并修改diskperf.sh
################## Disk I/O 100K/sec /DEV/SDA ##########
# If you want monitor more disk, please copy below create
# now monitor job, and copy & modify the diskperf.sh to setting disk.
Target[diskIO]: `/opt/mrtg/diskperf.sh`
Title[diskIO]: Disk HDA I/O Utilization Report
Unscaled[diskIO]: dwym
MaxBytes[diskIO]: 100
PageTop[diskIO]: <H1>;Disk I/O Utilization Report</H1>;
kmg[diskIO]: KB,MB,GB
LegendI[diskIO]: Disk I/O KBread/sec
LegendO[diskIO]: Disk I/O KBwrite/sec
Legend1[diskIO]: Disk I/O KBread/sec
Legend2[diskIO]: Disk I/O KBwrite/sec
YLegend[diskIO]: Megabytes
ShortLegend[diskIO]: &
Options[diskIO]: growright,gauge,nopercent
4. 编译配置文件
先在/etc/profile 加入两个参数
LC_ALL=C
LANGUAGE=on
# env LANG=C /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg
前面两次会出错,多运行几次就没有问题.
5. 生成html文件.
/usr/bin/indexmaker –output=/var/www/html/mrtg/index.html –title=主机名 /var/www/html/mrtg/mrtg.cfg
6. 配置apache 的设置.
#vi /etc/httpd/conf.d/mrtg.cfg
把Alias /mrtg /var/www/mrtg 改为Alias /mrtg /var/www/html/mrtg
把Allow from localhost 改为Allow from all
#service httpd restart ,重启apache.
7. 配置,自运行脚本,每五分钟自动运行一次.
在root 下启动 crontab –e 添加计划
*/5 * * * * env LANG=C /usr/bin/mrtg /var/www/html/mrtg/mrtg.cfg
8. 确认service http&crontab的运进级别.
可以用下面两个命令查看这个服务的进行状况,
#chkconfig –list |grep httpd
#chkconfig –list |grep crontab
或用设定运行级别
chkconfig --level 35 httpd on
chkconfig --level 35 crontab on
5. 常见问题
(1)问:实际内存或硬盘跟的图里面的值相差太多,要吗线超出图表,要吗,在图表的下面. 如何更改图表的比例? 如内存实际上只有512M,但表里面内存显示最大为2G.
答:修改/var/www/html/mrtg/mrtg.cfg 找到相关的部分, 修改MaxBytes[managemem]: 2048000 中的2048000为512000
(2)问:我有几个硬盘,如果要监测其他的硬盘IO?
答:首先复制一份diskperf.sh 成diskperf2.sh ,再修改diskperf2.sh里面把hd=xxx改为你要监测的硬盘,再修改/var/www/html/mrtg/mrtg.cfg 复制sda的那一部门,并修改相关的部分.
如Target[diskIO]:`/opt/mrtg/diskperf.sh` 改成Target[diskIO]: `/opt/mrtg/diskperf2.sh`
这一部份的[diskIO]改为disk2IO
(3)问:修改了配置文件/var/www/html/mrtg/mrtg.cfg 后,网页没有生效
答:修改完配置文件应该要重新用下面命令生成新的网页.
/usr/bin/indexmaker –output=/var/www/html/mrtg/index.html –title=主机名 /var/www/html/mrtg/mrtg.cfg
(4)问:如何看我的MRTG图.
答:用http://你的IP/mrtg/ 就可以看到了.
附:1: mrtg.cfg 里面几个参数的意思.
Target:是要执行的脚本
Xsize:生成图表的横向宽度(最大600)
Ysize:生成图表的纵向高度(最大200)
Title:标题
kMG: Change the default multiplier prefixes
Ytics:纵向划分为几个块(格子)
MaxBytes:图表纵向数值的最大上限
PageTop:页面上面的提示
kilo:一般是写1024,如果需要的话,是1000在计算机里的单位
LegendI:从SHELL返回的数据中的第一个
LegendO:从SHELL返回的数据中的第二个
Options: growright,表示图表向右延展
附2:各个script
(1)
cat /opt/mrtg/cpu.sh
#!/bin/bash
cpuusr=`/usr/bin/sar -u 1 3 |grep Average |awk '{print $3}'`
cpusys=`/usr/bin/sar -u 1 3 |grep Average |awk '{print $5}'`
UPtime=`/usr/bin/uptime |awk '{print $3""$4""$5}'`
echo $cpuusr
echo $cpusys
echo $UPtime
hostname
(2)
Disk usage
cat /opt/mrtg/df.pl
#!/usr/bin/perl
# output(df -kl) looks like this:
# Filesystem 1k-blocks Used Available Use% Mounted on
# /dev/md0 95645100 30401312 64272080 33% /
# /dev/hde1 14119 1159 12231 9% /boot
#
# In which case, this script returns :
# 95659219
# 30402503
# when run.
foreach $filesystem (`df -kl | grep -v "Filesystem"`)
{
@df = split(/\s+/,$filesystem);
$total += $df[1];
$usage += $df[2];
}
print "$total\n";
print "$usage\n";
hostname
(3) DISK IO # cat /opt/mrtg/diskperf.sh
#!/bin/bash
# This script will monitor the KBread/sec &KBwriten/sec of Disk.
# Creater: CCC IT loren ext:2288 2005/8/3
# As sda ,sdb,sdc,sdd,hda.
# disk=sda
hd=sda
disk=/dev/$hd
KBread_sec=`iostat -x $disk|grep $hd |awk '{print $8}'`
KBwrite_sec=`iostat -x $disk|grep $hd |awk '{print $9}'`
echo "$KBread_sec"
echo "$KBwrite_sec"
hostname
(4)MEMORY
cat /opt/mrtg/mem.sh
#!/bin/bash
# This script to monitor the mem usage.
totalmem=`/usr/bin/free |grep Mem |awk '{print $2}'`
usedmem=`/usr/bin/free |grep Mem |awk '{print $3}'`
echo "$totalmem"
echo "$usedmem"
(5)SWAP
cat /opt/mrtg/swap.sh
#!/bin/bash
# This script to monitor the swap usage.
totalswap=`/usr/bin/free |grep Swap |awk '{print $2}'`
usedswap=`/usr/bin/free |grep Swap |awk '{print $3}'`
echo "$totalswap"
echo "$usedswap"
系统监控 | 评论:0
| Trackbacks:0
| 阅读:1118