设为首页 收藏本站
查看: 2097|回复: 0

[经验分享] Cacti(php脚本)

[复制链接]

尚未签到

发表于 2018-12-17 08:21:45 | 显示全部楼层 |阅读模式
  实现监控的方式:
  SNMP
  命令、脚本(remote script)
  Cacti(php脚本)
  强大的绘图引擎
  将其他监控软件收集的数据通过图形的方式展示
  时间序列数据的展示工具
  Nagios
  状态监控工具
  
  监控的对象:
  Fault Management故障管理
  Configuration Management配置管理
  Accounting Management统计管理
  Performance Management性能管理
  Security Management安全管理
  
  
  SNMP----------Simple Network Management Protocol
  

  161/UDP
  

  协议版本:
  SNMP v1
  安全机制通过community实现
  read-only
  read-write
  trap:被监控端向监控端主动发送状态数据的机制
  SNMP v2
  通过community实现安全机制
  SNMP v3
  
  
  SNMP内置Community
  SNMP协议安装启动后,会有两个内置的community
  public
  private
  
  
  
  MIB--------Management Information Base管理信息库
  

  用于保存每一个可被监控对象的OID(Object ID)与名称的对应关系
  

  标准MIB OID:
  system     1.3.6.1.2.1.1
  interfaces 1.3.6.1.2.1.2
  at   1.3.6.1.2.1.3
  ip   1.3.6.1.2.1.4
  icmp   1.3.6.1.2.1.5
  tcp   1.3.6.1.2.1.6
  udp   1.3.6.1.2.1.7
  egp   1.3.6.1.2.1.8
  transmission1.3.6.1.2.1.10
  snmp1.3.6.1.2.1.11
  host1.3.6.1.2.1.25
  hrSystem
  hrDevice
  hrStorage
  hrSWRun
  hrSWRunPerf
  hrSWInstalled
  
  
  
  

  

  SNMP操作报文:
  get获取某一个特定OID的状态信息
  getnext获取指定节点的所有子节点的信息
  getbulk能获取更大范围的子节点的信息
  set向被监控节点发起控制指令
  
  Linux中SNMP软件包
  net-snmp(Agent端,被监控端)
  net-snmp-utils(NMS,监控端)
  

  /usr/share/snmp/mibs:
  存放MIB库
  
  # yum install -y net-snmp net-snmp-utils
  

  # service snmpd start
  正在启动 snmpd:                                           [确定]
  # chkconfig snmpd on
  

  # netstat -unlp | grep snmpd
  udp        0      0 0.0.0.0:161                 0.0.0.0:*                               26907/snmpd      
  

  

  获取本机状态信息
  # snmpwalk -v 2c -c public localhost
  

  获取指定对象的信息
  # snmpwalk -v 2c -c public localhost SNMPv2-MIB::sysName.0
  SNMPv2-MIB::sysName.0 = STRING: node1.bj.com
  

  

  获取TCP相关的状态信息
  1、查看tcp MIB库中的OID
  # cat /usr/share/snmp/mibs/TCP-MIB.txt
  

  2、编辑snmp主配置文件,添加view
  # vim /etc/snmp/snmpd.conf
  view    systemview    included   .1.3.6.1.2.1.6
  

  # /etc/init.d/snmpd restart
  停止 snmpd:                                               [确定]
  正在启动 snmpd:                                           [确定]
  

  # snmpwalk -v 2c -c public localhost tcp
  TCP-MIB::tcpRtoAlgorithm.0 = INTEGER: other(1)
  TCP-MIB::tcpRtoMin.0 = INTEGER: 200 milliseconds
  TCP-MIB::tcpRtoMax.0 = INTEGER: 120000 milliseconds
  TCP-MIB::tcpMaxConn.0 = INTEGER: -1
  TCP-MIB::tcpActiveOpens.0 = Counter32: 1
  TCP-MIB::tcpPassiveOpens.0 = Counter32: 3
  TCP-MIB::tcpAttemptFails.0 = Counter32: 0
  TCP-MIB::tcpEstabResets.0 = Counter32: 0
  TCP-MIB::tcpCurrEstab.0 = Gauge32: 1
  TCP-MIB::tcpInSegs.0 = Counter32: 2304
  

  

  

  

  定义新的community
  # vim /etc/snmp/snmpd.conf
  com2sec notConfigUser  127.0.0.1 mypublic
  com2sec notConfigUser  10.1.1.0/24 mypublic
  

  # /etc/init.d/snmpd restart
  

  

  获取指定主机的tcp各状态连接的信息
  # snmpnetstat -v 2c -c mypublic -Can -Cp tcp 10.1.1.1
  Active Internet (tcp) Connections (including servers)
  Proto Local Address          Remote Address         (state)
  tcp   *.22                   *.*                   LISTEN
  tcp   *.111                  *.*                   LISTEN
  tcp   *.60335                *.*                   LISTEN
  tcp   10.1.1.1.22            10.1.1.100.51063      ESTABLISHED
  tcp   127.0.0.1.25           *.*                   LISTEN
  tcp   127.0.0.1.199          *.*                   LISTEN
  tcp   127.0.0.1.631          *.*                   LISTEN
  tcp   127.0.0.1.6010         *.*                   LISTEN
  

  

  

  

  RRDTool------Round Robin Database Tool
  将获取的状态信息数据根据一定的机制保存到rrd数据库文件中(以.rrd结尾),对这些数据进行处理后,绘图显示
  
  

  PDP:Primary Data Point 主数据节点
  RR数据库中用于保存获取的状态信息,用户不可见
  RRA:Round Robin Archive
  每n组PDP进行归档的操作
  CDP: Consolidation Data Point  聚合节点
  每n个PDP一组,对每组数据进行聚合运算(平均值、最大/小值等),运算的结果称为CDP
  

  解析度:Resolution
  时间跨度
  

  

  rrd文件:
  一个rrd文件中可以保存多个数据DS,可对每个DS进行聚合运算
  DS:Data Source
  

  创建空白rrd数据库文件
  rrdtool create file_name [--start | -b start_time ] [--step | -s step ] [--no-overwrite] [DS:ds_name:DST:dst_arguments] [RRA:CF:cf_arguments]
  --start | -b start_time(default : now---10s)
  --step | -s step (default 300 seconds)
  
  DS:ds_name:DST:dst_arguments
  ds_name:
  最长19个字符,[a-zA-Z0-9_]
  
  DST:数据源类型
  GAUGE:保存原始数据(PDP)
  COUNT:保存相对上一个数据的值,必须是递增的,不允许接受负值
  DERIVE:保存相对上一个数据的值,可增可减
  ABSOLUTE:保存相对于初始值的值
  
  例:
  初始值为1,分别产生2 3 6 9四个数字
  GAUGE: 2 3 6 9
  COUNT: 1 1 3 3
  DERIVE: 1 1 3 3
  ABSOLUTE: 1 2 5 8
  
  dst_arguments
  heartbeat
  例如指定每5秒钟接收数据,heartbeat用于指定5秒过后多长时间仍然接收 ;超过时间标记为UNKNOWN
  min:定义每个时间槽上可接收的数值的最小值
  max:定义每个时间槽上可接收的数值的最大值
  U:表示无论任何数据都接收
  
  
  RRA:CF:cf_arguments
  RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows
  xff: 指定PDP中可以有多大比例的UNKNOWN
  steps: 指定对几个PDP进行聚合
  rows: 保存多少个CDP(聚合后的结果)
  

  示例:
  创建test.rrd文件,每5秒产生随机数;分别保存每5秒,50秒,500秒的平均值
  # rrdtool create test.rrd --step 5 DS:testds:GAUGE:8:0:U RRA:AVERAGE:0.5:1:17280 RRA:AVERAGE:0.5:10:3456 RRA:AVERAGE:0.5:100:1210
  
  
  
  
  向rrd数据库文件中提供数据
  rrdtool { update | updatev } file_name [--template | -t ds_name[:ds_name] ] [--]N| timestamp:value[:value]
  --template | -t ds_name[:ds_name]: 如果rrd文件中有多个数据源,-t用于指定数据源的次序
  

  示例:向test.rrd文件中指定数据
  # rrdtool update test.rrd N:$RANDOM
  

  #!/bin/bash
  #
  

  while true;do
    rrdtool update /root/test.rrd N:$RANDOM
    sleep 5
  done
  

  

  绘图
  # rrdtool graph a.png -s 1455603485 DEF:vartest=/root/test.rrd:testds:AVERAGE:step=5 LINE1:vartest#ff0000:"testline"
  

  

  cacti
  rrdtool create
  周期性执行能够取得数据的命令,并将取回的数据保存至rrd文件中
  利用rrdtool绘图并显示
  

  php网页程序
  LAMP,LNMP
  编译安装PHP需要启用--enable-sockets
  

  插件机制
  thold:为cati提供报警功能
  
  模板机制:
  图形模板
  数据模板
  主机模板
  

  cacti安装配置
  

  1、解压并重命名
  # tar zxf cacti-0.8.8a.tar.gz -C /web/vhost/
  # mv  /web/vhost/cacti-0.8.8a/ /web/vhost/cacti
  # /etc/init.d/httpd restart
  停止 httpd:                                               [确定]
  正在启动 httpd:                                           [确定]
  

  2、为cacti准备数据库
  # mysql -e  'CREATE DATABASE cactidb'
  # mysql -u root cactidb < /web/vhost/cacti/cacti.sql
  # mysql -e "GRANT ALL ON cactidb.* TO 'cactiuser'@'localhost' IDENTIFIED BY 'redhat'"
  # mysql -e "FLUSH PRIVILEGES"
  

  3、编辑cacti配置文件,指定mysql名称及访问路径
  # vim /web/vhost/cacti/include/config.php
  

  $database_type = "mysql";
  $database_default = "cactidb";
  $database_hostname = "localhost";
  $database_username = "cactiuser";
  $database_password = "redhat";
  $database_port = "3306";
  $database_ssl = false;
  

  $url_path = "/";
  

  

  4、创建cactiuser用户,并把cacti目录下的log及rra的所属修改为cactiuser
  # useradd cactiuser
  # chown -R cactiuser.cactiuser /web/vhost/cacti/log /web/vhost/cacti/rra
  

  

  在浏览器中访问http://cacti.bj.com进入cacti安装界面
  

  进入cacti页面的默认用户名、密码分别为admin
  

  cacti页面工具:
  

  1、数据收集方法
  Collection Methods
  数据查询
  事先定义好的xml格式的数据收集方法
  数据输入方法
  命令或者脚本
  脚本:
  只需要指定如何获取数据,并且获取到的数据经过处理后按照规定的格式输出
  TAG:data TAG:data
  input:30 output:40
  

  

  由poller.php负责周期性执行获取数据的脚本,对于大规模主机的监控,应使用spine替换poller
  # echo '*/5 * * * * /usr/bin/php /web/vhost/cacti/poller.php &> /dev/null' > /var/spool/cron/cactiuser
  

  手动执行此脚本,会发现有时区相关的报错,按照报错信息将Php的时区修改一致
  # vim /etc/php.ini
  date.timezone = Asia/Chongqing
  

  # /etc/init.d/httpd restart
  

  再此执行此脚本,无此错误
  

  

  

  cacti插件
  

  cacti插件体系能够让程序员在不改变cacti核心代码的情况下为cacti开发附加功能,并且能够在不影响cacti运行的前提下为其添加安全补丁,而且也能够让终端用户为cacti添加其需要但cacti核心缺失的功能
  

  插件特性:
  增强的用户接口
  访问cacti数据库
  管理RRD文件
  增进的缓存和增强的性能
  附加的新功能,如统计报告、日志和阈值监控等
  
  常见的插件:
  MAC Track插件------用于记录设备接口相关的MAC、IP等信息
  Network WeatherMap ---- 用于在cacti中创建网络设备间连接关系图,并能在图像中简单展现其性能指标
  Thold------ 阈值监控功能,并可实现通知功能
  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-652218-1-1.html 上篇帖子: php面试常问的问题 下篇帖子: php操作memcache缓存
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表