Alarm

alarm模块是处理报警event的,judge产生的报警event写入redis,alarm从redis读取处理

设计初衷

报警event的处理逻辑并非仅仅是发邮件、发短信这么简单。为了能够自动化对event做处理,alarm需要支持在产生event的时候回调用户提供的接口;有的时候报警短信、邮件太多,对于优先级比较低的报警,希望做报警合并,这些逻辑都是在alarm中做的。

我们在配置报警策略的时候配置了报警级别,比如P0/P1/P2等等,每个及别的报警都会对应不同的redis队列 alarm去读取这个数据的时候我们希望先读取P0的数据,再读取P1的数据,最后读取P5的数据,因为我们希望先处理优先级高的。于是:用了redis的brpop指令。

源码安装

  1. cd $GOPATH/src/github.com/open-falcon/alarm
  2. go get ./...
  3. ./control build
  4. ./control pack

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

部署说明

alarm是个单点。对于未恢复的告警是放到alarm的内存中的,alarm还需要做报警合并,故而alarm只能部署一个实例。后期需要想办法改进。

配置说明

配置文件必须叫cfg.json,可以基于cfg.example.json修改

  1. {
  2. "debug": true,
  3. "uicToken": "",
  4. "http": {
  5. "enabled": true,
  6. "listen": "0.0.0.0:9912" # 未恢复的告警就是通过alarm的http页面来看的
  7. },
  8. "queue": {
  9. "sms": "/sms", # 需要与sender配置成相同的,维持默认即可
  10. "mail": "/mail"
  11. },
  12. "redis": {
  13. "addr": "127.0.0.1:6379", # 与judge、sender相同的redis地址
  14. "maxIdle": 5,
  15. "highQueues": [
  16. "event:p0",
  17. "event:p1"
  18. ],
  19. "lowQueues": [
  20. "event:p2",
  21. "event:p3",
  22. "event:p4",
  23. "event:p5",
  24. "event:p6"
  25. ],
  26. "userSmsQueue": "/queue/user/sms", # 这两个queue维持默认即可
  27. "userMailQueue": "/queue/user/mail"
  28. },
  29. "api": {
  30. "portal": "http://falcon.example.com", # 内网可访问的portal的地址
  31. "uic": "http://uic.example.com", # 内网可访问的uic(或fe)的地址
  32. "links": "http://link.example.com" # 外网可访问的links的地址
  33. }
  34. }

api部分portal和uic可以配置成内网可访问的地址,速度比较快,但是links要配置成外网可访问的地址,注意喽

进程管理

我们提供了一个control脚本来完成常用操作

  1. ./control start 启动进程
  2. ./control stop 停止进程
  3. ./control restart 重启进程
  4. ./control status 查看进程状态
  5. ./control tail tail -f的方式查看var/app.log

报警合并

如果某个核心服务挂了,可能会造成大面积报警,为了减少报警短信数量,我们做了报警合并功能。把报警信息写入links模块,然后links返回一个url地址给alarm,alarm将这个url链接发给用户,这样用户只要收到一条短信(里边是个url地址),点击url进去就是多条报警内容。

highQueues中配置的几个event队列中的事件是不会做报警合并的,因为那些是高优先级的报警,报警合并只是针对lowQueues中的事件。如果所有的事件都不想做报警合并,就把所有的event队列都配置到highQueues中即可

验证

log没问题就是没问题了,log在var目录

可以访问alarm的http地址,会展示一个web页面“未恢复的告警列表”

补充

alarm搭建完成了,我们可以回去修改fe的配置,把fe模块的shortcut:falconAlarm配置成alarm的http地址,是浏览器可访问的alarm的http地址