博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
datadog collectd的主流程分析
阅读量:7063 次
发布时间:2019-06-28

本文共 1951 字,大约阅读时间需要 6 分钟。

hot3.png

https://static.oschina.net/uploads/img/201610/25165649_xx18.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()方法采集数据一次。

转载于:https://my.oschina.net/u/2950272/blog/1417353

你可能感兴趣的文章
WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
查看>>
谷歌为Pwnium***竞赛再掷重金 将提供200万美元奖金
查看>>
搭建K8S高可用集群(二进制方式)
查看>>
BSON与JSON的区别
查看>>
我的友情链接
查看>>
Play Framework 模板里使用注入访问数据层
查看>>
Win2008学习(十一),解决Remote App Web访问的证书问题
查看>>
python 实现 自动oa 签到签退 发送邮件提醒
查看>>
今天打开阿里妈妈惊现 ¥50 元佣金
查看>>
Oracle 正确删除archivelog文件
查看>>
微信JS 关闭网页
查看>>
[AAuto]给百宝箱增加娱乐功能
查看>>
Tigase XMPP Server源码部署
查看>>
Intellij IDEA创建Maven Web项目
查看>>
java 7 入门书籍
查看>>
Android Pdf文档的生成、显示与打印
查看>>
SpringMVC三种异常处理方式
查看>>
w命令
查看>>
golang使用oracle碰到go/lib/time/zoneinfo.zip: no such file or directory
查看>>
quartz定时任务时间设置描
查看>>