CollectD-工作涉及

CollectD

collectd是一个守护(daemon)进程,用来定期收集系统和应用程序的性能指标cpu,同时提供了机制,以不同的方式来存储这些指标值。它会在系统运行和存储信息时周期性的统计系统的相关统计信息。利用这些信息有助于查找当前系统性能瓶颈(如作为性能分析 performance analysis)和预测系统未来的 load(如能力部署capacity planning)等。

collectD的基本常用使用命令
cd /etc/init.d

  1. ./collectd start/stop/restart
  2. service collectd restart
  3. cat /var/log/messages |grep collectd
    查看collectd的日志文件操作内容

collectD以此时工作目的为准(3个步骤:配置文件和操作数据和发送数据)
cd /opt/collectd/conf.d
读取配置文件collectd.conf时会在后面自动加载这路径下的子配置文件。

  1. vi status.conf 创建子配置文件,输入下面两段代码。
<LoadPlugin python>
   Globals true
</LoadPlugin>

这里的loadplugin将python解释器添加到collect的插件中。

<Plugin python>
	ModulePath "/opt/collectd/python-plugin"
	LogTraces true
	Import "status"
	<Module status>
		URL   "192.0.0.1"
		# 注意这里值必须是双引号 "", 单引号会报错读不出来。值可以是多个比如 
		#url  "127.0.1.1"  "142.9.9.9"
	</Module>
		# 可以有多个block  ,与上面对齐就行在block下面直接添加,无需加逗号。
		#<Module xx>xx</Module> 	
		#<Module xx>xx</Module>
</Plugin>

modulepath就是collectd执行数据读取的地方。这个路径下有 status.py 读取数据的脚本。并被import 导入
logtraces true 与日志有关
import status 导入status.py数据操作这个模块
Module status 这个block名和status.py名一模一样。里面的url参数名 (想传入status.py的参数)

  1. vi status.py爬取页面数据,代码很简单。dispatch分发到collectd里,在设置LoadPlugin network这个plugin发送数据到指定显示工具。
import collectd
import re
import urllib


IVRURL = 'http://10.10.22.1:8000'
METRICS = {}

def config(conf=None):
    global URL
    for c in conf.children:
        URL = c.values[0]
#	注意点 1:conf就是上面配置文件里的block模块的对象。conf.children好理解一点就相当于列表[ block1,block2,block3,...] ,block数字 就是上面配置文件写的那几个块。
#	c.key 配置文件block中的参数URL      c.value 得到的是配置文件block中的参数值,可能有多个所以是列表。c.value[0] --->"192.0.0.1"

def transform(name):
    name = re.sub("\(.*\)", "", name)
    name = name.lower().strip()
    name = re.sub("[^a-z0-9]+", "_", name)
    return name

def read():
    try:
        res = urllib.urlopen(URL).read()
        data = re.findall(r'<TD align=right width=50%>\n(.*?):\n</TD>\n<TD width=50%>\n(.*?)\n</TD>', res)
        metrics = dict(data)
        METRICS = dict([(transform(k), v) for k, v in metrics.items()])

        for i in METRICS.keys():
            if '(' in i:
                metrics_field = re.sub(r'\(.*?\)', '', i)
                METRICS[metrics_field] = METRICS.pop(i)
    except Exception as e:
        collectd.info(str(e))
        #  collectd插件的打印日志语法:collectd.error(".*")

    vals = collectd.Values(type='gauge')
    vals.plugin = 'status'
    for k, v in METRICS.items():
        try:
           METRICS[k] = int(v)
        except Exception as e:
           METRICS.pop(k)
        else:
#           collectd.info("%s: %s"% (k, v))
           vals.dispatch(values=[v], type_instance=k)

# 注意点 2:创建发送数据到collectd的对象:vals,collectd再通过配置的network把数据发送到指定显示工具。
# type="guage" 数据的类型,常用的还有counter,collectd内置类型(一般数值啊都是guage和counter 具体什么意思百度一下你就知道,所以代码中我把值不是数字的key删除)。你可以再collect.conf 主配置文件里查看内置类型文件的path。
# vals.plugin 当前脚本的名字
# vals.dispatch 分发数据到collectd,注意这里value必须是列表 [ ]。别问为什么不需要知道为什么。type_instance 就是key。

collectd.register_config(config)
collectd.register_read(read)
#注册这两个函数让collectd知道并运行这两个函数,发送数据到collectd。这与python的flask框架的蓝图有点相似。
  1. vi /etc/collectd.conf
    找到你collectd的主配置文件
LoadPlugin network

<Plugin network>
   <Server "www.web.com" "25826">
   # 注意 改前面显示工具url就行,端口好像不需要改。具体多百度就知道。
      #SecurityLevel ""
      #Username ""
      #Password ""
   </Server>
</Plugin>

collectd 读取字配置文件导入python解释器,和import获取数据的脚本status,脚本里获取数据注册conf和注册read两个函数,conf函数获取配置文件参数,read函数dispatch分发数据到collectd。collectd收到数据发送到指定工具。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值