一位大牛整理的Python资源

一位大牛整理的Python资源
Python基本安装:

* http://www.python.org/ 官方标准Python开发包和支持环境,同时也是Python的官方网站;
* http://www.activestate.com/ 集成多个有用插件的强大非官方版本,特别是针对Windows环境有不少改进;

Python文档:

* http://www.python.org/doc/current/lib/lib.html Python库参考手册。
* http://www.byteofpython.info/ 可以代替Tutorial使用,有中文译版的入门书籍。
* http://diveintopython.org/ 一本比较全面易懂的入门书,中文版翻译最近进步为很及时的5.4了。
* http://www.python.org/peps/pep-0008.html 建议采用的Python编码风格。
* http://doc.zoomquiet.org/ 包括Python内容的一个挺全面的文档集。

常用插件:

* http://www.pfdubois.com/numpy/ Python的数学运算库,有时候一些别的库也会调用里面的一些功能,比如数组什么的;
* http://www.pythonware.com/products/pil/ Python下著名的图像处理库Pil;
* http://simpy.sourceforge.net/ 利用Python进行仿真、模拟的解决方案;
* Matplotlib 据说是一个用来绘制二维图形的Python模块,它克隆了许多Matlab中的函数, 用以帮助Python用户轻松获得高质量(达到出版水平)的二维图形;
* http://www.amk.ca/python/code/crypto python的加解密扩展模块;
* http://cjkpython.i18n.org/ 提供与python有关的CJK语言支持功能:转码、显示之类。
* Psyco、Pyrex:两个用于提高Python代码运行效率的解决方案;
* Pyflakes、PyChecker、PyLint:都是用来做Python代码语法检查的工具。
* http://wxpython.sourceforge.net/ 基于wxWindows的易用且强大的图形界面开发包wxPython;
* http://www.pygame.org/ 用Python帮助开发游戏的库,也可以用这个来播放视频或者音频什么的,大概依靠的是SDL;
* http://starship.python.net/crew/theller/py2exe/ win下将Python程序编译为可执行程序的工具,是一个让程序脱离Python运行环境的办法,也可以生成Windows服务或者COM组件。其他能完成Python脚本到可执行文件这个工作的还有Gordon McMillan’s Installer、Linux专用的freeze以及py2app、setuptools等。不过此类工具难免与一些模块有一些兼容性的问题,需要现用现测一下。
* 嵌入式数据库:BerkeleyDB的Python版,当然还有其他的好多。
* PEAK提供一些关于超轻量线程框架等基础性重要类库实现。

部分常用工具:

* http://www.scons.org/ Java有Ant这个巨火的构建工具,Python的特性允许我们构建更新类型的构建工具,就是scons了。
* Python Sidebar for Mozilla FireFox的一个插件,提供一个用来查看Python文档、函数库的侧边栏。
* IPython 很好用的Python Shell。wxPython发行版还自带了PyCrust、PyShell、PyAlaCarte和PyAlaMode等几个工具,分别是图形界面Shell和代码编辑器等,分别具有不同特点可以根据自己的需要选用。
* Easy Install 快速安装Python模块的易用性解决方案。

推荐资源:

* Parnassus山的拱顶 巨大的Python代码库,包罗万象。既可以从上面下载代码参考学习,同时也是与Python有关程序的大列表。
* Python号星际旅行船 著名Python社区,代码、文档、高人这里都有。
* faqts.com的Python程序设计知识数据库 Python程序设计知识库,都是与Python有关的程序设计问题及解决方法。
* 啄木鸟 Pythonic 开源社区 著名的(也可以说是最好的)国内Python开源社区。

代码示例:

* http://newedit.tigris.org/technical.htm Limodou的NewEdit编辑器的技术手册,讨论了一些关于插件接口实现、i18实现、wxPython使用有关的问题,值得参考。

其他东西:

* http://www.forum.nokia.com/main/0,,034-821,00.html Nokia居然发布了在Series 60系统上运行Python程序(图形界面用wxPython)的库,还有一个Wiki页是关于这个的:http://www.postneo.com/postwiki/moin.cgi/PythonForSeries60 。Python4Symbian这个页面是记录的我的使用经验。
* pyre:使用Python完成高性能计算需求的包,真的可以做到么?还没研究。
* Parallel Python:纯Python的并行计算解决方案。相关中文参考页面
* Pexpect:用Python作为外壳控制其他命令行程序的工具(比如Linux下标准的ftp、telnet程序什么的),还没有测试可用程度如何。
* pyjamas:Google GWT的Python克隆,还处在早期版本阶段。
* Durus:Python的对象数据库。

有意思的东西:

* Howie:用Python实现的MSN对话机器人。
* Cankiri:用一个Python脚本实现的屏幕录像机。

参考资料

* ZDNET文章:学习Python语言必备的资源
* Pythonic Web 应用平台对比
* 在wxPython下进行图像处理的经验 (其实,仅使用wxPython也可以完成很多比较基础的图像处理工作,具体可以参照《wxPython in Action》一书的第12节)
* 通过win32扩展接口使用Python获得系统进程列表的方法
* 如何获得Python脚本所在的目录位置
* Python的缩进问题
* py2exe使用中遇到的问题
* idle的中文支持问题
* 序列化存储 Python 对象

Python IDE

我的IDE选择经验

* http://www.xored.com Trustudio 一个基于Eclipse的、同时支持Python和PHP的插件,曾经是我最喜欢的Python IDE环境,功能相当全了,不过有些细节不完善以致不大好用。
* http://pydev.sourceforge.net/ 另一个基于Eclipse的,非常棒的Python环境,改进速度非常快,现在是我最喜欢的IDE。
* http://www-900.ibm.com/developerWorks/cn/opensource/os-ecant/index.shtml 用 Eclipse 和 Ant 进行 Python 开发
* http://www.die-offenbachs.de/detlev/eric3.html ERIC3 基于QT实现的不错的PYTHON IDE,支持调试,支持自动补全,甚至也支持重构,曾经在Debian下用它,但图形界面开发主要辅助qt,我倾向wxpython,所以最后还是放弃了这个。
* http://www.scintilla.org/ 同时支持Win和Linux的源代码编辑器,似乎支持Python文件的编辑。
* http://boa-constructor.sourceforge.net/ 著名的基于WxPython的GUI快速生成用的Python IDE,但是开发进度实在太差了……
* http://pype.sourceforge.net/ 成熟的Python代码编辑器,号称功能介于EMACS和IDLE之间的编辑器。
* http://www.stani.be/python/spe SPE:号称是一个Full Featured编辑器,集成WxGlade支持GUI设计。
Translate
Python Programming Language – Official Website
python.org

gnuplot

#1、 install
brew install gnuplot

非osx 参考 http://www.physics.buffalo.edu/phy410-505/tools/install/

#2 test

gnuplot

G N U P L O T
Version 4.6 patchlevel 3 last modified 2013-04-12
Build System: Darwin x86_64

Copyright (C) 1986-1993, 1998, 2004, 2007-2013
Thomas Williams, Colin Kelley and many others

gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type “help FAQ”
immediate help: type “help” (plot window: hit ‘h’)

Terminal type set to ‘x11′
gnuplot> plot sin(x)

 

ok  yeah  出图了

 

 

3、下一步 自定义 数据出图

 

 

15:00 58882
15:01 95501
15:02 97976
15:03 99693
15:04 98395
15:05 101132
15:06 100261
15:07 100946
15:08 100234
15:09 99933
15:09 99933
15:10 99999
15:11 100462
15:12 100525
15:13 100447
15:14 100633
15:15 101266
15:16 101663
15:17 101781
15:18 101394
15:19 100787
15:20 102078
15:21 102432
15:22 102705
15:23 104358
15:24 103176
15:25 103616
15:26 103725
15:27 103755
15:28 104425
15:29 102713
15:30 102894
15:31 102642
15:32 100847
15:33 101221
15:34 101215
15:35 101806
15:36 101572
15:37 102028
15:38 102369
15:39 104438
15:40 105380
15:41 105999
15:42 105709
15:43 104265
15:44 106391
15:45 83105

 

准备gnuplot 脚本


#! /usr/local/bin/gnuplot
set terminal png size 500,400
set grid
set xdata time
set timefmt "%H:%M"
set format x '%H'
set xlabel "Time"
set ylabel "Count"
set output "count.png"
plot "~/count.log" using 1:2 with line notitle

执行

,出图

HOW TO ROTATE MY LOGS WITHOUT LOSING DATA

http://antmeetspenguin.blogspot.com/2011/05/how-to-rotate-my-logs-without-losing.html

HOW TO ROTATE MY LOGS WITHOUT LOSING DATA

FAQ-COM120 : HOW TO ROTATE MY LOGS WITHOUT LOSING DATA
PROBLEM:
I want to archive/rotate my logs using my server system (for example logrotate) options or a third software (rotatelog, cronolog) but I don’t want to lose any visits information during the rotate process.
SOLUTION:
If your config file is setup with a LogFile parameter that point to your current running log file (required if you want to use the AllowToUpdateStatsFromBrowser option to have “real-time” statistics), to avoid losing too much records during the rotate process, you must run the AWStats update JUST BEFORE the rotate process is done.
The best way to do that on ‘Linux like’ OS is to use the linux built-in logrotate feature. You must edit the logrotate config file used for your web server log file (usually stored in /etc/logrotate.d directory) by adding the AWStats update process as a preprocessor command, like this example (bold lines are lines to add for having a prerotate process):
/usr/local/apache/logs/*log
{
notifempty
daily
rotate 7
compress
sharedscripts
prerotate
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=mydomainconfig
endscript
postrotate
/usr/bin/killall -HUP httpd
endscript
}

If using a such solution, this is sequential steps that happens:
Step Description Step name Date/Time example
A logrotate is started (by cron) Start of logrotate 04:02:00
B
awstats -update is launched by logrotate
Start of awstats 04:02:01
C
awstats start to read the log file file.log
04:02:02
D
awstats has reached the end of log file so now it starts to save its database on disk.
04:05:00
E
awstats has finished to save its new database, so it stops
End of awstats 04:06:00
F logrotate moves old log file file.log to a new name file.log.sav. Apache now logs in this file file.log.sav since log file handle has not been changed (only log file name has been renamed). Log move 04:06:01
G logrotate sends the -HUP or -USR1 signal to Apache.
With -HUP, Apache immediatly kills all its child process/thread, close log file file.log.sav, and reopen file file.log. So now, ALL hits are written to new file.
With -USR1, Apache only ask its child process/thread to stop only when HTTP request will be completely served. However it closes immediatly log file file.log.sav, and reopen file file.log. So only NEW hits are written to new log file. HTTP requests that are still running will write in old one. Apache restart 04:06:02
H logrotate starts compress the old log file file.log.sav into file.log.gz Start compress 04:06:03
I
If some apache threads/processes are still running (because the kill sent was -USR1, so child process are waiting end of request before to stop), then those threads/processes are still writing to file.log.sav.
If kill -HUP was used, all process are already restarted so all writes in new file.log.

J logrotate has finished to compress log file into file.log.gz. File file.log.sav is deleted. End of compress
End of logrotate 04:07:03
K
If signal was -USR1, some old childs can still run (when serving a very long request for example). So the log writing, still done in same file handle are going to a file that has been removed. So log writing are lost nowhere (this is only if -USR1 was used and if request was very long).

The advantage of this solution is that it is a very common way of working, used by a lot of products, and easy to setup. You will notice that you can “lose” some hits:
If you use the -HUP signal, you will only lose all hits that were written during D and E. Note that you will also break all requests still running at G. In the example, it’s a 1 minute lost (for small or medium web sites, it will be less than few seconds), so this give you an error lower than 0.07% (less for small web sites). This is not significant, above all for a “statistics” progam.
If you use the -USR1 signal, you will not kill any request. But you will lose all hits that were wrote during D and E (like with -HUP) but also all hits that are still running after H (all very long request that requires several minutes to be served). If hit ends during I, it is wrote in a log file already analyzed, if hit ends at K, it is wrote nowhere. In the example, it’s also a 0.07% error plus error for other not visible hits that were finished during I or K, but number of such hits should be very low since only hits that started before G and not finished after H are concerned. In most cases a hits needs only few milliseconds to be served so lost hits could be ignored.

Note also that if you have x logrotate config files, with each of them a postrotate with a kill -HUP, you send a kill x times to your server process. So try to include several log files in same logrotate config file. You can have several awstats update command in the same prerotate section and you will send the -HUP only once, after all updates are finished. However, doing this, you will have a lap time between D and F (were some hits are lost) that will be higher.

Another common way of working is to choose to run the AWStats update process only once the log file has been archived.
This is required for example if you use the cronolog or rotatelog tools to rotate your log files. For example, Apache users can setup their Apache httpd config file to write log file through a pipe to cronolog or rotatelog using Apache CustomLog directive:
CustomLog “|/usr/sbin/cronolog [cronolog_options] /var/logs/access.%Y%m%d.log” combined
If you use a such feature, you can’t trigger AWStats update process to be ran just BEFORE the rotate is done, so you must run it AFTER the rotate process, so on the archived log file.
To setup awstats to always point to last archive log file, you can use the ‘tags’ available for LogFile.
The problem with that is that your data are refreshed only after a rotate has done. However, you will miss absolutely nothing (no hits) and your server processes are never killed.

So, if you really want to not lose absolutely no hit and want to have updates more frequently than the rotate frequency, the best way is still an hybrid solution (i am not sure that it worth the pain, and remember that statistics are only statistics):
You run the awstats update process from you crontab frequently, every hour for example, and half and hour before the rotate has done. See next FAQ to know how to setup a scheduled job.
Then, once the rotate has been done (by the logrotate or by a piped cronolog log file), and before the next scheduled awstats update process start, you run another update process on the archived log file using the -logfile option to force update on the archived log file and not the current log file defined in awstats config file. This will allow you to update the half hour missing, until the log rotate (AWStats will find the new lines). However don’t forget that this particular update MUST be finished before the next croned update.

Posted 6th May 2011 by 

转让书籍,已完结

原来如此-趣说日常用语
我读3
野火集
上海及周边终极热线自由行

永不抱怨世界
在星巴克不一定非要大杯咖啡

搜索引擎优化高级编程-asp.net
南渡北归-南渡
南渡北归-北归
九型人格生存手册
留学 孤独左转 坚强右行

两宋风云

榨干百度谷歌 搜索引擎广告大赢家
爱因斯坦相信上帝吗?
我是沃兹 一段硅谷和苹果的悲情罗曼史
天才的童年
redhat linux 7.2 安装使用指南
redhat linux 7.2 howto
史上最八卦的正史书-一个都不正经-张发财
随时随地玩数独
sql server 2005 管理员大全
sql server 2000系统管理与应用开发
sql server2005 实现与维护
黑眼看 世界一个民主小贩眼里的世界
我读2
中国心绞痛
姑妄之言-当代中国社会病观察
四手联弹
中国时代1900-2000上
中国时代1900-2000下
微博改变一切
技术垄断
facebook-关于性 金钱 天才和背叛
娱乐至死:童年的消逝
登上过google之巅
重新发现社会

私想者

澳大利亚留学指南

未来100年大预言
16世纪明代中国之财政税收
人一生要去的100个地方
郎咸平说我们的日子为什么这么难

三十岁的成人礼 搭车去柏林

家国天下
国家的视角-那些试图改善人类状况的项目是如何失败的
中国为什么要改革饿-思忆父亲胡耀邦
历史是什么玩意2

联大教授
家国何处不入梦

八十年代访谈录
灰皮书 黄皮书
macosx 10.5 全攻略
胡适留学日记上

胡适留学日记下
韩寒-可爱的洪水猛兽
棉棉-虚荣是年轻人佩戴戴一多优雅的花
帝国的凋零-晚清的最后10年
中庸 大学
背包客 自助游 圣经
资本主义和自由
史记1-10
退后一步是家园
春秋左转1-4
辛亥摇晃的中国
不愿说谢谢的人-王老板
南渡北归 大结局 离别
公民心事-易中天
鸟看见我了-阿乙

韩寒-他的国

二十世纪的教训
民主是一种现代生活

几米-走向春天的下午

aiweiwei-此时此地
书店之美

冯唐-北京北京
大航海时代

辛亥革命:计划外革命
对话中国 杰罗姆 桑斯与32位当代艺术家访谈

绕着地球去 旅行
中关村失落
80后生存现状及我们的三十而立
尊严不是无代价的-从日本史料揭秘中国抗战

2010自助游

2011自助游

 

################以下是卖光的书##################

风语

历史中国-民国原来说这样
寻路中国-从乡村到工厂的自驾之旅
绝版恭亲王

从台北队到北京
北洋裂变 军阀与五四

茶经

宋美龄一个世纪女人的梦想、辉煌和悲剧
清日战争

搜索引擎优化高级编程-php
黑客 计算机革命的英雄
跟乐嘉学性格色彩
生活中的行为经济学

 

免费 商业的未来

潜规则
公众舆论


黑客之道 漏洞发掘的艺术
unix 编程艺术


1988我想和这个世界谈谈 -韩寒
男女内参-不加v
绝版恭亲王
监控
谷歌小子
科技想要什么


怪诞心理学


通往奴役之路-哈耶克
新机器的灵魂


android sdk 开发范例大全
人月神话
浪潮之巅-吴军


赫逊河畔谈中国历-黄仁宇
此生未完成-于娟
爱你就像生命
近距离看美国之二 总统是靠不住的
独唱团
民主的细节

揭秘web应用程序攻击技术


论法的精神
glassfish 开源的java ee 应用服务器

社会心理学

阅读的危险

几米-森林唱游
几米-蓝石头
几米-我不是完美小孩
我是一只IT小小鸟
facebook效应
编程人生 -15位软件先驱访谈录
奇点临近
重来-更为简单的商业逻辑
血仇定律

 

与鬼为邻-一个驻日中国工程师眼中的日本和日本人

理想国-柏拉图
陈寅恪与傅斯年
章怡和 伶人往事

蒋经国传
欧洲文艺复兴史

几米-月亮忘记了
几米-星空
全球通史-上 (斯塔夫里阿诺斯)
全球通史-下 (斯塔夫里阿诺斯)
带一本书去巴黎

近距离看美国之三 我也有一个梦想
近距离看美国之一 历史深处的忧虑
近距离看美国之四 如彗星划过夜空

出国自助游教室

王小波一只特立独行的猪
王小波-沉默de大多数

易中天品三国
影响力

乌合之众 大众心理研究

虚云和尚法汇
王小波-黄金时代 黑铁时代
蚁族
旁观者 管理大师德鲁克回忆录

做局 历史深处的真实博弈
鲁迅全集

诗经原始 上下
从一到无穷大 科学中的事实和臆测
python核心编程 第二版

宋美龄画传

无价

 

世界如此险恶 你要内心强大
我有个朋友-庄雅婷
seo智慧 -搜索引擎优化与网站营销革命
洋墨水 老海龟留美4部曲
在星巴克要买大杯咖啡
九型人格
php mysql5程序设计
李开复自传 世界因你不同
你就是个极客!软件开发人员开发指南
只有偏执狂才能生存

那些有伤的年轻人-庄雅婷

韩国漫画血型书

迟到的隔年

几米-恋之风景
思想国
背包十年 我的职业是旅行
一路向南到世界的边缘 北美版本
红孩子 孕产育儿宝典
孕产妇营养餐300例
万物生长 冯唐

我们台湾这些年

哪里那里 中国第一步客栈文化读本
几米-向左走,向右走

庄雅婷-爱你就像爱生病

罗永浩-我的奋斗

海底捞你学不会

冷浪漫

无翼飞翔 澳洲留学日记


namedmanager

https://projects.jethrocarr.com/p/oss-namedmanager/

https://blogs.oracle.com/wim/entry/cli_is_available

Open Source: NamedManagerProject logo

Open Source: NamedManager

Introduction

NamedManager is an AGPL web-based DNS management system designed to make the adding, adjusting and removal of zones/records easy and reliable.

Rather than attempting to develop a new nameserver as in the case of many DNS management interfaces, NamedManager supports the tried and tested Bind nameserver, by generating Bind compatible configuration files whenever a change needs to be applied.

This also ensures that an outage of the management server web interface or SQL database will not result in any impact to DNS servers.

Key Features

  • Allows addition, adjusting and deletion DNS zones.
  • Supports Bind 8+ and pushes Bind compatible configuration and zone files to configured servers.
  • Ability to import from Bind zonefile support.
  • Includes a log tailer that runs on the name servers and sends back logs that are rendered in the web interface.
  • SOAP API to allow other tools to hook into the interface.
  • Written in PHP and uses a MySQL database backend.
  • Supports IPv4 and IPv6 users of the management interface.
  • Supports IPv4 forward and reverse records and IPv6 forward records.

screenshot

Using NamedManager

NamedManager is split into two parts:

  1. The web interface and MySQL DB that stores and provides configuration for the DNS zones.
  2. A component for bind which runs frequently and applies any configuration on the Bind name servers, eloads them and sends logs back to the web interface.

NamedManager allows for a variety of DNS architectures, on the simplest level, all component can run on one server – web interface, SQL DB, Bind component and Bind itself.

You should (really should!) have at least two name servers, one model that works well is to have a master name server that runs the NamedManager interface and two slave servers that are public facing.

With NamedManager, the usual Bind slave replication isn’t used for zones, instead all the servers run as independents and NamedManager handles the replication of configuration between them.

Getting Started

To get started with NamedManager, start by reading the Installation wiki page.

I have packaged for RHEL/CentOS 5 & 6 and there is a .src.rpm you can build for other platforms as desired.

Support

Best way to get support is to open an issue in the tracker, since then others can find any issues they also experience and you can track the fixes against any issues.

If I get a lot, I’ll consider opening up a mailing list to enable a bit more community support and interaction. Or contact the lead developer nicely. :-)

You should also read Contributions if you’re wanting to submit back to this project.

Development Team
Admins
Jethro Carr
Happy Crew
Kowen Houston
Nathan Humphreys
Shane Forshaw

Powered by InDefero,
Céondo Ltd initiative.

使用wtop 监控access log

本文用于监控 access.log 的 http code 如200 403 499 502 ,分析基于wtop(logrep),使用wtop 分析是需要耗费一定 cpu & io 的,请权衡并事先切好日志,以免过大日志导致长时间分析,拖累系统。

软件准备

python2.6 :供wtop 程序 支持使用

wtop :分析日志工具

脚本:用于调用wtop

nagios(check_nrpe):远程调用wtop 输出

cacti(template):画图展现
一、
1:确认本机 python 是否为2.6,如果不是需要升级
python -V
Python 2.4.3

升级python 2.4 to 2.6
顺带解决了 升级带来的yum 问题
sudo rpm -Uvh http://ftp.jaist.ac.jp/pub/Linux/Fedora//epel/5Server/x86_64/epel-release-5-4.noarch.rpm
sudo yum install libffi -y
sudo yum install python26 -y
sudo rm -f /usr/bin/python
sudo ln -s /usr/bin/python26 /usr/bin/python
sudo sed -i '1s/^#!/usr/bin/python$/#!/usr/bin/python2.4/' /usr/bin/yum

2、安装wtop 有关wtop 的信息请参考 http://code.google.com/p/wtop

wget -P /tmp http://wtop.googlecode.com/files/wtop-0.6.8.tar.gz
cd /tmp
tar xvfz wtop-0.6.8.tar.gz

sudo python setup.py install

3、配置wtop,以及access log 格式 相互兼容    wtop 网站已经介绍 本文不在描述

配置文件在 /etc/wtop.cfg

主要内容确认为 以下内容,注意log_format 格式等 多一个空格也不可以

LOG_FORMAT=%h %l %u %t “%r” %>s %B “%{Referer}i” “%{User-Agent}i” %D

#LOG_FORMAT=%t “%r” %>s %B %D
#LOG_ROOT=/usr/local/nginx/logs/
#LOG_FILE=access.og

如果你能够 使用 类似 命令 logrep -f “status=200″ -o ‘status,url’  /usr/local/nginx/logs/access.log

 

有输出的话 就已经代表  wtop  基本可以正常使用了, 如果不行,请参考wtop 网站,主要是确认格式兼容即可

4、编辑 wtop,确保输出能够 为cacti template 所兼容

sudo cat >> /usr/bin/wtop << EOF


LOG_ROOT=/usr/local/nginx/logs/
LOG_FILE=access.log
LOG_TMP_ROOT=/tmp/
LOG_TMP=access.log.tmp
LOG_TMP_0=access.log.tmp0
LOG_TMP_1=access.log.tmp1
LOG_TMP_2=access.log.tmp2
#
#cat $LOG_ROOT$LOG_FILE|awk 'gsub(/"/,"",$NF)' > $LOG_TMP_ROOT$LOG_TMP_FILE
logrep -f "status>399" -o 'status,count(*)' -q $LOG_ROOT$LOG_FILE|awk '{printf "%d:%d ",$1,$2;}' > $LOG_TMP_ROOT$LOG_TMP
cat $LOG_TMP_ROOT$LOG_TMP > $LOG_TMP_ROOT$LOG_TMP_0


EOF

手工 运行命令 wtop ;cat /tmp/ccess.log.tmp* 看是否有数据输出,视日志量大小, 第一次可能需要耗费比较长的时间 比如1-2分钟
5、
封装nagios command ,以备 check_nrpe 远程调用,并重启nrpe,如何配置nagios 及nrpe 不在本人讨论之中,如您未接触过上述软件,建议参考 老田博客 http://sery.blog.51cto.com


sudo cat >> /usr/local/nagios/etc/nrpe.cfg << EOF

command[cacti_check_wtop]=/usr/local/nagios/libexec/wtop
command[cacti_check_wtop_readlog]=cat /tmp/access.log.tmp0
sudo pkill nrpe;sudo /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
sudo chown -R nagios:nagios /usr/local/nagios/libexec
EOF
6、cp nagios 的 check_nrpe插件到 cacti 目录

sudo copy /usr/local/nagios/libexec/check_nrpe /var/www/html/cacti/scripts/check_nrpe

运行命令,确认 是否可以远程调用 输出access.log 数据


/var/www/html/cacti/scripts/check_nrpe -H 192.168.0.2 -c cacti_check_wtop_readlog

显示 http code 大于399 ,有以下内容,实际上就是读 192.168.0.2:/tmp/access.tmp0 内容,而 该内容已经由 crond 任务定时运行任务 wtop 予以生成 。如下
400:12 499:244 405:255 408:112 404:34

当然我们可以通过修改 步骤4 的脚本 予以更改, 以划出更多的 数据图
logrep -f “status>399” -o ‘status,count(*)’ -q $LOG_ROOT$LOG_FILE|awk ‘{printf “%d:%d “,$1,$2;}’ > $LOG_TMP_ROOT$LOG_TMP
7、配置cacti 模版 ,予以读取输出 400:12 499:244 405:255 408:112 404:34
,至于如何配置模版,本文暂不讨论,现附上一模版 予以 参考,直接导入,然后在 Data Sources 和Graph Management 予以配置即可
最终生成图如下 图中数据显示  21日 有大量http code  499 发生

模版xml文件下载

rsyslog性能远超syslog

syslog 已经使用30余年, 其性能在high load 下会 有诸多问题(记录缓慢,丢失等)
而rsyslog 是新版本的 记录log , 迁移也很方便,本方案用的是 syslog 记录本地文件, 未启用rsyslog 网络接口

sudo yum install rsyslog* -y
cp -rf /etc/syslog.conf /etc/rsyslog.conf
sudo /etc/init.d/syslog stop ;sudo /etc/init.d/rsyslog start

即可完成

系统压力
再切换前使用syslog 记录日志: php 进程开到了2048 ,但仍旧由于无法及时写入syslog 导致 进程数 极大,以至于 php slow.log记录 非常多
切换完毕后 仅仅 活动php 进程及Establish 1-2个 , 就及时完成log 记入, php slow.log 也不存在了

通过对比 发现 性能 差别 rsyslog vs syslog 为 300倍以上 甚至 上千倍

通过下图 发现 149 服务器已经升级 为rsyslog , 其 php :nginx 链接数为 1:2955 ,日志未有记录slow.log
而未升级的 php:nginx 链接数 分别为 252:3617 和 951:5037 , 日之中大量slow.log

(转)NGINX 502错误触发条件与解决办法汇总

[ 2010/11/20 23:20 | by 逍遥花主 ]

一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。有些站长是在刚刚转移到Nginx之后就出现了这个问题,所以经常会怀疑这是不是Nginx的问题,但事实上这是个误区。

以下是从张宴和Ayou的博客搜集整理的一些Nginx 502错误的排查方法,供大家参考:

Nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的。这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在nginx身上,希望nginx下一个版本会把出错提示写稍微友好一些,至少不会是现在简单的一句502 Bad Gateway,另外还不忘附上自己的大名。

Nginx 502的触发条件

502错误最通常的出现情况就是后端主机当机。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置指定了nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,默认是error timeout。error就是当机、断线之类的,timeout就是读取堵塞超时,比较容易理解。我一般是全写上的:

proxy_next_upstream error timeout invalid_header http_500 http_503;
不过现在可能我要去掉http_500这一项了,http_500指定后端返回500错误时会转一个主机,后端的jsp出错的话,本来会打印一堆stacktrace的错误信息,现在被502取代了。但公司的程序员可不这么认为,他们认定是nginx出现了错误,我实在没空跟他们解释502的原理了……

503错误就可以保留,因为后端通常是apache resin,如果apache死机就是error,但resin死机,仅仅是503,所以还是有必要保留的。

解决办法

遇到502问题,可以优先考虑按照以下两个步骤去解决。

1、查看当前的PHP FastCGI进程数是否够用:

netstat -anpo | grep “php-cgi” | wc -l
如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。

2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:

…… http { …… fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; …… } ……
php.ini中memory_limit设低了会出错,修改了php.ini的memory_limit为64M,重启nginx,发现好了,原来是PHP的内存不足了。

如果这样修改了还解决不了问题,可以参考下面这些方案:

一、max-children和max-requests

一台服务器上运行着nginx php(fpm) xcache,访问量日均 300W pv左右

最近经常会出现这样的情况: php页面打开很慢,cpu使用率突然降至很低,系统负载突然升至很高,查看网卡的流量,也会发现突然降到了很低。这种情况只持续数秒钟就恢复了

检查php-fpm的日志文件发现了一些线索

Sep 30 08:32:23.289973 [NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200, cur:51200 Sep 30 08:32:23.290212 [NOTICE] fpm_sockets_init_main(), line 371: using inherited socket fd=10, “127.0.0.1:9000″ Sep 30 08:32:23.290342 [NOTICE] fpm_event_init_main(), line 109: libevent: using epoll Sep 30 08:32:23.296426 [NOTICE] fpm_init(), line 47: fpm is running, pid 30587
在这几句的前面,是1000多行的关闭children和开启children的日志

原来,php-fpm有一个参数 max_requests,该参数指明了,每个children最多处理多少个请求后便会被关闭,默认的设置是500。因为php是把请求轮询给每个children,在大流量下,每个childre到达max_requests所用的时间都差不多,这样就造成所有的children基本上在同一时间被关闭。

在这期间,nginx无法将php文件转交给php-fpm处理,所以cpu会降至很低(不用处理php,更不用执行sql),而负载会升至很高(关闭和开启children、nginx等待php-fpm),网卡流量也降至很低(nginx无法生成数据传输给客户端)

解决问题很简单,增加children的数量,并且将 max_requests 设置未 0 或者一个比较大的值:

打开 /usr/local/php/etc/php-fpm.conf

调大以下两个参数(根据服务器实际情况,过大也不行)

5120 600
然后重启php-fpm。

二、增加缓冲区容量大小

将nginx的error log打开,发现“pstream sent too big header while reading response header from upstream”这样的错误提示。查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。参考老外写的修改办法增加了缓冲区容量大小设置,502问题彻底解决。后来系统管理员又对参数做了调整只保留了2个设置参数:client head buffer,fastcgi buffer size。

三、request_terminate_timeout

如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:

request_terminate_timeout

这个值是max_execution_time,就是fast-cgi的执行脚本时间。

0s

0s为关闭,就是无限执行下去。(当时装的时候没仔细看就改了一个数字)

发现,问题解决了,执行很长时间也不会出错了。

优化fastcgi中,还可以改改这个值5s 看看效果。

php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。

如果您还有其他的解决方法,欢迎与编辑沟通!当然,如果你的网站并发量的确很大,那么最终也许需要寻求系统级的解决办法……

1 2 3 4