目录
一、监控平台简介 .
1.1 系统监控需求 .
1.2 监控技术发展过程 .
1.3 常见监控平台比较 . 6
二、Cacti 安装与配置 .
2.1 工作原理 .
2.2 主要软件的版本信息 .
2.3 搭建 LAMP 环境 .
2.4 安装相关插件、库文件与工具 .
2.5 获取 cacti 与 cacti 相关配置 .
2.5 安装 cacti . 2.6cacti 界面介绍 .
三、监控主机 .
3.1Linux 主机 .
3.2 Windows(以 Windwos2012 为例): .
四、实现告警 .
4.1 邮件告警:
4.2 微信告警:
四、cacti 用户权限 .
五、总结 .
一、监控平台简介
1.1 系统监控需求
在互联网的应用中,我们大量的使用网络和服务器来完成项目平台的搭建, 在系统运维过程中,我们需要获取很多网络和服务器运行的信息,比如:网络流 量、主机 CPU 使用率、主机内存使用率、主机磁盘使用率等。这些信息我们可以 通过网络或主机设备上的命令行指令获取,但这样很不方便,尤其是主机和设备 非常多的情况下获取这些信息。想象一下我们管理的是由 1000 多台物理服务器 和 50 多台网络交换或路由设备组成的一个私有云,如果我们需要人工的获取这 些服务器和设备的运行状态、网络流量和服务状态是非常耗时且无法完成的。更 不要说在这 1000 多台物理服务器上运行着 3000 或更多的虚拟服务器,每个服务 器上又运行着相互关联的负责均衡集群、分布式计算集群、分布式存储集群、高 性能计算集群等复杂的应用集群方案。我们必须实时的获取它们的运行状态,并 且分析在过去 1 小时、24 小时、1 周、1 月、1 年的数据变化趋势。我们需要获 取和保持这些数据并且在需要的时候能够方便的展示出它们的可视化视图。
不仅仅是获取实时的运行数据,我们还需要有一套完整的报警机制。在服务 器、网络设备、资源服务、业务逻辑等出现异常的时候可以通过 WEB、邮件、短 信、电话等方式自动化的通知管理人员。这种报警机制必须是可配置的,可以根 据我们系统应用的具体情况做出合理的方案,比如设置 CPU 使用阀值、报告内存 突然的增长、服务器流量异常、应用服务负载异常、集群服务故障迁移等等情况。
随着项目的的推进,我们还需要通过分析记录数据预估出未来可能需要的资 源容量,例如服务器数量是否需要增添及何时增添、网络带宽是否出现瓶颈及何 时增添、应用服务器是否需要平行宽展及何时扩展等等。这些都需要大量且长期 的数据分析支撑,也就是长期有效的系统监控数据支撑。

1.2 监控技术发展过程
最初我们需要监控的仅仅是一个台服务器或几台服务器加一个交换机。这个 时候我们首先想到的是简单网管协议(SNMP),简单网管协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数 据库模型(database schema)和一组资料物件。该协议能够支持网络管理系统, 用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联 网工程工作小组(IETF,Internet Engineering Task Force)定义的 internet 协议簇的一部分。目前 Linux 系统均支持 SNMP 协议,我们可以通过 SNMP 协议获 取主机的 CPU、内存、磁盘、网卡流量等数据。常见的商业交换机基本也支持 SNMP 协议,我们一般通过 MRTG 软件来获取交互机上各个网络接口上的网络数据流量 和交换机状态信息。
获取 SNMP 数据的方法有很多,可以使用脚本将获取的数据存入数据库中, 按我们的需求取出数据绘制图表来分析数据的变化,上面提到的 MRTG 就是其中 一种绘制数据变化图的工具。MRTG(Multi Router Traffic Grapher)最初设计 是为了监控网络链路流量负载,它可以通过 SNMP 协议得到设备的流量信息,并 将流量负载以包含 PNG 格式的图形的 HTML 文档方式显示给用户,以非常直观的 形式显示流量负载,也可以通过 SNMP 或自建脚本得到目标主机的 CPU、内存、 磁盘数据等绘制 PNG 格式的图形。它的特点是配置简单、跨平台、可视化。由于 早期 MRTG 绘制的 PNG 图不够细致,且无法将数据保持到数据库中及时的产生视 图,所以有了 RRDTool 工具。
RRDTool(Round Robin Database Tool)就是一个强大的绘图的引擎,很多工 具例如 MRTG 都可以调用 RRDTool 绘图。RRDTool 最开始的时候是使用自己的环 状数据库(RRD)方式来记录绘图数据的,在后期的发展中可以使用关系型数据 库(RDBMS)例如 Mysql 来记录数据。目前 RRDTool 是所以开源监控系统绘图的 默认工具。在后面的实践中,我们都会安装和使用它作为监控图表绘图工具。
有了数据和数据产生的即时曲线图,我们还需要将这些数据和即时曲线图组 织起来,因为我们要监控的是若干台服务器或网络设备。MRTG 可以将图形组织 起来排布在一个 HTML 页面中,但是不能按类别去区分它们。我们迫切需要一个 可以分类组织图形并且可以按照分类页面的方式展示这些图形的工具。这样的工 具有商业应用的也有开源应用的,其中最著名的应用最广泛的是 Cacti。
Cacti 是一套基于 PHP、MySQL、SNMP 及 RRDTool 开发的监测图形分析工具。 它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、 主机以及任何一张图,还可以与轻量级目录服务(LDAP)结合进行用户验证,同 时也能自己编写模板,功能非常强大完善界面友好。可是随着设备的不断增多, Cacti 的运行机制就不能满足我们的需求了。Cacti 是使用轮询的方式由主服务 器向设备发送数据请求来获取设备上状态数据信息的,如果设备不断增多,这个 轮询的过程就非常的耗时,轮询的结果就不能及时的反应设备的状态了。
Cacti 监控关注的是对数据的展示,却不关注数据异常后的反馈。如果凌晨
3 点的时候设备的某个数据出现异常,除非监控人员在屏幕前发现这个异常变化, 否则是没有任何报警机制能够让我们知道出现了异常。这个时候我们就需要一种 可以根据我们预设阀值报警的工具。自动化监控报警服务有很多,其中商业应用 比较昂贵且多以硬件为主,开源自动化监控报警服务中最著名的也是应用最广泛 的是 Nagios。
Nagios 是一款开源的免费网络监控报警服务,能有效监控 Windows、Linux 和 Unix 的主机状态,交换机、路由器和防火墙等网络设置,打印机、网络投影、 网络摄像等设备。在系统或服务状态异常时发出邮件或短信报警第一时间通知运 维人员,在状态恢复后发出正常的邮件或短信通知。Nagios 有完善的插件功能, 可以方便的根据应用服务扩展功能。Nagios 可以使用服务-代理(Server-Agent) 方式获取主机信息,也可以使用 SNMP 方式获取设备信息。使用服务器-代理
(Server-Agent)方式在每个主机上运行代理软件,主机上的代理软件主动提交 数据信息,可以避免服务器轮询带来的延迟和非实时性等问题。
Nagios 已经可以支持由数万台服务器或上千台网络设备组成的云技术平台 的监控,它可以充分发挥自动化运维技术特点在设备和人力资源减少成本。只是 Nagios 无法将多个相同应用集群的数据集合起来,也不能监控到集群中特殊节 点的迁移和恢复。一个新的监控服务根据这个需求被设计出来,它就是Ganglia。
Ganglia 是 UCBerkeley 发起的一个开源集群监视项目,设计用于测量数以 千计的节点。Ganglia 的核心包含 gmond、gmetad 以及一个 Web 前端。主要是用来监控系统性能,如:CPU、内存、硬盘利用率,I/O 负载、网络流量情况等, 通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系 统整体性能起到重要作用,目前是监控 HADOOP 的官方推荐服务。
Ganglia 分为服务器端、客户端和一个 Web 前端,其中 gmetad 是服务器端, gmond 是客户端。服务器端只有一个,而被监控服务器均安装客户端。Ganglia 采用 InternetIPv4 类 D 地址中的的组播进行数据请求。gmetad 发送一个请求到 一个组播地址,由于使用组播方式 gmetad 只需发送一次请求包即可完成对所有 gmond 的轮询。然后 gmond 通过这个请求将采集到的数据返回给 gmetad,gmetad 将数据保存在数据库中,通过 RRDTool 绘制图表,然后通过 Web 界面展示分类的 页面。
同时,另一种开源监控工具 Zabbix 也在不断发展。Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。Zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供柔软的通知机制以让 系统管理员快速定位/解决存在的各种问题。Zabbix 由 2 部分构成,Zabbix server 与可选组件 Zabbix agent。
Zabbix server 可以通过 SNMP,Zabbix agent,ping,端口监视等方法提供 对远程服务器/网络状态的监视,数据收集等功能,它可以运行在 Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X 等平台之上。
Zabbix agent 需要安装在被监视的目标服务器上,它主要完成对硬件信息 或与操作系统有关的内存,CPU 等信息的收集。Zabbix agent 可以运行在
Linux ,Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X, Tru64/OSF1, Windows NT4.0, Windows 2000/2003/XP/Vista)等系统之上。
Zabbix server 可以单独监视远程服务器的服务状态;同时也可以与 Zabbix agent 配合,可以轮询 Zabbix agent 主动接收监视数据(trapping 方式),同时 还可被动接收 Zabbix agent 发送的数据(trapping 方式)。
另外 Zabbix server 还支持 SNMP (v1,v2),可以与 SNMP 软件(例如:net-snmp) 等配合使用。
1.3 常见监控平台比较
Cacti 和 Nagios 是不同功用的系统, Nagios 适合监视大量服务器上面的 大批服务是否正常, 重点并不在图形化的监控, 其集成的很多功能例如报警,都 是 Cacti 没有或者很弱的. Cacti 主要用途还是用来收集历史数据和画图, 所 以界面比 nagios 漂亮很多。相比较 Cacti,目前 Zabbix 具有不亚于 Cacti 的 图形表现效果,同时还支持监控报警功能。并且内置的监控模板比 Cacti 要丰 富的多得多。相比较 Nagios, Zabbix 的安装配置要简单的多,利于实现。同 时学习成本也要低得多。在监控性能方面也不亚于 Nagios。但是缺点也很明显, 其需在被监控主机上安装 agent,并且所有数据都存在数据库里, 产生的数据 据很大,瓶颈主要在数据库上。


二、Cacti 安装与配置
2.1 工作原理


2.2 主要软件的版本信息

注:cacti1.0 以上的版本对环境的要求为 mysql5.6 以上,php5.3 以上,如需要强大的密 码认证支持,建议安装 php5.5 以上的版本。

2.3 搭建LAMP 环境
由于 CentOS6.5 自带的 mysql 版本为 5.1,所以为了安装 mysql5.6 需要我们更新 yum 源。 [root@cacti ~]# rpm -ivh
http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
安装相关软件(apache2.2、php5.3):
[root@cacti ~]# yum install httpd php php-fpm php-mysql mysql-server -y
(##如需要安装 apache2.2、php5.6 需要更新 yum 源:
[root@cacti ~]# rpm -ivh http://repo.webtatic.com/yum/el6/latest.rpm
[root@cacti ~]# yum install httpd php56w php56w-mysql php56w-fpm -y) [root@cacti ~]# service httpd start
[root@cacti ~]# service php-fpm start
[root@cacti ~]# service mysqld start
设置开机启动
[root@cacti ~]# chkconfig httpd on
[root@cacti ~]# chkconfig mysqld on
[root@cacti ~]# chkconfig php-fpm on
设置 mysql 的 root 登录密码为 root
[root@cacti ~]# mysqladmin -uroot password 'root'
创建 cacti 库,字符集为 utf8
[root@cacti ~]# mysql -p
mysql> create database cacti default character set utf8; Query OK, 1 row affected (0.00 sec)
授权 cacti 用户可以以密码 cacti 本地访问 cacti 数据库
mysql> grant all privileges on cacti.* to 'cacti'@'localhost' identified by 'cacti'; Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

2.4 安装相关插件、库文件与工具
安装相关库文件
[root@cacti ~]# yum install zlib freetype libjpeg fontconfig gd libxml2 php56w-gd -y
安装、配置与启动 snmp 工具
[root@cacti ~]# yum install net-snmp net-snmp-devel net-snmp-utils -y [root@cacti ~]# vim /etc/snmp/snmpd.conf
首选是定义一个共同体名(community),这里是 public,及可以访问这个 public 的用户名(sec name),这里是 notConfigUser。Public 相当于用户 notConfigUser 的密码,在 source 中填入 监控被监控机器的 IP,这里我们需要监控本机,所以填入 localhost(127.0.0.1 也可)。

定义一个组名(groupName)这里是 notConfigGroup,及组的安全级别,把 notConfigGroup
这个用户加到这个组中。Cacti 使用默认不需要更改。

定义一个可操作的范围(view)名, 这里是 all,范围是 .1

定义 notConfigUser 这个组在 all 这个 view 范围内可做的操作,这时定义了 notConfigure 组的成员可对.1 这个范围做只读操作。

[root@cacti ~]# /etc/init.d/snmpd start [root@cacti ~]# chkconfig snmpd on
安装 rrdtool 工具
[root@cacti ~]# yum install rrdtool rrdtool-devel -y
安装 rrdtool 运行所需的拓展包
[root@cacti ~]# yum -y install cairo-devel libxml2-devel pango-devel perl-devel perl-CPAN
安装新版 cacti 所需的 php 相关插件(cacti1.0 以上版本需要)
[root@cacti ~]# yum install php56w-posix php56w-ldap php56w-mbstring php56w-gd php56w-snmp -y

2.5 获取cacti 与cacti 相关配置
[root@cacti ~]# wget http://www.cacti.net/downloads/cacti-1.0.4.tar.gz
[root@cacti ~]# tar -zxvf cacti-1.0.4.tar.gz
[root@cacti ~]# mv cacti-1.0.4 /var/www/html/cacti [root@cacti ~]# mysql -proot
mysql> use cacti;
Database changed
mysql> source /var/www/html/cacti/cacti.sql
Query OK, 1 row affected (0.00 sec)
……
编辑 cacti 关联数据库的配置
[root@cacti ~]# vim /var/www/html/cacti/include/config.php

添加 cacti 用户,其家目录为/var/www/html/cacti,用户的登录 shell 为/bin/false(最严格的 禁止 login,一切服务均不可用 cacti 用户执行)
[root@cacti ~]# useradd cacti -d /var/www/html/cacti -s /bin/false
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
修改 cacti 目录及文件的权限
[root@cacti ~]# chown -R apache.apache /var/www/html/cacti
[root@cacti ~]# chown -R cacti /var/www/html/cacti/rra
[root@cacti ~]# chown -R cacti /var/www/html/cacti/log
[root@cacti ~]# chown cacti.apache /var/www/html/cacti/scripts/
同步时间,若提示没有 ntpdate 命令,则需要安装相关服务
[root@cacti ~]# ntpdate -s time.windows.com
-bash: ntpdate: command not found
[root@cacti ~]# yum install ntpdate -y
[root@cacti ~]# ntpdate -s time.windows.com
6 Mar 06:54:51 ntpdate[8175]: adjust time server 40.68.115.144 offset -0.065913 sec
写入周期性计划任务 crontab,每日同步一次
[root@cacti ~]# crontab -e

修改 php 时区为亚洲/上海
[root@cacti ~]# vim /etc/php.ini

添加周期性计划任务
[root@cacti /]# crontab -e
poller.php 是 Cacti 获取处理数据的一个工具,又是调用 cmd.php 进行获取的,如果没有 cmd.php,poller.php 就没办法获取数据,poller.php 就是汇总 cmd.php 从被监控端收取到的 数据。poller.php 发出获取数据的通知,告诉 cmd.php 去获取数据,cmd.php 开户多个进程 去获取。但 cmd.php 最短只能 5 分钟执行一次。
此周期性计划任务为每分钟执行一次,不管执行成功与否都将执行结果重定向到/dev/null。
/1 /usr/bin/php /var/www/html/cacti/poller.php > /dev/null 2>&1

[root@cacti /]# service crond restart
Stopping crond: [ OK ] Starting crond: [ OK ]
由于新版的 cacti 增加了在其面板上增加了可以选择时区的功能,所以要求数据库 cacti 用户 必须要能够访问 mysql 库文件中的 time_zone_name 表,否则会出现如下的报错:
ERROR: Your Cacti database login account does not have access to the MySQL TimeZone database. Please provide the Cacti database account "select" access to the "time_zone_name" table in the "mysql" database, and populate MySQL's TimeZone information before proceeding.
同时在需要在 time_zone 中填充值,否则会出现如下报错:
ERROR: Your MySQL TimeZone database is not populated. Please populate this database before proceeding.
授权 cacti 用户本地可以通过 cacti 密码访问 mysql 下的 time_zone_name 表
[root@cacti ~]# mysql -proot
mysql> grant all privileges on mysql.time_zone_name to 'cacti'@'localhost' identified by 'cacti';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
向 time_zone 中填充系统的时区值,可能会出现警告的跳过提示,无须理会。
[root@cacti ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root -p mysql Enter password:
Warning: Unable to load '/usr/share/zoneinfo//iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo//zone.tab' as time zone. Skipping it. 配置数据库的相关参数
[root@cacti ~]# vim /etc/my.cnf


innodb_buffer_pool_size
InnoDB 会尽可能多的控制在系统内存里的表和索。缓冲池是数据和索引缓存的 地方,这个值越大越好,这能保证你在大多数的读取操作时使用的是内存而不是 硬盘。建议设置为 25%的系统总内存。 innodb_additional_mem_pool_size
InnoDB 用来保存数据字典信息和其他内部数据结构的内存池的大小,单位是 byte,参数默认值为 8M。数据库中的表数量越多,参数值应该越大,如果 InnoDB 用完了内存池中的内存,就会从操作系统中分配内存,同时在 error log 中打入 报警信息。
innodb_flush_log_at_timeout
控制 mysql 刷新 数据到磁盘的频率,时间为 s(秒)。设置为大于 1s 可以保证连 续的 I/O。
innodb_read_io_threads
启动的读线程数,多线程可以提高 IO
innodb_write_io_threads
启动的写进程数,多线程可以提高 IO
join_buffer_size
若数据大小小于该值,join 语句的执行产生的数据会保持在内存中,而不写入临 时文件,提高查询效率。
max_connections
设置数据库的最大连接数
max_heap_table_size
这个变量定义了用户可以创建的内存表(memory table)的大小。这个值用来计算 内存表的最大行数值。
max_allowed_packet
允许将数据从主服务器同步到轮询器的醉倒数据包量。
tmp_table_size
执行子查询时,临时表的大小,保持临时表在内存中。 innodb_doublewrite
关闭会降低磁盘性能,增加 50%的开销,但是会提高写速度(默认开启是防止数 据写失效)。
collation_server
mysql 的服务端的字符集设置,默认为 latin,可以不做修改但是可能会影响到 cacti 部分中文的显示。
character_set_client
mysql 的客户端字符集设置。
2.5 安装cacti
通过浏览器 http://ip/cacti,访问 cacti 安装页面。
勾选接受许可协议,点击下一步

Cacti 检测安装环境是否符合其需求。


未发现红色警告,检测通过,点击下一步。选择安装类型,是安装 cacti 主服务器、安装远程轮询服务器还是升级之前的 cacti。我们是安装 cacit 主站,选择’New Primary Server’ 。

Cacti 检测相关工具的路径是否符合要求,选择希望安装的主题,及我们在系统中安装的rrdtool 的版本。选择好以后点击下一步。

Cacti 检测文件的访问权限,没有错误,点击下一步。

模板设置,选择要安装的模板,全部勾选。点击 Next 下一步。

安装成功,会直接进入登录界面。默认用户名:admin,密码:admin

首次登陆会要求修改初始密码,输入当前密码,再输入两次需要设置的密码。
密码要求:
必须至少 8 个字符长度
必须包含大小写混合
必须包含至少 1 个数字
必须包含至少 1 个特殊字符

设置完成进入正式的 cacti 页面。
2.6cacti 界面介绍

进入控制台后,我们可以看到主界面“控制台”,而左侧为一列项目栏。
Creat 新建,主要新建图形
Management 管理,管理设备、地点、树、图形、数据源等
Data Collection 数据收集,设置数据收集器、数据查询及数据输入方法
Templates 模板,管理设备模板、图形模板、数据收集模板等模板的修改及设置
Automation 自动化,主要是自动发现可监控设备的设置,发现后可设置自动或手动添加到
监控列表,可以设置一些发现规则
Presets 预设,可以预设一些值,如阈值的取值、颜色
Import/Export 输入/输出,导入、导出模板
Configuration 配置,cacti 的设置,外部链接管理及插件的管理,其中 Setting(设置)功能比
较多,包括:

General(一般)语言,默认的图形大小、格式设置,rrdtol 版本及自动化开启与关闭
Paths(路径),cacti 监控工具的路径设置
Device Defaults(设备默认设置)
Poller(poller 数据收集的设置)
Data Storage (数据存储设置)
Visual(视觉设置)
Authentication(认证设置)
Data Source Statistics(数据源统计)
Performance(性能)
Spikes(峰值设置)
Mail/Reporting/DNS(邮件、报告、DNS 设置) Utilities(公共设置,设置用户,用户组,域的权限设置)
最上面一列,左边分别为 Console(控制台)、Graphs(图形)、Reporting(报告)与 Cacti Log
(Cacti 日志)。
分别为点击“图形”看到 cacti 默认已经为本地 Linux 服务器创建了基础监控图形。

在点击 Graphs 后,右侧出现三个图标,分别为 Tree View(树视图)、View List(列表视图)、 Preview(预览)。
Cacti 创建的基础的监控为 Memory(内存)、Load Average(平均负载)、Logged in Users(登 录用户)、Processes(进程)。




三、监控主机
3.1Linux 主机
安装了 snmp
[root@linux ~]# yum -y install net-snmp net-snmp-utils net-snmp-libs
[root@linux ~]# vim /etc/snmp/snmpd.conf

[root@linux ~]# service snmpd start
[root@linux ~]# chkconfig snmpd on

点击 Devices 设备,选择 Add 添加

点击最下方的 Create,创建监控的设备,如若出现如下的提示,显示出主机的信息,则说明创建成功,snmp 已可以获取的正常的设备信息。

页面下滑至至最后,会出现我们选择的 Local Linux Machine 模板所监控的基本项目。

我们点击 Create Graphs for this Device,为设备创建图形,可以选择我们希望创建的图形,但是这些图形选项都是基于我们的设备模板里拥有的,选择后我们点击 Create。

选择颜色显示,选好后,点击 Create

创建完成,此时可以生成图形,但是并无法看到,因为我们还没有设置它在哪个树下显示。让其在页面显示的方法有多种,我们可以点击 Trees,,点击 EditingTree,将 Linux-server 拖动至 Local 之下,将整个 Linu 设备的图像都显示在 Default Tree 下。拖动完成后,点击 Finish。

此时查看图像,我们可以看到 Linux-server 的监控图像均在 Default Tree 下显示。

3.2 Windows (以 Windwos2012 为例):
点击任务栏的服务器管理器,选择“管理”——>“添加角色和功能”,等待跳出“添加角色和功能向导”。

点击“下一步”,选择“基于角色和基于功能的安装”,点击“下一步”。


默认不需要更改,点击“下一步”。

在选择服务器角色中,选择“应用程序服务器”,点击“下一步”。

选择 SNMP 服务,在弹出的对话框中,选择“添加功能”,再次点击下一步。


点击“下一步”。

默认,再次选择“下一步”。

点击“安装”。

安装完成,点击“关闭”。

进入管理工具,选择“服务”。

在服务中找到“SNMP Service”,邮件选择“属性”,进行配置。

在“属性”中,选择“安全”,在接受的社区名称中,选择“添加”,权限“只读”,名称“public”,选择“接受来自任何主机的 SNMP 数据包”,点击确定。

为了提高 SNMP 的连通性,在 windows 服务器上安装 informant-std-16,直接进行默认安装,不需要更改任何设置。


安装配置完成后,重启 SNMP Service 服务。添加监控主机与 Linux 相同,可针对监控的不同项目,选择模板。
Cacti 默认的轮询时间为 5min,也就是 cacti 再图上画出一个点需要 5min,为了提高轮询时间,我们可以设置 poller 时间为 1min,同时针对数据库 mysql 进行修改。

[root@cacti ~]# mysql –proot
mysql>use cacti;

渐渐的我们会发现,cacti 自带的监控模板的监控项目十分有限,所以我们需要添加新的监控项目,但是能力有有限,可能无法自己写。Cacti 官网给我们提供了很丰富的监控模板,我们可以将其导入到我们的 cacti 中。
四、实现告警
4.1 邮件告警:
发送测试邮件,点击 setting 中的 Mail/Reporting/DNS,选择 sendmail 发信。

[root@cacti ~]# yum install sendmail -y
[root@cacti ~]# service sendmail start
[root@cacti ~]# chkconfig sendmail on
点击发送测试邮件,跳出邮件反馈,反馈发送成功。查看 cacti log,也有发送成功的日志,可见测试是成功的。




但是这只是简单的发送邮件的功能,无法检测达到阈值而实现邮件报警。因此我们需要为 cacti 添加插件,thold。(由于官方的插件过老,而无法支持新版的 cacti,但是其支持者在 github 上更新了这款插件)
[root@cacti ~]# wget https://codeload.github.com/Cacti/plugin_thold/zip/master [root@cacti ~]# mv master thold.zip
[root@cacti ~]# unzip thold.zip
[root@cacti ~]# mv plugin_thold-master/ /var/www/html/cacti/plugins/
[root@cacti ~]# chown apache.apache /var/www/html/cacti/plugins/ -R
[root@cacti ~]# cd /var/www/html/cacti/plugins/
[root@cacti plugins]# mv plugin_thold-master/ thold
点击安装,点击前面的小对号,使用。

刷新页面,发现上栏出现 thold,左侧栏目出现 Thresholds。
设置告警,点击 Thresholds,点击右上角的 Add 添加。

选择设备、选项,点击创建。


通过多人登录本地服务器,进行测试,1 分钟后,阈值状态变为红色,邮件发出。


退出登录,只剩 1 人,1 分钟后收到恢复邮件。

4.2 微信告警:
微信告警的原理是通过截取告警邮件的内容通过公众号发送至微信,因此首先我们需要注册 自己的公众号,注册方法这里不再说明。我们需要获得的是:
企业号 ID 企业号密钥
企业号中建立的报警 APP 的 ID
用户 ID
我们需要将其填入我们的微信脚本中,可以根据这些将信息推送至微信的某个龚总号下的应 用。
[root@cacti ~]# vim /var/www/html/cacti/plugins/thold/thold_functions.php
在 3489 行下插入如下代码:

$msg_wx = strip_tags(str_replace('<br>', "\n", $message)); $msg_wx = trim($msg_wx);
$msg_wx = iconv( "GB2312//IGNORE", "UTF-8", $msg_wx); $sub_wx = iconv( "GB2312//IGNORE", "UTF-8", $subject);

$file_title = '/tmp/title.txt';
$file_message = '/tmp/message.txt';
if($f = file_put_contents($file_title, $sub_wx))
if($f = file_put_contents($file_message, $msg_wx))

shell_exec("/etc/wechat.sh");
创建微信发送脚本
[root@cacti ~]# vi /etc/wechat.sh
[root@cacti ~]# chmod 750 /etc/wechat.sh
#微信企业号发送消息脚本
#!/bin/bash
CropID='企业号 ID'
Secret='企业号密钥'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret =$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken "
function body() {
local int AppID=1
#Appid 填写企业号中建立的报警 APP 的 ID
local UserID=用户 ID
#此处填写报警接收用户,全部报警可留空
local PartyID=1
local TagID=2
Ent=$'\n'
Date=$(date '+%Y 年%m 月%d 日 %H:%M:%S\n\n') #添加 Cacti 微信报警日期参数
Tit=$(cat /tmp/title.txt)
#读取/tmp/title 文件中内容到变量 Tit
Msg=$Date$Tit$Ent$(cat /tmp/message.txt|sed 's/%//g')
#拼接 msg 主体文件,包含日期,主题,报警内容.并删除报警内容中的'%'号.
Url=$(grep "http" /tmp/message.txt|sed 's/URL: //g') #获取 message.txt 中的 url 行内容
Pic_tmp=$(grep "http" /tmp/message.txt|sed 's/URL: //g'|sed
's/\/graph.php/\/graph_image.php/g')
if [ ! -n "$Pic_tmp" ] ;then
Pic=""
else
Pic=$Pic_tmp$'&graph_height=130&graph_width=500&t='$Date
fi
#根据 url 行内容修改为添加 Pic 参数
#在此修改图片大小,防止图像显示不全,并判断图片文件是否存在。防止宕机出现图片报警
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n" printf '\t"toparty": "'"$PartyID"\"",\n" printf '\t"totag": "'"$TagID"\"",\n"
printf '\t"msgtype": "news",\n'
printf '\t"agentid": "'" $AppID "\"",\n" printf '\t"news": {\n'
printf '\t"articles": [\n'
printf '{\n'
printf '\t\t"title": "'"$Tit"\","\n"
printf '\t\t"description": "'"$Msg"\","\n" printf '\t\t"url": "'"$Url"\","\n"
printf '\t\t"picurl": "'"$Pic"\","\n"
printf '\t}\n'
printf '\t]\n'
printf '\t}\n'
printf '}\n'
}
/usr/bin/curl --data-ascii "$(body )" $PURL


编辑完成后。直接执行 wechat.sh(由于图片发送无法实现,我注释掉了图片部分)
[root@cacti thold]# bash /etc/wechat.sh

微信收到一个空信息

此时我们测试其发送告警邮件的效果。

微信告警实现。
四、cacti 用户权限
点击 User,进入用户管理。
在这里我们可以创建用户,赋予用户各种权限。


可以通过设置,固定器访问权限,如只能访问图像而没有更改设置的权限,如只能访问一个设备的监控图像,看不到其他设备的,如只能看到所有设备的流量情况,等等。
五、总结
由于使用 cmd.php 进行轮询数据处理十分缓慢,当使用 Cacti 监控针对多台设备监控时, 可以使用 Spine 工具进行快速轮询,但是 Spine 轮询少量设备的多种监控时会出现由于 cacti 的进程设置原因导致 cacti 无法出图的情况,因此 spine 的调试显得十分重要。由于本项目的 轮询机器较少,但监控图形的种类比较多,为了方便起见而没有采用 Spine 的轮询方式。
Cacti 作为一款比较优秀的监控平台,在图形化上变得原来越细致,也变得越来越稳定, 让用户通过更每一个细微的设置获得更好的监控效果体验。随着不断的更新,其本身虽然在 监控告警提醒方便没有什么太大的进步,但是其所具有的开源精神,让越来越多的用户发挥 着自己的聪明才智,让其变得渐渐完美起来。

转载于:https://blog.51cto.com/zhanx/2044424

cacti监控搭建和告警相关推荐

  1. linux下搭建cacti监控

    一.cacti 监控软件简介         1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存         和更新数据,当用户需要查看数 ...

  2. 搭建Cacti监控系统(三)-- 监控Linux 主机

    三.监控Linux 主机 3.1.配置被监控的Linux服务器 平台:Rhel6.3_x64 IP :192.168.30.110   (1).安装net-snmp [root@vhost1 ~]# ...

  3. linux cacti 搭建,linux下搭建cacti监控(示例代码)

    一.cacti 监控软件简介 1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存         和更新数据,当用户需要查看数据的时候用rrd ...

  4. cacti监控及配置

    Cacti监控服务 Cacti工作原理 Cacti简介:php语言实现的一个软件,一套基于LAMP展现的网络流量监测及分析工具 1)数据采集:基于SNMP技术或自定义脚本从目标设备/主机获取监控指标信 ...

  5. Cacti监控一台Webserver上多个Tomcatport的实现

    由于一台web应用server上面安装了多台tomcat,有多个port.比方默认的8080,还有兴许追加的9100,9300,9500等等.一个cacti_host_template_tomcat_ ...

  6. (马世龙)Linux下CACTI完全搭建技术文档二

    续(马世龙)Linux下CACTI完全搭建技术文档一 6.完成cacti的安装 1. 首先检查一下rra/下面,有没有数据 2. snmpwalk -v 2c -c public ServerIP i ...

  7. 如何利用Cacti监控机房温度

    本文基于Cacti监控软件,针对在无人值守的情况下,对机房的温度进行实时的监控和图形显示,并容许设定报警温度,机房超温发送给机房管理人员. 系统原理 为了实时监控机房的温度,本文基于Cacti监控软件 ...

  8. cacti监控linux网卡流量,Linux下使用Cacti监控流量状况

    Cacti 官方站点:http://www.cacti.net Cacti 在英文中的意思是仙人掌的意思,Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具 ...

  9. 需要使用cacti检测一台linux,部署cacti监控windows linux

    一.安装LAMP架构 本篇主要介绍cacti如何监控windows主机,cacti的搭建过程也很简单,同样,监控linux主机也不难.这里主要记录部署监控windows过程中遇到的两个问题1.LAMP ...

最新文章

  1. 爬虫之js2py的使用
  2. 如何编译ReactNative示例程序Examples
  3. Sub-process /usr/bin/dpkg returned an error code (1)
  4. redis的基本使用笔记一
  5. windows 2008R2 无法安装操作系统补丁,或无法安装Sp1升级包的解决办法
  6. 最常见的20种VC++编译错误信息
  7. bash命令行中带通配符参数何时展开??
  8. springcloud config配置中心概述
  9. Tips--Solidworks 2016绘制工程图时显示gtol.sym文件缺失的解决方法
  10. 国潮中国风工作学习总结学习PPT模板
  11. Maven学习总结(10)——使用Maven编译项目gbk的不可映射问题
  12. 自动基线校正 python_安全运维中基线检查的自动化之ansible工具巧用
  13. UE_材质_HDR贴图的UV旋转
  14. Mac电脑快速查找文件的两种方法
  15. 【快速文档】view标签,小程序中的div
  16. 向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读
  17. 手机取证设备(手机点验设备、手机合规检测、双路并行手机取证深度分析系统、手机点验数据恢复)
  18. 关于T检验的各种问题
  19. 数据库安全性存取控制机制
  20. 重新开始噼里啪啦写小文字啦~

热门文章

  1. 18.Redis系列之AOF方式持久化
  2. android根据当前系统设置语言在app实现中英文切换
  3. R语言中文社区2018年终文章整理(作者篇)
  4. ADT语音算法软件简介
  5. 如何防范抵御APT攻击?
  6. C# Excel出力及样式的设定
  7. 基于蒙特卡洛概率潮流计算 在IEEE33节点系统中,由于风光出力的不确定性,利用蒙特卡洛生成风速和光照强度得到出力
  8. 什么是服务器租用,如何选择服务器
  9. 【总结】2021.01.18期末考总结
  10. 关于 nl80211