前言:在之前的文章批量執(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

通過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.登陸

三、工作臺(tái)

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

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

輸入root用戶密碼

主機(jī)添加成功
2.批量導(dǎo)入主機(jī)

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

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

導(dǎo)入成功

登陸密碼為傳輸公鑰時(shí)使用,系統(tǒng)不保存密碼,下次可免密登陸訪問。
通信原理: 第一次在登錄的時(shí)候會(huì)生產(chǎn)公私鑰,密碼只是用在第一次發(fā)送公鑰上。

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

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

進(jìn)入終端,執(zhí)行'df -h'命令
六、文件管理
進(jìn)入在線終端后點(diǎn)擊右上角的'文件管理器'即可進(jìn)行文件上傳下載操作


spug可方便的進(jìn)行文件上傳下載,不用使用ftp工具或者繁瑣的命令。
七、批量執(zhí)行
該功能為spug核心功能之一,現(xiàn)從命令方式和模板方式演示。
1.命令方式

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

2.模板方式

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

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

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

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

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

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

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

激活任務(wù)

驗(yàn)證:

每分鐘向/tmp/date.txt文件輸入當(dāng)前時(shí)間。
九、報(bào)警中心
在介紹監(jiān)控中心之前先介紹報(bào)警中心
1.報(bào)警歷史

報(bào)警歷史可以查看報(bào)警的歷史信息,包括任務(wù)名、通知方式、通知對(duì)象和發(fā)生時(shí)間等。
2.報(bào)警聯(lián)系人
以添加聯(lián)系人loong576說明
2.1 報(bào)警聯(lián)系人概覽

告警方式包括郵箱、微信、釘釘和企業(yè)微信。
2.2 獲取微信Token
關(guān)注微信公眾號(hào)'Spug運(yùn)維',點(diǎn)擊'我的'菜單獲取

2.3 獲取釘釘webhook

首先新建群聊

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






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

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

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

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


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


復(fù)制webhook地址
3.報(bào)警聯(lián)系人組

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

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

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

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

監(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)警消息。

提交后等待檢測(cè)

發(fā)現(xiàn)8808端口檢測(cè)異常
2.1 微信告警

2.2 釘釘告警

2.3 郵件告警


2.4 企業(yè)微信告警

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

腳本邏輯:首先設(shè)置閥值為'num=5',通過'df -h'獲取文件系統(tǒng)使用率所在的列,然后與閥值循環(huán)比較,如果大于閥值則輸出告警信息'主機(jī)hostname文件系統(tǒng) value% '。
自定義告警的原理:通過腳本判斷監(jiān)控項(xiàng),腳本執(zhí)行退出狀態(tài)碼為 0 則判定為正常,其他為異常。
3.1 報(bào)警信息
微信:

釘釘:

郵件:

企業(yè)微信:

十一、系統(tǒng)管理
1.角色管理

新建角色test_role

分配權(quán)限如圖
2.賬戶管理

新建賬戶loong576,分配角色test_role

2.1 賬戶禁用問題
現(xiàn)象:

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

2.2 重置密碼
現(xiàn)象:

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

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

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情況:

使用sudo:


使用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/