前言:在之前的文章批量執行crontab指定條目的注釋和解注釋提到過spug平台,本文具體的對該平台做詳細介紹。
Spug
面向中小型企業設計的輕量級無 Agent 的自動化運維平台,整合了主機管理、主機批量執行、主機在線終端、文件在線上傳下載、應用發布部署、在線任務計划、配置中心、監控、報警等一系列功能。
環境說明:
主機名 | 操作系統版本 | ip地址 | docker版本 | Spug版本 | 備注 |
---|---|---|---|---|---|
ansible | Centos 7.6.1810 | 172.27.34.51 | 18.09.9 | v2.3.8 | 管理服務器 |
一、特性
- 批量執行: 主機命令在線批量執行
- 在線終端: 主機支持瀏覽器在線終端登錄
- 文件管理: 主機文件在線上傳下載
- 任務計划: 靈活的在線任務計划
- 發布部署: 支持自定義發布部署流程
- 配置中心: 支持 KV、文本、json 等格式的配置
- 監控中心: 支持站點、端口、進程、自定義等監控
- 報警中心: 支持短信、郵件、釘釘、微信等報警方式
- 優雅美觀: 基於 Ant Design 的 UI 界面
- 開源免費: 前后端代碼完全開源
本文會對‘批量執行’、‘在線終端’、‘文件管理’、‘任務計划’、‘監控中心’、‘報警中心’等功能。‘應用發布’和‘配置中心’下篇再做介紹。
二、軟件安裝
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安裝請參考:k8s實踐(一):Centos7.6部署k8s(v1.14.2)集群中docker安裝章節。
'-p 80:80',spug的80端口映射端口為系統的80端口,‘-v /mydata/:/data’將容器的/data路徑映射為系統的/mydata目錄。
初始化管理員賬號admin,密碼為spug.dev
2.登陸
三、工作台
工作台是一個概覽,包含應用、主機任務、監控和報警等信息。
四、主機管理
1.新建主機
'主機類別'為自定義類別,分別輸入主機名和連接地址,單擊驗證
輸入root用戶密碼
主機添加成功
2.批量導入主機
使用批量導入方式導入主機,可以先下載模板在更新上傳。
登陸密碼一欄填寫個主機密碼,若為空則為默認密碼'spug-default-keys'
導入成功
登陸密碼為傳輸公鑰時使用,系統不保存密碼,下次可免密登陸訪問。
通信原理: 第一次在登錄的時候會生產公私鑰,密碼只是用在第一次發送公鑰上。
公鑰保存在各個被管理主機上,私鑰存在於spug平台里(不是172.27.34.51服務里上面)。
五、在線終端
單機主機欄后面的'Console'即可免密進入終端
進入終端,執行'df -h'命令
六、文件管理
進入在線終端后點擊右上角的'文件管理器'即可進行文件上傳下載操作
spug可方便的進行文件上傳下載,不用使用ftp工具或者繁瑣的命令。
七、批量執行
該功能為spug核心功能之一,現從命令方式和模板方式演示。
1.命令方式
選擇執行主機ansible、test162、test163,執行命令'df -h'和'echo "hello world"'
執行結果:
2.模板方式
新建兩個模板'注釋crontab'和'解注釋crontab',模板內容其實也是shell腳本,比如'注釋crontab':
模板方式批量執行:
執行完成,該模板內容為批量注釋指定的crontab
八、任務計划
新建任務計划date,任務類型可自定義,失敗通知選釘釘,后面會有介紹,下一步
執行對象選擇test162和test163
選擇執行規則,UNIX Cron和linux的crontab類似,這里設置每分鍾執行一次。
激活任務
驗證:
每分鍾向/tmp/date.txt文件輸入當前時間。
九、報警中心
在介紹監控中心之前先介紹報警中心
1.報警歷史
報警歷史可以查看報警的歷史信息,包括任務名、通知方式、通知對象和發生時間等。
2.報警聯系人
以添加聯系人loong576說明
2.1 報警聯系人概覽
告警方式包括郵箱、微信、釘釘和企業微信。
2.2 獲取微信Token
關注微信公眾號'Spug運維',點擊'我的'菜單獲取
2.3 獲取釘釘webhook
首先新建群聊
選擇接收的聯系人,創建群‘spug告警接收’
點擊群聊窗口右邊的‘群設置’,‘智能群助手’,‘添加機器人’,‘自定義’,單擊‘添加’
根據實際情況填寫安全設置,我這里填的是‘自定義關鍵詞’,最多匹配10個,任意一個關鍵詞被匹配到就會接收消息。
完成機器人添加,復制webhook。
2.4 獲取企業微信webhook
企業微信獲取webhook方式和釘釘有些類似,也是先建群,然后添加機器人。
建群,選中群,添加群機器人
創建一個機器人
復制webhook地址
3.報警聯系人組
告警是以組的方式發送的,新建告警組test_team,將告警聯系人loong576加入改組。
十、監控中心
1.監控中心概覽
監控方式有四種:站點監控、端口監控、站點監控和自定義監控。這里以端口監控和自定義監控做說明。
2.端口監控
新建端口監控,監控地址為172.27.34.51,監控端口為8808
監控頻率為1分鍾,即1分鍾檢查一次;報警閥值為3次,即檢查3次不成功才發出報警;報警聯系人組為test_team;報警方式為微信、釘釘、郵件和企業微信;通道沉默為5分鍾,表示每5分鍾發送一次報警消息。
提交后等待檢測
發現8808端口檢測異常
2.1 微信告警
2.2 釘釘告警
2.3 郵件告警
2.4 企業微信告警
3. 自定義監控
以監控文件系統使用率為例,超過5%即報警,監控腳本如下:
#!/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 "主機`hostname`文件系統 $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
腳本邏輯:首先設置閥值為'num=5',通過'df -h'獲取文件系統使用率所在的列,然后與閥值循環比較,如果大於閥值則輸出告警信息'主機hostname
文件系統 $name 使用率為 $value% '。
自定義告警的原理:通過腳本判斷監控項,腳本執行退出狀態碼為 0 則判定為正常,其他為異常。
3.1 報警信息
微信:
釘釘:
郵件:
企業微信:
十一、系統管理
1.角色管理
新建角色test_role
分配權限如圖
2.賬戶管理
新建賬戶loong576,分配角色test_role
2.1 賬戶禁用問題
現象:
解決:
[root@ansible ~]# docker exec spug python3 /data/spug/spug_api/manage.py user enable -u admin
2.2 重置密碼
現象:
解決:
[root@ansible ~]# docker exec spug python3 /data/spug/spug_api/manage.py user reset -u admin -p Admin01!
3.系統設置
3.1 秘鑰設置
spug 有自己的密鑰對,公鑰保存在被管理的主機內,私鑰保存在spug平台內(不是管理主機172.27.34.51里)。通過
十二、其它問題
1.root無法直接登錄問題
1.1 問題說明
由於root用戶禁止直接登錄,新建主機時登錄用戶不能設置為root,否則會報錯,此時如果需要執行需要root權限的命令時,需要加sudo,但是運行sudo時需要輸入密碼確認,spug平台批量執行時沒有交互窗口,運行命令會報錯,此時則需要進行提權操作且免密。
[monitor@work01 /]$ id
uid=1002(monitor) gid=1002(monitor) 組=1002(monitor)
[monitor@work01 /]$ more /etc/sudoers
/etc/sudoers: 權限不夠
[monitor@work01 /]$ sudo more /etc/sudoers|grep monitor
monitor ALL=(ALL) NOPASSWD: ALL
修改文件'/etc/sudoers',新增:'monitor ALL=(ALL) NOPASSWD: ALL'
1.2 monitor用戶獲取root權限運行示例
不使用sudo情況:
使用sudo:
使用sudo運行需要root權限的額命令,直接運行,不需要二次輸入密碼。
2.打通網絡
如果是生產環境無法聯網的話,發送告警信息則需要打通網絡
到微信:http://spug-wx.qbangmang.com 80
到釘釘:https://oapi.dingtalk.com 443
到企業微信:https://qyapi.weixin.qq.com 443
3.設置容器自啟動
[root@ansible ~]# docker update --restart=always spug
spug
設置后若主機重啟容器spug會自動啟動,無需手動在拉起來
4.更換平台ip
如需更換ip,則直接修改,然后重啟主機即可。
十三、總結
輕量、快捷、好用是spug的特點,部署簡單,安全可靠、無agent、可視化,可以快速高效的批量對主機進行命令分發、監控等,非常適用於日常變更上線操作。spug平台既可當跳板機,也可以替代堡壘機部分功能,如進入console、文件上傳下載等。
參考
github:https://github.com/openspug/spug
文檔:https://www.spug.dev/docs/about-spug