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系統架構圖

當前是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

登錄界面

三.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]

  • 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

  • 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

五.各個部分的使用

這部分可以觀看官方在b站的視頻,視頻鏈接:https://space.bilibili.com/442531657,結合官方文檔的描述,會理解的更透徹哦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM