Cacti的优化

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 服务器架构研究室blog.linuxhonker.com Cacti的优化 1,优化数据库schema,建立合理的索引 cacti默认的cacti.sql建立的数据库模型,竟然一个Index都没有建。每次执行poller.php的时候,主要的时间,都花费在数据库查询上。使用下面的sql语句,建立一系列索引,弥补默认的cacti.sql中缺乏index的缺点。可以有效的提高poll

服务器架构研究室blog.linuxhonker.com

Cacti的优化


1,优化数据库schema,建立合理的索引

cacti默认的cacti.sql建立的数据库模型,竟然一个Index都没有建。每次执行poller.php的时候,主要的时间,都花费在数据库查询上。使用下面的sql语句,建立一系列索引,弥补默认的cacti.sql中缺乏index的缺点。可以有效的提高poller.php执行的效率,缩短更新RRD文件所需的时间

CREATE INDEX `data_template_data_id` ON `data_input_data` (`data_template_data_id`);

CREATE INDEX `host_id_snmp_query_id_snmp_index` ON data_local (`host_id`,`snmp_query_id`,`snmp_index`);

CREATE INDEX `local_data_id_data_source_name` ON data_template_rrd (`local_data_id`,`data_source_name`);

CREATE INDEX `graph_template_id_local_graph_id` ON graph_templates_item (`graph_template_id`,`local_graph_id`);
CREATE INDEX `local_graph_template_item_id` ON graph_templates_item (`local_graph_template_item_id`);

CREATE INDEX `host_id_snmp_query_id_snmp_index` ON host_snmp_cache (`host_id`,`snmp_query_id`,`snmp_index`);

CREATE INDEX `local_data_id_rrd_path` ON poller_item (`local_data_id`,`rrd_path`);
CREATE INDEX `host_id_rrd_next_step` ON poller_item (`host_id`,`rrd_next_step`);

CREATE INDEX host_id_snmp_query_id ON host_snmp_cache (host_id,snmp_query_id);

CREATE INDEX host_id_snmp_port ON poller_item (host_id,snmp_port);

CREATE INDEX data_source_path ON data_template_data (data_source_path);

show index from table; 查看索引

2, 重构rra文件的目录结构,为每个device建立单独的rra目录

首先在crontab里禁用poller.php,然后执行cacti_install_dir/cli目录下的 structure_rra_paths.php,

php  structure_rra_paths.php –proceed

它会将所有的RRD文件按照device重新分配目录,并修改数据库中的RRD路径,成功执行后,再恢复poller.php的crontab就可以了。

按照上面3个步骤,710台服务器,24000个RRD文件,完成一次poller.php的时间,缩短到50 seconds。实现了最初的目的。

TODO:

在执行poller.php的时候, 监控服务器的load达到了3,通过vmstat查看,显示负载主要在I/O。在目前的情况,如果再出现瓶颈,可以考虑安装Boost插件来进一步提供性能。

cacti主要通过snmp来采集数据,可以引入collected等客户端,提供数据采集的可靠性。

3使用spine替代默认的cmd.php来采集数据 见上一章

1、让Cacti使用Spine插件,并进行相关设置
关于spine插件的安装,这里就不讲了
访问:http://cacti_host_ipaddress/cacti
Settings -> Paths -> ”Spine Poller File Path” -> spine程序的位置
Settings -> Poller -> ”Poller Type” -> spine

2、进程调整

对于进程和线程的调整有利于缩短采集时间,可以进行大量的采集。在CU论坛上看有人说cacti能够同时采集1k服务,这样的性能没有测试过,但是有人测试过同时采集200台服务器的,占用的内容只有几百兆,cpu的利用率也很低,说明一台的普通的机器排除网络链路延时采集的性能是相当强悍的

Settings -> Poller -> ”Maximum Concurrent Poller Processes”(最大并发轮询器进程),修改该值
Settings -> Poller -> ”Maximum Threads per Process”(每进程最大线程数),修改该值
Settings -> Poller -> ”Number of PHP Script Servers”(PHP脚本服务程序数),修改该值
通过修改这三个参数,可以提高一部分的性能

3、增加php 的内存使用的上限值
# vi /etc/php.ini
memory_limit = 256M (预设是128MB,根据内存的使用情况,可以改大一点)

4、定期 optimize cacti 数据库
cacti 的 poller_output 会不明原因的长大,大到数据越写越慢,直到无法更新。每隔一段时间手动 “Truncate poller_output table” 后,就会继续正常运作;所以我们可以利用crontab定期清除数据
#vi /etc/cron.d/truncate_poller
0 0 * * 0  root  /usr/local/mysql/bin/mysql –user=cacti –password=2010 cacti -e ‘truncate table poller_output;’
#chkconfig –level 3 crond on && service crond start

5、修改mysql的最大连接数

一般默认安装的时候没有调整最大连接数的话,当需要并发量的时候可以出图就会断断续续的
mysql> set GLOBAL max_connections=2000;
或者直接修改my.cnf配置文件,增加:max_connections = 2000;

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
QGS
Debian11,Ubuntu20.04部署zabbix6.0解决中文乱码问题
记Debian11,Ubuntu20.04部署zabbix6.0解决中文乱码问题
QGS
878 0
Debian11,Ubuntu20.04部署zabbix6.0解决中文乱码问题
|
监控 Unix Windows
Zabbix【部署 04】 Windows系统安装配置agent及agent2
Zabbix【部署 04】 Windows系统安装配置agent及agent2
1645 0
|
8月前
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
535 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
监控 前端开发 Linux
centos7系统安装部署zabbix5.0
【9月更文挑战第23天】在CentOS 7系统上部署Zabbix 5.0的步骤包括:安装MariaDB数据库及必要软件包,配置Zabbix仓库,设置数据库并导入Zabbix数据库架构,配置Zabbix服务器与前端参数,启动相关服务,并通过浏览器访问Web界面完成安装向导。
969 0
|
10月前
|
安全 持续交付 Docker
Docker
Docker 是一种非常有前途的技术,它为应用程序的开发、部署和管理带来了极大的便利,相信在未来会发挥更加重要的作
|
存储 人工智能 数据管理
如何借助AI技术为NAS注入新活力
【8月更文挑战第11天】文件存储NAS是高性能、可共享访问的分布式文件系统,支持弹性扩展与高可靠性。通过融合AI技术,NAS能在数据存储路径上实现最优规划,提升存储效率;借助AI自学习能力优化数据管理流程;并实现精准的数据共享,最大化数据价值。
如何借助AI技术为NAS注入新活力
|
机器人 开发工具 计算机视觉
基于 docker 环境的 LET-VINS 复现
该文介绍了在Docker环境下实践LET-NET的步骤。从GitHub克隆LET-NET代码,使用Docker运行vins-mono环境。安装ncnn,配置代理,更新源,安装依赖并验证安装成功。在运行LET-NET时遇到opencv版本不兼容,指出怎么安装指定版本的 opencv。解决Docker容器中的显示问题,通过`xhost +`命令运行LET-NET。在ROS中构建VINS-Mono时,cv_bridge找不到的问题,通过安装cv_bridge,设置ROS环境和工作空间,以及解决ncnn的配置问题,最终成功运行VINS-Mono。还需要下载UMA-VI数据集并修改相关路径以运行演示。
|
存储 数据采集 缓存
【运维知识进阶篇】Zabbix5.0稳定版详解9(Zabbix优化:高并发对MySQL进行拆分、Zabbix-agent主动上报模式、使用proxy代理模式、系统自带监控项优化、进程优化、缓存优化)
【运维知识进阶篇】Zabbix5.0稳定版详解9(Zabbix优化:高并发对MySQL进行拆分、Zabbix-agent主动上报模式、使用proxy代理模式、系统自带监控项优化、进程优化、缓存优化)
1453 0
|
Ubuntu 网络安全 数据安全/隐私保护
使用WinSCP工具,将windows文件传输到虚拟机Ubuntu系统
使用WinSCP工具,将windows文件传输到虚拟机Ubuntu系统
2270 4
|
人工智能 API
【AI大模型应用开发】【LangChain系列】实战案例6:利用大模型进行文本总结的方法探索,文本Token超限怎么办?
【AI大模型应用开发】【LangChain系列】实战案例6:利用大模型进行文本总结的方法探索,文本Token超限怎么办?
1605 0