Chinaunix首页 | 论坛 | 博客
  • 博客访问: 146886
  • 博文数量: 70
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 770
  • 用 户 组: 普通用户
  • 注册时间: 2017-11-04 11:19
文章分类

全部博文(70)

文章存档

2018年(69)

2016年(1)

我的朋友

分类: LINUX

2018-09-11 09:18:00

监控系统,是运维工程师和研发工程师的眼睛。它帮助工程师在第一时间发现网站的问题。

服务器的整个生命周期,都要和监控系统打交道。服务器上架,需要加入基础监控,比如CPU负载、内存等等;当服务器上开始跑应用时,需要加入对应的应用监控,比如MySQL等;当服务器维护时,又要暂停这些报警,否则你明明在维护MySQL,监控系统还给你报警说MySQL挂了。这些操作,手动去做非常麻烦,需要跟运维的其他系统共同协作,比如CMDB中一台机器上架了,那么监控系统自动加入监控。

 

1、为什么需要监控系统

    在一个IT环境中会存在各种各样的设备,比如硬件设备、软件设备,其系统的构成也是非常复杂的

底层:网络:网路环境(内网环境,外网环境)

      硬件:服务器,存储,网络设备等

 

系统架构: 操作系统:LinuxUnixWindows

           虚拟化:VMwareKVM

           集群:LVSKeepalivedHaProxy

 

上层应用:数据库:MySQLMariaBDOracleSQL Server

          应用软件:NginxApachePHPTomcat

 

多种应用构成复杂的IT业务系统,保证这些资源的正常运转,是一个公司IT部门的职责。而要让这些应用能够稳定地运行,则需要专业IT人员进行设计、架构、维护和调优。在这个过程中,为了及时掌握基础环境和业务应用系统的可用性,需要获取各个组件的运行状态,如CPU的利用率、系统的负载、服务的运行、端口的连通、带宽流量、网站访问状态码等信息。而这一切都离不开监控系统。

 

2、监控系统的实现

    一个监控系统的组成大体可以分为两部分:数据采集部分(客户端)和数据存储分析报警展示部分(服务器端)。这两部分构成了监控系统的基本模型。

数据采集的工作模式可以分为被动模式(服务器端到客户端采集数据)和主动模式(客户端主动上报数据到服务器端)。通常,大多数监控系统应该能同时支持这两种模式。被动模式对服务器的开销比较大,适合小规模的监控环境;主动模式对服务器的开销较小,适合大规模的监控环境。

采集数据的协议方式可以分为两种:专用客户端采集和公用协议采集(SSHTelnet等)。对于采集到的监控数据,可以将其存储到数据库或者文本或者其他方式,具体采用哪一种,应根据实际情况而定。

对于一般的监控环境,被监控的节点不多,产生的数据较少,采用C\S架构就可以,这种架构适合于规模较小、处于同一地域的环境。 Socket  STMP

对于大规模的监控环境,被监控的节点多,且监控类型多,监控产生的数据和网络连接开销会非常的巨大,而且由于跨地域等多种因素影响,需要分布式的解决方案,常见的方式为C\P\SClient\Proxy\Server)架构采用中间代理将大大提高监控服务端的处理速度,从而能支撑构建大型分布式监控的环境。

监控系统更重要的功能是告警和处理事故,这对及时解决问题和故障自愈非常重要。告警的时候,需要考虑到故障的有效汇报和集中汇报,防止出现“告警洪水”(同一类告警信息重复大量地发送)。

 

3、监控系统的开源软件现状

在监控软件中,开源的解决方案有流量监控(Cacti)和性能告警(NagiosZabbix)可供选择,并且每种软件都有自己的特点和功能,各自的侧重点和目标不完全相同,在设计理念和实现方法上也大同小异,但都具有共同的特征,比如:采集数据,分析展示,告警以及简单的故障自动处理。最终都能达到对IT系统服务可用性的一个完全展示。

Cacti(仙人掌)是一套基于PHPMySQLSNMPRRDtool开发的网络流量监测图形分析工具。它通过snmp来获取数据,使用RRDtool绘图,但使用者无需了解RRDtool复制的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、主机设备以及任何一张图,还可以与LDAP结合进行用户认证,同时也能自定义模板,在历史数据的展示监控方面,功能相当不错。Cacti通过添加模块,使不同设备的监控添加具有可复用性,并且具备可自定义绘图的功能,具有强大的运算能力。

Nagios是一个企业级的监控系统,可监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机参数以及服务,同时还提供异常告警通知功能等。Nagios可以运行在LinuxUNIX平台上,同时提供一个可选的基于浏览器的web界面,以方便系统管理人员查看网络状态、各种系统问题,以及日志等。Nagios的功能侧重于监控服务的可用性,能及时跟进触发条件告警。目前,Nagios也占有一定的市场份额,不过Nagios并没有与时俱进,已经不能满足与多变的监控需求,架构的扩展性和使用的便捷性有待增强。

Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent(代理),也可以支持SNMPIPMIJMXTelnetSSH等多种协议,它将采集到的数据存放在数据库中,然后对其进行分析整理,达到条件触发告警。其灵活的扩展性和丰富的功能是其他监控系统所不能比的。相对来说,它的总体功能做得非常优秀。

还有很多监控系统比如OpenTSDBGangliaZenoss CoreGraphiteSmokePingMRTG等等。

 

  1. 监控系统的原理探究

    1)试想一个很小的网站,刚上线也许就只有一个VPS或者一台服务器。随着业务的发展,它逐渐成为一个大型的网站,服务器从一台发展到多台,运维人员从一个发展到多个,业务战线也从一条发展到多条,这时候出现故障的概率就会大大增加。当有一天,你作为该网站的运维人员,你的老板问你为何某个服务不可使用,为何出现故障时,而身为运维人员的你却不知道故障出现在哪里,此时你是不称职的。如果换一个角度,在未发生故障的时候就已经把故障解决了,那你就是幕后英雄。

    监控系统就是在发生故障之前,监控系统中会隐约显现故障的前期迹象,这也适用于其他事物,任何事物的发生必有其原因和条件。有经验的人会从这小小的迹象中发现更大的问题,例如,突发的流量增长,突发的访问量增大,某台服务器的瞬间负载变高,都表明了即将出现异常情况。对出现的故障,能及时通知告警和故障的自动修复,对运维人员响应处理故障的速度会大大加快,甚至在异常严重的故障情况下,对及时采用应急预案,有不可或缺的作用。如果没有监控,故障的反馈往往来自用户的报告,然后才由运维人员处理。

     

  1. 监控系统的实现

    监控系统往往需要对物理硬件和软件的性能和参数进行数据汇集,实现集中管理和统一分析。在一个监控系统中,构成要素为监控服务器端程序、数据存储、被采集节点等相关模块,其告警分析和自动故障处理功能有服务器端执行。在数据采集完成之后,需要对采集到的数据进行分析和处理,判断是否有异常,是否属于告警条件。告警条件如何设置呢?通常是根据实际的经验值、业务的需求来设置告警阈值。达到告警条件时,则发送告警信息给管理人员,然而,对于有些故障,我们希望程序能自动处理,减少人工干预,让程序自动修复,只在出现严重故障、程序无法判断的时候,才告警通知管理人员处理。

    一个监控系统往往需要集成资产管理,可以从逻辑上展示业务和功能的信息,通过对其进行数据分析,做到对投资与回报的一个反馈展示,为资产的合理规划与使用提供了依据。从其工作模式来看,监控系统的数据采集可以分为两种:主动监控和被动监控,一个理想的监控系统,其采集端支持的采集方式越多,其扩张能力越强大,适用的环境场合越多。

    监控系统需要提供一个API,方便其他功能系统对监控数据进行操作管理,这在业务系统精密的情况下显得特别重要,通常能对外提供API功能的软件,其用户群会更广,产品会越做越好。API一般可以分为SOAPRESTful等形式,数据类型有JSONXML等多种。

    常见的监控系统性能采集指标:

监控项目

详细内容

主机监控

CPU、内存磁盘的剩余空间、利用率、I/OSWAP使用率、系统UP时间、进程数、负载

网卡监控

Ping的往返时间及包成功率、网卡流量,包括流入/流出量和错误的数据包数

文件监控

监控文件大小,Hash值,匹配查询、字符串存在于否

URL监控

监测指定URL访问过程中的返回码、下载时间及文件大小,支持内容匹配

应用程序

端口和内存使用率、CPU使用率、服务状态、请求数、并发连接数、消息队列的字节数、Client事务处理数、Service状态等

数据库

监测数据库中指定的表空间、数据库的游标数、Session数、事务数、死锁数、缓冲池命中率、库Cache命中率、当前连接数、进程的内存利用率等性能参数

日志

错误日志匹配、特定字符串匹配

硬件

温度、风扇转速、电压等

 

  1. 监控系统对时间的要求

    监控系统需要根据实际应用的需求,实时/非实时地采集和展示数据。另外,包括历史趋势数据的展示和分析,以及容量报表、可用性报告的生成。

  2. 监控系统的告警需求

        支持多种方式,如短信、邮件和其他接口。具备可定制化功能,对第三方告警介质提供可编程接口。这一点在很多场合非常重要。支持对告警内容的分析自动处理,防止误报、漏报,以及防止抖动。这一点对大多数监控系统都是一个值得挑战和研究的课题。

     

       简而言之,监控数据的采集、存储、分析和故障报告是每个监控系统的基本功能,其他复杂的附加功能则是监控系统的增值业务。






zabbix安装:


[root@localhost ~]# yum install -y gcc mysql-server mysql-devel libcurl-devel net-snmp-devel php php-gd php-xml php-mysql php-mbstring php-bcmath httpd


[root@localhost ~]# rpm -ivh php-bcmath-5.3.3-3.el6_2.5.x86_64.rpm --nodeps


[root@localhost ~]# rpm -ivh php-mbstring-5.3.3-3.el6_2.5.x86_64.rpm --nodeps


[root@localhost ~]# tar -zxvf zabbix-2.2.6.tar.gz -C /usr/src/


[root@localhost ~]# cd /usr/src/zabbix-2.2.6/


[root@localhost zabbix-2.2.6]# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-net-snmp --with-libcurl --enable-proxy --with-mysql=/usr/bin/mysql_config && make && make install


[root@localhost zabbix-2.2.6]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/


[root@localhost zabbix-2.2.6]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/


[root@localhost ~]# useradd zabbix


[root@localhost zabbix-2.2.6]# vim /etc/services


zabbix-agent    10050/tcp               # Zabbix Agent


zabbix-agent    10050/udp               # Zabbix Agent


zabbix-trapper  10051/tcp               # Zabbix Trapper


zabbix-trapper  10051/udp               # Zabbix Trapper


 


[root@localhost zabbix-2.2.6]# vim /usr/local/zabbix/etc/zabbix_server.conf


DBName=zabbix                    //修改数据库的名称


DBUser=zabbix                      //数据库用户名称


DBPassword=123.com                //登陆数据库的密码


ListenIP=127.0.0.1                   //数据库的IP地址


AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts       //zabbix相关脚本的路径


 


[root@localhost zabbix-2.2.6]# vim /usr/local/zabbix/etc/zabbix_agentd.conf


Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/


UnsafeUserParameters=1                           //用户认证


 


[root@localhost~]# cp /usr/src/zabbix-2.2.6/misc/init.d/fedora/core/zabbix_agentd  /etc/init.d/


[root@localhost ~]# cp /usr/src/zabbix-2.2.6/misc/init.d/fedora/core/zabbix_server /etc/init.d/


[root@localhost ~]# vim /etc/init.d/zabbix_server


BASEDIR=/usr/local/zabbix


[root@localhost ~]# vim /etc/init.d/zabbix_agentd


BASEDIR=/usr/local/zabbix


[root@localhost ~]# chmod +x /etc/init.d/zabbix_agentd


[root@localhost ~]# chmod +x /etc/init.d/zabbix_server


[root@localhost ~]# /etc/init.d/zabbix_agentd start


Starting zabbix_agentd:                              [确定]


[root@localhost ~]# /etc/init.d/zabbix_server start


Starting zabbix_server:                              [确定]


[root@localhost ~]# chkconfig --add zabbix_agentd


[root@localhost ~]# chkconfig zabbix_agentd on


[root@localhost ~]# chkconfig --add zabbix_server


[root@localhost ~]# chkconfig zabbix_server on


 


  1. 配置mysql

    [root@localhost ~]# service mysqld restart

    [root@localhost ~]# chkconfig --add mysqld

    [root@localhost ~]# chkconfig mysqld on

    [root@localhost ~]# mysqladmin -u root password '123.com'

    [root@localhost ~]# mysql -u root -p

    mysql> create database zabbix default character set utf8;

    Query OK, 1 row affected (0.00 sec)

    mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '123.com';

    Query OK, 0 rows affected (0.00 sec)

    mysql> flush privileges;

    Query OK, 0 rows affected (0.00 sec)

     

    [root@localhost ~]# mysql -u zabbix -p zabbix < /usr/src/zabbix-2.2.6/database/mysql/schema.sql

    [root@localhost ~]# mysql -u zabbix -p zabbix < /usr/src/zabbix-2.2.6/database/mysql/images.sql

    [root@localhost ~]# mysql -u zabbix -p zabbix < /usr/src/zabbix-2.2.6/database/mysql/data.sql

    [root@localhost ~]# mysql -u root -p123.com

     

  2. 配置PHP

    [root@localhost ~]# vim /etc/php.ini

    max_execution_time = 300         //每个脚本的最大执行时间,默认单位为秒

    max_input_time = 300            //每个脚本可能花在解析请求数据上的最长时间

    post_max_size = 16M            //PHP将接受的POST数据的最大大小。

    date.timezone =Asia/Shanghai     //定义日期函数使用的默认时区

     

    [root@localhost ~]# vim /etc/httpd/conf/httpd.conf

    DirectoryIndex index.php index.html index.html.var

     

    [root@localhost ~]# cp -r /usr/src/zabbix-2.2.6/frontends/php/ /var/www/html/zabbix

    [root@localhost ~]# chown -R apache.apache /var/www/html/zabbix/

    [root@localhost ~]# service httpd restart

    [root@localhost ~]# chkconfig --add httpd

    [root@localhost ~]# chkconfig httpd on

    [root@localhost ~]# firefox

     



阅读(1764) | 评论(0) | 转发(0) |
0

上一篇:9.7任务(LVS的DR模式以及keepalived+LVS)

下一篇:没有了

给主人留下些什么吧!~~