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

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信

通过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.登陆

http://172.27.34.51

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_02

三、工作台

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_03

工作台是一个概览,包含应用、主机任务、监控和报警等信息。

四、主机管理

1.新建主机

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_04

'主机类别'为自定义类别,分别输入主机名和连接地址,单击验证

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_05

输入root用户密码

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_06

主机添加成功

2.批量导入主机

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_07

使用批量导入方式导入主机,可以先下载模板在更新上传。

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_08

登陆密码一栏填写个主机密码,若为空则为默认密码'spug-default-keys'

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_09

导入成功

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_10

登陆密码为传输公钥时使用,系统不保存密码,下次可免密登陆访问。

通信原理:第一次在登录的时候会生产公私钥,密码只是用在第一次发送公钥上。

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_11

公钥保存在各个被管理主机上,私钥存在于spug平台里(不是172.27.34.51服务里上面)。

五、在线终端

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_12

单机主机栏后面的'Console'即可免密进入终端

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_13

进入终端,执行'df -h'命令

六、文件管理

进入在线终端后点击右上角的'文件管理器'即可进行文件上传下载操作

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_14

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_15

spug可方便的进行文件上传下载,不用使用ftp工具或者繁琐的命令。

七、批量执行

该功能为spug核心功能之一,现从命令方式和模板方式演示。

1.命令方式

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_16

选择执行主机ansible、test162、test163,执行命令'df -h'和'echo "hello world"'

执行结果:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_17

2.模板方式

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_18

新建两个模板'注释crontab'和'解注释crontab',模板内容其实也是shell脚本,比如'注释crontab':

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_19

模板方式批量执行:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_20

执行完成,该模板内容为批量注释指定的crontab

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_21

八、任务计划

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_22

新建任务计划date,任务类型可自定义,失败通知选钉钉,后面会有介绍,下一步

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_23

执行对象选择test162和test163

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_24

选择执行规则,UNIX Cron和linux的crontab类似,这里设置每分钟执行一次。

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_25

激活任务

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_26

验证:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_27

每分钟向/tmp/date.txt文件输入当前时间。

九、报警中心

在介绍监控中心之前先介绍报警中心

1.报警历史

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_28

报警历史可以查看报警的历史信息,包括任务名、通知方式、通知对象和发生时间等。

2.报警联系人

以添加联系人loong576说明

2.1 报警联系人概览

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_29

告警方式包括邮箱、微信、钉钉和企业微信。

2.2 获取微信Token

关注微信公众号'Spug运维',点击'我的'菜单获取

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_30

2.3 获取钉钉webhook

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_31

首先新建群聊

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_32

选择接收的联系人,创建群‘spug告警接收’

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_33

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_34

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_35

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_36

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_37

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_38

点击群聊窗口右边的‘群设置’,‘智能群助手’,‘添加机器人’,‘自定义’,单击‘添加’

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_39

根据实际情况填写安全设置,我这里填的是‘自定义关键词’,最多匹配10个,任意一个关键词被匹配到就会接收消息。

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_40

完成机器人添加,复制webhook。

2.4 获取企业微信webhook

企业微信获取webhook方式和钉钉有些类似,也是先建群,然后添加机器人。

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_41

建群,选中群,添加群机器人

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_42

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_43

创建一个机器人

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_44

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_45

复制webhook地址

3.报警联系人组

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_46

告警是以组的方式发送的,新建告警组test_team,将告警联系人loong576加入改组。

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_47

十、监控中心

1.监控中心概览

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_48

监控方式有四种:站点监控、端口监控、站点监控和自定义监控。这里以端口监控和自定义监控做说明。

2.端口监控

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_49

新建端口监控,监控地址为172.27.34.51,监控端口为8808

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_50

监控频率为1分钟,即1分钟检查一次;报警阀值为3次,即检查3次不成功才发出报警;报警联系人组为test_team;报警方式为微信、钉钉、邮件和企业微信;通道沉默为5分钟,表示每5分钟发送一次报警消息。

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_51

提交后等待检测

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_52

发现8808端口检测异常

2.1 微信告警

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_53

2.2 钉钉告警

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_54

2.3 邮件告警

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_55

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_56

2.4 企业微信告警

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_57

3. 自定义监控

以监控文件系统使用率为例,超过5%即报警,监控脚本如下:

#!/bin/bashnum=5df -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% "  fidonefor i in $(df -h| awk -F '[ %]+' 'NR == 1 {next} {print $5}'|xargs) do   if [ $i -ge $num ]  then  exit $i   fidone

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_58

脚本逻辑:首先设置阀值为'num=5',通过'df -h'获取文件系统使用率所在的列,然后与阀值循环比较,如果大于阀值则输出告警信息'主机hostname文件系统 使用率为value% '。

自定义告警的原理:通过脚本判断监控项,脚本执行退出状态码为 0 则判定为正常,其他为异常。

3.1 报警信息

微信:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_59

钉钉:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_60

邮件:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_61

企业微信:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_62

十一、系统管理

1.角色管理

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_63

新建角色test_role

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_64

分配权限如图

2.账户管理

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_65

新建账户loong576,分配角色test_role

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_66

2.1 账户禁用问题

现象:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_67

解决:

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

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_68

2.2 重置密码

现象:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_微信_69

解决:

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

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_70

3.系统设置

3.1 秘钥设置

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉自动回复机器人java项目_71

spug 有自己的密钥对,公钥保存在被管理的主机内,私钥保存在spug平台内(不是管理主机172.27.34.51里)。通过

十二、其它问题

1.root无法直接登录问题

1.1 问题说明

由于root用户禁止直接登录,新建主机时登录用户不能设置为root,否则会报错,此时如果需要执行需要root权限的命令时,需要加sudo,但是运行sudo时需要输入密码确认,spug平台批量执行时没有交互窗口,运行命令会报错,此时则需要进行提权操作且免密。

[monitor@work01 /]$ iduid=1002(monitor) gid=1002(monitor) 组=1002(monitor)[monitor@work01 /]$ more /etc/sudoers/etc/sudoers: 权限不够[monitor@work01 /]$ sudo more /etc/sudoers|grep monitormonitor    ALL=(ALL)   NOPASSWD:    ALL

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

1.2 monitor用户获取root权限运行示例

不使用sudo情况:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_docker_72

使用sudo:

钉钉自动回复机器人java项目 钉钉群设置机器人回复_钉钉群机器人关键词自动回复_73

钉钉自动回复机器人java项目 钉钉群设置机器人回复_自定义_74

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

设置后若主机重启容器spug会自动启动,无需手动在拉起来

4.更换平台ip

如需更换ip,则直接修改,然后重启主机即可。

十三、总结

轻量、快捷、好用是spug的特点,部署简单,安全可靠、无agent、可视化,可以快速高效的批量对主机进行命令分发、监控等,非常适用于日常变更上线操作。spug平台既可当跳板机,也可以替代堡垒机部分功能,如进入console、文件上传下载等。

参考

官网:https://www.spug.dev/

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

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