nightingale1/README.md

151 lines
9.0 KiB
Markdown
Raw Normal View History

2020-09-26 23:59:34 +08:00
v3.x终于来了文档正在编写中稍安勿躁...
---
# 升级说明
2020-09-28 12:33:27 +08:00
v3.x的版本和v2.x差别巨大没办法平滑迁移可以继续使用 [v.2.8.0](https://github.com/didi/nightingale/tree/v2.8.0) 我们之所以决定升级到v3.x具体原因 [请看这里](https://mp.weixin.qq.com/s/BoGcqPiIQIuiK7cM3PTvrw) 简而言之我们是希望夜莺逐渐演化为一个运维平台。如果v2.x用着也能满足需求可以继续用v2.x毕竟适合自己的才是最好的
2020-09-26 23:59:34 +08:00
# 新版效果
2020-09-27 23:02:54 +08:00
用户资源中心:
2020-10-08 15:23:39 +08:00
![用户资源中心截图](https://s3-gz01.didistatic.com/n9e-pub/image/snapshot/rdb.png)
2020-09-27 23:02:54 +08:00
资产管理中心:
2020-10-08 15:23:39 +08:00
![资产管理中心截图](https://s3-gz01.didistatic.com/n9e-pub/image/snapshot/ams.png)
2020-09-27 23:02:54 +08:00
任务执行中心:
2020-10-08 15:23:39 +08:00
![任务执行中心截图](https://s3-gz01.didistatic.com/n9e-pub/image/snapshot/job.png)
2020-09-27 23:02:54 +08:00
监控告警中心:
2020-10-08 15:23:39 +08:00
![监控告警中心截图](https://s3-gz01.didistatic.com/n9e-pub/image/snapshot/mon.png)
2020-09-27 23:02:54 +08:00
2020-09-26 23:59:34 +08:00
# 安装步骤
1、找个干净的CentOS7准备好mysql、redis、nginx简单yum安装一下即可生产环境mysql建议找dba帮忙来搞
2020-09-27 23:20:23 +08:00
```shell script
2020-09-26 23:59:34 +08:00
yum install -y mariadb* redis nginx
```
2、下载我们编译好的二进制到/home/n9e目录如果要更换目录要注意修改nginx.conf建议先用这个目录玩熟了再说
2020-09-27 23:20:23 +08:00
```shell script
2020-09-26 23:59:34 +08:00
mkdir -p /home/n9e
cd /home/n9e
wget http://116.85.64.82/n9e-3.0.0.tar.gz
tar zxvf n9e-3.0.0.tar.gz
```
3、初始化数据库这里假设使用root账号密码1234如果不是这个账号密码注意修改/home/n9e/etc/mysql.yml
2020-09-27 23:20:23 +08:00
```shell script
2020-09-26 23:59:34 +08:00
cd /home/n9e/sql
mysql -uroot -p1234 < n9e_ams.sql
mysql -uroot -p1234 < n9e_hbs.sql
mysql -uroot -p1234 < n9e_job.sql
mysql -uroot -p1234 < n9e_mon.sql
mysql -uroot -p1234 < n9e_rdb.sql
```
4、redis配置修改默认配置的6379端口密码为空如果默认配置不对可以执行如下命令看到多个配置文件里有redis相关配置挨个检查修改下
2020-09-27 23:20:23 +08:00
```shell script
2020-09-26 23:59:34 +08:00
cd /home/n9e/etc
grep redis -r .
```
2020-09-27 23:20:23 +08:00
5、下载前端静态资源文件放到默认的/home/n9e目录下如果要改目录需要修改后面提到的nginx.conf
```shell script
cd /home/n9e
2020-09-29 17:42:53 +08:00
wget http://116.85.64.82/pub.tar.gz
tar zxvf pub.tar.gz
2020-09-27 23:20:23 +08:00
```
6、覆盖nginx.conf建议大家还是看一下这个配置熟悉一下nginx配置夜莺不同web侧组件就是通过nginx的不同location区分的。覆盖完了配置记得reload一下或者重启nginx
```shell script
cp etc/nginx.conf /etc/nginx/nginx.conf
```
2020-09-26 23:59:34 +08:00
2020-09-27 23:20:23 +08:00
7、检查identity.yml要保证这个shell可以正常获取本机ip如果实在不能正常获取自己又不懂shell不会改在specify字段写死也行
2020-09-26 23:59:34 +08:00
2020-09-27 23:20:23 +08:00
```yaml
# 用来做心跳给服务端上报本机ip
ip:
specify: ""
shell: ifconfig `route|grep '^default'|awk '{print $NF}'`|grep inet|awk '{print $2}'|head -n 1
2020-09-26 23:59:34 +08:00
2020-09-27 23:20:23 +08:00
# MON、JOB的客户端拿来做本机标识
ident:
specify: ""
shell: ifconfig `route|grep '^default'|awk '{print $NF}'`|grep inet|awk '{print $2}'|head -n 1
```
2020-09-26 23:59:34 +08:00
2020-09-27 23:20:23 +08:00
8、检查agent.yml的几个shell挨个检查是否可以跑通跑不通就改成适合自己的实在是不会改直接写死比如disk部分写死80Gi直接写`disk: echo 80Gi`即可
```yaml
report:
# ...
sn: dmidecode -s system-serial-number | tail -n 1
fields:
cpu: cat /proc/cpuinfo | grep processor | wc -l
mem: cat /proc/meminfo | grep MemTotal | awk '{printf "%dGi", $2/1024/1024}'
disk: df -m | grep '/dev/' | grep -v '/var/lib' | grep -v tmpfs | awk '{sum += $2};END{printf "%dGi", sum/1024}'
```
2020-09-26 23:59:34 +08:00
2020-09-27 23:20:23 +08:00
9、启动各个进程包括mysql、redis、nginx夜莺的各个组件直接用control脚本启动即可后续上生产环境可以用systemd之类的托管
2020-09-26 23:59:34 +08:00
2020-09-27 23:27:11 +08:00
```shell script
cd /home/n9e
./control start all
```
10、登录web账号root密码root.2020进来第一步一定要修改密码如果nginx报权限类的错误检查selinux是否关闭了如下命令可关闭
```shell script
setenforce 0
```
2020-09-26 23:59:34 +08:00
2020-10-08 15:23:39 +08:00
上面安装步骤如果走完了仍然没有搭建起来,你可能需要 [使用Docker安装](dockerfiles/README.md) 或者 [查看视频教程](https://mp.weixin.qq.com/s/OAEQ-ec-QM74U0SGoVCXkg)
2020-09-30 11:07:11 +08:00
# 子系统简介
夜莺拆成了四个子系统分别是用户资源中心RDB、资产管理系统AMS、任务执行中心JOB、监控告警系统MON。下面分别介绍一下这几个子系统的设计初衷
## 用户资源中心
这是一个平台底座所有的运维系统都需要依赖这个内置用户、权限、角色、组织、资源的管理。最核心的是一棵组织资源树树节点的类别和扩展字段可以自定义组织资源树的层级结构最简单的组织方式是租户》项目》模块复杂一点的组织方式租户》组织》项目》模块》集群组织是可以嵌套的。节点上挂两类对象一个是人员权限一个是资源资源可以是各类资源除了主机设备、网络设备也可以是rds实例redis实例当然这就需要rds、redis的管控系统和RDB打通了。滴滴在做一些大的中后台商业化解决方案的时候RDB就是扮演了这么一个底座的角色。
## 资产管理系统
这里的资产管理系统是偏硬件资产的管理这个系统的使用者一般是系统部的人资产管理类人员应用运维相对不太关注这个系统。开源版本开放了一个主机设备的管理大家可以二开增加一些网络设备管理、机柜机架位的管理、配件耗材的管理等等有了底座上面再长出一些其他系统都相对容易。agent安装之后会自动注册到资产管理系统自动采集到机器的sn、ip、cpu、mem、disk等信息这些信息为了灵活性考虑都是用shell采集的上文“安装步骤”一章有提到其中最重要的是ip系统中有很多设备ip是需要全局唯一其他的sn、cpu、mem、disk等如果无法采集成功可以写死shell里直接写echo一个假数据即可。
每一条资产,都有一个租户的字段,代表资产归属,需要管理员去分配资产归属(修改资产的所属租户),各个租户才能使用对应的资产,分配完了之后,会出现在用户资源中心的“游离资源”菜单中,各个租户就可以把游离资源挂到资产树上去分门别类的管理使用。树节点的创建是在树上右键哈。
## 任务执行中心
用于批量跑脚本类似pssh、ansible、saltstack不过不支持playbook大道至简就用脚本撸吧shell、python、perl、ruby都行只要机器上有解析器。因为是内置到夜莺里的所以体系化会更好一些和组织资源树的权限是打通的可以控制不同的人对不同的机器有不同的权限有些人可以用root账号执行有些人只能用普通账号执行历史执行记录都可以通过web页面查看审计。任务本身支持一些控制暂停点、容忍度、单机超时时间、中途暂停、中途取消、中途Kill等。
一些经常要跑的脚本可以做成模板模板时对脚本的一种管理方式后续就可以基于模板创建任务填个机器列表就可以执行。比如安装JDK调整TCP内核参数调整ulimit等机器初始化脚本都可以做成模板。
开源版本的任务执行中心可以看做是一个命令通道后续可以基于这个命令通道构建一些场景化应用比如机器初始化平台、服务变更发布平台、配置分发系统等。任务执行中心各类操作都有API对外暴露具体可参看[router.go](https://github.com/didi/nightingale/blob/master/src/modules/job/http/router.go) 我司的命令通道每周执行任务量超过60万就是因为各类上层业务都在依赖这个命令通道的能力。
## 监控告警系统
这块核心逻辑和v2版本差别不大监控指标分成了设备相关指标和设备无关指标因为有些自定义监控数据的场景endpoint不好定义或者endpoint经常变化这种就可以使用设备无关指标的方式来处理。监控大盘做了优化引入了更多类型的图表但夜莺毕竟是个metrics监控系统处理的是数值型时序数据所以最有用的图表其实就是折线图其他类型图表看看就好场景较少。夜莺也可以对接Grafana有个专门的[DataSource插件](https://github.com/n9e/grafana-n9e-datasource)Grafana会更炫酷一些只是在数据量大的时候性能较差。
2020-09-26 23:59:34 +08:00
2020-10-08 15:23:39 +08:00
# 系统架构
![n9e系统架构图](https://s3-gz01.didistatic.com/n9e-pub/image/n9e-v3-arch.png)
监控部分的架构和之前没有差别collector揉进了一些命令执行的能力所以改了个名字叫agent。引入了三个新组件rdb、ams、jobrdb是用户资源中心ams是资产管理系统job是任务执行中心。agent除了上报监控数据给transfer还会上报本机信息给ams注册本机信息到资产管理系统另外就是与job模块交互拉取要执行的任务上报任务执行结果。
2020-09-26 23:59:34 +08:00