Icinga 简单了解

Icinga 简单了解,第1张

近段时间,由于公司服务出现过几次小故障,导致所有用户短暂不能访问,后来开会复盘事故时,领导提出要对主要服务、网络、硬件设施等进行监控,以保证出故障时能第一时间知悉并采取针对性的措施,而不是各方盲目排查定位原因。于是,运维的同事根据对公司其他服务的监控经验,向我们介绍了 Icinga 这套监控系统。

为了有个直观的认识,下面先直接上图。

从效果图可以大致看出来,通过 Icinga 我们可以得到服务器主机、服务等监控信息,如果有异常,会有特殊事件显示详细的信息,并可以添加备注、发送提醒、手工重新检查等 *** 作。

作为程序员,看到一个新系统,肯定会去想它是怎么实现的。非常幸运的是, Icinga 是一个开源系统,我们可以自由查看它的实现方式。为了学习它,我 ssh 连上测试环境,查看了一下这个项目的部署目录,主要看它的配置文件都有什么东西,数据是保存在哪的,还有启动命令执行时带了哪些命令参数 。

通过 locate icinga 命令,我找到了这个目录 “/etc/icinga2”,cd 进去后,在该目录及其子目录下看到了一堆 ".conf" 后缀的配置文件,有 init.conf, icinga2.conf, hosts.conf, services.conf, … 等等。其实如果对开源项目看得比较多,或者是开发经验比较丰富的话,基本上从配置文件的名称就能猜到文件里的内容是哪方面的了,这时候我们就需要对自己感兴趣的配置文件一探究竟了。不得不佩服做开源软件的大神们,各种配置项都有较详细的文字说明,让我们大概清楚这个配置项有什么作用。由于配置文件比较多,而且配置文件之间是有依赖关系的,当我看到某些配置项引用的变量在当前文件找不到的时候,我便用 grep 命令搜索多个配置文件,找到它出现的原始位置,然后再看它的注释说明,这样便能把配置串联起来了。遇到一些不明白的关键字,当然是要请 Google 大神出马了,还有就是官方的文档说明,各种方法配合着来,总能有收获的。

在看配置文件时,我发现有些服务配置是引用了内置的服务,或者是引入了外置的插件实现。原来 Icinga 是兼容另一个监控系统 nagios 的大部分插件的,网上说 Icinga 的作者原来就是 nagios 项目的开发人员,因此,站在成熟的项目肩膀上,Icinga 得以快速发展壮大。

而要实现自己的自定义监控服务,我们可以通过配置 services.conf,调用内置的功能或像示例一样引入丰富的插件。而像我们对应用内的业务监控,则可能需要在应用内提供接口,把监控逻辑写在业务接口里,再在 Icinga 系统里配置服务请求接口。

除了看到的监控告警数据,从公司部署的测试环境上,我们还可以看到一些配置管理、权限控制的菜单。出于好奇,自然要去看看这些菜单都提供了什么功能。可以看到,Icinga web 2 项目具备了一个后台管理系统应用的基础功能,如角色管理、权限管理、用户管理等,还可以配置数据源,启用或禁用某些模块,配置服务监控的主动、被动方式和监控间隔,告警方式等等。

我们现在看到的是 Icinga web 2 项目的效果图,那如果要把这些功能集成到已有的管理后台上做展示该怎么办呢?一个方法是用 iframe 在管理后台的页面上嵌入 Icinga web 2 的页面,这样做的好处是页面是现成的,只需要简单集成,缺点是两套页面风格不能保持统一体验,权限不好管理。另一个方案是直接调用 Icinga 的接口获取数据。Icinga 提供了 RESTful 的API,只需要后端程序用一个固定的身份账号去取数据,封装一层后可以增加权限控制、自定义提醒等逻辑,实现比较灵活,页面也可以用已有的组件和风格,完美集成。当然,缺点也比较明显,要封装调用API,并重新开发页面。

以上就是我今天花了一个多小时了解了 Icinga 系统后所想到的,在接下来的项目应用中,我应该更多是关注它提供的 RESTful API,结合我们项目和公司的实际情况去搭建一套实用的监控系统。Bug 是不可避免的,那就让我们在 bug 出现时就知道它的存在,迅速解决它吧。

Icinga1.8.4中文版安装记录

一.系统环境

*** 作系统是Centos 6.4 64位版本,以前的一个基本不用的服务器,机器内存2G,硬盘250G.

安装系统比较简单,我是用PXE安装的,安装组件选择最小化服务器方式,其他需要的软件通过yum安装.

二.软件下载

Icinga中文版在http://sourceforge.net/projects/icinga-cn/files/?source=navbar下载,我下载的是集成pnp4的版本,可以用Icinga收集到的数据用rrd作图并显示.另外,还需要下载对应的Plugins的包,这个是Icinga监控/检查必须用到的.没有Plugins,Icinga就是空架子.这个有过安装Nagios的童鞋应该都知道.

三.软件安装

3.1 系统必要组件

a.编译需要用到的工具,类库

yum install gcc glibc glibc-common gd gd-devel

yum install libjpeg libjpeg-devel libpng libpng-devel

yum install rrdtool rrdtool-devel perl-rrdtool perl perl-devel

b.LAMP套件

yum install httpd mysql mysql-server libdbi libdbi-devel libdbi-drivers libdbi-dbd-mysql php php-gd php-mysql

php组件可以根据需要自行添加需要的扩展,毕竟只是为了Icinga这一个服务安装一台机器,有点浪费.

3.2 开始安装Icinga

a.创建Icinga用户以及用户组.

/usr/sbin/groupadd icinga

/usr/sbin/useradd -m icinga

passwd icinga

/usr/sbin/usermod -a -G icinga apache

b.解压下载的icinga-pnp4-cn-1.8.4.tar.bz2,然后进入解压的目录,执行:

./configure --prefix=/usr/local/icinga --with-icinga-user=icinga -with- icinga-group=icinga --with-command-user=icinga --with-command-group=icinga --e nable-idoutils --with-httpd-conf=/etc/httpd/conf.d --enable-nanosleep --enable- event-broker

configure程序会自动检测系统的环境,以及所依赖的包是否都安装上了.没有报错,执行以下 *** 作:

make all

make没有报错,会提示以下一系列make命令,依次执行就可以了.

make install

make install-init

make install-config

make install-eventhandlers

make install-commandmode

make install-idoutils

make install-processperfdata

make install-plugins

上述命令中,最后两条是包含pnp组件的包特有的,如果下载的是不包含pnp的包,可以不用执行.

我用的是中文的1.8.4,可能是汉化作者的疏忽,在make all阶段,有一个小的bug,就是在编译cgi的时候,报错,说没有ruler来编译statuswml.cgi,经过对比英文原版1.8.4cgi目录下的Makefile与中文版的Makefile,查到,在cgi/Makefile里面有一行:

CGIS=avail.cgi cmd.cgi config.cgi extinfo.cgi history.cgi notifications.cgi outages.cgi showlog.cgi status.cgi statusmap.cgi statuswml.cgi summary.cgi tac.cgi $(CGIEXTRAS)

用编辑器修改cgi/Makefile,去掉那行里面的statuswml.cgi,然后重新执行make all,就可以继续了.用英文原版,可以顺利进行.

在icinga官网上提供了一个便捷的make命令,如下

make fullinstall

make install-config

应该也是可以安装上的,不过我没有测试.

编译过程如果一切顺利,Icinga的主程序就安装完成了.用命令

chkconfig --add icinga

chkconfig --add ido2db

chkconfig icinga on

chkconfig ido2db on

让icinga服务在下次服务器启动的时候,自动运行.以后需要启动/关闭Icinga服务的时候,可以通过service icinga [start|stop|restart]来进行,很方便.

c.数据库创建和IDOUtils

idoutils支持mysql,PGsql,Oracle等数据库,默认支持mysql.

启动mysql服务,运行以下命令来创建icinga数据库,并给icinga数据库用户授权.

mysql -u root -p

CREATE DATABASE icinga

GRANT USAGE ON icinga.* TO 'icinga'@'localhost'

IDENTIFIED BY 'icinga'

WITH MAX_QUERIES_PER_HOUR 0

MAX_CONNECTIONS_PER_HOUR 0

MAX_UPDATES_PER_HOUR 0

GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE

ON icinga.* TO 'icinga'@'localhost'

FLUSH PRIVILEGES

quit

其中,2~11步在mysql>提示符下 *** 作,不是在shell提示符下.

然后进入icinga源码目录下的module/idoutils/db/mysql,执行

mysql -u root -p icinga <mysql.sql

来导入数据库.

d.安装插件.

前面说过,没有插件,Icinga只是一个空架子,现在我们来编译安装插件.用tar解压下载得到的icinga(nagios)-cn-plugins-1.4.16.tar.bz2,然后执行以下命令.注意,文件名中的()需要用\(和\)来转义.我是直接先将文件名mv更名之后,用tar解压缩的.

./configure --prefix=/usr/local/icinga --with-cgiurl=/icinga/cgi-bin --with-icinga-user=icinga --with-icinga-group=icinga

make

make install

另外,在icinga中文项目的plugins里面,新增加了一个addplugins-20130428.tar.gz包,里面有很多新的check组件,建议下载,然后解压,进入解压目录之后,因为都是脚本,所以不用configure直接make install就可以了.

安装完成Icinga插件之后,就可以启动apache,ido2db,icinga服务了.

在用浏览器访问icinga之前,用命令

htpasswd -c /usr/local/icinga/etc/htpasswd.users icingaadmin

添加用户web认证用户,命令会提示输入密码,并要求再次输入一次确认.

上述命令执行完成之后,就可以用浏览器访问了.浏览器输入http://yourserverip/icinga,会d出认证对话框,输入htpasswd命令创建的icingaadmin用户名和你的密码,就可以看到Icinga的界面了.

由于默认icinga的配置里面,有一个linux的配置,使用Nrpe来检测的,我这里并没有安装,所以,我将/usr/local/icinga/etc/icinga.cfg里面的cfg_file=/usr/local/icinga/etc/objects/linux.cfg行注释了.重启icinga服务,就可以看到只有一个localhost的主机了.

等待一段数据,icinga会运行一些服务的检测,一切顺利的话,你会看到服务详情里面的服务都是绿色的正常字样.

由于我安装的时候安装的包比较少,localhost里面有一个服务check_iostat报错.经过研究,发现系统里面没安装iostat和bc命令,安装sysstat包和bc包,那个服务就正常了.

在/etc/resolv.conf添加:

blog.mytest.com 127.0.0.1

这样你ping blog.mytest.com就会返回IP地址为127.0.0.1

若果是服务器,你把域名的DNS解析到你的主机就可以了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11698145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存