Cacti实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-08 09:52:52

点击下载

作者:刘钊,张跃

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Cacti实战

Cacti实战试读:

前言

为什么要写这本书

如何对用户的数据中心、业务系统进行妥善的日常运维和管理?这一课题是我们在日常工作当中研究的重要方向。在研究过程中,我们接触了很多商业产品和开源项目,但是在研究过程中发现,很难找到一个行之有效的方案和手段,直到接触了Cacti这个项目。它既不像企业级产品架构那样复杂庞大、交互体验不好,也不像一些开源项目那样——虽然设计简单,但是不具备高级功能,制约用户的需求扩展。

Cacti的外观和架构设计很简单,而且是松散耦合,深究其内涵,我们发现它对于高级功能的扩展支持也很到位,特别适合中小型企业、院校机构、政府机关等潜在用户使用。通过一段时期的实际项目部署,发现它确实解决了简化用户工作、增强运维性能的问题。

那么把Cacti相关的研究成果归纳成书籍出版的想法是怎么形成的呢?

首先,当我们的研究工作告一段落之后,回顾走来的这一路,发现Cacti这个开源项目目前在国内非常受业内技术人员的欢迎,大家也很积极地在各大论坛和社区讨论。其实在研究过程中,社区和论坛对我们的支持是非常大的,也是我们重要参考资料的来源地(在这里必须向那些无名英雄们致敬!)。但是,我们惊讶地发现,目前国内竟然没有任何关于Cacti的中文技术书籍。我们在研究过程中恰恰是因为这个原因,走了不少弯路,互联网上信息的可信度需要筛选,需要不断实验验证,难以找到一个明确的方法论和解决问题的思路。相比之下,Nagios这些同类项目的书籍在市面上已经非常普及了。我们认为,如果希望Cacti可以得到广大爱好者的青睐,有一本全面介绍它的书籍,那将会是一件非常棒的事情。这本书也一定会成为像我们当初一样迷茫的技术人员的“攻略和法宝”。

其次,在我们的日常工作当中,会接触形形色色、各种各样的系统项目,通过与用户的一次次沟通交流,我们发现日常的运行维护是项目成功最核心的要素,那么如何评价和测量这个核心要素是非常重要的一个环节。同时,因为行业有行业的特性,每个行业用户都有其自身特殊的工作流程、业务软件和系统架构。所以目前市面上的运维软件很难满足要求(开源项目也是基于这个原因,慢慢走近了技术人员和CTO的眼中)。Cacti也许并不是终极解决方案,但是就目前的情况来说,它的界面好看,可视化功能强大,扩展包完善,特别适合行业用户及像政府机关这样的用户使用。通过一段时间的部署使用,用户也在催促我们能否输出一些技术文档,以便作为培训教材、研究报告使用。这时候,我们发现确实是要写一些东西留下来了。

最后,我们作为从业者,在某一项技术研究得到相应成果之后,非常乐于且急于和大家分享,这就要求我们要非常完善地总结、归纳和提炼,并寻找一种更为友好的方式与大家交流。这是对自己的一种提高,也是对自己前期工作的归档和整理。我们觉得在把这些东西落实在白纸黑字的过程,也是对自己研究成果的另一次审视和质疑。当然,我们欢迎这种审视和质疑。

基于以上三个主要原因,我们觉得完成一本从实战角度出发,先全面后深入介绍Cacti项目的书籍,一定会是读者乐于接受的,也是作者敢于挑战自己的表现。

本书特色

本书写作的核心思路是“突出实战,先全面后深入”。

按照技术人员的一般思路,面对一项新技术或者新产品时,首先要了解它具体是什么东东,能够解决什么问题;然后开始实操,尝试安装配置,使它完好地运行起来,在此过程中会发生各种各样的问题和错误,尝试解决它;在全面了解之后,尝试进行高级功能的探索与开发,以实现自己的需求。本书的内容也按照上述的线索阐述。

第一篇(第1~2章)为准备篇。第1章首先介绍Cacti的起源、概念、架构等内容,给读者留下初步的印象,让大家清楚Cacti的一些基本情况。任何系统和软件都是从安装与初始化配置开始的,Cacti也不例外。第2章主要介绍Cacti系统安装配置的过程,本章分为两个主要的部分,第一部分是针对操作系统环境的安装和配置,另一部分是Cacti系统本身的安装配置,以及如何对Cacti进行升级和更新。

第二篇(第3~5章)为基础篇。在安装完成之后,第3章对Cacti系统的三大主流程进行介绍,以便读者对Cacti系统的内部运行机制有比较详细的了解。第4章把Cacti的每一个操作细节展现出来,包括控制台、图形窗页签的树状菜单中的每一个节点的功能和作用。这部分相当于一个快速查询手册,在不清楚某些部分的概念时,可以快速查询这一章的内容并得到答案。第5章主要介绍如何对Cacti用户进行管理操作。

第三篇(第6~8章)为实战篇。在第6章中,我们通过真正对接一台服务器和一台存储设备等的过程来体会到Cacti的强大。系统的日常运行维护是非常重要的环节,第7章介绍了日常维护系统运行时需要注意的地方,还通过3个比较典型的案例来展现如何处理Cacti系统运行中出现的紧急情况。在第8章中,大家可以通过命令行来进行Cacti的相关操作,包括新建一个被监控的设备主机、修改图形的权限、重建索引、关联模板和设备,等等。

第四篇(第9~12章)为高级篇。第9章主要介绍数据输入方式上的扩展,包括创建一个新的数据字段、通过脚本来实现数据采集的扩展功能。在第10~11章中,我们编写XML文件来增强数据检索的能力,以及基于单一的OID生成具体图形。我们希望大家可以掌握建立PHP脚本服务器的技巧和Spine模块的使用方法,这部分内容在第12章中介绍。

附录A通过剖析参数和数据库,希望可以为读者提供本书的快速定位索引。

另外,在本书创作的过程中,我们增加了针对某些周边知识(相关IT发展史、名人介绍和周边技术等)的介绍,也就是我们在“本章小结”后增加的“IT讲堂”部分,这样做的目的有3个:一是尽量增加本书的阅读价值;二是尽量减少本书的枯燥程度;三是尽量使基础较弱的技术人员也可以非常容易地上手实操。

读者对象

我们认为,本书的读者对象主要分为三类。

‰‰具备扎实的系统集成基础知识,希望选择Cacti作为运维平台的系统管理员或者研发人员(如开发工程师、系统集成工程师、项目经理等)。

对于这一类人群,本书详细介绍了安装和配置过程,尽量深入介绍Cacti的软件实现机制,并在介绍排错的部分列举了相关的案例,通过案例来指导这些具有技术背景的读者按图索骥,由错误发生的线索开始一步一步深入Cacti内部寻找错误根源。同时,通过介绍几种典型的应急预案来满足读者在使用过程中发生关键事件而寻找解决方案的需求。本书还介绍了如何通过编写代码来定制属于用户自己的Cacti,这一部分特别适合具有专业技术基础的读者从中得到一些创作灵感。

‰‰有系统运维需求,希望对Cacti有基本认识的技术管理者和决策者(如政府技术主管、企业CTO、研究所总工程师等)。

对于这类人群,本书通篇采用简单、直白的文字叙述风格,避免过多地出现技术专有名词,让这类读者可以快速初步认识某些陌生的技术和名词。在前言以及“IT讲堂”部分,详细介绍了IT业内的动态、历史,以及Cacti的优势和劣势、应用价值等。

‰‰对Cacti有了初步的了解,并且实操过,希望了解更多技术细节,或者希望找到某一问题解决方案的技术专家(如系统管理员、测试工程师等)。

这一类人已经有实操Cacti项目的经验,在打开本书的一刻开始,脑中已经有了对Cacti的某些认识,一方面他们是带着问题来阅读,希望本书能够给予相关问题的答案;另一方面,他们希望在阅读过程中得到某些共鸣。所以本书着重在各个环节谈一些安装和使用过程中的感受以及总结的经验,希望可以和这一类读者有良好的互动,使这类用户可以从中得到一些解决问题的启发。

知识准备

我们尽量不把一些事情搞得太高深莫测,其实完全没有必要,我们希望读者在阅读本书的过程中,可以轻松、专注地享受这一过程,而不是纠结于非常专业的技术理论、技术操作。但是任何事情的完成都需要有一定的前提准备,所以希望读者可以在如下几个方面丰富自己的知识地图。

‰‰基础的计算机概念是必需的,需要知道CPU、内存、存储、总线、接口、网络等基础知识,以及它们和应用软件、操作系统之间的交互机制。

‰‰基础的OS安装和操作,知道如何在Windows和Linux平台上管理服务器,如何配置和启动相关服务,如何查看系统的日志信息,如何配置存储资源,等等。

‰‰中间件,尤其是Web服务器的相关知识。本书需要用到其中的功能来展现用户界面与数据可视化。

‰‰数据库,特别是一些开源数据库的相关知识,数据库作为元数据的管理载体,在Cacti系统当中也发挥着至关重要的作用。我们需要具备基础的编写SQL查询语句的能力,明白数据库平台、实例、存储区、表、字段等一系列与数据库相关的知识。如果掌握这些,那么你学习的时间将会极大地缩短。

‰‰Perl和PHP(Hypertext Preprocessor)编程能力,如果读者有简单的Perl和PHP语言的编程能力,将会极大地发挥Cacti内在的优势,在Cacti的日常使用中,我们经常会碰到需要自己开发相关模板的情况,这就是我们进行创作的核心。

勘误和支持

由于笔者的水平有限,加之编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正,期待能够得到你们的真挚反馈。

致谢

首先两位笔者需要互相感谢一下,在一起学习和工作十余年结下的友谊对于我们是异常珍贵的一笔财富。

感谢ChinaUnix、CSDN、51CTO等网站及大牛们的默默支持,你们才是我们不断披荆斩棘、无畏前进的引路人。

感谢邓伟、骆萧萧和王雨,三位的人格魅力是我们能一直坚持下来的精神支柱!感谢曾庆丰、孟祥利和程显峰,我们折服于你们卓越的技术能力,每当我们走投无路,沮丧绝望的时候,你们总能伸出双手把我们带出困境。

感谢机械工业出版社华章公司的杨福川、高婧雅。在写作的过程中,为了防止我们写出一堆垃圾,你们两位付出了很大的努力和心血,没有你们的鼓励和建议,我们完不成如此浩大的工程,这本书有你们一半的功劳。

感谢我们的爸爸、妈妈!

刘钊:谨以此书献给我美丽的老婆杜潇,我可爱的女儿刘筱昭!

张跃:谨以此书献给我的新婚妻子杨硕,以及多年来一直支持我的家人和朋友!刘钊 张跃

第一篇 Part1 准备篇

第1章 认识Cacti

■第2章 环境的安装和配置正所谓“好的开始是成功的一半”,在使用Cacti系统之前,我们需要将各项条件准备好,本篇内容的目的也在于此。首先介绍Cacti的基础知识,然后按步骤将Cacti的运行环境向读者呈现出来。准备篇的内容分为两章。第1章对Cacti进行了全面的介绍,包括如何起源、发展、同类产品的简单分析、Cacti系统特性等。在这一章中,读者会跟随我们对Cacti系统进行全景式的了解。我们力求让读者们知道Cacti是怎么来的,它的逻辑框架是什么样子等一系列内容。第2章开始,我们将会介绍操作系统的相关配置,这一章是Cacti运行之前,进行系统准备时非常重要的一部分内容。在实际的生产部署过程中,我们发现使用中大量问题的产生都与操作系统的配置紧密相关。配置不好操作系统,即使Cacti顺利安装上线,未来也可能存在系统崩溃的风险。同时,为了满足更多读者的需求,我们在这一章会介绍Cacti系统在Windows、Linux两个平台下如何进行安装的步骤,以及如何快速更新Cacti系统等。通过准备篇的介绍,相信可以为后续Cacti实际使用减少出现问题的概率,也能加快系统投入使用的进度。闲话少叙,开启我们的Cacti之旅。第1章 认识Cacti

在面对一个新事物、新产品的时候,我们一定会怀揣如下疑问,Cacti也不例外。什么是Cacti,谁创造了它,它是怎么成长起来的?与它同类的兄弟还有哪些?相比之下,它的优势是什么?它的不足又在哪里?我们为什么需要这样一个系统,它能带给我们什么惊喜?Cacti的运行机制是什么样的?它由哪些部分组成?

对这些问题的解答贯穿本章内容的始终,相信大家通过阅读本章,会得到满意的答案。

1.1 Cacti的起源与发展现状

本节介绍了Cacti的基本情况,包括Cacti的基本概念、Cacti从诞生到发展的阶段过程,对于文章中出现的一些功能和概念,大家只要有一个初步印象即可,我们会在后文中详细介绍,本章的主要目的是带大家进入Cacti的世界,以便后续展开相关的话题。

1.1.1 什么是Cacti

Cacti是一个针对数据中心的网络层、平台层、数据层以及业务层全流程进行监控的运维管理平台。它也是基于RRDTool(Round Robin Database Tool)开源项目的一个前端展示平台。2001年9月23日,发布了它的第一个版本。图1-1为Cacti的支撑组件及相互关系。图1-1 Cacti的支撑组件及相互关系

作为一个面向系统管理员的平台,Cacti对接SNMP(Simple Network Management Protocol)、MySQL、RRDTool、Apache等组件,通过调度这些组件进行数据的收集、分析、存储、可视化等工作。

Cacti以实时、定时等多种方式运维和展现数据中心各个层级、各个区域的设备的工作状态,同时按照事先制定好的运维策略,Cacti可以通过报警、邮件通知等方式及时通知用户数据中心发生的各个关键事件。

总体来说,Cacti大致完成以下几个方面的工作:

‰‰基于Web网页的RRD文件和RRA数据的管理工作。

‰‰基于RRD文件的图形配置和生成。

‰‰数据采集需要使用外部脚本与命令行的支持以及SNMP经典方式的支持。

‰‰基于SNMP的易用性配置。

‰‰多样化的用户权限认证与管理。

Cacti目前在国际上被公认为是最开放、最有发展潜力的开源运维系统。

1.1.2 Cacti的起源与发展

故事要从2001年的某一天说起。

一个叫Ian Berry的中学生还在学习如何使用PHP和MySQL进行编程及功能的实现,那时候他业余时间为一个名不见经传的互联网运营商开发项目,他希望借助这个项目不仅可以精进自己的编程功力,还可以创建一个新的监控显示方法,既要比RRDTool容易使用、比MRTG灵活,又要更加容易扩展和调整。

天赋异禀的Ian在自己的不懈努力下,通过使用PHP语言,完成了第一个开源程序的版本。在随后的几年中,开源社区的开发爱好者们越发关注这只“带刺儿的仙人掌”,并在大家的共同推动下,0.8.6版本在2004年9月13日正式发布。0.8.6版本甚至可以认为是Cacti发展历史上的里程碑,它褪去了幼稚与粗糙,在全球开发者的细心呵护下开始展露自己成熟之后的迷人魅力,它的执行效率越来越高,经过优化的源代码使得Cacti变得越来越灵活,越来越易于扩展。

图1-2为Cacti目前的开发团队,右三为创始人Ian Berry,自古英雄出少年啊!图1-2 截至2011年8月份,Cacti的开发团队

按照原来Roadmap的计划,1.0.0版本将会在2013年年底正式发布,但是这个开源项目太火了,大家开始不断地建立自己的分支版本,不断在各个版本基础上开发带有附加特性的新的子版本,这导致1.0.0版本一直难以统一。预见到这个状况可能发生,Ian开始在2012年6月份,集中力量重组研发资源配置,开始在提高研发效率、缩短研发周期方面花力气,相信1.0.0版本不会等待太长时间,并且它一定会是Cacti的一个新里程碑……

1.2 为什么要使用Cacti

在IT行业,任何产品或者解决方案都不可能适用于所有的用户和场景,针对Cacti自身的特点,本节首先介绍它比较合适的使用场景。接着介绍目前市面上常用的同类产品,Cacti的优势和劣势,最后总结归纳出使用Cacti的理由。

1.2.1 Cacti的使用场景

通过笔者这些年的考察,会发现在如下几个场景中,Cacti具有得天独厚的优势。

1.中小型企业

通常情况下,企业,特别是中小型的企业,对于IT信息系统的建设成本比较敏感,通常这样的企业又不乏有技术、有想法的工程师,利用开源软件既可以得到符合自己情况的系统,又能节省一大笔系统建设成本,所以在中小型企业的机房,经常会看到Cacti的身影。

2.大型数据中心

大型数据中心的监控系统往往非常复杂,并不是某一家就可以提供End-To-End的解决方案,在这种情况下,Cacti可以肩负起整体监控系统的网络流量、单台主机工作负载以及非IT化的生僻设备的监控任务,并通过开放的API接口接受其他监控系统的整合,协同工作。

3.紧急的项目抢险

不同于常用的使用场景,Cacti不仅可以作为一般企业IT系统监控和数据中心的日常运行维护管理,在某些特殊场景中,它还可以发挥独特的作用。紧急的项目抢险就是一个非常好的例子,笔者在项目的运行维护中,经常会接到这样的电话:“我的数据库系统怎么从今天早上起变得这么慢?!”“先别急,这之前的几天你们对数据库系统做过什么没有?”“没有啊……什么都没做啊……好好的就突然慢下来了!”(通常我们的客户都是这样回答的……)“系统日志和监控数据发给我看一下吧,我来试着定位问题。”“系统日志怎么导出来啊?监控系统前几天消防演习,机柜关机的时候给停掉了,赶紧过来,别那么多废话了!”(客户暴怒了……)

通常这种情况下,我们都会再带着一套Cacti系统,接驳目标设备,Cacti系统会自动展现监控设备的情况,没准儿我们会发现网络的传输速度正常,数据库主机的计算压力也不大,内存也没有吃满到交换文件的地步,存储性能也OK,就是语句执行起来时间很长,试着查看了一下计划任务,发现问题:不知哪路“神仙”把Rebuild Index的维护计划给删掉了,导致大量的新增记录没有索引,联合查询的时候非常慢。问题得到准确定位!

通过Cacti采集数据,对数据可视化来定位问题,既快速,又简单明了。

Cacti,挺好的,我们一直用它,倍儿有面子!

总结起来,Cacti对于1000台服务器以下的数据中心监控,具有广泛的普适性,它良好的界面设计、开放的系统架构,可以承担起监控的重任。目前笔者看到Cacti已经在电信、石油、政府、教育、医疗等多个行业的客户机房使用。相信大家在日常的工作中也会经常看到,Cacti默默地为我们工作。

1.2.2 Cacti与同类运维工具的对比

目前在业内,有非常多的同类软件,针对商用产品,不做太多评价,毕竟开源项目的高度可定制化,随心所欲地按照用户需求修改功能,这一点是商业产品不具备的。单纯从开源项目来看,与Cacti在同一水平线上的产品有如下几个:

1.Nagios

Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和UNIX的主机状态,交换机、路由器等的网络设置,以及监控打印机的什么等。在系统或服务状态异常时,发出邮件或短信报警,第一时间通知技术人员,在状态恢复后,发出正常的邮件或短信通知。

Nagios的优势在于可以对数据中心中大量的服务器,以及在其上运行的数据服务进行监控,以快速定位问题,进行报警。

相比Cacti,Nagios在网络流量、实时监控以及数据可视化方面的功能很弱。

2.Zabbix

Zabbix是一个基于Web界面的、提供分布式系统监视以及网络监视功能的企业级开源解决方案。Zabbix的界面如图1-3所示。图1-3 Zabbix的界面

Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制,使系统管理员快速定位和解决存在的各种问题。Zabbix由两部分构成:Zabbix Server与可选组件Zabbix Agent。

Zabbix Server可以通过SNMP、Zabbix Agent、Ping、端口监视等方法提供对网络状态的监视,数据收集等功能,它可以运行在Linux、Solaris、HP-UX、AIX、Free BSD、Open BSD、OSX等平台上。

Zabbix Agent需要安装在被监控的目标服务器上,它主要收集硬件信息或与操作系统有关的内存、CPU等信息。它可以运行在Linux、Solaris、HP-UX、AIX、Free BSD、Open BSD、OSX、Tru64/OSF1、Windows NT4.0、Windows 2000/2003/XP/Vista等操作系统之上。

Zabbix的优势在于数据的输入/输出,但是在数据可视化方面做得不如Cacti。

3.Zenoss Core

Zenoss Core是开源企业级IT管理软件,它允许IT管理员依靠单一的Web控制台来监控网络架构的状态和健康度。

Zenoss Core来源于Zenoss开源项目,Zenoss的体系架构非常庞大,当然具备的功能也比较完善,这一点是相对于Cacti来说的,这是Cacti的弱点。

但是Zenoss的体系架构足够复杂,也导致在二次开发和实际使用过程中,系统管理员必须花很长的时间,耗费很大的精力来学习,修改过后的Zenoss,由于功能模块的强耦合性,导致系统在上线之前需要进行大量的测试与验证,耗费人力、物力是在所难免的。

简单易用是Cacti对比Zenoss最大的优势。

4.OpenNMS

OpenNMS是一个企业级基于Java/XML的分布式网络和系统运维管理平台。它可以显示网络中各种终端和服务器的状态和配置,为管理网络提供有效的信息。OpenNMS的界面如图1-4所示。图1-4 OpenNMS的界面

OpenNMS是用Java语言开发的,可以真正做到跨平台。这个项目是由一群经验丰富的网络管理专家设计开发的,针对网络管理员平时关注的对象建模,有很好的粒度把控和很好的扩展性。他们还借鉴了Linux系统设计的一些概念。它的系统开发、设计最大程度地遵循国际通信标准。OpenNMS从设计之初就被定义为一个分布式系统,可以通过配置来满足各种复杂的网络管理要求。

我们必须承认在现阶段,OpenNMS是市场上占有率最高的开源系统运维软件,跨平台的设计、完善的设备库、友好的界面都是它成功的因素。但是在实际使用过程中,我们发现针对OpenNMS的二次开发需要具备Java、JSP、Servlet、Spring、MVC等技术基础,开发的难度比较大,并且安装配置过程也非常麻烦。

几款开源软件的总体评估情况如表1-1所示。表1-1 几款开源软件的总体评估

1.2.3 使用Cacti的理由

Cacti的外观设计、架构设计很简单,而且松散耦合,深究其内涵,我们发现它对高级功能的扩展支持也很到位,特别适合中小型企业、院校机构、政府机关等潜在用户使用。通过一段时期的实际项目部署,也发现它确实简化了用户工作、增强了运维性能。总结起来,使用Cacti的理由也许会有以下几点。

1.友好的体验

Cacti的安装和配置、数据组织、界面展现均通过Web来实现,通过鼠标点击即可完成。Cacti交互体验非常友好,还有具有强大的数据管理功能。Cacti登录之后的主界面如图1-5所示。图1-5 Cacti的界面展示

因为Cacti基于RRDTool进行运维数据的管理,所以RRDTool天生的优势(数据采集效率高、可以显示负值、一个图形中可以接驳多个数据源、数据的存储方便,等等)能很好地继承下来。

2.低负载的运行

Cacti的数据存储与可视化是分开的,这样可以有效降低Cacti服务器的负载,提高运维服务器的性能。

通常可以把Cacti需要的各个组件安装在不同的服务器上来均衡Cacti系统的资源开销。例如,数据中心本身就已经部署了MySQL服务器,那么新建一个Cacti数据库即可,还可以将Cacti的主体程序与RRDTool图像文件分开存放来降低系统的计算资源,等等。

3.高自由度的定制

Cacti调用的组件均为开源、高度的可定制化属性,用户可以根据自己的需要制作模板,不会遇到设备无法兼容的问题。

同时,Cacti加载扩展插件和模板的方法及其简单,用户能最快速地享受到扩展插件带给系统的好处。水位线预警功能插件的配置界面如图1-6所示。图1-6 Cacti扩展之后的水位线预警功能

1.3 Cacti的架构与原理

本节分为两大部分,第一部分介绍Cacti的组织架构,通常新产品部分的介绍都比较晦涩难懂,所以我们通过一个形象生动的例子来介绍,大家看了不会感觉头晕脑胀。第二部分阐述Cacti系统的数据流向,这里不用花太多时间,了解即可,因为后面章节会有详细说明。

1.3.1 Cacti系统的组织架构

Cacti系统的各个模组之间的工作界面比较清晰,各个模组分工明确,耦合松散。如果把系统比作同福客栈(Cacti系统),那么会有以下几个角色(系统模组)。

1.同福客栈的门脸——浏览器窗口

同福客栈,最初叫尚儒客栈,坐落在关中七侠镇,作为当地的一个知名高端会所,迎接远至十八里铺,西凉河地带的商业巨子,贵至六扇门的警界精英,连知县(大嘴他姑父)都要高看一眼。所谓来的都是客,同福客栈以最佳的用户体验,最完美的用户服务成为当地对外交流的形象窗口。

Cacti系统的对外窗口,即浏览器窗口,就好像同福客栈的门脸,所有的用户需求、用户操作、用户指令均通过浏览器窗口来进行交互(当然也支持命令行交互),这么做的目的只有一个——提升服务质量,完善用户体验。

2.衡山派掌门人莫小宝遗孀、同福客栈掌柜佟湘玉——Cacti主体程序

掌柜负责客栈的整体协调,老白、大嘴、秀才一干人等均在她的调度下各司其职。谁不老实工作,她都能及时发现,开始发飙。“额错咧,额一开始就错咧,额如果不嫁过来,额的夫君就不会死,额夫君不死,额就不会沦落到这个伤心的地方……”

Cacti主体程序是各个模组之间相互协同工作的基础和核心,它按照内置的工作流程引擎来顺序调度模组执行各自的工作。当模组工作不正常,或者数据偏离很大时,它可以及时发现其中的问题,并且第一时间报警,通知系统管理员进行系统维护。

3.盗圣、八大派左护法、同福客栈大跑堂白展堂——Poller程序

白展堂跟掌柜的关系最好,俩人配合最紧密,掌柜要他干啥,他绝没二话,不过老白最核心的任务只有一个——跑堂,即把客人都迎进来,听听客人要吃点啥、喝点啥,都记下来。告诉李大嘴掌勺做饭。客人点完了菜,他还要隔三岔五地问问人家菜好不好吃,还需要点啥,最重要的就是得配合掌柜盯着客人,防止邢捕头、燕小六这样的二货一拔刀,客人不结账就跑了。

Poller程序主要是轮询被监控设备的数据采集工具。它在被监控设备第一次接入时通知系统建立相应的数据保存区域(招呼客人),然后定期轮询数据(回访客人),将数据保存在rrd文件中(通知大嘴做饭),并且配合主体程序(佟湘玉),实时探测被监控设备的状态,如果监控设备失去连接,就开始报警(防止客人不结账就跑路)。

4.原七侠镇第三十六任缁衣铺头,现同福客栈厨子李大嘴——RRDTool

李大嘴重情重义,不随便抛头露面,兢兢业业把饭菜做好。他的任务是按照老白从客户那里得到的菜单,加工原料,形成菜品。即使面对钱老板的百般刁难,也能自成一家,独创必胜阁、麦得劳等多种新式月饼。他的存在,为同福客栈满足用户需求奠定了基础。虽不出彩,但足够稳定的菜品质量,保证了为同福客栈的客源。

RRDTool的主要工作是将Poller程序轮询采集到的数据进行妥善管理、保存和组织(从老白那里拿到采集的需求)。它是Cacti系统能够画出精美图表的基础。虽然RRDTool的软件体积很小,结构也相对简单,但是它工作稳定,资源开销相对较小,即使面对大量数据的处理,也能得心应手,是Cacti系统稳定工作的保障。

5.前尚儒客栈老板、同福客栈账房吕轻侯——MySQL

吕秀才本出身名门,三岁识千字,五岁背唐诗,七岁熟读四书五经,八岁精通诗词歌赋,无奈遭遇变故,将尚儒客栈变卖给佟湘玉,成为了同福客栈账图1-7 Cacti各个模块之间的逻房。他饱读诗书,识文断字,是七侠镇辑关系不可多得的技术型人才,曾经刀不见血地了结姬无命而成为关中大侠,任青州知府,之后升至户部侍郎。吕秀才平时在同福客栈的主要工作是记账,把同福客栈的固定资产、人事信息等记录得井井有条。他是同福客栈长期稳定、繁荣发展的重要原因。

MySQL是一个关系型数据库管理系统,它由瑞典MySQLAB公司开发,目前属于Oracle公司(出身名门),由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。MySQL在Cacti系统中负责记录系统的基础数据(固定资产)和用户权限管理资料(人事信息)。

综上所述,一个完整的Cacti系统各个模块之间的关系应该如图1-7所示。

1.3.2 Cacti系统的数据流向

Cacti系统的数据流向主要分为三个阶段:数据的检索、数据的存储和数据的可视化(数据展示),如图1-8所示。

第3章将详细介绍这3个阶段的技术细节,这里,读者只需要有个大致的印象即可。

通过前文的介绍,结合这3个主环节,可以总结出一个完整的Cacti系统的工作流程。

Cacti系统的管理、使用、配置均通过浏览器窗口来完成。可以通过浏览器新建一个监控图表、监控模板等。所有的管理数据都存储在MySQL数据库中。同时,在一台Cacti服务器中,还可以发现Poller程序,它的任务主要是在被监控设备中轮询采集监控数据,它就好像一图1-8 Cacti的数据流向个路由器或者网关,将系统环境中的服务器设备、存储设备、网络设备、安全设备等一系列的IT设备的运行数据接驳进Cacti系统。这些轮询采集到的数据被保存在rrd文件中,Cacti系统运用rrd数据文件来创建监控图形。

1.4 本章小结

本章主要展现了Cacti的总体面貌,包括Cacti的起源、发展和现阶段的发展情况。我们还介绍了目前市面上比较通用的同类工具,从总体评估表中,相信读者能找到适合自己的开源项目。

本章的重点在1.3节,这也是希望读者能够掌握的知识。理解Cacti的基础流程,可以很好地帮助大家在日常系统维护中,按需进行系统设计,快速定位问题。

下面是在本章中出现的一些IT知识,主要包括Solaris和Java,算是向不复存在的SUN公司致敬!SUN的每一步都是IT发展的一大步!

IT讲堂

神的追随者Solaris原来是太阳微系统(SUN)公司研制的类UNIX操作系统,Sun公司被Oracle并购后,称作Oracle Solaris。Solaris操作系统的显示桌面如图1-9所示。Sun的操作系统最初叫作SunOS,由于Sun Microsystem的创始人之一Bill Joy来自U.C.Berkeley,因此SunOS主要是基于BSD UNIX。从SunOS 5.0开始,SUN的操作系统开发转向System V Release4,并且有了新的名字Solaris2.0;自Solaris2.6以后,SUN删除了版本号中的“2”,因此,SunOS2.10就叫作Solaris10。Solaris的早期版本后来又被重新命名为Solaris1.x。“SunOS”这个词用来专指Solaris操作系统的内核,因此Solaris被认为是由SunOS、图形化的桌面计算环境和网络增强部分组成。图1-9 Solaris操作系统显示桌面由于SUN公司被Oracle收购,Solaris和OpenSolaris一并归Oracle所有。OpenSolaris项目已经终结,其基金会解散。一个替代的项目OpenIndiana成立。Solaris的最大特点是其高度的安全性、SMP模式的高度兼容性,以及配合Sparc架构形成的系统的高度稳定性。图1-10为美国军方使用Solaris进行作战分析。曾经有业内大牛说过:在计算机世界中,对于操作系统流行着三种说法:Windows是大众的使用者,Linux是高手的玩物,Solaris则是神的追随者……图1-10 美军使用Solaris进行作战分析

一棵树和一杯咖啡Java平台和语言最开始只是Sun公司在1990年12月开始研究的一个内部项目。Sun公司的一个叫作帕特里克·诺顿(Patrick Naughton)的工程师被自己开发的C和C语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克决定改用NeXT,同时他也获得了研究公司的“Stealth计划”项目的机会。在这里我们也狗仔一把,介绍一下这个诺顿的花边:Patrick Naughton是爱尔兰移民的后代。他的父母在纽约经营一个饭馆。Naughton曾在一所天主教会学校上学,成绩优秀,还是校足球和曲棍球队的队员。后来,他与大学时代的女友结了婚,并通过努力工作获得公司股权,从普通的工薪阶层一跃成为百万富翁。1999年的12月,当Naughton坐在联邦法庭的被告席上,等候陪审团对其做出裁决时,他的命运从此发生了逆转。Patrick Naughton据称是因为意图穿越州境与一名13岁的女童发生性关系。Naughton不得不对上述罪名进行辩护,辩词是那个女孩并不是未成年人或他并没有与之发生性关系等。Naughton本人如图1-11所示。言归正传,继续我们的Java之路,“Stealth计划”后来改名为“Green计划”,号称Java之父的詹姆斯·高斯林(James Gosling,见图1-12)、麦克·舍林丹(Mike Sheridan)也加入了帕特里克的工作小组。他们和其他几个工程师一起在加利福尼亚州门罗帕克市沙丘路的一个小工作室中研究开发新技术,瞄准下一代智能家电(如微波炉)的程序设计,Sun公司预料未来科技将在家用电器领域大显身手。团队最初考虑使用C语言,但是很多成员包括Sun的首席科学家比尔·乔伊(Bill Joy),发现C语言和可用的API在某些方面存在很大问题。图1-11 Patrick Naughton图1-12 James Gosling根据可用的资金,比尔·乔伊决定开发一种集C语言和Mesa语言大成的新语言,在一份报告中,乔伊把它叫作“未来”,他提议Sun公司的工程师应该在C语言的基础上,开发一种面向对象的环境。最初,高斯林试图修改和扩展C语言的功能,但是后来他放弃了。他要创造出一种全新的语言,并命名为“Oak”(橡树),是以他办公室外的树命名的。1994年6月、7月间,在经历了一场历时三天的头脑风暴的讨论之后,团队决定改变努力的目标,他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克·诺顿写了一个小型万维网浏览器:WebRunner,后来改名为HotJava。同年,“Oak”改名为Java。商标搜索显示,Oak已被一家显卡制造商注册,因此团队找到了一个新名字。这个名字是在很多成员常去的本地咖啡馆中杜撰出来的。名字是不是首字母缩写还不清楚,在很大程度上来说不是。虽然有人声称是开发人员名字的组合:James Gosling(詹姆斯·高斯林)、Arthur Van Hoff(阿瑟·凡·霍夫)、Andy Bechtolsheim(安迪·贝克托克姆),或Just Another Vague Acronym(只是另外一个含糊的缩写)。还有一种比较可信的说法是这个名字是出于对咖啡的喜爱,所以以Java咖啡来命名。

第2章 环境的安装和配置

上一章介绍了Cacti的起源、功能特点和体系架构,但这多少有些纸上谈兵的感觉。从本章开始,大家将进入实战环节,通过动手操练来感受“仙人掌”的无穷魅力。

本章主要介绍Cacti的安装及配置过程。

2.1 Cacti安装前的准备

巧妇难为无米之炊,在“种植仙人掌”之前,先来看看需要准备哪些“原材料”,主要包括硬件环境、操作系统环境和支撑Cacti系统运行的应用软件环境。

1.硬件环境

就像仙人掌可以生长在条件恶劣的荒漠中一样,运行Cacti的环境也十分宽松,对于最小系统,或者实验环境,仅仅需要一台X86架构的计算机即可。但如果希望在企业中使用Cacti来完成日常的系统运维任务,那么还需要准备一台稳定性够好、性能够强劲的服务器。在本书的实战过程中,我们选择了HP公司的DL380G7服务器,其硬件配置如表2-1所示。表2-1 Cacti服务器硬件的推荐配置

2.操作系统环境

如果“硬件环境”是计算机的“骨架”,操作系统就是计算机的“灵魂”,Cacti在操作系统的适应性方面也十分出色,既可以支持Windows操作系统,也可以支持Linux操作系统。本书的实验环境部署在Windows Server 2008 R2和Redhat Enterprise Linux Server 5操作系统上。

3.软件环境

在前文中介绍过了,Cacti系统的各个模块耦合性很松散,所以需要一些支撑它运行的周边应用软件,这些软件的版本匹配非常重要,就好比“种植仙人掌”,需要合适的土壤、水源和阳光,缺少哪一样,Cacti都不能健康地生长,所以还需要表2-2所示的软件模块。表2-2 Cacti系统软件环境

2.2 安装与配置相关组件和服务

“原材料”准备好了,但距离Cacti成功运行还有一步之遥,必须正确、完整地安装配置Cacti所需的环境和服务,本节分为Windows和Linux两个平台来介绍安装和配置Cacti系统需要的基础环境和服务。

2.2.1 Windows Server平台的环境搭建

以Windows Server 2008 R2 Standard版本为例,基于IIS的Windows平台的Cacti环境配置流程如图2-1所示。图2-1 基于IIS的Cacti环境配置流程

当然,在Windows平台上,可以使用Apache的Httpd组件来代替Windows自带的IIS组件,那么,基于Apache Httpd的Windows平台的Cacti环境配置流程如图2-2所示。图2-2 基于Apache Httpd的Cacti环境配置流程

在图2-2中,可以发现一个叫作“APPServ”的模块,它是一个为用户打包好的,集成了Apache、PHP、MySQL的程序,有了它就不需要手动繁琐地安装和配置,“APPServ”部分也将在本章介绍。

下面进入Cacti基础环境配置的实战部分。

1.PHP的安装与配置

可以从http://windows.php.net/download/下载最新版的PHP安装程序,通常该程序是一个ZIP压缩包,本书把压缩包解压至E:\php。

这里需要注意一点,如果目前的环境使用Windows自带的IIS作为Web服务,则PHP程序需要下载Non-Thread-Safe(NTS)版本,这是一个“大坑”,图2-3 PHP官方网站关于IIS匹配PHP版本的声明选择错误的版本,会导致后续在配置PHP时,缺少相关的配置文件和功能模块,所以切记要选对版本。图2-3为PHP官方网站的声明截图。

如果目前的环境使用Apache的Httpd来作为Web服务,则PHP程序需要下载VC6版本,这也是一个“大坑”,选择错误,会导致Apache环境中的PHP模块加载不上,或者出现加载错误,切记要选择正确的版本。图2-4为PHP官方网站的声明截图。

同时,如果Apache选择集成了OpenSSL的版本,如httpd-2.0.65-win32-x86-openssl-0.9.8y之类的,则PHP要选择Thread Safe的版本;如果Apache选择no-ssl,如httpd-2.0.65-win32-x86-no_ssl,则PHP也必须选择no thread safe版本。(1)Windows IIS环境下的PHP的安图2-4 PHP官方网站关于装配置Apache匹配PHP版本的声明

PHP软件的安装步骤和操作如表2-3所示。这里需要说明的是,对于软件的安装及配置,本书都将以类似于表2-3的表格形式呈现出来。表2-3 Windows IIS环境下PHP软件的安装步骤说明

下面配置系统环境变量,依次选择“开始”→“控制面板→系统和安全→系统”,弹出如图2-5所示的界面。

选择“更改设置”,会弹出如图2-6所示的对话框。

点击“环境变量”按钮,弹出如图2-7所示的对话框。图2-5 操作系统的系统配置图2-6 配置系统属性图2-7 配置环境变量

在“环境变量”对话框中的“系统变量”列表框中选择“Path”选项,点击“编辑”按钮,弹出如图2-8所示的对话框。图2-8 编辑系统变量

在变量值的最后加入“;E:\php\;E:\php\extras\mibs”,千万不要忘记加入语句最前面的分号!

还需要注意一点,如果使用的是PHP4版本,“E:\php\extras\mibs”路径应该设置为“E:\php\mibs”,如果使用的是PHP5版本,则“E:\php\extras\mibs”保持不变。

下面修改PHP的配置文件内容,如果使用的是PHP4或更早的版本,那么将配置脚本2-1中的内容,复制后粘贴到E:\php\php.ini.dist文件的最后即可,不要忘记把E:\php\php.ini.dist文件重命名为php.ini。配置脚体2-1 修改PHP配置文件增加扩展功能

如果使用的是PHP5或以前版本,将配置脚本2-2中的内容复制后粘贴到C:\php\php.ini.dist的最后即可,也不要忘记重命名文件为php.ini。配置脚体2-2 修改PHP配置文件增加扩展功能

上面增加的内容主要是为了让PHP程序可以支持更多的扩展包,当然,这些扩展包可不是真的用来“扩展”的,它们是Cacti系统可以运行的必备组件。

注意,除了以上的修改内容以外,如果在配置文件中出现了“session.save_path=c:\tmp”这样的内容,就需要去掉它。(2)Windows Apache环境下的PHP的安装配置

前面介绍了关于版本的问题,笔者在安装Cacti环境的过程中,版本几乎成了头号敌人,有时候报错原因非常诡异,根本找不到问题点,但是尝试着换一个软件版本,问题就解决了,我们真的不想大家还像我们以前一样,一点点地死磕版本。回到正题上来,如果使用Apache的Httpd作为Web服务器的话,则需要安装的PHP版本也要做出相应的改动,本书中使用的是php-5.2.10-Win32-VC6-x86,它可以兼容Apache httpd-2.0.65-win32-x86-openssl-0.9.8y版本的Web服务器。

PHP的安装过程,请参考如表2-4所示的内容。表2-4 Windows Apache环境下PHP软件的安装步骤说明

PHP在Apache环境下的配置,与在Windows环境下没有什么区别。

首先需要更改系统的环境变量,然后修改PHP的配置文件,这两部分内容在前面已经介绍过,这里就不再赘述了。

2.IIS的安装与配置(也可以使用Apache,二者选其一)

IIS是Windows操作系统内置原生的Web程序,在使用它之前,需要进行一些配置,使IIS能够和PHP对接,协同工作。

首先确认操作系统已经正确安装了IIS功能,并且启用了CGI功能,如图2-9所示。

IIS 7.5为了易于PHP程序的安装,增设了PHP Manager模块。这个模块极大地简化了PHP的配置工作,只要简单安装,IIS就会自动完成相关配置,其下载地址为http://phpmanager.codeplex.com/releases/view/69115。图2-9 打开或关闭Windows功能窗口

表2-5是PHP Manager模块的安装步骤说明。表2-5 PHP Manager软件的安装步骤

下面讲解如何将IIS和PHP对接。

重新打开IIS的管理控制台,会发现多了一个叫作PHP Manager的图标,如图2-10所示。图2-10 IIS管理配置界面

双击“PHP Manager”图标,打开如图2-11所示的界面,会发现IIS服务中还没有加载PHP的相关支持程序,选择“Register new PHP version”。图2-11 PHP Manager的管理配置界面

在如图2-12所示的对话框中选择“php-cgi.exe”文件的保存路径,点击“确定”按钮,IIS会自动加载PHP的相关程序,如图2-13所示。图2-12 注册PHP程序图2-13 配置完成之后的PHP Manager管理界面

点击“Check phpinfo()”链接,弹出如图2-14所示的对话框,点击“确定”按钮,测试IIS和PHP的连通性。

如果弹出如图2-15所示的画面,则说明IIS和PHP已经成功对接了。图2-14 选择站点和URL地址图2-15 PHP测试页

3.Apache的安装与配置(也可以使用IIS,二者选其一)

除了Windows原生的IIS组件可以作为Web服务器之外,Apache的Httpd也是一个很好的选择,它同样可以提供Web访问的服务。IIS和Apache两者选其一即可,作者不建议在同一个系统上安装两个Web服务器,这样会给后续的工作造成诸如“端口占用”的棘手问题。

这里选择httpd-2.0.65-win32-x86-openssl-0.9.8y版本的软件,按照之前在PHP安装配置部分关于版本选择的说明,这里需要选择PHP的对应版本是具有Thread safe功能的,并且是VC6版本的php-5.2.10-Win32-VC6-x86。

Apache的安装过程,请参考如表2-6所示的步骤说明。表2-6 Apache软件的安装步骤说明

下面需要配置Httpd的文件,Httpd的配置文件通常放在安装目录当中,名称为httpd.conf,当然,如果怕弄错配置文件,可以在开始菜单中找到正确的配置文件,如图2-16所示。图2-16 Apache配置文件在开始菜单的位置

在介绍配置方法前,需要说明一点,因为版本不同,Apache的配置文件有几种不同的配置方案,下面分别介绍。

1)如果使用的是Apache 1.3.x和PHP4版本,那么将配置脚本2-3中的内容加入配置文件中。配置脚体2-3 Apache程序的配置脚本

2)如果使用的是Apache 2.x和PHP4版本,那么将配置脚本2-4中的内容加入配置文件中。配置脚体2-4 修改PHP配置文件增加扩展功能

3)如果使用的是Apache 2.x和PHP5版本,那么将配置脚本2-5中的内容加入配置文件中。配置脚体2-5 修改PHP配置文件增加扩展功能

按照不同的Apache版本配置好之后,测试Apache和PHP两个组件之间的连通性。在E:\httpd\Apache2\htdocs目录中手动创建一个测试文件,名称可以是test.php,在这个文件中输入配置脚本2-6中的内容。配置脚体2-6 修改PHP配置文件增加扩展功能

打开浏览器,在地址栏中输入http://localhost/test.php。看看是否有输出,也许会没有输出,仅仅是一个空白页,这通常情况下是由权限问题、环境变量设置问题、模块加载造成的。首先需要查看Apache的错误日志,这里通过一个比较复杂的例子来说明。

当查看日志记录2-1时,发现Apache启动时已经成功加载了PHP模块,但是输出了错误。日志记录2-1 Apache的日志记录

这是为什么呢?查询相关手册得知,原来在安装PHP程序时,选择了完全安装,但是这些链接库是有相互依赖关系的,造成了冲突,那么怎么解决呢?

很简单,手动修改PHP配置文件,将日志中提到的模块注释掉,如图2-17所示。图2-17 Apache配置文件中注释掉的相关扩展模块

重启Apache服务,Bingo!测试成功。图2-18 PHP测试页

4.MySQL的安装与配置

MySQL是负责整体Cacti系统的元数据存储的部分,下面介绍它在Cacti系统环境中的安装配置参考表2-7的内容。表2-7 MySQL软件的安装步骤

安装好MySQL之后,不一定只在本地对它进行维护,也有一些场景要通过另外一台设备远程连接,但是MySQL默认的属性不允许远程连接,这就需要对它进行修改,请参考配置脚本2-7中的内容。配置脚体2-7 开启MySQL数据库实例的远程连接

然后重启MySQL服务即可。

5.AppServ的安装与配置(傻瓜安装模式)

有人看到上面描述的安装配置过程,估计是要晕掉的,Cacti的安装环境这么麻烦,算了,算了,不用了!

其实这些配置过程都非常基础,但工作量比较大。有没有什么简便快速的方法可以让Web服务器运行起来呢?有的,那就是AppServ。这是一个能够帮助用户快速搭建Web环境的软件包。

可以从官方网站上下载,然后点击安装程序,进行安装。安装过程请参考表2-8中的内容。表2-8 MySQL软件的安装步骤

程序安装结束之后还没有完,还记得我们曾经做过的那些配置么?对,如果使用App Serv来快速构建Web环境,一样也逃不了修改配置文件的命运,还是老老实实修改配置吧,正好让我们一起再复习一遍。

1)Apache的配置:添加配置脚本2-8中的语句到httpd.conf文件中。配置脚体2-8 Apache的配置

2)PHP的配置:添加配置脚本2-9中的语句到php.ini文件中。配置脚体2-9 PHP的配置

重启AppServ服务,输入http://localhost/phpinfo.php进行测试,如图2-19所示。图2-19 PHP测试页

安装配置完成。下一步就是配置MySQL数据库。这一点请参考上面的MySQL部分,这里不再赘述了。

6.RRDTool的安装与配置

从官方网站RRDTool:http://www.cacti.net/downloads/rrdtool/win32/下载RRDTool的程序包,这个程序包不用安装,下载完成后解压缩,将解压出来的文件中的所有文件复制到“C:/cacti”路径下即可。

7.Net-SNMP的安装与配置

在Net-SNMP的官方网站http://net-snmp.sourceforge.net/下载最新版本的Win64安装文件,并将它安装到“E:/net-snmp”路径下。这个过程没有什么难点,注意将安装路径修改正确即可。

至此,已经将在Windows平台上构建Cacti系统的环境准备好了。在正式安装Cacti主体程序之前,还需要学习如何在Linux平台上搭建基础环境。

2.2.2 Linux平台环境的搭建

在Linux环境下,Cacti的操作系统环境比较容易安装,不论Linux是何版本,都要确认以下的软件是否在Linux操作系统中。

‰‰Httpd

‰‰PHP

‰‰PHP-MySQL

‰‰PHP-SNMP

‰‰MySQL

‰‰Net-SNMP

本书的操作系统版本是Red Hat Enterprise 5.6,在安装操作系统时,为了后续的软件调试方便,选择完全安装,也就是说,Cacti所需的软件环境,大部分都已经在原生的操作系统中了,不需要额外安装。

1.PHP的安装配置

通过php-m命令确认PHP都加载了哪些模块,如图2-20所示。图2-20 php-m命令的输出结果

无论怎样,都要确保PHP环境中已经加载了如下模块。

‰MySQL

‰SNMP

‰XML

‰Session

‰Sockets

‰LDAP(如果后续需要LDAP认证,则需要用到该模块)

‰GD(有些插件可能会用到)

从图2-20中,大家可能会感到奇怪,为什么GD模块没有被加载上呢?其实主要原因是采用了系统自带的PHP程序,默认配置下,不会自动加载GD模块,需要手动独立添加模块来加载该模块。

目前大部分的操作系统已经将这个工作做得极为简化,以我们手中的操作系统为例,只要安装光盘中的php-gd-5.1.6-27.el5_5.3.x86_64.rpm安装包即可,系统会自动加载文件,如果所用的环境不支持这种方式,也不要着急,下面介绍一种纯粹手动添加模块的方法。

以安装tidy模块为例,需要先通过网络下载tidy的安装包,通常就是源码包,对这个源码包进行解压、编译、安装,请参考配置脚本2-10的内容。配置脚体2-10 编译安装tidy程序包

进入PHP源程序目录中的ext目录,这里存放着各个扩展模块的源代码,选择需要的模块,如tidy模块。执行phpsize程序来生成安装所需的编译文件,注意,phpsize在PHP安装目录的bin目录下,如“/usr/local/php5/bin/phpsize”。运行时,可能会报错,phpsize执行的错误输出如日志记录2-2所示。日志记录2-2 phpsize执行的错误输出

这时候,需要安装autoconf,此软件放在操作系统的安装光盘中,通常以RPM包方式保存,安装光盘中的autoconf程序即可。完成上述操作后,需要生成配置文件,并编译生成模块,参考配置脚本2-11。配置脚体2-11 phpsize的编译命令

tidy.so被复制到PHP对应的目录php.ini中,设置扩展目录“extension_dir="/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/”,添加扩展模块引用“extension=tidy.so”。

至此模块添加完成。

2.Apache的安装配置(Httpd)

1)开始配置Web服务,找到存放Httpd配置文件的路径,通常该路径是/etc/httpd/conf/httpd.conf,使用vi命令对它进行编辑,请参考配置脚本2-12。配置脚体2-12 修改Apache的配置文件

2)重新启动Apache Httpd服务即可。

按照Windows部分的介绍,手动创建一个测试文件,名为test.php,在该文件中输入配置脚本2-13的内容。配置脚体2-13 修改test.php的配置文件

3)打开浏览器,在地址栏中输入http://localhost/test.php,弹出如图2-21所示的页面,说明Apache+PHP的环境已经配置成功了。

3.MySQL的安装配置

在Linux操作系统下配置MySQL比较简单,系统已经安装好了MySQL程序,只需要设置如配置脚本2-14所示的超级用户root的密码,之后重启MySQL服务即可。图2-21 PHP测试页配置脚体2-14 设置root用户的密码

4.RRDTool的安装配置

在Linux环境下安装RRDTool软件很简单,从官方网站下载RRDTool的RPM安装包,安装即可。

这里需要注意一下,作者在安装RRDTool软件的过程中发现该软件在安装过程中不断报错,我们在尝试了很多次之后,发现一个比较可行的解决方案,请参考配置脚本2-15。配置脚体2-15 安装RRDTool软件

以上问题都解决之后。记住!需要把rrdtool、rrdtool-devel、perl-rrdtool这3个包在同一时间使用rpm命令安装,来排除它的依赖性问题。

5.建立Cacti用户

如配置脚本2-16所示,需要在Linux操作系统中建立Cacti用户以保证整体系统的安全性,毕竟没有哪个实际的生产环境会让你用root用户“胡作非为”的。配置脚体2-16 建立Cacti用户

至此,基于Linux操作系统的Cacti基础环境已经配置成功了,下面开始安装Cacti主体程序。

2.3 Cacti的安装与配置

下面介绍如何安装和配置Cacti,由于Cacti的程序主要是在Web浏览器环境下安装,所以从本章开始,不再分为Windows平台和Linux平台来介绍,都统一以Web浏览器的方式来介绍,如果涉及平台之间的不同配置,会在文中说明。

2.3.1 安装和配置Cacti的基础平台

由于采用了基于Web浏览器的方式,Cacti基础平台的安装非常简单,也不存在针对某一特定版本或者特定系统环境的操作。按照Cacti安装程序给出的向导和建议,可以很方便地安装Cacti系统。

1.建立Cacti基础数据库

还记得在第1章中介绍的么?MySQL就像“吕秀才”一样,把Cacti的基础配置、用户管理、系统配置等信息妥善地存储起来,这就需要创建一个“小账本”。

建立Cacti数据库的脚本一般会存放在Cacti的安装文件中,用户会找到一个名为“cacti.sql”的文件,下面执行它,建立系统所需的数据库。请参考配置脚本2-17的内容进行配置。配置脚体2-17 建立Cacti基础数据库

2.Cacti的安装和配置

Cacti的主体程序可以在Cacti的官方网站上下载,本书的实验环境版本是cacti-0.8.8b,将程序解压,放到Web服务器的目录中。然后打开Cacti程序的目录,编辑include文件夹中的confg.php文件,修改Cacti连接的数据库属性,如配置脚本2-18所示。配置脚体2-18 修改Cacti的数据库连接

这里还需要修改rra文件夹下的log目录权限,以保证Cacti运行的时候,可以正常使用日志。输入配置脚本2-19所示的语句。配置脚体2-19 修改log目录权限

编辑/etc/crontab文件,把配置脚本2-20中的语句加进去,这条语句在后面还会介绍到,目的是让/var/www/html/cacti/poller.php程序每5分钟执行一次,获取想要监控设备的监控数据。配置脚体2-20 配置crontab文件

上述配置文件中的目录应该是指定的存放Cacti程序的目录,本书的实验环境使用了/var/www/html/cacti/目录,读者需要按照实际情况指定自己的目录。

如果需要在Windows平台使用Cacti,则配置定时任务计划。点击“开始”→“控制面板”→“任务计划”→“添加任务计划”,浏览PHP执行程序所在的目录。例如,“E:\php\php.exe”设置为每天执行,然后在“高级”中选择每5分钟执行一次,持续时间根据需要设定。返回属性首页,将“运行(R)”改成配置脚本2-21中的内容。配置脚体2-21 配置“运行(R)”中内容

下面打开一个Web浏览器,在地址栏中输入http://你的主机IP或机器名/cacti/,打开如图2-22的界面,点击Next按钮。图2-22 Cacti安装向导欢迎画面

弹出如图2-23所示的界面,选择“New Install”,点击Next按钮。图2-23 选择Cacti的安装类型

跳转到如图2-24所示的界面。图2-24 Cacti的各个组件路径配置

Cacti系统安装需要的文件都已经找到,如果没有找到,则该界面会报错,不用紧张,因为在安装过程结束后,在系统配置的节点依然可以定义这些文件的存储路径。本书的后面会详细介绍。点击Finish按钮,结束安装。

Cacti首次进入的登录界面,如图2-25所示。Cacti首次安装的默认用户名和密码都是“admin”。

输入之后,点击Login按钮,由于是第一次进入系统,所以Cacti系统强制让用户修改admin用户的密码,输入设置的密码,点击Save按钮,如图2-26所示。图2-25 Cacti登录界面图2-26 Cacti首次登录的修改密码界面

保存后,进入Cacti的主界面,如图2-27所示。图2-27 Cacti主界面

Cacti主体程序安装成功。

2.3.2 安装和配置Cacti扩展插件

与Cacti主体程序安装的过程一样,在Cacti系统中安装扩展插件也非常简单,这也是Cacti系统非常引人注目的一个特性,下面以安装Cacti监控网络的“IP自动发现”扩展程序为例进行讲解。

1)将下载的程序复制到/var/www/html/cacti/plugins文件夹。回到Web的管理页面,点击左侧树状菜单的“Confguration”→“Plugin”→“Management”节点,如图2-28所示。图2-28 Cacti插件管理菜单节点

2)主界面显示刚才复制的插件程序,如图2-29所示。图2-29 Cacti插件管理界面

3)点击“Action”下面的小箭头就会变成如图2-30所示的样子。

4)点击右边的绿色箭头(见图2-31),该插件启用成功。图2-30 加载Cacti的扩展插件图2-31 启用Cacti的扩展插件

插件启用成功之后,左上方的分页签显示栏多出了一项“discover”标签(见图2-32),说明模块已经被Cacti识别,并且可以工作了。图2-32 Cacti的页签显示

2.3.3 安装和配置Cacti扩展模板

在Cacti系统中导入模板的方法也比较简单,依次选择左侧树状菜单中的“Import/Export”→“Import Templates”,如图2-33所示。图2-33 Cacti的模板导入导出菜单节点

Cacti的主界面如图2-34所示,点击“浏览”按钮,选择需要导入的模板,注意,这里打开的文件资源管理器是Web浏览器本地的,不要搞错了!图2-34 Cacti的模板导入导出界面

选择名为“cacti_host_template_vmware_esx_server.xml”的主机模板,点击“Import”按钮,可以看到Cacti系统已经将模板成功导入了,如图2-35所示。图2-35 Cacti模板导入成功之后的显示界面

点击左侧树状菜单,选择“Templates”→“Host Templates”节点,如图2-36所示。

可以看到主界面显示出刚刚添加的主机模板为VMware ESX server,如图2-37所示。图2-36 Cacti中主机模板的菜单节点图2-37 显示Cacti中的主机模板

至此,模板添加成功。

以上是对Caci系统的安装和配置的介绍。结合本章的内容,不难发现,如果是第一次接触Cacti系统,需要注意的事项非常多,也许这也是开源项目的一把“双刃剑”,虽然灵活、松散耦合的软件架构最大限度地保留了用户的自由度,但也增加了安装配置过程中的不确定性和复杂度。我们第一次安装配置的过程,可以用极其惨烈来形容,版本不匹配、依赖性错误、驱动问题、操作系统不熟练、权限分配混乱……导致我们在第一次接触Cacti时,感觉它真的就像是一株带刺的仙人掌,近身不得。随着我们对它的日益了解,发现它仿佛是一匹刚烈的马,只要驯服它,就会给你无限的惊喜。所以,为了减少安装配置的难度,在下一章节介绍大家可能会遇到的问题和错误。

2.4 安装与配置过程中的排错宝典

虽然我们在第一次接触Cacti时,需要经历一段比较复杂的安装过程,为了减轻大家的痛苦,也是为了Cacti能够更好地服务于大家,与大家分享在安装过程中遇到的障碍,如果你是高手,大可以帮助我们一起分析原因,引以为戒,如果你的IT系统知识还不够丰富,那么相信这一节的内容对你会有很大的帮助。

2.4.1 关于版本

版本是摆在面前的第一座大山,由于Cacti采用了很多第三方的开源项目,这些项目又难以顾及所有的支持项目,所以会出现很多版本不匹配的问题,下面一一进行讲解。

首先讲解PHP和Apache在不同操作系统平台上的匹配问题,之前的章节交待过,这里再次用表2-9来重申一下。表2-9 PHP和Apache版本配置

如果配置错误的软件版本,就有可能找不到一些需要用到的文件和目录,有可能造成配置缺失、模块加载等原因,所以这一点必须引起足够的重视。

其次,对于PHP,可能会使用PHP4.x版本,而不选用PHP5.x版本,在前文中没有介绍PHP4.x版本的配置方法,但是在每一步都介绍了操作的目的,大家可以按照说明配置PHP4.x版本的软件,我们亲自试过,没有多困难。但是还是推荐使用比较新的PHP5.x版本,有一些新特性可能会在未来用到,PHP4.x版本在实际生产环境中已经无法满足用户的需要了。

2.4.2 关于软件的依赖性

在前文中,我们遇到了在Linux环境下安装RRDTool时,软件的依赖性错误。这里再重申一遍这种错误的解决方案,因为这一点很重要,曾经困扰我们很久。

在Linux操作系统安装RRDTool软件的过程中,操作系统提示互为依赖性的错误,通过在同一时间安装多个RPM包的方式还是无法解决问题,在尝试了很多次之后,发现一个比较可行的解决方案。

查询手册知道RRDTool要在Linux系统中正常工作,首先需要有以下模块:

‰‰Glib

‰‰libart

‰‰libpng

‰‰pixman

‰‰freetype

‰‰fontconfg

‰‰cairo

‰‰pango

‰‰rrdtool

其他的模块安装相对容易,没有遇到太多依赖性的错误,但是libart模块带来很大的困扰,如果你也像我们一样遇到这样的困扰,那么配置脚本2-22的解决方案将会对你有用。配置脚体2-22 安装libart模块

以上问题都解决之后,记住,需要把rrdtool、rrdtool-devel、perl-rrdtool这3个包在同一时间使用rpm命令安装,以排除libart模块的依赖性问题。

2.4.3 关于权限

权限问题贯穿安装、监控和日常维护当中,在很多情况下,系统无法正常部署,或者部署完成后不出图的问题,多集中在权限的设置上,在本章的后面会多次提到如何妥善地处理权限问题,在安装阶段涉及最多的是Cacti环境中的文件系统权限和数据库权限。

在文件系统中,需要修改rra文件夹下的log目录权限,Windows平台通过GUI可以很快设定好,这里就不再赘述了。在Linux平台下,输入配置脚本2-23中的内容。配置脚体2-23 修改log目录的权限

这么做的目的是将rra/log文件的所有者改成Cacti,这样使用Cacti用户的时候,程序可以将系统的日志正常写入log文件中。

在数据库系统中,通常会考虑安全因素,把MySQL数据库和Cacti系统分开部署,但是MySQL系统默认不允许远程连接,所以需要打开MySQL数据库的远程连接,并把Cacti数据库的所有者改为用户Cacti。请参考配置脚本2-24中的内容。配置脚体2-24 开启MySQL系统的远程连接

2.5 Cacti的更新安装

我们知道开源项目的最大魅力就是在全世界有非常多的程序高手和爱好者在帮助大家一起完善,增强Cacti的功能和特性,在面对基础版本时,我们会对它进行定期更新,以使系统更加安全、有效。在介绍如何安装Cacti的扩展插件之后,下面学习如何对Cacti主体程序进行更新安装。Cacti的更新分为主体程序的更新和补丁程序的更新。

2.5.1 Cacti主体程序更新

Cacti组织会定期更新Cacti主体程序,如果希望利用Cacti的一些新特性,就需要升级安装Cacti主体程序,大致步骤如下:

1)对数据库进行备份,参考配置脚本2-25中的内容。配置脚体2-25 备份MySQL数据库

2)参考配置脚本2-26中的内容,备份目录。配置脚体2-26 备份Cacti目录文件

3)参考配置脚本2-27中的内容,解压从官方网站下载的最新Cacti主体程序包,并把该文件夹重命名为Cacti,这就是我们使用的最新程序文件的目录。配置脚体2-27 解压新版Cacti程序

4)参考配置脚本2-28中的内容,编辑cacti/include/confg.php文件,指定MySQL数据库的链接,让程序能够成功连接到MySQL数据库。配置脚体2-28 修改Cacti的数据库连接配置

5)把原有的*.rrd文件拷贝到新的目录中,参考配置脚本2-29中的内容。配置脚体2-29 拷贝原有的rra文件

6)把原有的Cacti扩展脚本也拷贝到新的目录中,这里有一点需要注意,有一些脚本是随着版本的更新自己更新的,所以需要确认系统中存放的脚本是否需要随之更新,否则就不是复制而是覆盖掉它了。请参考配置脚本2-30中的内容。配置脚体2-30 拷贝原有的脚本文件

7)同理,将原有的XML文件拷贝到新系统中来,有一些XML文件也像脚本一样随着主体程序的版本更新而更新,需要确认好版本关系,拷贝或者覆盖。请参考配置脚本2-31中的内容。配置脚体2-31 拷贝原有的脚本文件

8)将新目录的权限赋予Cacti用户,请参考配置脚本2-32中的内容。配置脚体2-32 修改log目录权限

9)在Web浏览器中输入地址“http://你的机器名/cacti/”,等待美妙的结果吧!

以上是对Cacti主体程序的更新,方法简单,不过还是要提醒大家,在执行任何更新操作之前,记得将原有数据进行妥善备份。

2.5.2 Cacti更新补丁程序

如果希望Cacti安全、稳定地工作,定期更新Cacti官方发布的补丁是非常必要的,以0.8.8a版本为例,登录到官方网站,如图2-38所示,下载SNMP的相关补丁。图2-38 Cacti官方网站上的补丁发布页

在操作系统的命令行界面执行配置脚本2-33中的语句。配置脚体2-33 执行补丁程序

执行之后,补丁就安装成功了。

2.6 本章小结

本章介绍了Cacti系统部署时需要的Windows操作系统环境和Linux操作系统环境。在这些配置中不难看出想要顺利安装Cacti,还是需要下一定的工夫的。

在枯燥,甚至是有些烦人的基础环境搭建完毕之后,介绍了Cacti主体程序的安装过程。这也算是大家第一次直观地接触到Cacti系统,还介绍了Cacti扩展插件、扩展模板的安装方法。Cacti的扩展插件和模板的安装非常简单,这也为后面进行功能扩展提供了极大的便利。

Cacti系统的安装配置过程比较复杂,所以在介绍安装和配置过程后,介绍了在Cacti实际部署时可能遇到的错误,这里的排错方案均是笔者亲自实验所得。

Cacti系统每天都会有成千上万的爱好者进行更新,给它打补丁,所以本章也介绍了如何在原有的Cacti系统基础上更新主体程序,以及如何给它打补丁。

下面是在本章中出现的一些IT知识,即IT讲堂。因为这一期中使用到了RRDTool和PHP这两个非常著名的开源项目,所以本期的内容就介绍RRDTool和PHP的由来。

IT讲堂

RRDTool的故事RRDTool(Round Robin Database Tool)是托比亚斯·奥提克(Tobias Oetiker)开创的一个强大的绘图引擎。托比亚斯这个人不简单,他是众多优秀开源项目的编写者,例如我们熟知的MRTG、Extopus等。托比亚斯于1969年2月在瑞士出生。全家在瑞士的很多城市都居住过,最后在一个小镇Olten定居下来。1994年春天,他在英国的莱切斯特De Montfort大学工作了一年。当他回到瑞士之后,在瑞士苏黎世联邦理工学院连续工作了11年。2006年,托比亚斯和几个同事创建了OETIKER公司,主要承担项目咨询的工作。图2-39 托比亚斯·奥提克在托比亚斯写MRTG、SmokePing这些程序时,并没有想写一个类似RRDTool功能的软件,但是在他编写MRTG的时候,他觉得需要RRDTool这样一个基础平台,如果没有这么一个软件,则MRTG、SmokePing这类软件就不能正常运行,同时,在他的MRTG项目上线之后,很多用户都在反馈,他们需要一个RRDTool这样的软件。与其这样,还不如写一个RRDTool,不仅他自己的软件可以使用,也可以为其他的开源项目贡献力量。这就是他开发RRDTool的动机。在编写RRDTool时,他还在苏黎世有一份像样的工作,有稳定的收入,所以他利用业余时间完成了RRDTool工具,由于衣食无忧,不用为如何去寻找商业项目赚钱而奔波,RRDTool单纯的技术设计,没有任何功利性存在,也造就了RRDTool的成功。目前,使用RRDTool的开源项目主要有drraw、Perl RRD、WeatherMap4RRD、Cacti、ozMonitor,等等。

格陵兰和以色列的骄傲PHP(Hypertext Preprocessor)是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。PHP的语法借鉴吸收了C语言、Java和Perl等流行计算机语言的特点,易于一般程序员学习。PHP的主要目标是允许网络开发人员快速编写动态页面,但PHP也被用于其他很多领域。提到PHP,就要提到它的创始人:拉斯姆斯·勒多夫(RasmusLerdorf)。1968年11月22日,勒多夫出生于格陵兰岛,祖籍是丹麦。勒多夫1988年毕业于安大略省金城中学,1993年毕业于滑铁卢大学,获得系统设计工程应用科学学士学位。1995年,他编写了PHP的第一个版本,PHP原本的简称为Personal Home Page,是拉斯姆斯·勒多夫为了维护个人网页,而用C语言开发的一些CGI工具程序集,以取代原先使用的Perl程序。最初这些工具程序用来显示拉斯姆斯·勒多夫的个人履历,以及统计网页流量。他将这些程序和一些窗口解释器集成起来,称为PHP/FI。PHP/FI可以和数据库连接,产生简单的动态网页程序。拉斯姆斯·勒多夫在1995年6月8日将PHP/FI公开发布,希望可以通过社区来加速程序开发与查找错误。在1997年,两个以色列程序员:齐夫·苏拉斯基(Zeev Suraski)和安迪·古特曼斯(Andi Gutmans)(见图2-40),重写了PHP的语法分析器,成为PHP3的基础,而PHP也在这个时候改称为PHP:Hypertext Preprocessor。图2-40 齐夫·苏拉斯基和安迪·古特曼斯经过几个月的测试,开发团队在1997年11月发布了PHP/FI2,随后开始PHP3的开放测试。齐夫和安迪在PHP3发布后开始改写PHP的核心,他们也在以色列成立了Zend Technologies来管理PHP的开发。一直到现在,PHP的版本发布管理和程序的维护都由Zend这家公司负责。那么请读者猜猜在图2-41中,创始人勒多夫在哪里呢?图2-41 拉斯姆斯·勒多夫2002年9月至2009年11月6日间,他在Yahoo!公司担任基础设施架构师。2010年,他加入WePay公司帮助开发其API。2011年起,他担任创业顾问。2012年2月22日他在Twitter上宣布,他已经加入Etsy。2013年7月,加入Jelastic作为高级顾问来帮助他们创建新技术。

第二篇 Part2 基础篇

第3章 Cacti的基础流程

■第4章 Cacti的基础界面■第5章 Cacti的用户管理在第1部分准备篇中,介绍了如何正确安装Cacti系统,在安装过程之中,涉及很多专有名词和一些原理性的知识,所以在开始实战之前,有必要介绍Cacti的基本原理。作为为实战准备的知识内容,本部分围绕Cacti运行的基础流程、Cacti展示的基础界面以及Cacti的用户管理来展开。第3章介绍了Cacti的检索流程、存储流程、数据可视化流程,大家可以了解到Cacti将数据变为图表的工作步骤。Cacti基础界面在第4章中介绍,按照Cacti的主页签分为控制台和图形窗两部分。用户管理也是非常重要的知识,这部分内容放在第5章中,介绍新建、编辑用户,对现有用户进行管理等内容。综上所述,基础篇对Cacti系统的基本流程、基本功能和基本操作进行梳理,使读者在实践之前理解Cacti的运作机制、操作流程,这样再进行实战就不会因不熟练Cacti而困扰了。第3章 Cacti的基础流程

第1章介绍了Cacti系统的数据流向,这里先简单回顾一下。

Cacti在监控主机设备时,首先按照系统内设置好的数据检索方式(主要是数据输入方式和数据查询两种类型),查询与获取对设备主机进行监控的指标数据;其次,Cacti将数据按照要求分类,监控数据保存在rra文件中,元数据保存在数据库中;最后,Cacti系统按照预先设置的图形模板绘制图表,将数据以可视化的方式展现给用户。因此,数据的流向可以分为如图3-1所示的3个部分,即数据的检索流程、数据的存储流程和数据展现的可视化流程。本章围绕着这3个主要环节来讨论。

3.1 检索流程

Cacti系统的首要任务是对网络内的监控设备进行数据检索,即监控数据的获取过程。Cacti使用轮询器,也就是Poller程序来完成这个工作。还记得么?就是“同福客栈的大跑堂白展堂”。图3-1 Cacti的3个基础流程Poller程序通过操作系统自身的计划任务功能被定期触发执行。Windows平台的计划任务功能就是自身的维护计划程序,Linux平台的计划任务功能就是Cron程序,通过编写Crontab脚本来实现。

在IT数据中心的环境中有各种各样的设备,如服务器、网络设备,甚至家用电器等。不用担心,大部分设备都支持简单网络管理协议(Simple Network Management Protocol,SNMP)的标准,为了后续能够更好地调试和运维,先介绍SNMP的基本原理和架构。

SNMP由一组网络管理的标准组成,包含一个应用层协议(Application Layer Protocol,ALP)、数据库模型(database schema)和一组资料物件。该协议支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(Internet Engineering Task Force,IETF)定义的Internet协议簇的一部分。

Cacti进行数据检索的主要流程如图3-2所示。图3-2 Cacti的数据检索流程

还记得我们在主机上安装了SNMP的相关组件么?整个监控网络中SNMP的设备主要包含SNMP Server和SNMP Agent两个角色。

可以将SNMP Agent程序理解为一种客户端程序,它的主要作用就是将被监控设备上的数据采集回来,按照MIB库的规则存放。通常情况下,Linux的常用代理程序是Net-SNMP,Windows的程序通过添加/删除程序可以安装,而类似于Cisco路由器、EMC存储之类的设备是自带SNMP的。Agent程序把从设备读到的各种数据(如CPU的负载数据)以SMI(Structure of Management Information)规定的格式写到MIB库中。

这里解释一下MIB。MIB(Management Information Library)可以简单地理解为一张地图或者一组抽屉,它是一个结构化的描述树,如图3-3所示。

Agent程序从设备中抽取出来的数据如果没有MIB的匹配,就是一组毫无意义的数据,MIB会按照事先制定好的规则,把这些数据按照它们各自的去处分别“入库保存”。

举个例子:我们希望查看服务器收到了多少个ICMP的请求,通过上面的树状图一步一步向下寻找,那么变量1.3.6.1.2.5.1中就保存了ICMP请求的数量。图3-3 MIB结构树

下面该轮到SNMP Server工作了,用户给Cacti系统发出请求,需要查看某一设备的工作状态,Cacti将请求解析,然后控制SNMP Server程序,让它去找指定的SNMP Agent的程序。

下面是服务器与客户端之间的一组对话。“HP DL380服务器上的Agent你好!我是Cacti Server上运行的SNMP管理控制程序,我现在是通过poller程序在跟你讲话,我需要你这台机器上的CPU负载数据,你传递给我一下!”“Hi!SNMP管理端你好!数据都在MIB库中,你可以直接获取到。还记得我们约定好的MIB变量规则吧?”“Hi!当然不会忘记啦,这不是国际通用的标准么,自然记得,哦!对了,用户还希望MIB中的数据可以每5分钟更新一下,辛苦啦!”“愿意效劳,我会每5分钟到CPU中取数据,Poller程序可以每5分钟触发你一下过来到MIB中读取。”“Deal!”

通过这么一个流程,SNMP Server取到的数据通过Cacti的加工组织和RRDTool的精美包装,就可以呈现在用户面前了。

3.2 存储流程

当数据通过SNMP或者脚本查询的方式被Cacti系统获取之后,这些数据会分门别类地存储,Cacti的工作流程就进入数据存储这一步骤。在Cacti系统中,数据一般会分为两种,一种是监控指标的数据,它们以普通文件的方式(rra文件)存储在文件系统中,另一种是系统必备的元数据,它们以结构化数据的方式存储在数据库中。下面分别介绍这两种数据是如何存储的。

3.2.1 RRDTool存储方式

在前面章节已经介绍了RRDTool基本知识,RRDTool的存储方式,也很有必要学习。RRDTool的存储方式比较有意思,简单来说,可以将这种存储方式比喻成一个圆钟,数据存储的时间节点就是圆钟上的分钟刻度,圆钟的箭头就好像读取数据的方式,它日复一日,年复一年地不断转动,没有起点和终点,指针可以一直往下走下去。每转动一圈,所有存储了数据的时间节点都会被重用,该循环过程会自动刷新原来的位置。这样的设计可以使存储的数据集不会增大,并且维护起来非常简单。

通过一个形象的例子说明RRDTool的数据存储原理。假设有一个设备需要监控,姑且叫做A设备,A设备运行起来之后会有很多描述运行状态的数据,我们把它想象成一个大型的数据池。RRDTool的工作就是要按照用户的要求获取指定的数据并保存起来。假设需要RRDTool以3种方式来读取数据,即每5分钟采集一次数据、每20分钟(4个5分钟)采集一次数据和每一小时(12个5分钟)采集一次数据。

在3-4图中,RRDTool会每5分钟采集一次数据,并保存在一个rra文件中,当运行到20分钟时,以每5分钟采集一次数据的方式进行到了第4次,这一次的数据不仅会被每5分钟采集数据的策略存储下来,同时它作为一个每20分钟采集数据策略的第一个数据存储下来。以此类推,当每5分钟采集数据进行了12次之后,第一个每小时采集数据的策略也会记录它的第一个数据。图3-4 RRDTool数据存储原理

从这个过程中不难发现,对于采集同一指标的数据,RRDTool可以按照时间策略存储多个rra数据文件,并且rra文件采用固定大小来存储,当数据写满之后,之前写过的位置会被系统重用写入新的数据。

3.2.2 数据库存储方式

数据库存储通常用来保存Cacti系统必备的元数据内容,那么什么是元数据呢?简单来说就是“描述数据的数据”(data about data)。其中,后一个data是指被描述的信息资源,前一个data则是指为理解该信息资源而存储的有关信息,即元数据。例如,一组数据“15,26,31,15”,如果没有元数据对它进行描述,这一组数据就毫无意义,假如有一组元数据将它描述为“今天夜间的最低气温,明天白天的最高气温,一周之内的最高气温,一周之内的最低气温”,那么前面的4个数字变成了表达天气的数据,就变得有意义了。如果我们换一组元数据为“停车场1楼的空车位,停车场2楼的空车位,停车场3楼的空车位,停车场4楼的空车位”,则这一组数字就变成了描述空车位的数据。这就是元数据的作用。

Cacti系统将元数据保存在MySQL数据库中,通过关系型数据结构的方式存储。通过查看其中一个数据库来了解Cacti数据库的表结构存储了哪些元数据信息。如表3-1所示,“plugin_confg”数据库的主要作用是存储用来描述Cacti插件的基本信息。从字段注释,不难看出Cacti数据库的主要作用就是存储描述Cacti系统的各种元数据。表3-1 Cacti数据库表的分析

附录完整呈现了Cacti数据库的结构,这里为节省篇幅不再赘述。

3.3 数据可视化流程

数据可视化是最终呈现监控结果的重要一环,Cacti的最终任务就是将数据进行可视化展现。当系统完成数据的检索与存储之后,Cacti通常会使用RRDTool内置的绘图工具来绘制图表。

进入Cacti的“图形管理”界面,可以使用调试模式查看绘制图形的执行命令,如图3-5所示。图3-5 RRDTool绘图命令

这段语句的主要作用见配置脚本3-1中的注释。配置脚本3-1 SNMP查询的XML脚本头信息

从上述一段RRDTool绘制图形语句的解释不难看出,Cacti绘制图形的过程为:首先按照用户设置好的图形格式(字体、高度、宽度、X轴度量单位、Y轴度量单位等)画图,同时找到数据的来源文件(rra文件),按照用户的要求(绘制当前数据、绘制平均值数据等)来展现图形。

结合前面的内容,不难看出Cacti的工作流程大致如下:

Cacti首先通过自身的Poller程序查询和获取监控设备的各项监控指标数据,有的数据通过标准的SNMP,有的通过标准的OID号码,有的通过用户编写的脚本程序来收集,当数据收集回到Cacti系统时,Cacti一方面将元数据存储在MySQL数据库中,另一方面对于监控指标的采集数据方式,会根据RRDTool存储的默认方式进行保存,这样一来,就可以在安装路径中的rra文件夹中找到相应的数据文件。当数据保存之后,RRDTool可以根据用户的需要执行Graph画图命令,加入相应的绘图参数,即可按照用户的要求将图形呈现出来。

3.4 本章小结

通过本章的介绍,我们了解了Cacti系统的工作流程。Cacti的工作流程分为数据检索、数据存储、数据可视化三个环节。数据检索负责将数据按照指定的时间、频度、执行方式来查询和获取监控设备的指标数据。数据存储负责保存Poller程序收集回来的数据,元数据保存在MySQL数据库中,监控的数据保存在rra文件中,方便RRDTool工具后续绘图使用。数据可视化的主要任务是将监控数据和指标以一定的格式绘制出来,它借助RRDTool工具中的Graph画图命令来完成该工作。当然在实际使用过程中我们发现,Cacti提供了多种辅助功能来帮助用户方便快速地完成工作流程。

本章分为三大部分进行叙述。第一部分针对检索流程,主要介绍SNMP获取数据的方式,包括Server端与Agent端如何进行通信,数据如何被存储到MIB库当中,以及如何定位一组设备的数据,等等。第二部分介绍存储流程,RRDTool是非常重要的存储数据的组件之一,这部分内容介绍RRDTool如何存储数据,如何以一种循坏周期性存储的方式来不断重写原先位置。另外,针对元数据的存储,分析一个实际保存在MySQL数据库中的表格,讨论每一个字段的意义,当然要想把所有的数据库表结构都如此分析一遍,工作量太大,将在附录中把Cacti的表结构呈献给大家。第三部分介绍了数据可视化流程,以一段实际的绘制图形的例子来说明Cacti如何利用RRDTool工具进行绘图,及其图形格式、设计相关的参数设置。

本章提到了MIB库,本期的IT讲堂就详细介绍MIB库的由来和内部结构。

IT讲堂

MIB库提到MIB库,就不得不提SNMP,本书已经多次介绍了SNMP的相关内容,这里再简单解释一下。SNMP(简单网络管理协议)是目前在IT行业中使用最为广泛的网络管理协议,该协议是基于TCP/IP协议的网络管理标准,它包括协议自身、数据库的定义等。用于构成TCP/IP网络管理的网络管理模型的4个关键性部件是SNMP协议自身、SNMP管理服务器、SNMP代理和SNMP的MIB库。MIB库(管理信息库)存放了被监控对象资源的所有信息,并且是通过网络管理协议可以访问的信息。这些信息更具体地理解为网管中的被管资源,而网络管理中的资源以对象来表示,每一个对象表示被管资源某一方面的属性,这些对象的集合形成管理信息库。MIB库可以形象地理解为一组抽屉或一棵大树,我们用大树来举例子。MIB树的根节点没有名字或编号,但是它有下面3个子树:ISO(1),由ISO(国际标准组织)管理;CCITT(2),由CCITT(国际电报电话咨询委员会)管理;ISO/CCITT(3),由ISO和CCITT共同管理。以ISO(1)节点为例,如图3-6所示。图3-6 MIB树结构图在节点下有一些延伸出来的子树,其中包括ISO为其他组织定义的子树ORG(3)。该子树其中一个比较值得引起注意的特殊节点是美国国防部使用的节点:DOD(6),所有通过DOD的协议,如TCP/IP通信的设备,所有需要获取这些设备的信息都位于该子树下,它的完整对象标识符是1.3.6.1。该对象标识符被称为INTERNET。图3-6为MIB树的上层结构。其中Directory(1)子树保留将来使用,Mgmt(2)子树包含关于DOD协议的管理信息,目前该子树中的对象是最广泛的。其中对象标识符1.3.6.1.2.1已被MIB-II所取代。Experimental(3)子树是实验协议和MIB开发通常使用的子树,该子树下的所有对象标识符都以整数1.3.6.1.3开始。Private(4)子树用来指定单方面定义的对象,该子树中网络管理系统访问最多的是Enterprises(1)节点。该节点下的每个子树都分配给一个固定的企业,但企业必须先向IAB登记注册厂商代码,然后就可以在该代码下创建属于厂商自己的对象。RFC2013标准中存在很多管理对象,其中常用的管理对象如表3-2所示。表3-2 MIB常用管理对象

第4章 Cacti的基础界面

前一章遍历了Cacti的数据结构和数据内容,这些数据通过Cacti提供的各种功能来为大家服务,那么Cacti的功能细节都有哪些?本章将会给大家一个满意的答案。本章主要介绍Cacti的基础环境界面,它主要分为两个部分,即两个页签,控制台页签和图形窗页签。

本章的内容按照左侧树状菜单节点的顺序来一一介绍。

4.1 控制台

我们几乎要在控制台页签完成Cacti的所有配置工作。它是Cacti呈现给用户的最主要的页面,如图4-1所示。图4-1 Cacti的控制台页签

想用好Cacti系统,熟练操作控制台是非常必要的,下面就来看看控制台都包含了哪些内容,这些内容的主要作用是什么,它们会在哪些场景下帮助我们完成工作。

4.1.1 新建图形

点击控制台页签中的新建图形节点,主界面跳转到如图4-2所示的配置页面。图4-2 新建图形的配置页面

其中在主机栏的下拉菜单中列出目前系统中存在的所有受监控设备主机,用户也可以点击界面右上角的“Create New Host”选项来添加设备主机。同时,“Edit this Host”选项的功能是编辑下拉菜单中选定的设备主机。当点击这两个按钮之后,系统自动跳转到设备管理的页签,4.1.5节会有此部分的功能介绍。

选定需要绘制图形的设备主机之后,还需要选定图形的模板,在下拉菜单中选择相应的模板。在数据查询部分,可以配置需要监控设备主机的哪些数据,如图4-2所示,新建的图形监控本地设备主机的三个挂载磁盘。

配置好后,点击“Create”按钮,完成新建图形的工作。

4.1.2 图形管理

图形管理节点很重要,它提供了大量处理监控数据绘制出的图形的功能。首先,点击左侧树状菜单栏中的“Management”→“Graph Management”,主界面跳转到如图4-3所示的界面。

该界面上方是针对系统中的图形进行检索过滤的搜索对话框,Cacti可以针对主机设备、图形模板、关键字进行过滤和检索,还可以调整每页的显示行数。图4-3 图形管理的配置界面

下面是目前已有的图形汇总列表,包括系统默认创建的图形以及这些图形对应的模板名称、图形大小等。

在下方的“Choose an action”下拉菜单(见图4-4)中,可以对图形进行删除、改变图形对应的图形模板和监控主机设备、重新使用系统推荐的图形名称、改变图形的大小、复制图形、转换图形模板,以及将指定的图形加入建立的图形树结构中等操作。

返回左侧的树状菜单栏,点击“Graph Management”节点,系统弹出图形管理的二级菜单,该二级菜单有3个配置节点,页面会将这一级节点展开,如图4-5所示。图4-4 可以对图形进行的操作列表图4-5 图形管理的二级菜单内容

1.CDEFs

CDEFs(Calculation Defnes):简单介绍一下,你只需要知道这是一个Cacti系统中的绘图增强型功能,这个节点存储了用户需要自定义绘图方式的模板。CDEFs的配置界面如图4-6所示。图4-6 CDEFs的配置界面

2.Colors

Colors存储绘图所需的颜色代码,如图4-7所示。图4-7 图形颜色及其对应代码

3.GPRINT Presets

和CDEFs的功能一样,GPRINT Presets是Cacti的一个增强型功能,如图4-8所示。用户只需要记住,这里存放了有关GPRINT功能的绘图模板即可。图4-8 GPRINT功能的配置界面

4.1.3 图形树菜单管理

图形树是一种以分级分层的方式把图形组织起来的菜单形式,每个图都属于从图形树的根节点开始不断分支扩展的节点。这样做的好处是可以由一个图形树绘制出一个非常完整的组织结构,使人一目了然。图形树的配置界面如图4-9所示。

下面我们就尝试一下图形树菜单管理的功能,一起来吧!

1.创建新的图形树

如图4-9所示,选择左侧树状菜单栏中的“Management”→“Graph Trees”节点,浏览器的主界面显示目前用户创建的图形树结构。

点击右上角的“Add”按钮,页面跳转到对新分支的配置界面,如图4-10所示。图4-9 图形树的配置主界面图4-10 创建图形树的新分支

输入节点的名称,这里输入“Data Center 1”作为第一个数据中心图形节点,接下来可以看到目前Cacti支持的4种排序类型。

‰‰Manual Ordering(No Sorting):可以按照自己的需要随意对图形进行排序。

‰‰Alphabetical Ordering:所有子树都按字母顺序排序,如果不希望在子树中按照字母顺序排序,则可以在建立子树时配置。

‰‰Natural Ordering:自然排序,例如,Test01、Test11、Test21、Test31。

‰‰Numeric Ordering:按数字排序,例如,01、02、07、09。

这里选择“Manual Ordering(No Sorting)”,点击“Create”按钮,页面跳转到如图4-11所示的页面。图4-11 图形树的保存页面

提示已经保存成功。点击“Save”按钮。

点击左侧树状菜单栏中的“Management”→“Graph Trees”节点,如图4-12所示,可以看到,“Data Center 1”图形节点创建成功。图4-12 增加新节点的图形树管理菜单

2.创建子树

前面介绍了如何在图形树的根节点创建一个树,那么子树该如何创建呢?非常简单,我们之前不是创建了一个叫作“Data Center 1”的树么?

点击树“Data Center 1”,页面跳转到如图4-13所示的页面。图4-13“Data Center 1”树节点的管理页面

点击“Tree Item”右边的“Add”按钮,如图4-14所示。图4-14 增加子树的配置页面

在该界面,可以设置以下3个类型的节点。

‰‰Header:子树的空节点,本身没有什么实际意义,就是一个分级的节点标识,可以为它指定名称。

‰‰Graph:图形节点,这通常是实际存放监控图形的节点。

‰‰Host:主机设备节点,这是对于一个主机的节点。

通过这3个类型的节点,可以非常明确地规划数据中心的组织结构。例如,希望分别监控本地主机的计算资源负载、网络资源负载和磁盘IO负载,就可以将这个节点进行如图4-15所示的规划。图4-15 自定义的图形树规划

3.删除节点

如果希望删除节点,可以在图形树的编辑窗口,点击右边的小红叉,页面跳转到如图4-16所示的页面。图4-16 删除图形树节点的页面

点击“Delete”按钮,即可将节点删除。

需要注意的是,可以直接在上一级节点删除,但如果删除了上一级节点,那么这级节点下包含的所有节点都会被一并删除,所以在执行这类操作时一定要慎重。

4.1.4 数据源管理

数据源在Cacti系统中,可以想象成是一个容器,它保存了用户按照不同方式采集到的监控数据,它是Cacti进行数据可视化操作的来源。简单地说,Cacti进行系统的监控一定要采集大量的数据,而数据需要一个存放的地方,这个地方就叫作数据源。数据源的配置界面如图4-17所示。图4-17 数据源的配置界面

该界面上方是针对系统中的图形进行检索过滤的搜索界面,Cacti可以针对主机设备、图形模板、数据输入方式、关键字进行过滤和检索,还可以调整每页的显示行数。

下方是目前已有的数据源汇总,包括系统默认创建的数据源以及这些数据源对应的数据输入方式、轮询时间等信息。

图4-18为可以对数据源进行的操作。

在数据源的菜单节点下方,保存着一个名为“RRAs”的二级菜单,其配置界面如图4-19所示。图4-18 数据源的操作列表图4-19“RRAs”菜单的配置界面

在该界面中,可以看到针对这个“数据容器”进行的配置,系统默认创建5个按照不同轮询时间划分的rra文件。Cacti就是根据用户指定的策略将设备主机的监控数据保存到rra文件中。

4.1.5 设备管理

设备管理节点是Cacti对设备主机进行配置管理的主要页面,设备管理主配置页面如图4-20所示。图4-20 设备管理主配置页面

主配置页面上方是设备主机的检索过滤器,Cacti支持的过滤条件有设备主机类型、设备主机状态、关键字的检索过滤,同时支持调整每页显示设备主机的行数。

主配置页面的下方是设备主机的列表,包括设备主机的描述名称、ID等关键信息。

下面通过设备管理节点添加一个主机设备,点击图4-20右上角的“Add”按钮,弹出添加设备主机的页面,下面分别介绍每个部分的配置内容。

1.设备主机通用配置

设备主机的一些通用配置如图4-21所示。图4-21 设备主机的通用配置

‰‰Description:设备主机的描述信息,也是监控设备设置的主机名称。

‰‰Hostname:设备主机的名称,在这里输入需要监控设备的IP地址或者机器名(如果输入机器名,则需要DNS服务器的支持)。

‰‰Host Template:关联的主机模板,如果关联了主机模板,则该主机模板关联的图形模板和数据查询模板会自动加载到设置的设备主机上。

‰‰Number of Collection Threads:设备采集需要运行的线程数,此设置仅支持在Spine组件进行数据采集的场景下。

‰‰Disable Host:是否禁用主机,如果勾选了该项配置,则主机被禁用。

2.可用性配置

判断设备主机可用性的配置如图4-22所示。图4-22 设备主机的可用性配置

‰‰Downed Device Detection:判断设备主机是否死机的检测方式,Cacti仅支持“Ping”模式下的判断。当然,如果选择了“None”,下面的选项就自动失效了。

‰‰Ping Timeout Value:Ping超时值,设置“ICMP Ping”和

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载