datadog collectd的主流程分析

https://i-blog.csdnimg.cn/blog_migrate/868272b060bb36a8da7742dea0a9cf55.png

1,agent类,继承daemon守护进程类的入口类,daemond控制进程的stop,start,Info,和读写pid文件。Agent类主要功能是重写daemond的run方法。
    其中daemond主要两个方法要注意,第一个是实现了双fork将进程转化为脱离终端的守护进程(成熟技术,网上可查)。第二个是使用读写pid文件,实现进程的类单例模式。具体的实现思路是如下:
    start过程需要处理的问题:
        1.1.1 确保系统中没有该daemon的进程。如果有,则不能启动程序。
        1.1.2 在daemon化之后,创建pidfile,写入pid。
        1.1.3 注册atexit(),确保在程序退出时清除pidfile文件。
        stop过程做的处理:
        1.2.1 如果pidfile不存在,无需其它动作。
        1.2.2 如果pidfile存在,kill原有进程,并确认进程不存在。在旧进程异常退出时,比如直接用_exit(2)退出程序时,可能pidfile不会被删除,所以在kill进程之后还要确认pidfile文件已被删除。
    
2,get_config函数会读取所有的配置信息。
Get_config会返回一个如下数据格式的通用字典,读取到可选配置时候,会自动加到此字典中:
```
agentConfig = {
    'check_freq': DEFAULT_CHECK_FREQUENCY,
    'dogstatsd_port': 8125,
    'dogstatsd_target': 'http://localhost:17123',
    'graphite_listen_port': None,
    'hostname': None,
    'listen_port': None,
    'tags': None,
    'use_ec2_instance_id': False,  # DEPRECATED
    'version': get_version(),
    'watchdog': True,
    'additional_checksd': '/etc/dd-agent/checks.d/',
    'bind_host': get_default_bind_host(),
    'statsd_metric_namespace': None,
    'utf8_decoding': False
}
```
参数详细解释见《agent的配置详解》:

    获取配置文件的来源有,
    2.1,读取启动附加参数,通过config.OptionParser()方法可以管理启动附带参数,将输入参数转化后返回
    2.2,读取主目录下的datadog.conf文件,python用的是自带的一个模块ConfigParser.ConfigParser()。通过这个模块可以以字典格式获取.conf中对应key的value值。
    2.3,读取系统参数。
    2.4,读取yaml文件,使用的方法使用的是yaml.load(),导入的结果是一个字典。

3,start函数,
    agent.start函数将会主要作用是继承的daemond的start方法,作用是判断是否启动foreground,不启用控制台的时候,将启动守护进程。

4,agent.run方法
    run方法的主要作用是启动collectd,不断循环调用。

5,信号处理模块
    处理四种信号,hup,int,term,usr1,
    term:关闭agent,stop collect
    int:关闭agent,stop collect
    hup:重新导入配置文件
    usr1:重启

6,模块初始化
重要的初始化:
初始化HTTP发射器,emitters
初始化collect,
初始化watchdog,作用,给定内存占用阀值和
初始化check服务。这条非常重要,check服务导入过程,详见《check服务流程图及重点模块分析》,初始化check服务后返回的数据是self._checksd 。这是一个字典,有两个key,分别是initialized_checks和init_failed_checks两个list,前者是checkd目录下实例化后的AgentCheck对象。结构是:
{init_failed_checks:【AgentCheck1,AgentCheck2,】,
initialized_checks:【】
}
    
7,主循环
    主循环首先判断是否开发模式(判断是否更小的时间粒度),然后判断是否接受到重新导入配置文件的信号,重新导入配置文件标记符是否被重置。然后运行collect.run()方法采集数据一次。

223916_bL9y_2663968.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值