转贴请注明:http://blog.csdn.net/crazyhacking/article/details/8363235
这篇写的太凌乱了,没有逻辑性,不过内容稍多。请参考第二篇文章:WEB监控系列第二篇:web监控搭建——graphite+statsd(服务器上搭建)
参考自:http://www.jsxubar.info/graphite-introduction.html/
基本
Graphite是一个企业级的监控工具,可以在廉价机硬件上运行.
简介
Graphite是一个画图工具,将数据以图形的方式展现出来。它主要做两件事:
存储时间序列数据
根据需要呈现数据的图形
Graphite不收集数据,有一些工具知道如何发送数据给Graphite。虽然需要一点代码,但是非常简单
Graphite由三个软件组件组成:
carbon - 一个Twisted守护进程,监听时间序列数据
whisper – 一个简单的数据库库,用来存储时间序列数据,在设计上类似于RRD
graphite webapp – Django webapp,使用 Cairo来根据需要呈现图形
架构图如下:
2 安装
Graphite安装主要参考:http://www.jsxubar.info/graphite-installation.html (apache代替为nginx)
查看graphite
http://127.0.0.1:8080/
安装问题:
1 最后感觉一些正常,但是只能看到nginx的欢迎页面。原因是graphite没有启动。
./run-graphite-devel-server.py runserver
Running Graphite from runserver under django development server
/usr/bin/django-admin runserver --pythonpath runserver/webapp --settings graphite.settings 0.0.0.0:8080
Error: Could not import settings 'graphite.settings' (Is it on sys.path?): No module named graphite.settings
报错了,原因是找不到这个文件graphite.settings
sudo /opt/graphite/bin/run-graphite-devel-server.py --libs=/opt/graphite/webapp/ /opt/graphite/ &
3 运行
sudo /opt/graphite/bin/run-graphite-devel-server.py --libs=/opt/graphite/webapp/ /opt/graphite/ &
1概念
statsd产生数据,可以喂数据给graphite。 collectd也可以喂数据,但是不知道有没有可以监听web端口的功能。
statsd is a client for Etsy's node-js statsd server.
官网(主要参考安装):https://github.com/etsy/statsd
ubuntu安装脚本:Turn an Ubuntu 10.04 server into a StatsD/Graphite server:https://gist.github.com/1142828
http://www.kinvey.com/blog/89/how-to-set-up-metric-collection-using-graphite-and-statsd-on-ubuntu-1204-lts
Understanding StatsD and Graphite:http://blog.pkhamre.com/2012/07/24/understanding-statsd-and-graphite/
Start the Daemon:
node stats.js /path/to/config
sudo /usr/local/bin/npm install nodeunit
./run_tests.sh
module.js:340
throw err;
^
node stats.js Config.js
25 Dec 19:56:57 - reading config file: Config.js
25 Dec 19:56:57 - server is up
events.js:71
throw arguments[1]; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at errnoException (net.js:770:11)
at Server._listen2 (net.js:910:14)
at listen (net.js:937:10)
at Server.listen (net.js:986:5)
at /opt/statsd/stats.js:299:16
at exports.configFile (/opt/statsd/lib/config.js:36:5)
at EventEmitter.emit (events.js:96:17)
at Configurator.updateConfig (/opt/statsd/lib/config.js:18:12)
at fs.readFile (fs.js:176:14)
at Object.oncomplete (fs.js:297:15)
3 喂数据
参考自:http://www.jsxubar.info/graphite%E8%8E%B7%E5%8F%96%E6%95%B0%E6%8D%AE.html
所有graphite信息格式如下:
1
|
metric_path value timestamp\n
|
官方示例如下:
1
2
3
|
PORT=2003
SERVER=graphite.your.org
echo "local.random.diceroll 4 `date +%s`" | nc ${SERVER} ${PORT};
|
比如使用shell script以每分钟一次的频率产生当前进程总数的数据,并将数据发送到本机的graphite,脚本运行1小时:
1
2
3
4
5
6
7
|
i=1;
while [ $i -le 60 ]
do
echo "local.system.proc_numbers `ps aux |sed 1d |wc -l` `date +%s`" |nc 127.0.0.1 2003;
sleep 60 ;
let "i=i+1";
done
|
其中单条数据内容(由“echo "local.system.proc_numbers `ps aux |sed 1d |wc -l` `date +%s`" |nc 127.0.0.1 2003; ”命令产生)类似如下:
1
2
3
4
5
6
|
local.system.proc_numbers 71 1341198181
local.system.proc_numbers 71 1341198182
local.system.proc_numbers 71 1341198183
local.system.proc_numbers 71 1341198184
local.system.proc_numbers 70 1341198185
local.system.proc_numbers 70 1341198186
|
也就是说只要符合上面格式的都可以发过去。
nc命令是一个网络端口通信命令。把数据发到127.0.0.1 2003这个地方。
这样,一条命令就可以把数据过去。
graphite配置文件
(1)run-graphite-devel-server.py:option_parser.add_option('--port', default=8080, action='store', type=int, help='Port to listen on')
8080 这个配置graphite的监听端口。也就是说打开这个端口就能看到graphite的界面。
(1)carbon 配置
carbon.conf
conf/carbon.conf:LINE_RECEIVER_PORT = 2003
conf/carbon.conf:UDP_RECEIVER_PORT = 2003
2003 设置carbon的接收数据端口,把数据传到这个端口上
conf/carbon.conf:LINE_RECEIVER_INTERFACE = 0.0.0.0
设置carbon的接收数据地址,把数据传到这个IP地址上
(2)whisper
storage-schemas.conf配置文件定义数据的存储格式。
(3)webapp(画图)
/opt/graphite/webapp/graphite/local-settings.py #时间需要修改。TIME_ZONE = 'America/Los_Angeles改成TIME_ZONE = 'Asia/Shanghai'
(4)graphite.wsgi配置文件配置django
2 图像与数据对应的问题
(1) 直接用脚本语言等比较简单。用statsd喂数据的话 看不出图像与数据的对应关系。
xiao.incr("test",50)
xiao.incr("test",50)
xiao.incr("test",50)
xiao.incr("test",50)
xiao.incr("test",50)
xiao.incr("test",50)
连续发送6次,结果显示是30,是应得结果的1/10.
一连串数据发出后 图像显示波峰后,会自动变为0。
解释:
storage-schemas.conf中:
pattern = ^stats\..*
retentions = 10s:6h,1m:7d,10m:1y
这个数据test是stats.test。那么10s收集1次,10 s得到的结果是300,那么1s是30.图像显示的是每秒的平均值。
1启动graphite
启动nginx,
启动carbon graphite/bin/carbon-cache.py start
启动graphite webapp sudo /opt/graphite/bin/run-graphite-devel-server.py --libs=/opt/graphite/webapp/ /opt/graphite/ &
2启动statsd
node stats.js /path/to/config
3 发送数据(使用方法参考statsd使用说明,并稍作修改)
python
import statsd
#使用help(statsd)查看这个模块的方法
ccc=statsd.client.StatsClient(host='127.0.0.1',port=8125)#
ccc.incr("hello",5)#
官方使用说明:
>>> import statsd >>> >>> # Open a connection to `server` on port `1234` with a `50%` sample rate >>> statsd_connection = statsd.Connection( ... host='server', ... port=1234, ... sample_rate=0.5, ... ) >>> >>> # Create a client for this application >>> statsd_client = statsd.Client(__name__, statsd_connection) >>> >>> class SomeClass(object): ... def __init__(self): ... # Create a client specific for this class ... self.statsd_client = statsd_client.get_client( ... self.__class__.__name__) ... ... def do_something(self): ... # Create a `timer` client ... timer = self.statsd_client.get_client(class_=statsd.Timer) ... ... # start the measurement ... timer.start() ... ... # do something ... timer.interval('intermediate_value') ... ... # do something else ... timer.stop('total')
1简介
2安装
nginx 和 uWSGI主要参考:fedora16上搭建 nginx 和 uWSGI:http://hi.baidu.com/xiazhujie/item/e797d146d2e9492c11ee1e41
快速部署Python应用:Nginx+uWSGI配置详解:http://developer.51cto.com/art/201010/229615_1.htm
可以参考的文章和站点:
Graphite简介
http://www.jsxubar.info/graphite-introduction.html/
Graphite官方网站
http://graphite.wikidot.com/
Graphite安装
http://www.jsxubar.info/graphite-installation.html/
Graphite协作工具
http://www.jsxubar.info/graphite-tools.html/
Graphite和collectd建立监控服务器
http://www.jsxubar.info/collectd-feed-graphite.html/
Graphite Faq中文版
http://www.jsxubar.info/graphite-faq-zh_cn.html/
1 配置文件的含义
statsd的配置文件 /opt/statsd/Config.js
graphitePort: 2003 #port of Graphite server
, graphiteHost: "127.0.0.1" #hostname or IP of Graphite server
, port: 8125 #port: StatsD listening port [default: 8125]
, backends: [ "./backends/graphite" ]
, repeater: [ { host: "10.8.3.214", port: 8125 } ]
, repeaterProtocol: "udp4"
}
1 node.js
Node入门 http://www.nodebeginner.org/index-zh-cn.html 适合初学者的书籍
参考:http://www.infoq.com/cn/articles/what-is-nodejs
Node.js不是JS应用、而是JS运行平台
Node.js采用C++语言编写而成,是一个Javascript的运行环境。既然不是Javascript应用,为何叫.js呢?因为Node.js是一个Javascript的运行环境。提到Javascript,大家首先想到的是日常使用的浏览器,现代浏览器包含了各种组件,包括渲染引擎、Javascript引擎等,其中Javascript引擎负责解释执行网页中的Javascript代码。作为Web前端最重要的语言之一,Javascript一直是前端工程师的专利。不过,Node.js是一个后端的Javascript运行环境(支持的系统包括*nux、Windows),这意味着你可以编写系统级或者服务器端的Javascript代码,交给Node.js来解释执行,简单的命令类似于:
#node helloworld.js
2 Django
使用Django开发一个图书管理系统 http://www.cnblogs.com/lt1983/archive/2012/05/17/2506439.html
3 Zabbix 或者nagios 可以用来报警
debian wheezy下以uwsgi安装graphite
http://shell909090.com/blog/2012/07/debian-wheezy%E4%B8%8B%E4%BB%A5uwsgi%E5%AE%89%E8%A3%85graphite/