Nodata

nodata用于检测监控数据的上报异常。nodata和实时报警judge模块协同工作,过程为: 配置了nodata的采集项超时未上报数据,nodata生成一条默认的模拟数据;用户配置相应的报警策略,收到mock数据就产生报警。采集项上报异常检测,作为judge模块的一个必要补充,能够使judge的实时报警功能更加可靠、完善。

准备工作

这一节是写给Open-Falcon老用户的,新用户请忽略本小节、直接跳到源码编译部分即可。如果你已经使用Open-Falcon有一段时间,本次只是新增加一个nodata服务,那么你需要依次完成如下工作:

  • 确保已经建立mysql数据表falcon_portal.mockcfg。其中,falcon_portal为portal组件的mysql数据库,mockcfg为存放nodata配置的数据表。mockcfg的建表语句,如下。
  • 确保已经更新了portal组件。portal组件中,新增了对nodata配置的UI支持。
  • 安装nodata后端服务。即本文的后续部分
  1. USE falcon_portal;
  2. SET NAMES 'utf8';
  3. /**
  4. * nodata mock config
  5. */
  6. DROP TABLE IF EXISTS `mockcfg`;
  7. CREATE TABLE `mockcfg` (
  8. `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  9. `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'name of mockcfg, used for uuid',
  10. `obj` VARCHAR(10240) NOT NULL DEFAULT '' COMMENT 'desc of object',
  11. `obj_type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'type of object, host or group or other',
  12. `metric` VARCHAR(128) NOT NULL DEFAULT '',
  13. `tags` VARCHAR(1024) NOT NULL DEFAULT '',
  14. `dstype` VARCHAR(32) NOT NULL DEFAULT 'GAUGE',
  15. `step` INT(11) UNSIGNED NOT NULL DEFAULT 60,
  16. `mock` DOUBLE NOT NULL DEFAULT 0 COMMENT 'mocked value when nodata occurs',
  17. `creator` VARCHAR(64) NOT NULL DEFAULT '',
  18. `t_create` DATETIME NOT NULL COMMENT 'create time',
  19. `t_modify` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'last modify time',
  20. PRIMARY KEY (`id`),
  21. UNIQUE KEY `uniq_name` (`name`)
  22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

源码编译

  1. # update common lib
  2. cd $GOPATH/src/github.com/open-falcon/common
  3. git pull
  4. # compile nodata
  5. cd $GOPATH/src/github.com/open-falcon/nodata
  6. go get ./...
  7. ./control build
  8. ./control pack

最后一步会pack出一个tar.gz的安装包,拿着这个包去部署服务即可。

服务部署

服务部署,包括配置修改、启动服务、检验服务、停止服务等。这之前,需要将安装包解压到服务的部署目录下。

  1. # 修改配置, 配置项含义见下文
  2. mv cfg.example.json cfg.json
  3. vim cfg.json
  4. # 启动服务
  5. ./control start
  6. # 校验服务,这里假定服务开启了6090的http监听端口。检验结果为ok表明服务正常启动。
  7. curl -s "127.0.0.1:6090/health"
  8. ...
  9. # 停止服务
  10. ./control stop

服务启动后,可以通过日志查看服务的运行状态,日志文件地址为./var/app.log。可以通过调试脚本./scripts/debug查看服务器的内部状态数据,如 运行 bash ./scripts/debug 可以得到服务器内部状态的统计信息。

配置说明

配置文件默认为./cfg.json。默认情况下,安装包会有一个cfg.example.json的配置文件示例。各配置项的含义,如下

  1. ## Configuration
  2. {
  3. "debug": true,
  4. "http": {
  5. "enabled": true,
  6. "listen": "0.0.0.0:6090" #nodata的http服务监听地址
  7. },
  8. "query":{ #query组件相关的配置
  9. "connectTimeout": 5000, #查询数据时http连接超时时间,单位ms
  10. "requestTimeout": 30000, #查询数据时http请求处理超时时间,单位ms
  11. "queryAddr": "127.0.0.1:9966" #query组件的http监听地址,一般形如"domain.query.service:9966"
  12. },
  13. "config": { #配置信息
  14. "enabled": true,
  15. "dsn": "root:passwd@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true&wait_timeout=604800", #portal的数据库连接信息,默认数据库为falcon_portal
  16. "maxIdle": 4 #mysql连接池空闲连接数
  17. },
  18. "collector":{ #nodata数据采集相关的配置
  19. "enabled": true,
  20. "batch": 200, #一次数据采集的条数,建议使用默认值
  21. "concurrent": 10 #采集并发度,建议使用默认值
  22. },
  23. "sender":{ #nodata发送mock数据相关的配置
  24. "enabled": true,
  25. "connectTimeout": 5000, #发送数据时http连接超时时间,单位ms
  26. "requestTimeout": 30000, #发送数据时http请求超时时间,单位ms
  27. "transferAddr": "127.0.0.1:6060", #transfer的http监听地址,一般形如"domain.transfer.service:6060"
  28. "batch": 500, #发送数据时,每包数据包含的监控数据条数
  29. "block": { #nodata阻塞设置
  30. "enabled": false, #是否开启阻塞功能.默认不开启此功能
  31. "threshold": 32 #触发nodata阻塞操作的阈值上限.当配置了nodata的数据项,数据上报中断的百分比,大于此阈值上限时,nodata阻塞mock数据的发送
  32. }
  33. }
  34. }

阻塞功能,是为了避免大规模的nodata误报警,详情请移步这里