nightingale部署及使用

官方文档链接: https://n9e.didiyun.com/docs/
官方视频链接: https://space.bilibili.com/442531657
软件下载地址: https://github.com/didi/nightingale/releases

我这里机器的硬件配置为8核,16G,部署的是v3(版本)的n9e

一.系统介绍

各子系统简介

夜莺拆成了四个子系统,分别是:

  • 用户资源中心(RDB)
  • 资产管理系统(AMS)
  • 任务执行中心(JOB)
  • 监控告警系统(MON)

下面分别介绍一下这几个子系统的设计初衷。

用户资源中心

这是一个平台底座,所有的运维系统,都需要依赖此系统,内置用户、权限、角色、组织、资源的管理。最核心的是一棵组织资源树,树节点的类别和扩展字段可以自定义,组织资源树的层级结构最简单的组织方式是:租户>项目>模块,复杂一点的组织方式:租户>组织>项目>模块>集群,组织是可以嵌套的。

节点上挂两类对象,一个是人员权限,一个是资源,资源可以是各类资源,除了主机设备、网络设备,也可以是rds实例,redis实例,当然,这就需要rds、redis的管控系统和RDB打通了。

资产管理系统

这里的资产管理系统,是偏硬件资产的管理,这个系统的使用者一般是系统部的人,资产管理类人员,应用运维相对不太关注这个系统。开源版本开放了一个主机设备的管理,大家可以二开,增加一些网络设备管理、机柜机架位的管理、配件耗材的管理等等,有了底座,上面再长出一些其他系统都相对容易。

agent安装完成之后,会自动注册到资产管理系统,自动采集到机器的 sn(Serial Number,产品序列号)、ip、cpu、mem、disk 等信息,这些信息为了灵活性考虑,都是用 shell 采集的,上文安装步骤一章有提到,其中最重要的是 ip,系统中有很多设备,ip 是需要全局唯一,其他的 sn、ip、cpu、mem、disk 等,如果无法采集成功,可以写为固定值,shell 里直接写 echo 一个假数据即可。

每一条资产,都有一个租户的字段,代表资产归属,需要管理员去分配资产归属(修改资产的所属租户),各个租户才能使用对应的资产,分配完了之后,会出现在用户资源中心的"游离资源"菜单中,各个租户就可以把游离资源挂到资产树上去分门别类的管理使用。树节点的创建是在树上右键。

任务执行中心

用于批量跑脚本,类似pssh、ansible、saltstack,不过不支持playbook,大道至简,就用脚本撸吧,shell、python、perl、ruby,都行,只要机器上有解析器。因为是内置到夜莺里的,所以体系化会更好一些,和组织资源树的权限是打通的,可以控制不同的人对不同的机器有不同的权限,有些人可以用root账号执行,有些人只能用普通账号执行,历史执行记录都可以通过web页面查看审计。任务本身支持一些控制:暂停点、容忍度、单机超时时间、中途暂停、中途取消、中途Kill等。

一些经常要跑的脚本,可以做成模板,模板是对脚本的一种管理方式,后续就可以基于模板创建任务,填个机器列表就可以执行。比如安装JDK,调整TCP内核参数,调整ulimit等机器初始化脚本,都可以做成模板。

开源版本的任务执行中心,可以看做是一个命令通道,后续可以基于这个命令通道构建一些场景化应用,比如机器初始化平台、服务变更发布平台、配置分发系统等。任务执行中心各类操作都有 API 对外暴露,具体可参看:router.go 我司的命令通道每周执行任务量超过60万,就是因为各类上层业务都在依赖这个命令通道的能力。

监控告警系统

这块核心逻辑和v2版本差别不大,监控指标分成了设备相关指标和设备无关指标,因为有些自定义监控数据的场景,endpoint不好定义,或者 endpoint 经常变化,这种就可以使用设备无关指标的方式来处理。监控大盘做了优化,引入了更多类型的图表,但夜莺毕竟是个 metrics 监控系统,处理的是数值型时序数据,所以,最有用的图表其实就是折线图,其他类型图表,看看就好,场景较少。夜莺也可以对接Grafana,有个专门的 DataSource插件,Grafana会更炫酷一些,只是,在数据量大的时候性能较差。

系统架构

n9e系统架构图

nightingale部署及使用

当前是v3架构,请大家先看视频学习v2的架构,然后再来看这张架构图,监控部分的架构和之前没有差别,collector揉进了一些命令执行的能力,所以改了个名字叫agent。引入了三个新组件:rdb、ams、job,rdb是用户资源中心,ams是资产管理系统,job是任务执行中心。agent除了上报监控数据给transfer,还会上报本机信息给ams,注册本机信息到资产管理系统,另外就是与job模块交互,拉取要执行的任务,上报任务执行结果。

二.二进制部署

  • 1.准备一台系统为 CentOS7.X 的虚拟机或物理机,并安装完成 mysql、redis、nginx软件,简单 yum 安装即可.
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y mariadb* redis nginx
  • 2.下载已经编译好的二进制包到 /home/n9e 目录,如果想要更换安装目录,需要修改 nginx.conf,建议先用这个目录,熟悉之后,在进行自定义。
mkdir -p /home/n9e
cd /home/n9e
wget http://116.85.64.82/n9e.tar.gz
tar zxvf n9e.tar.gz
  • 3.初始化数据库,这里假设使用 root 账号,密码为 1234,如果不是这个账号密码,需要修改 /home/n9e/etc/mysql.yml。
安全初始化,设置密码为1234,除了设置新密码的地方输入1234之外,其余问题都输入Y。
mysql_secure_installation
systemctl start mariadb.server
systemctl enable mariadb.server
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 相关配置,挨个检查并修改即可。
systemctl start redis
systemctl enable redis
redis服务开启之后默认开放的就是6379端口,这里不用修改。
cd /home/n9e/etc
grep redis -r .
  • 5.下载前端静态资源文件,放到默认的 /home/n9e 目录下,如果要更改目录,需要修改后面提到的 nginx.conf 文件。
    前端的源码单独拆了一个 repo,地址是: https://github.com/n9e/fe 没有和 nightingale 放在一起。
cd /home/n9e
wget http://116.85.64.82/pub.tar.gz
tar zxvf pub.tar.gz
  • 6.覆盖 nginx.conf,建议大家还是看一下这个配置,熟悉一下 nginx 的配置,夜莺不同 web 侧组件就是通过 nginx 的不同 location 区分的,覆盖完了配置记得 reload 一下或者重启 nginx。
cp etc/nginx.conf /etc/nginx/nginx.conf
nginx -t 
systemctl start nginx
systemctl restart nginx
systemctl enable nginx
  • 7.检查 identity.yml,要保证这个 shell 可以正常获取本机 ip,如果实在不能正常获取,自己又不懂 shell,那么在 specify 字段写固定也可以。
# 用来做心跳,给服务端上报本机ip
ip:
  specify: ""
  shell: ifconfig `route|grep '^default'|awk '{print $NF}'`|grep inet|awk '{print $2}'|head -n 1

# MON、JOB的客户端拿来做本机标识
ident:
  specify: ""
  shell: ifconfig `route|grep '^default'|awk '{print $NF}'`|grep inet|awk '{print $2}'|head -n 1
  • 8.检查 agent.yml 的几个 shell,挨个检查是否可以跑通,跑不通就改成适合自己环境的,实在不会改,直接写固定,比如 disk 部分,如果固定为 80Gi ,那么就可以写为:disk: echo 80Gi。
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}'
  • 9.启动各个进程,包括 mysql、redis、nginx,夜莺的各个组件直接用 control 脚本启动即可,后续上生产环境,可以用systemd 之类的进行托管。
cd /home/n9e
./control start all
  • 10.登录 web,账号 root,密码 root.2020,登入后第一步先要修改密码,如果 nginx 报权限类的错误,检查 selinux 是否关闭以及防火墙策略是否异常,如下命令可关闭 selinux 和防火墙。
setenforce 0   # 临时调整selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config  # 永久调整selinux,reboot重启后生效

systemctl disable firewalld.service
systemctl stop firewalld.service

systemctl stop NetworkManager
systemctl disable NetworkManager

登录界面
nightingale部署及使用

三.agent端接入n9e的方法

server端

  • 1.修改配置文件address.yml,将monapi和transfer的addresses都改为本机ip
vim /home/n9e/etc/address.yml

monapi:
  http: 0.0.0.0:8006
  addresses:
    - 172.16.108.145

transfer:
  http: 0.0.0.0:8008
  rpc: 0.0.0.0:8009
  addresses:
    - 172.16.108.145

agent端

  • 1.新建n9e的目录
mkdir /home/n9e/
  • 2.将server端的n9e的目录/home/n9e下的etc目录,n9e-agent的启动文件,agent端服务的systemd启动文件打包发送到agent主机的/home/n9e下。
cp /home/n9e/etc/service/agent.service  /usr/lib/systemd/system

[root@nightingale /home/n9e/etc/service]# cat agent.service 
[Unit]
Description=n9e agent
After=network-online.target
Wants=network-online.target

[Service]
# modify when deploy in prod env
User=root
Group=root

Type=simple
Environment="GIN_MODE=release"
ExecStart=/home/n9e/n9e-agent
WorkingDirectory=/home/n9e

Restart=always
RestartSec=1
StartLimitInterval=0

[Install]

nightingale部署及使用

  • 3.执行n9e-agent二进制文件
cd /home/n9e
./n9e-agent

systemctl start agent.service
systemctl enable agent.service

四.容器方式部署

docker环境部署

  • 1.docker

利用华为源下载docker-ce的yum仓库:https://mirrors.huaweicloud.com/

根据版本下载docker的repo文件:
wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo

软件仓库地址替换为:
sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

更新索引文件并安装:
sudo yum makecache fast
yum install docker -y
systemctl start docker
systemctl enable docker
安装成功之后,可以查看docker安装的版本
docker version

nightingale部署及使用

  • 2.docker-compose
    github下载链接: https://github.com/docker/compose/releases/
由于我们的docker版本不是很高,所以docker-compose的版本也需要选择稍微老点的版本,防止容器启动时报错。
mv docker-compose-Linux-x86_64 docker-compose
将可执行权限应用于二进制文件:
chmod +x docker-compose

mv docker-compose /usr/local/bin/
创建软链接:
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
docker-compose --version

n9e的docker方式部署

使用 docker 和 docker-compose 环境可以快速部署一整套 nightingale 系统,涵盖了所有的核心组件。

建议使用一个新的虚拟环境来部署和测试这个系统。
系统组件占用了以下端口,80, 5800, 5810, 5811, 5820, 5821, 5830, 5831, 5840, 5841, 6379, 2058, 3306,部署前请确保这些端口没有被使用。

yum install git -y
mkdir /home/n9e
cd /home/n9e
git clone https://github.com/didi/nightingale.git

下载夜莺repo的内容
cd dockerfiles
docker-compose up
修改hosts 加入 127.0.0.1 n9e.example.com
浏览器访问 http://n9e.example.com
用户名 root 密码 root.2020

nightingale部署及使用

五.各个部分的使用

这部分可以观看官方在b站的视频,视频链接:https://space.bilibili.com/442531657,结合官方文档的描述,会理解的更透彻哦~

上一篇:Linux学习笔记二【文件和目录管理】


下一篇:「开源发布」 滴滴内部监控系统 Nightingale 开源啦