自動(dòng)化運(yùn)維平臺(tái)Spug測(cè)試

前言:在之前的文章批量執(zhí)行crontab指定條目的注釋和解注釋提到過spug平臺(tái),本文具體的對(duì)該平臺(tái)做詳細(xì)介紹。

Spug 面向中小型企業(yè)設(shè)計(jì)的輕量級(jí)無(wú) Agent 的自動(dòng)化運(yùn)維平臺(tái),整合了主機(jī)管理、主機(jī)批量執(zhí)行、主機(jī)在線終端、文件在線上傳下載、應(yīng)用發(fā)布部署、在線任務(wù)計(jì)劃、配置中心、監(jiān)控、報(bào)警等一系列功能。

環(huán)境說明:

主機(jī)名 操作系統(tǒng)版本 ip地址 docker版本 Spug版本 備注
ansible Centos 7.6.1810 172.27.34.51 18.09.9 v2.3.8 管理服務(wù)器

一、特性

  • 批量執(zhí)行: 主機(jī)命令在線批量執(zhí)行
  • 在線終端: 主機(jī)支持瀏覽器在線終端登錄
  • 文件管理: 主機(jī)文件在線上傳下載
  • 任務(wù)計(jì)劃: 靈活的在線任務(wù)計(jì)劃
  • 發(fā)布部署: 支持自定義發(fā)布部署流程
  • 配置中心: 支持 KV、文本、json 等格式的配置
  • 監(jiān)控中心: 支持站點(diǎn)、端口、進(jìn)程、自定義等監(jiān)控
  • 報(bào)警中心: 支持短信、郵件、釘釘、微信等報(bào)警方式
  • 優(yōu)雅美觀: 基于 Ant Design 的 UI 界面
  • 開源免費(fèi): 前后端代碼完全開源

本文會(huì)對(duì)‘批量執(zhí)行’、‘在線終端’、‘文件管理’、‘任務(wù)計(jì)劃’、‘監(jiān)控中心’、‘報(bào)警中心’等功能。‘應(yīng)用發(fā)布’和‘配置中心’下篇再做介紹。

二、軟件安裝

1.安裝軟件

[root@ansible yaml]# docker pull registry.aliyuncs.com/openspug/spug
[root@ansible yaml]# docker run -d --name=spug -p 80:80 -v /mydata/:/data registry.aliyuncs.com/openspug/spug
[root@ansible yaml]#  docker exec spug init_spug admin spug.dev
image-20200821172347258

通過docker方式安裝,docker安裝請(qǐng)參考:k8s實(shí)踐(一):Centos7.6部署k8s(v1.14.2)集群中docker安裝章節(jié)。

'-p 80:80',spug的80端口映射端口為系統(tǒng)的80端口,‘-v /mydata/:/data’將容器的/data路徑映射為系統(tǒng)的/mydata目錄。

初始化管理員賬號(hào)admin,密碼為spug.dev

2.登陸

http://172.27.34.51

image-20200918154615369

三、工作臺(tái)

image-20200918161814176

工作臺(tái)是一個(gè)概覽,包含應(yīng)用、主機(jī)任務(wù)、監(jiān)控和報(bào)警等信息。

四、主機(jī)管理

1.新建主機(jī)

image-20200918162405102

'主機(jī)類別'為自定義類別,分別輸入主機(jī)名和連接地址,單擊驗(yàn)證

image-20200918162427616

輸入root用戶密碼

image-20200918162451768

主機(jī)添加成功

2.批量導(dǎo)入主機(jī)

image-20200918162651704

使用批量導(dǎo)入方式導(dǎo)入主機(jī),可以先下載模板在更新上傳。

image-20200918163520497

登陸密碼一欄填寫個(gè)主機(jī)密碼,若為空則為默認(rèn)密碼'spug-default-keys'

image-20200918163740084

導(dǎo)入成功

image-20200927095138906

登陸密碼為傳輸公鑰時(shí)使用,系統(tǒng)不保存密碼,下次可免密登陸訪問。

通信原理: 第一次在登錄的時(shí)候會(huì)生產(chǎn)公私鑰,密碼只是用在第一次發(fā)送公鑰上。

image-20200918164015155

公鑰保存在各個(gè)被管理主機(jī)上,私鑰存在于spug平臺(tái)里(不是172.27.34.51服務(wù)里上面)。

五、在線終端

image-20200918164208432

單機(jī)主機(jī)欄后面的'Console'即可免密進(jìn)入終端

image-20200918164347905

進(jìn)入終端,執(zhí)行'df -h'命令

六、文件管理

進(jìn)入在線終端后點(diǎn)擊右上角的'文件管理器'即可進(jìn)行文件上傳下載操作

image-20200918164609045
image-20200918164551678

spug可方便的進(jìn)行文件上傳下載,不用使用ftp工具或者繁瑣的命令。

七、批量執(zhí)行

該功能為spug核心功能之一,現(xiàn)從命令方式和模板方式演示。

1.命令方式

image-20200918165006138

選擇執(zhí)行主機(jī)ansible、test162、test163,執(zhí)行命令'df -h'和'echo "hello world"'

執(zhí)行結(jié)果:

image-20200918165122193

2.模板方式

image-20200918165248650

新建兩個(gè)模板'注釋crontab'和'解注釋crontab',模板內(nèi)容其實(shí)也是shell腳本,比如'注釋crontab':

image-20200918165410058

模板方式批量執(zhí)行:

image-20200918165511649

執(zhí)行完成,該模板內(nèi)容為批量注釋指定的crontab

image-20200918165557753

八、任務(wù)計(jì)劃

image-20200918171349009

新建任務(wù)計(jì)劃date,任務(wù)類型可自定義,失敗通知選釘釘,后面會(huì)有介紹,下一步

image-20200924153432103

執(zhí)行對(duì)象選擇test162和test163

image-20200918171615712

選擇執(zhí)行規(guī)則,UNIX Cron和linux的crontab類似,這里設(shè)置每分鐘執(zhí)行一次。

image-20200918171711242

激活任務(wù)

image-20200918172104322

驗(yàn)證:

image-20200918172427399

每分鐘向/tmp/date.txt文件輸入當(dāng)前時(shí)間。

九、報(bào)警中心

在介紹監(jiān)控中心之前先介紹報(bào)警中心

1.報(bào)警歷史

image-20200921100329614

報(bào)警歷史可以查看報(bào)警的歷史信息,包括任務(wù)名、通知方式、通知對(duì)象和發(fā)生時(shí)間等。

2.報(bào)警聯(lián)系人

以添加聯(lián)系人loong576說明

2.1 報(bào)警聯(lián)系人概覽

image-20200921101210081

告警方式包括郵箱、微信、釘釘和企業(yè)微信。

2.2 獲取微信Token

關(guān)注微信公眾號(hào)'Spug運(yùn)維',點(diǎn)擊'我的'菜單獲取

image-20200921101607742

2.3 獲取釘釘webhook

image-20200921102309212

首先新建群聊

image-20200921165532908

選擇接收的聯(lián)系人,創(chuàng)建群‘spug告警接收’

image-20200921165827672
image-20200921165939988
image-20200921170026675
image-20200921170141108
image-20200921170119747
image-20200921170218316

點(diǎn)擊群聊窗口右邊的‘群設(shè)置’,‘智能群助手’,‘添加機(jī)器人’,‘自定義’,單擊‘添加’

image-20200921170449444

根據(jù)實(shí)際情況填寫安全設(shè)置,我這里填的是‘自定義關(guān)鍵詞’,最多匹配10個(gè),任意一個(gè)關(guān)鍵詞被匹配到就會(huì)接收消息。

image-20200921170625946

完成機(jī)器人添加,復(fù)制webhook。

2.4 獲取企業(yè)微信webhook

企業(yè)微信獲取webhook方式和釘釘有些類似,也是先建群,然后添加機(jī)器人。

image-20200923154249811

建群,選中群,添加群機(jī)器人

image-20200923154259574
image-20200923154336795

創(chuàng)建一個(gè)機(jī)器人

image-20200923154414611
image-20200923154445961

復(fù)制webhook地址

3.報(bào)警聯(lián)系人組

image-20200923154828360

告警是以組的方式發(fā)送的,新建告警組test_team,將告警聯(lián)系人loong576加入改組。

image-20200923154924773

十、監(jiān)控中心

1.監(jiān)控中心概覽

image-20200923155021034

監(jiān)控方式有四種:站點(diǎn)監(jiān)控、端口監(jiān)控、站點(diǎn)監(jiān)控和自定義監(jiān)控。這里以端口監(jiān)控和自定義監(jiān)控做說明。

2.端口監(jiān)控

image-20200923160107117

新建端口監(jiān)控,監(jiān)控地址為172.27.34.51,監(jiān)控端口為8808

image-20200923160232920

監(jiān)控頻率為1分鐘,即1分鐘檢查一次;報(bào)警閥值為3次,即檢查3次不成功才發(fā)出報(bào)警;報(bào)警聯(lián)系人組為test_team;報(bào)警方式為微信、釘釘、郵件和企業(yè)微信;通道沉默為5分鐘,表示每5分鐘發(fā)送一次報(bào)警消息。

image-20200923160438695

提交后等待檢測(cè)

image-20200923160751763

發(fā)現(xiàn)8808端口檢測(cè)異常

2.1 微信告警

image-20200923161204956

2.2 釘釘告警

image-20200923161300810

2.3 郵件告警

image-20200923161331167
image-20200923161340884

2.4 企業(yè)微信告警

image-20200923161411558

3. 自定義監(jiān)控

以監(jiān)控文件系統(tǒng)使用率為例,超過5%即報(bào)警,監(jiān)控腳本如下:

#!/bin/bash
num=5
df -h|grep -vE 'tmpfs|cdrom'| awk -F '[ %]+' 'NR == 1 {next} {print $6 "     "  $5}' |while read df_file;
do 
  value=$(echo $df_file | awk '{ print $2}')
  name=$(echo $df_file | awk '{ print $1 }')
  if [ $value -ge $num ]
  then
  echo "主機(jī)`hostname`文件系統(tǒng) $name 使用率為 $value% "
  fi
done

for i in $(df -h| awk -F '[ %]+' 'NR == 1 {next} {print $5}'|xargs) 
do 
  if [ $i -ge $num ]
  then
  exit $i 
  fi
done
image-20200923162442880

腳本邏輯:首先設(shè)置閥值為'num=5',通過'df -h'獲取文件系統(tǒng)使用率所在的列,然后與閥值循環(huán)比較,如果大于閥值則輸出告警信息'主機(jī)hostname文件系統(tǒng) name 使用率為value% '。

自定義告警的原理:通過腳本判斷監(jiān)控項(xiàng),腳本執(zhí)行退出狀態(tài)碼為 0 則判定為正常,其他為異常。

3.1 報(bào)警信息

微信:

image-20200923162416094

釘釘:

image-20200923162503570

郵件:

image-20200923162527846

企業(yè)微信:

image-20200923162548995

十一、系統(tǒng)管理

1.角色管理

image-20200923163513658

新建角色test_role

image-20200923163613674

分配權(quán)限如圖

2.賬戶管理

image-20200923163715896

新建賬戶loong576,分配角色test_role

image-20200927093659364

2.1 賬戶禁用問題

現(xiàn)象:

image-20200917101915977

解決:

[root@ansible ~]# docker exec spug python3 /data/spug/spug_api/manage.py user enable -u admin
image-20200917101612841

2.2 重置密碼

現(xiàn)象:

image-20200917101440925

解決:

[root@ansible ~]# docker exec spug python3 /data/spug/spug_api/manage.py user reset -u admin -p Admin01!
image-20200917101459190

3.系統(tǒng)設(shè)置

3.1 秘鑰設(shè)置

image-20200923163915578

spug 有自己的密鑰對(duì),公鑰保存在被管理的主機(jī)內(nèi),私鑰保存在spug平臺(tái)內(nèi)(不是管理主機(jī)172.27.34.51里)。通過

十二、其它問題

1.root無(wú)法直接登錄問題

1.1 問題說明

由于root用戶禁止直接登錄,新建主機(jī)時(shí)登錄用戶不能設(shè)置為root,否則會(huì)報(bào)錯(cuò),此時(shí)如果需要執(zhí)行需要root權(quán)限的命令時(shí),需要加sudo,但是運(yùn)行sudo時(shí)需要輸入密碼確認(rèn),spug平臺(tái)批量執(zhí)行時(shí)沒有交互窗口,運(yùn)行命令會(huì)報(bào)錯(cuò),此時(shí)則需要進(jìn)行提權(quán)操作且免密。

[monitor@work01 /]$ id
uid=1002(monitor) gid=1002(monitor) 組=1002(monitor)
[monitor@work01 /]$ more /etc/sudoers
/etc/sudoers: 權(quán)限不夠
[monitor@work01 /]$ sudo more /etc/sudoers|grep monitor
monitor    ALL=(ALL)   NOPASSWD:    ALL

修改文件'/etc/sudoers',新增:'monitor ALL=(ALL) NOPASSWD: ALL'

1.2 monitor用戶獲取root權(quán)限運(yùn)行示例

不使用sudo情況:

image-20200826155136289

使用sudo:

image-20200826155158912
image-20200826155221773

使用sudo運(yùn)行需要root權(quán)限的額命令,直接運(yùn)行,不需要二次輸入密碼。

2.打通網(wǎng)絡(luò)

如果是生產(chǎn)環(huán)境無(wú)法聯(lián)網(wǎng)的話,發(fā)送告警信息則需要打通網(wǎng)絡(luò)

到微信:http://spug-wx.qbangmang.com 80
到釘釘:https://oapi.dingtalk.com 443
到企業(yè)微信:https://qyapi.weixin.qq.com 443

3.設(shè)置容器自啟動(dòng)

[root@ansible ~]# docker update --restart=always spug
spug

設(shè)置后若主機(jī)重啟容器spug會(huì)自動(dòng)啟動(dòng),無(wú)需手動(dòng)在拉起來

4.更換平臺(tái)ip

如需更換ip,則直接修改,然后重啟主機(jī)即可。

十三、總結(jié)

輕量、快捷、好用是spug的特點(diǎn),部署簡(jiǎn)單,安全可靠、無(wú)agent、可視化,可以快速高效的批量對(duì)主機(jī)進(jìn)行命令分發(fā)、監(jiān)控等,非常適用于日常變更上線操作。spug平臺(tái)既可當(dāng)跳板機(jī),也可以替代堡壘機(jī)部分功能,如進(jìn)入console、文件上傳下載等。

參考

官網(wǎng):https://www.spug.dev/

github:https://github.com/openspug/spug

文檔:https://www.spug.dev/docs/about-spug

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容