python-rrdtool
2015-06-25 17:50
495 查看
https://nagios-plugins.org/doc/guidelines.html
GPING OK – rtt min/avg/max/mdev = 0.897/0.897/0.897/0.000 ms|time=0.897ms;20;40;; ok=1
cpu_user:OK-0% cpu_system:OK-0% cpu_idle:WARNING-99>70% | cpu_user=0%;120;90; cpu_system=0%;100;70; cpu_idle=99%;100;70;
其中性能数据为|后面的斜体部分,格式如下:
'label'=value[UOM];[warn];[crit];[min];[max]
注意事项
1.空格分割标签/值对 例如cpu_user=0%;100;90; cpu_system=0%;100;70; cpu_idle=99%;100;70;
2.label可以包含任何字符
3.单引号可省略,如果label中使用空格、等号和单引号,则需要需要单引号把label括起来。例如’a ‘b’ = c’=0%;100;90;
4.标签可以为任意长度,但最好少于19个字符并且唯一,(RRD有相关方面的限制),并且需要注意NRPE的返回值的限制(译者:好像是4K限制)
5.两个单引号为指定的转义字符?
6.warn, crit, min or max 可以为空(比如,如果没有定义阀值,最大最小值则不适用)并且最后的分号可以省略
7.如果UOM为%,则不需要最大最小值
8.value, min and max只能为负号“-” “0到9” 和小数点“.” 并且单位必须统一 例如:cpu_user=0.5%;99.9;-9;
9.warn and crit必须在某个区间格式,参见2.5章。单位也必须统一
10.UOM必须为以下其中之一
如果未指定,默认为数字(整数和浮点数)(比如用户数,进程数,负载等)
s - 秒 (可以为纳秒us或毫秒ms) cpu_user=0s;100;90; cpu_system=0us;100;70; cpu_idle=0ms;100;70;
% - 百分号 cpu_user=0%;100;90; cpu_system=0%;100;70; cpu_idle=99%;100;70;
B - 字节(可以是KB MB GB TB)cpu_user=0KB;100;90; cpu_system=0MB;100;70; cpu_idle=0B;100;70;
C - 一个计数器 (比如网卡的流量)cpu_user=10c;100;90;
nagios检测信息
host
GPING OK – rtt min/avg/max/mdev = 0.897/0.897/0.897/0.000 ms|time=0.897ms;20;40;; ok=1
service
cpu_user:OK-0% cpu_system:OK-0% cpu_idle:WARNING-99>70% | cpu_user=0%;120;90; cpu_system=0%;100;70; cpu_idle=99%;100;70;
其中性能数据为|后面的斜体部分,格式如下:
'label'=value[UOM];[warn];[crit];[min];[max]
注意事项
1.空格分割标签/值对 例如cpu_user=0%;100;90; cpu_system=0%;100;70; cpu_idle=99%;100;70;
2.label可以包含任何字符
3.单引号可省略,如果label中使用空格、等号和单引号,则需要需要单引号把label括起来。例如’a ‘b’ = c’=0%;100;90;
4.标签可以为任意长度,但最好少于19个字符并且唯一,(RRD有相关方面的限制),并且需要注意NRPE的返回值的限制(译者:好像是4K限制)
5.两个单引号为指定的转义字符?
6.warn, crit, min or max 可以为空(比如,如果没有定义阀值,最大最小值则不适用)并且最后的分号可以省略
7.如果UOM为%,则不需要最大最小值
8.value, min and max只能为负号“-” “0到9” 和小数点“.” 并且单位必须统一 例如:cpu_user=0.5%;99.9;-9;
9.warn and crit必须在某个区间格式,参见2.5章。单位也必须统一
10.UOM必须为以下其中之一
如果未指定,默认为数字(整数和浮点数)(比如用户数,进程数,负载等)
s - 秒 (可以为纳秒us或毫秒ms) cpu_user=0s;100;90; cpu_system=0us;100;70; cpu_idle=0ms;100;70;
% - 百分号 cpu_user=0%;100;90; cpu_system=0%;100;70; cpu_idle=99%;100;70;
B - 字节(可以是KB MB GB TB)cpu_user=0KB;100;90; cpu_system=0MB;100;70; cpu_idle=0B;100;70;
C - 一个计数器 (比如网卡的流量)cpu_user=10c;100;90;
rrdtool 1.4.8以下有bug,会提示'rrdtool.create(rrdfile, '--step', '60', '--start', '-1y', dss, rra) TypeError: argument 5 must be string'
必须升级高版本,用下面这个源 gf-plus
yum install http://mirror.symnds.com/distributions/gf/el/6/gf/x86_64/gf-release-6-10.gf.el6.noarch.rpm
#!/usr/bin/env python # -*- encoding: utf-8 -*- from flask import Blueprint, render_template, url_for, redirect import os, re, time, json, rrdtool mod = Blueprint('graph', __name__, template_folder='templates') @mod.route('/', methods=['GET']) def show_graph(): # hostname, service get from db hostname = 'wx-j2-5-52' services = [ \ 'linux_connections', \ 'linux_diskio_sda1', \ 'linux_disk_opt', \ 'linux_load', \ 'linux_traffic_p1p1', \ 'linux_cpu', \ 'linux_diskio_sda3', \ 'linux_disk_root', \ 'linux_memory', \ 'host_icmp' \ ] return render_template('graph.html', hostname=hostname, services=sorted(services)) # Function create rrd def create_rrd(rrd_file, perfdata): ds = [] for label, value, unit in perfdata: if unit in ['b/s', 'B', 'B/s', 's', 'ms', '']: ds.append('DS:' + str(label) + ':GAUGE:600:0:1000000000000') elif unit in ['%']: ds.append('DS:' + str(label) + ':GAUGE:600:0:100') rra = [ 'RRA:AVERAGE:0.5:1:120', # hour 'RRA:AVERAGE:0.5:5:600', # day 'RRA:AVERAGE:0.5:30:700', # week 'RRA:AVERAGE:0.5:120:800', # month 'RRA:AVERAGE:0.5:1440:800', # year 'RRA:MAX:0.5:1:120', # hour 'RRA:MAX:0.5:5:600', # day 'RRA:MAX:0.5:30:700', # week 'RRA:MAX:0.5:120:800', # month 'RRA:MAX:0.5:1440:800', # year 'RRA:MIN:0.5:1:120', # hour 'RRA:MIN:0.5:5:600', # day 'RRA:MIN:0.5:30:700', # week 'RRA:MIN:0.5:120:800', # month 'RRA:MIN:0.5:1440:800', # year ] rrdtool.create(str(rrd_file), '--step', '60', ds, rra) # Function update rrd def update_rrd(info): rrd_path = os.path.join('/opt/rrd', 'wx', 'j2', info['host']) if not os.path.exists(rrd_path): os.mkdir(rrd_path) if info['type'] == 'host': rrd_file = os.path.join(rrd_path, 'host_icmp') + '.rrd' else: rrd_file = os.path.join(rrd_path, info['service']) + '.rrd' # perfdata: # rta=36.370ms;500.000;500.000;0; pl=0%;80;80;; rtmax=38.344ms;;;; rtmin=34.979ms;;;; # or # 'cached'=21857640448;;;0; 'buffer'=129105920;;;0; 'used'=1640251392;0.00:31974134374.40;0.00:31974134374.40;0;33656983552 perfdata = [] for entry in info['perfdata'].split(' '): m = re.match("^\'?([\w\s]+)\'?=(\d+\.?\d*)(\D*)$", entry.split(';')[0]) perfdata.append((m.group(1), m.group(2), m.group(3))) if not os.path.exists(rrd_file): create_rrd(rrd_file, perfdata) ds = ':'.join([ label for label, value, unit in perfdata]) rra = ':'.join([ value for label, value, unit in perfdata]) print rrd_file, ds, rra rrdtool.update(str(rrd_file), '--template', str(ds), 'N:'+str(rra)) # Function fetch rrd def fetch_rrd(hostname, service, period): rrd_path = os.path.join('/opt/rrd', 'wx', 'j2', hostname) #rrd_path = os.path.join('/home/ken/mule', hostname) rrd_file = rrd_path + '/' + service + '.rrd' return rrdtool.fetch(str(rrd_file), 'AVERAGE', '--start', str(period))
相关文章推荐
- Python - 杨辉三角
- Python 学习笔记12
- 【python】 入门 搭建环境
- 和学生探讨吉林大学python问题
- Python之dir()与__dict__的区别
- 百度站长工具的主动推送功能_python实现
- python with使用的一些例子
- how to use Decimal by default instead of float in python
- Python性能优化的20条建议
- python核心编程——python对象
- 20150625 python周边你需要学习的知识
- Python 多线程 鸡肋也很好吃
- python各种数据类型之间的转换
- Python中的WSGI
- python函数参数带星号*
- python正则表达式复习4
- Python可调用对象
- python正则表达式复习3
- Python特殊属性和方法的运用
- python的特殊方法: