前言:在以前的文章批量执行crontab指定条目的注释和解注释提到过spug平台,本文具体的对该平台作详细介绍。python
Spug
面向中小型企业设计的轻量级无 Agent 的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能。linux
环境说明:git
主机名 | 操做系统版本 | ip地址 | docker版本 | Spug版本 | 备注 |
---|---|---|---|---|---|
ansible | Centos 7.6.1810 | 172.27.34.51 | 18.09.9 | v2.3.8 | 管理服务器 |
本文会对‘批量执行’、‘在线终端’、‘文件管理’、‘任务计划’、‘监控中心’、‘报警中心’等功能。‘应用发布’和‘配置中心’下篇再作介绍。github
[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安装章节。web
'-p 80:80',spug的80端口映射端口为系统的80端口,‘-v /mydata/:/data’将容器的/data路径映射为系统的/mydata目录。docker
初始化管理员帐号admin,密码为spug.devshell
工做台是一个概览,包含应用、主机任务、监控和报警等信息。后端
'主机类别'为自定义类别,分别输入主机名和链接地址,单击验证api
输入root用户密码
主机添加成功
使用批量导入方式导入主机,能够先下载模板在更新上传。
登录密码一栏填写个主机密码,若为空则为默认密码'spug-default-keys'
导入成功
登录密码为传输公钥时使用,系统不保存密码,下次可免密登录访问。
通讯原理: 第一次在登陆的时候会生产公私钥,密码只是用在第一次发送公钥上。
公钥保存在各个被管理主机上,私钥存在于spug平台里(不是172.27.34.51服务里上面)。
单机主机栏后面的'Console'便可免密进入终端
进入终端,执行'df -h'命令
进入在线终端后点击右上角的'文件管理器'便可进行文件上传下载操做
spug可方便的进行文件上传下载,不用使用ftp工具或者繁琐的命令。
该功能为spug核心功能之一,现从命令方式和模板方式演示。
选择执行主机ansible、test16二、test163,执行命令'df -h'和'echo "hello world"'
执行结果:
新建两个模板'注释crontab'和'解注释crontab',模板内容其实也是shell脚本,好比'注释crontab':
模板方式批量执行:
执行完成,该模板内容为批量注释指定的crontab
新建任务计划date,任务类型可自定义,失败通知选钉钉,后面会有介绍,下一步
执行对象选择test162和test163
选择执行规则,UNIX Cron和linux的crontab相似,这里设置每分钟执行一次。
激活任务
验证:
每分钟向/tmp/date.txt文件输入当前时间。
在介绍监控中心以前先介绍报警中心
报警历史能够查看报警的历史信息,包括任务名、通知方式、通知对象和发生时间等。
以添加联系人loong576说明
告警方式包括邮箱、微信、钉钉和企业微信。
关注微信公众号'Spug运维',点击'个人'菜单获取
首先新建群聊
选择接收的联系人,建立群‘spug告警接收’
点击群聊窗口右边的‘群设置’,‘智能群助手’,‘添加机器人’,‘自定义’,单击‘添加’
根据实际状况填写安全设置,我这里填的是‘自定义关键词’,最多匹配10个,任意一个关键词被匹配到就会接收消息。
完成机器人添加,复制webhook。
企业微信获取webhook方式和钉钉有些相似,也是先建群,而后添加机器人。
建群,选中群,添加群机器人
建立一个机器人
复制webhook地址
告警是以组的方式发送的,新建告警组test_team,将告警联系人loong576加入改组。
监控方式有四种:站点监控、端口监控、站点监控和自定义监控。这里以端口监控和自定义监控作说明。
新建端口监控,监控地址为172.27.34.51,监控端口为8808
监控频率为1分钟,即1分钟检查一次;报警阀值为3次,即检查3次不成功才发出报警;报警联系人组为test_team;报警方式为微信、钉钉、邮件和企业微信;通道沉默为5分钟,表示每5分钟发送一次报警消息。
提交后等待检测
发现8808端口检测异常
以监控文件系统使用率为例,超过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 则断定为正常,其余为异常。
微信:
钉钉:
邮件:
企业微信:
新建角色test_role
分配权限如图
新建帐户loong576,分配角色test_role
现象:
解决:
[root@ansible ~]# docker exec spug python3 /data/spug/spug_api/manage.py user enable -u admin
现象:
解决:
[root@ansible ~]# docker exec spug python3 /data/spug/spug_api/manage.py user reset -u admin -p Admin01!
spug 有本身的密钥对,公钥保存在被管理的主机内,私钥保存在spug平台内(不是管理主机172.27.34.51里)。经过
因为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'
不使用sudo状况:
使用sudo:
使用sudo运行须要root权限的额命令,直接运行,不须要二次输入密码。
若是是生产环境没法联网的话,发送告警信息则须要打通网络
到微信:http://spug-wx.qbangmang.com 80 到钉钉:https://oapi.dingtalk.com 443 到企业微信:https://qyapi.weixin.qq.com 443
[root@ansible ~]# docker update --restart=always spug spug
设置后若主机重启容器spug会自动启动,无需手动在拉起来
如需更换ip,则直接修改,而后重启主机便可。
轻量、快捷、好用是spug的特色,部署简单,安全可靠、无agent、可视化,能够快速高效的批量对主机进行命令分发、监控等,很是适用于平常变动上线操做。spug平台既可当跳板机,也能够替代堡垒机部分功能,如进入console、文件上传下载等。
github:https://github.com/openspug/spug
文档:https://www.spug.dev/docs/about-spug