http://n9e.didiyun.com/
夜莺是一套分布式高可用的运维监控系统,最大的特点是混合云支持,既可以支持传统物理机虚拟机的场景,也可以支持K8S容器的场景。同时,夜莺也不只是监控,还有一部分CMDB的能力、自动化运维的能力,很多公司都基于夜莺开发自己公司的运维平台

https://gitee.com/cnperl/Nightingale
https://github.com/didi/nightingale

https://github.com/didi/nightingale/blob/master/changelog

  1. 3.1.1
  2. 影响模块:n9e-job
  3. 更新内容:job模块之前给监控用的callback地址method误设置为了get,是不对的,改成了post
  4. 3.1.2
  5. 影响模块:n9e-rdb
  6. 更新内容:子节点修改的时候,不允许修改为租户节点
  7. 3.1.3
  8. 影响模块:n9e-monapi
  9. 更新内容:对于P2P3的告警会发送重复的两条
  10. 3.1.4
  11. 影响模块:n9e-index n9e-judge n9e-monapi n9e-rdb n9e-transfer n9e-tsdb
  12. 更新内容:把hbs的逻辑从monapi挪到rdb,拆分监控的权限点
  13. 3.1.5
  14. 影响模块:n9e-monapi
  15. 更新内容:清理策略的时候会空指针,node删除了,策略还在,此时会复现
  16. 3.1.6
  17. 影响模块:n9e-ams etc/gop.yml
  18. 更新内容:主机设备增加了扩展字段的管理,用于维护一些位置信息、过保信息,增加了新的sqlsql/n9e_ams_3.1.6.sql
  19. 3.2.0
  20. 影响模块:n9e-agent etc/agent.yml
  21. 更新内容:agent支持metrics指标采集能力,这个版本是为商业版本服务的,开源用户无需更新
  22. 3.3.0
  23. 影响模块:n9e-rdb n9e-transfer n9e-judge n9e-ams n9e-monapi sql/n9e_rdb_3.3.0.sql etc/*.tpl
  24. 更新内容:增强安全性:密码复杂度、cookie处理优化等;支持M3DB作为存储后端(如果要尝试M3需要修改transfer、monapi配置文件);修复告警引擎与条件串数的问题;为主机设备增加自定义字段的能力
  25. 3.3.1
  26. 影响模块:n9e-job n9e-rdb n9e-agent n9e-ams n9e-judge
  27. 更新内容:修复job模块的一个调度bug;rdb支持根据org搜索user;agent在fields变化时及时感知,fields和host扩展字段联动;解决上个版本引入的judge处理nodata的问题
  28. 3.4.0
  29. 升级内容:
  30. - 增强了安全性,引入了session机制,写入cookie的内容从user.uuid变更为随机session.id
  31. - 修复部分sql注入漏洞
  32. - 告警引擎函数优化,all、c_avg_rate_abs等
  33. - 告警消息内容优化,可以展示设备名称和设备备注,感谢冯骐的PR
  34. - 增加了大盘导入导出功能
  35. 升级方法:
  36. - 除了agent、tsdb、index的二进制不用升级,其他所有模块的二进制都要升级
  37. - job ams monapi rdb 四个模块的配置文件中的cookieName全部换成ecmc-sid
  38. - rdb的配置文件发生了较大变化,需要对照升级
  39. - sql目录下有几个3.4.0的sql,需要导入
  40. 3.4.1
  41. 升级内容:
  42. - 修复日志监控采集策略配置了tag但是无法编辑的问题
  43. 升级方法:
  44. - 更新monapi的二进制即可
  45. 3.5.0
  46. 升级内容:
  47. - 引入了组件监控模块prober,内置了mysql、redis、mongo监控采集能力
  48. - 引入了内置监控大盘和内置告警策略,可以在任意节点一键导入内置大盘和策略
  49. 升级方法:
  50. - n9e-monapi n9e-rdb n9e-transfer n9e-ams n9e-job 的二进制要升级
  51. - n9e-agent也可以升级,解决了进程监控的性能问题,如果不在意可以不升级
  52. - n9e-prober 模块需要新部署
  53. - sql目录下有个3.5.0的sql patch文件,需要导入
  54. - etc目录下新增了screen、alert两个目录,需要拷贝到生产环境
  55. - etc目录下新增了plugins目录,需要随着prober模块走
  56. - etc/address.yml里增加prober的配置
  57. 3.5.1
  58. 升级内容:
  59. - monapi里的alarmEnabled默认值设置为true
  60. - agent进程采集,忽略EOF日志
  61. - agent增加一个接口获取endpoint
  62. - agent日志监控支持一种新的日志时间格式
  63. - 修复组件监控调整采集频率不生效的问题
  64. 升级方法:
  65. - 替换n9e-monapi n9e-prober n9e-agent 二进制

Nightingale是一套衍生自Open-Falcon的互联网监控解决方案,融入了滴滴的最佳实践

架构图
Nightingale夜莺 - 图1

  • collector即agent,可以采集机器常见指标,支持日志监控,支持插件机制,支持业务通过接口直接上报数据
  • transfer提供rpc接口接收collector上报的数据,然后通过一致性哈希,将数据转发给多台tsdb和多台judge
  • tsdb即原来的graph组件,用于存储历史数据,支持配置为双写模式提升系统容灾能力,tsdb会把监控数据转发一份给index
  • index是索引模块,替换原来的mysql方案,在内存里构建索引,便于后续数据检索,性能大幅提升
  • judge是告警引擎,从monapi(portal)同步监控策略,然后对接收到的数据做告警判断,如满足阈值,则生成告警事件推到redis
  • monapi(alarm)从redis读取judge生成的事件,进行二次处理,补充一些元信息,生成告警消息,重新推回redis
  • 各发送组件,比如mail-sender、sms-sender等,从redis读取告警消息,发送告警,抽出各类sender是为了后续定制方便
  • monapi集成了原来多个模块的功能,提供接口给js调用,api前缀为/api/portal,数据查询走transfer,干掉了原来的query组件,api前缀为/api/transfer,索引查询的api前缀/api/index,于是,前面搭建nginx,即可通过不同location将请求转发到不同后端
  • 数据库仍然使用mysql,主要存储的内容包括:用户信息、团队信息、树节点信息、告警策略、监控大盘、屏蔽策略、采集策略、部分组件心跳信息等

rpm包安装部署

下载地址:
https://dl.cactifans.com/n9e/2.7.2/
安装 nginx,mysql 组件
nginx部署
yum install nginx -y

  1. [root@n9e ~]# systemctl enable nginx.service
  2. Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
  3. [root@n9e ~]# systemctl restart nginx.service
  4. [root@n9e ~]#

数据库部署
yum install mariadb-server.x86_64 -y

  1. [root@n9e home]# systemctl enable mariadb.service
  2. Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
  3. [root@n9e home]# systemctl restart mariadb.service
  4. [root@n9e home]#
  5. [root@n9e ~]# mysql_secure_installation

All in one

  1. tar zxvf n9e-2.7.2-dbd81ee.el7.x86_64.rpm-bundle.tar.gz
  2. yum install n9e-* -y
  1. [root@n9e ~]# mysql -u root -p
  2. Enter password:
  3. Welcome to the MariaDB monitor. Commands end with ; or \g.
  4. Your MariaDB connection id is 16
  5. Server version: 5.5.65-MariaDB MariaDB Server
  6. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  7. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  8. MariaDB [(none)]>
  9. MariaDB [(none)]> create user n9e@localhost identified by 'n9epwd123';
  10. Query OK, 0 rows affected (0.00 sec)
  11. MariaDB [(none)]> grant all on n9e_hbs.* to n9e@localhost;
  12. Query OK, 0 rows affected (0.00 sec)
  13. MariaDB [(none)]> grant all on n9e_mon.* to n9e@localhost;
  14. Query OK, 0 rows affected (0.00 sec)
  15. MariaDB [(none)]> grant all on n9e_uic.* to n9e@localhost;
  16. Query OK, 0 rows affected (0.00 sec)
  17. MariaDB [(none)]> exit
  18. Bye
  19. [root@n9e ~]# cp /usr/local/n9e/etc/nginx.conf /etc/nginx/
  20. cp: overwrite ‘/etc/nginx/nginx.conf’? y
  21. [root@n9e ~]# systemctl restart nginx
  22. [root@n9e ~]# systemctl enable --now n9e-index n9e-tsdb n9e-transfer n9e-monapi n9e-judge n9e-collector
  23. Created symlink from /etc/systemd/system/multi-user.target.wants/n9e-index.service to /usr/lib/systemd/system/n9e-index.service.
  24. Created symlink from /etc/systemd/system/multi-user.target.wants/n9e-tsdb.service to /usr/lib/systemd/system/n9e-tsdb.service.
  25. Created symlink from /etc/systemd/system/multi-user.target.wants/n9e-transfer.service to /usr/lib/systemd/system/n9e-transfer.service.
  26. Created symlink from /etc/systemd/system/multi-user.target.wants/n9e-monapi.service to /usr/lib/systemd/system/n9e-monapi.service.
  27. Created symlink from /etc/systemd/system/multi-user.target.wants/n9e-judge.service to /usr/lib/systemd/system/n9e-judge.service.
  28. Created symlink from /etc/systemd/system/multi-user.target.wants/n9e-collector.service to /usr/lib/systemd/system/n9e-collector.service.
  29. [root@n9e ~]#
  1. [root@n9e ~]# cd /usr/local/n9e/
  2. [root@n9e n9e]# tree
  3. .
  4. ├── control
  5. ├── data
  6. └── 5821
  7. ├── etc
  8. ├── address.yml
  9. ├── collector.yml
  10. ├── index.yml
  11. ├── judge.yml
  12. ├── monapi.yml
  13. ├── mysql.yml
  14. ├── nginx.conf
  15. ├── transfer.yml
  16. └── tsdb.yml
  17. ├── logs
  18. ├── collector
  19. ├── DEBUG.log
  20. ├── ERROR.log
  21. ├── FATAL.log
  22. ├── INFO.log
  23. └── WARNING.log
  24. ├── index
  25. ├── DEBUG.log
  26. ├── ERROR.log
  27. ├── FATAL.log
  28. ├── INFO.log
  29. └── WARNING.log
  30. ├── judge
  31. ├── DEBUG.log
  32. ├── ERROR.log
  33. ├── FATAL.log
  34. ├── INFO.log
  35. └── WARNING.log
  36. ├── monapi
  37. ├── DEBUG.log
  38. ├── ERROR.log
  39. ├── FATAL.log
  40. ├── INFO.log
  41. └── WARNING.log
  42. ├── transfer
  43. ├── DEBUG.log
  44. ├── ERROR.log
  45. ├── FATAL.log
  46. ├── INFO.log
  47. └── WARNING.log
  48. └── tsdb
  49. ├── DEBUG.log
  50. ├── ERROR.log
  51. ├── FATAL.log
  52. ├── INFO.log
  53. └── WARNING.log
  54. ├── n9e-collector
  55. ├── n9e-index
  56. ├── n9e-judge
  57. ├── n9e-monapi
  58. ├── n9e-transfer
  59. ├── n9e-tsdb
  60. ├── plugin
  61. ├── 60_plugin_status.py
  62. └── 60_uptime.sh
  63. ├── pub
  64. ├── favicon.ico
  65. ├── index-578b45d9a559320d6821.css
  66. ├── index-578b45d9a559320d6821.js
  67. ├── index-578b45d9a559320d6821.js.map
  68. ├── index.html
  69. ├── lib-033bee8514de110e36ef.dll.js
  70. └── static
  71. ├── Linearicons.01ce5c51.eot
  72. ├── Linearicons.5afa2cd3.svg
  73. ├── Linearicons.64e816d9.woff
  74. ├── Linearicons.fa3c7ba9.ttf
  75. ├── logo-l.a542dbb8.png
  76. └── logo-s.97cdf0ff.png
  77. └── sql
  78. ├── n9e_hbs.sql
  79. ├── n9e_mon.sql
  80. ├── n9e_uic.sql
  81. └── upgrade_2.3.0.sql
  82. 14 directories, 64 files
  83. [root@n9e n9e]#
  1. [root@n9e etc]# tree
  2. .
  3. ├── address.yml
  4. ├── collector.yml
  5. ├── index.yml
  6. ├── judge.yml
  7. ├── monapi.yml
  8. ├── mysql.yml
  9. ├── nginx.conf
  10. ├── transfer.yml
  11. └── tsdb.yml
  12. 0 directories, 9 files
  13. [root@n9e etc]# pwd
  14. /usr/local/n9e/etc
  15. [root@n9e etc]#
  1. [root@n9e n9e]# ls -l
  2. total 131492
  3. -rwxr-xr-x 1 n9e n9e 3721 Jul 5 12:48 control
  4. drwxr-xr-x 3 n9e n9e 18 Sep 10 21:31 data
  5. drwxr-xr-x 2 n9e n9e 169 Sep 10 21:22 etc
  6. drwxr-xr-x 8 n9e n9e 91 Sep 10 21:31 logs
  7. -rwxr-xr-x 1 n9e n9e 22598774 Jul 5 12:49 n9e-collector
  8. -rwxr-xr-x 1 n9e n9e 21930533 Jul 5 12:49 n9e-index
  9. -rwxr-xr-x 1 n9e n9e 21932480 Jul 5 12:49 n9e-judge
  10. -rwxr-xr-x 1 n9e n9e 22537776 Jul 5 12:49 n9e-monapi
  11. -rwxr-xr-x 1 n9e n9e 25305383 Jul 5 12:49 n9e-transfer
  12. -rwxr-xr-x 1 n9e n9e 20323496 Jul 5 12:50 n9e-tsdb
  13. drwxr-xr-x 2 n9e n9e 53 Sep 10 21:22 plugin
  14. drwxr-xr-x 3 n9e n9e 212 Sep 10 21:22 pub
  15. drwxr-xr-x 2 n9e n9e 88 Sep 10 21:22 sql
  16. [root@n9e n9e]#
  1. [root@n9e n9e]# ./n9e-collector -v
  2. 2020/09/10 21:37:03 maxprocs: Leaving GOMAXPROCS=2: CPU quota undefined
  3. Version: 2.7.2
  4. Git Commit Hash: dbd81eed2b347d16e9cf7f487563d08e58ccdaf9
  5. UTC Build Time: 2020-07-05_04:49:48AM
  6. [root@n9e n9e]#

image.png
image.png

v3 版本 升级

  1. [root@n9e app]# ll
  2. total 12
  3. lrwxrwxrwx 1 root root 15 Nov 23 09:45 n9e -> /app/n9e-3.3.0/
  4. drwxr-xr-x 10 root root 4096 Oct 29 12:47 n9e-3.0
  5. drwxr-xr-x 10 root root 4096 Nov 23 10:16 n9e-3.3.0
  6. drwxr-xr-x 5 root root 4096 Dec 27 08:59 n9e-3.3.1
  7. [root@n9e app]# ln -snf /app/n9e-3.3.1/ /app/n9e
  8. [root@n9e app]# ll
  9. total 12
  10. lrwxrwxrwx 1 root root 15 Dec 27 09:02 n9e -> /app/n9e-3.3.1/
  11. drwxr-xr-x 10 root root 4096 Oct 29 12:47 n9e-3.0
  12. drwxr-xr-x 10 root root 4096 Nov 23 10:16 n9e-3.3.0
  13. drwxr-xr-x 5 root root 4096 Dec 27 08:59 n9e-3.3.1
  14. [root@n9e app]# pwd
  15. /app
  16. [root@n9e app]# cd n9e
  17. [root@n9e n9e]# ./control restart all
  18. agent stopped
  19. judge stopped
  20. transfer stopped
  21. index stopped
  22. tsdb stopped
  23. monapi stopped
  24. ams stopped
  25. job stopped
  26. rdb stopped
  27. rdb started
  28. job started
  29. ams started
  30. monapi started
  31. tsdb started
  32. index started
  33. transfer started
  34. judge started
  35. agent started
  36. [root@n9e n9e]#

添加前端文件
cd /app/n9e
wget http://116.85.64.82/pub.tar.gz
tar zxvf pub.tar.gz
cp etc/nginx.conf /etc/nginx/nginx.conf
systemctl restart nginx

  1. [root@n9e home]# grafana-cli --pluginUrl https://github.com/n9e/grafana-n9e-datasource/archive/v1.5.4.zip plugins install grafana-n9e-datasource
  2. installing grafana-n9e-datasource @
  3. from: https://github.com/n9e/grafana-n9e-datasource/archive/v1.5.4.zip
  4. into: /var/lib/grafana/plugins
  5. Installed grafana-n9e-datasource successfully
  6. Restart grafana after installing plugins . <service grafana-server restart>
  7. [root@n9e home]# systemctl restart grafana-server.service
  8. [root@n9e home]#

告警
https://github.com/n9e/mail-sender

Nightingale夜莺 - 图4

升级 3.51

image.png
image.png

1:导入数据库

  1. mysql -uroot -p\!Q2w3e4r < n9e_ams.sql
  2. mysql -uroot -p\!Q2w3e4r < n9e_hbs.sql
  3. mysql -uroot -p\!Q2w3e4r < n9e_job.sql
  4. mysql -uroot -p\!Q2w3e4r < n9e_mon.sql
  5. mysql -uroot -p\!Q2w3e4r < n9e_rdb.sql

修改配置文件
数据库连接配置
nginx前端文件存放路径
检查各个服务是否能启动 无法启动请检查报错日志

  1. [root@n9e n9e]# ./control status
  2. root 1024 0.1 0.5 922532 24080 ? Ssl 11:22 0:11 /usr/local/n9e/n9e-collector
  3. root 86957 0.7 0.9 920592 37128 pts/0 Sl 12:58 0:00 /usr/local/n9e/n9e-rdb
  4. root 86974 0.2 0.3 923704 14788 pts/0 Sl 12:58 0:00 /usr/local/n9e/n9e-job
  5. root 87000 0.0 0.3 912900 14236 pts/0 Sl 12:58 0:00 /usr/local/n9e/n9e-ams
  6. root 87045 0.1 0.4 919152 18792 pts/0 Sl 12:58 0:00 /usr/local/n9e/n9e-monapi
  7. root 87069 0.5 0.4 906856 18808 pts/0 Sl 12:58 0:00 /usr/local/n9e/n9e-tsdb
  8. root 87086 0.0 0.4 987820 16588 pts/0 Sl 12:58 0:00 /usr/local/n9e/n9e-index
  9. root 87116 0.5 0.6 932692 26452 pts/0 Sl 12:58 0:00 /usr/local/n9e/n9e-transfer
  10. root 87133 0.9 0.4 989236 18448 pts/0 Sl 12:58 0:00 /usr/local/n9e/n9e-judge
  11. root 87169 2.7 0.4 981620 19720 pts/0 Sl 12:58 0:00 /usr/local/n9e/n9e-agent
  12. root 87210 1.0 0.4 928388 17664 pts/0 Sl 12:58 0:00 /usr/local/n9e/n9e-prober
  13. [root@n9e n9e]#

image.png

  1. [root@n9e n9e]# cd logs/
  2. [root@n9e logs]# ls
  3. agent ams index job judge monapi prober rdb transfer tsdb
  4. [root@n9e logs]#

image.png

新版主要功能点
image.png

image.png

客户端部署: