如果你有一些随时间变化的数值,然后你想他们绘图,那么 Graphite 非常有用。基本上你编写一个程序来收集这些数值,然后将他们发送到graphite的后端即可。
二、 第一步 – 选择一个好的命名方案
存储在Graphite的任何东西都有一个路径,这些路径由多个部分组成,每个部分以点号相隔。比如website.orbitz.bookings.air可能表示在orbitz中的air bookings。在产生你的数据之前你需要先选择好你的命令方案。
比如在”foo.bar.baz”这个路径中,每个点周围的东西都称为一个路径组件,因此“foo”,“bar”,“baz”都是路径组件。
每个路径组件必须是明确的,有目的的。路径组件应该和系统层次尽量保持相对应的深度。
三、 第二步 – 配置数据保存
Graphite建立在固定尺寸的数据库上 (参考whisper) ,因此我们必须预先配置我们想存储多少数据和数据的精度。比如你想以一分钟的精度(即每分钟有一个数据节点)保存2小时的数据。另外你还可以以10分钟的精度保存2周的数据。其理念就是存储开销由你想存储的数据节点决定的,精度越低,那就可以以更少的节点覆盖更长的时间。
要确定最佳的保存配置,你必须回答以下所有问题:
你的数据多久产生一次?
你要求的最大精度是多少?
在那个精度下,你需要查看多久的数据?
你能使用的最小精度是多少?
你要查看多久之前的数据?(它必须是个有限时,且提前确定好)
一旦你选择好了命令方案和回答了以上所有问题,那么你可以通过创建或修改/opt/graphite/conf/storage-schemas.conf文件来创建一个schema。
schema文件的格式通过示例最容易说明。假设我们已经写了一个脚本,这个脚本会从不同的服务器中收集系统性能数据,它的命名方案类似于:
servers.HOSTNAME.METRIC
其中HOSTNAME是服务器的主机名,METRIC是一个像 cpu_load, mem_usage, open_files的性能数据。同时假设我们想以一分钟的精度保存这些数据30天,以15分钟的精度保存10年。
下面是我们要写入到schema文件的内容:
[server_load]
priority = 100
pattern = ^servers\.
retentions = 60:43200,900:350400
简单来说,当carbon接收到一个指标数据时,Graphtie会确定这个指标数据应该保存到文件系统的哪个whisper数据文件中。如果数据文件不存在,carbon知道它必须创建一个,但是因为whisper是一个确定尺寸的数据库,在创建文件时必须确定某些参数(这就是为什么我们写入schema的原因)。Carbon查看schema文件,然后根据优先规则选择第一个匹配指标数据名称的schema。如果没有schema匹配,那么默认的schema会被启用 (每分钟一分,保存2小时) 。一旦合适的schema确定之后,carbon会使用schema中的保存配置参数创建whisper数据文件。
现在回到我们的schema内容。
server_load 表示我们的shema名称,你如何写都无所谓。
priority 是一个整数,表示优先级,使用这个数值告诉carbon如何评估schma中的顺序(由高到低)。优先级有两个作用:一个是让测试更常使用的schema更快;二是优先级提供了一种方式,通过这种方式可以为已经匹配另外一个schema的指标数据提供一个不同的保存。
pattern 参数是一个正则表达式,它用来匹配一个新的指标名称来查找它适用于哪个schema。在我们的例子中,这个模式就匹配所有以servers.开头的指标数据。
retentions 参数有点复杂,它是这样工作的:
保存配置之间以逗号相隔,每个保存配置的格式为:seconds_per_data_point:data_points_to_store。因此在我们的例子中,第一个保存配置是每个数据节点为60秒,然后存储43,200个这样的节点。 第二个保存配置是每900秒一个数据节点, 然后保存350,400 这样的点。
四、 如何产生数据?
既然已经知道了如何实施你的配置,那么你需要开始发送数据给Graphite了。推荐你看看发布的tarball包中的examples/example-client.py来获得基本的认识。你可以自行编写你的客户端,只要你能够以合适的格式发送你的数据。
五、 Graphite信息格式
所有graphite信息格式如下:
metric_path value timestamp\n
官方示例如下:
PORT=2003
SERVER=graphite.your.org
echo "local.random.diceroll 4 `date +%s`" | nc ${SERVER} ${PORT}
比如使用shell script以每分钟一次的频率产生当前进程总数的数据,并将数据发送到本机的graphite,脚本运行1小时:
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”命令产生)类似如下:
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
领域 :工具名称
*** 作系统 :CentOS、Ubuntu、Redhat、suse、Freebsd
网站服务: nginx、apache、lighttpd、php、tomcat、resin
数据库: MySQL、MariaDB、PostgreSQL
DB中间件 :maxscale、MyCat、atlas、cobar、amoeba、MySQL-proxy
代理相关: lvs、keepalived、haproxy、nginx、heartbeat
网站缓存: squid、nginx、varnish
NoSQL库: Redis、CacheCloud、Memcached、MongoDB、HBase、Cassandra、CouchDB
存储相关 :Nfs、FastDFS、Moosefs(mfs)、Ceph 、Hadoop、glusterfs、lustre
版本管理 :svn、git、gitlab、gogs
监控报警 :nagios、cacti、zabbix、munin、hyperic、mrtg、graphite
域名解析: bind、powerdns、dnsmasq
同步软件: scp、rsync、inotify、sersync、drbd
批量管理: SSH、Ansible、Saltstack、expect、puppet
虚拟化: kvm、xen
云计算: openstack、docker、k8s
内网软件: iptables、zebra、iftraf、ntop、tc、iftop
邮件软件: qmail、posfix、sendmail、zimbra
远程拨号: openvpn、pptp、openswan、ipip
统一认证: openldap
队列工具: ActiveMQ、RabbitMQ、Metaq、MemcacheQ、Zeromq、kafka
打包发布: mvn、ants、Jenkins、Walle
测试软件: ab、JMeter、Webbench、LoadRunner、http_load、tcpcopy
带宽测试 :smokeping
性能测试 ;dd、 fio(IOPS测试)、iozone(磁盘测试)
日志相关: rsyslog、Awstats、flume、storm、ELK(Elasticsearch+Logstash+Kibana)
搜索软件: Sphinx、Xapian、Solr
无人值守: rpm、yum(设计rpm包定制及yum仓库构建)
大数据: HDFS、Hive、Hbase、Zookeeper、Pig、Spark、Mahout、flume、sqoop
项目管理: Jira、Redmine
linux管理: 宝塔Linux面板
渗透测试工具: SQLMap、Webscan
开源邮箱: iRedmail、extmail、Zimbra
软件开发 :Sublime Text、Eclipse、Jetbrains
远程连接: putty、Xshell、SecureCRT、MobaXterm、TeamViewer、向日葵
在此为服务器运维人员推荐使用:宝塔面板 www.bt.cn
宝塔面板,近200个免费应用提供使用,如:网站管理、系统安全、系统监控、计划任务、文件管理、软件管理、一键部署等为服务器运维人员提供安全高效的完成服务器运维工作。
运维人员必须熟悉的运维工具汇总某日受邀请参加了一个BBS活动,于是有了下面的内容。
下面是在linux网站运维方向老男孩最近几年常用的免费的开源软件,临时即兴想起来的,在这里和大家分享,希望给初学者指引一点路。
linux的世界真的很精彩,还没入门的朋友赶紧进来吧!
*** 作系统:Centos※,Ubuntu,Redhat※,suse,Freebsd
网站服务:nginx※,apache※,lighttpd,php※,tomcat※,resin※
数据 库:MySQL※,Mysql-proxy,MariaDB,PostgreSQL
DB中间件:MyCat,amoeba,MySQL-proxy
代理相关:lvs,keepalived,haproxy,nginx,apache,heartbeat(此行都是※)
网站缓存:squid※,nginx※,varnish
NOSQL库:memcached※,memcachedb,TokyoTyrant※,MongoDB※,Cassandra※,redis※,CouchDB
存储相关:Nfs※,Moosefs(mfs)※,Hadoop※,glusterfs※,lustre,FastDFS
版本管理:svn※,git※
监控报警:nagios※,cacti※,zabbix※,munin,hyperic,mrtg,graphite
域名解析:bind※,powerdns,dnsmasq※
同步软件:rsync※,inotify※,sersync※,drbd※,csync2,union,lsyncd,scp※
批量管理:ssh+rsync+sersync※,Saltstack※,expect※,puppet※,ansible,cfengine
虚拟 化:kvm※,xen※
云计 算:openstack※,docker,cloudstack
内网软件:iptables※,zebra※,iftraf,ntop※,tc※,iftop
邮件软件:qmail,posfix※,sendmail
远程拨号:openvpn※,pptp,openswan※,ipip※
统一认证:openldap(可结合微软活动目录)※
队列工具:ActiveMQ,RabbitMQ※,Metaq,MemcacheQ,Zeromq
打包发布:mvn※,ants※,jenkins※,svn
测试软件:ab,smokeping,siege,JMeter,Webbench,LoadRunner,http_load(都是※)
日志相关:syslog,rsyslog,Awstats,flume logstash scribe kafka,storm,ELK(Elasticsearch+Logstash+Kibana)DB代理:mysql-proxy,amoeba(更多还是程序实现读写分离)
搜索软件:Sphinx,Xapian(大公司会自己开发类似百度的小规模内部搜索引擎)
提示:
1)以上所有软件都是老男孩用过或测试过的。
2)带※的为老男孩最近几年用的比较多,可信任使用的。也是近年来linux运维的大众。
3)有了功能分类和软件名,大家有需求,可以按功能找软件直接G就知道了。
4)学习要有舍有得,什么都抓必然短时间都不会精,希望大家能抓重点,抓精髓,大众软件(带※)先熟练了,这是基础加提高,在研究小众软件(不带※),这是高手之路,最后在研究偏门的,世外高手之路,当然前提是先掌握前面的大众和小众。
5)当然还有一些没有大众开源的有一些也很棒,如审计堡垒机程序。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)