前言

项目中使用saltstack有一段时间了,之前都是在控制台操作,后来感觉越来越不方便,每次操作需要登陆服务器,还需要记一堆命令。最重要的是,公司进新人之后,新人由于不熟悉saltstack,容易产生误操作,而saltstack这种批处理工具,误操作的代价是非常巨大的。为此我开发了一套saltstack的web控制台,简化操作的同时,实现权限的管理。

随着saltstack的web控制台开发的版本迭代,我们遇到了几个问题,如下:

1,第一版控制台,采用同步的方式执行,web控制台等待后端执行,整个操作完成之后,才会有结果。以前minion少的时候,这个问题不太明显,随着minion增多和命令的复杂度增高,这种方式很容易导致前端卡住。

2,saltstack的python-SDK执行结果返回不明确,由于返回结果的不统一,导致程序比较难判断哪些命令是成功执行了,哪些minion成功执行了。

3,审计,操作出问题以后,需要审计之前的操作哪里出了问题,谁操作出了问题。

我们采取了如下的解决方案:

1,异步执行,web提交任务以后,后端异步处理,前端不必等待。执行完成后有微信推送执行结果。

2,执行结果格式化后,存储在mysql,标准的返回结果让程序容易判断执行状态。

3,将event存储到mysql,方便后续审计。

接下来,我们介绍一下如何将saltstack的执行结果和事件存储到mysql

第一步:有一台mysql服务器,具体搭建过程在这里就不介绍了。

第二步:修改minion配置文件,将minion执行结果写入mysql

说明:需要minion所在服务器安装MySQL-python模块(pip install MySQL-python)

如安装过程报错,找不到Python.h,centos下可以:sudo yum install python-devel

如找不到mysql.confg,centos下可以:sudo yum install mariadb-devel

mysql.host: 'localhost'
mysql.user: 'root'
mysql.pass: '123456'
mysql.db: 'salt'
mysql.port: 3306
return: mysql

第三步:修改master配置文件,将event事件写入mysql

说明:需要master所在服务器安装MySQL-python模块(pip install MySQL-python)

event_return: mysql
return: mysql
mysql.host: 'localhost'
mysql.user: 'root'
mysql.pass: '123456'
mysql.db: 'salt'
mysql.port: 3306
master_job_cache: mysql

# 保存任务信息的小时数,设置为0表示永久保存。
  keep_jobs: 0

第四步:初始化数据库

CREATE DATABASE  `salt`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci; USE `salt`; --
-- Table structure for table `jids`
-- DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
`jid` varchar(255) NOT NULL,
`load` mediumtext NOT NULL,
UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; --
-- Table structure for table `salt_returns`
-- DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
`fun` varchar(50) NOT NULL,
`jid` varchar(255) NOT NULL,
`return` mediumtext NOT NULL,
`id` varchar(255) NOT NULL,
`success` varchar(10) NOT NULL,
`full_ret` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY `id` (`id`),
KEY `jid` (`jid`),
KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; --
-- Table structure for table `salt_events`
-- DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

第五步:重启salt-master和salt-minion,centos下

systemctl restart salt-master
systemctl restart salt-minion

第六步:验证执行结果是否已经存到mysql

1,执行一次测试命令,(如果saltstack没有开启用户认证,就不需要带 -a 参数)

2,登陆数据库,查询执行结果

select * from salt.salt_returns\G

*************************** 10. row ***************************
fun: test.ping
jid: 20181019042659785453
return: true
id: test-agent
success: 1
full_ret: {"fun_args": [], "jid": "20181019042659785453", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "test-agent"}
alter_time: 2018-10-19 04:26:59
*************************** 11. row ***************************
fun: test.ping
jid: 20181019042659785453
return: true
id: another-agent
success: 1
full_ret: {"fun_args": [], "jid": "20181019042659785453", "return": true, "retcode": 0, "success": true, "fun": "test.ping", "id": "another-agent"}
alter_time: 2018-10-19 04:26:59

3,查看event是否写入mysql

select * from salt.salt_events\G

*************************** 325. row ***************************
id: 368
tag: salt/job/20181019042659785453/new
data: {"tgt_type": "glob", "jid": "20181019042659785453", "tgt": "*", "missing": [], "_stamp": "2018-10-19T08:26:59.785923", "user": "zhenglisai", "arg": [], "fun": "test.ping", "minions": ["another-agent", "test-agent"]}
alter_time: 2018-10-19 04:26:59
master_id: bogon_master

至此,saltstack已经可以将minion执行结果和event事件写入数据库,供后续查看。

【saltstack】saltstack执行结果和事件存储到mysql的更多相关文章

  1. SaltStack入门篇(四)之深入理解SaltStack远程执行

    1.目标 2.执行模块 3.返回 salt ‘*’ cmd.run ‘uptime’ 命令 目标 执行模块 执行模块参数 1.SlatStack远程执行–目标 执行目标:https://docs.sa ...

  2. saltstack命令执行过程

    saltstack命令执行过程 具体步骤如下 Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc salt ...

  3. Saltstack异步执行命令(十三)

    Saltstack异步执行命令 salt执行命令有时候会有超时的问题,就是命令下发下去了,部分主机没有返回信息,这时候就很难判断命令或任务是否执行成功.因此,salt提供异步执行的功能,发出命令后立即 ...

  4. Saltstack远程执行(四)

    Saltstack远程执行 语法例:salt '*' cmd.run 'w' -  命令:salt -  目标:'*' -  模块:cmd.run,自带150+模块,也可以自己写模块 -  返回:执行 ...

  5. 2、自动化运维之SaltStack远程执行详解

    SaltStack远程执行详解 ●目标(Targeting) ●模块(Module) ●返回(Returnners) 混合模式-C 选项 主机名设置参照: redis-node1-redis03-id ...

  6. SaltStack远程执行-返回MySQL

    上一篇:SaltStack远程执行-模块 参考官方文档:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.my ...

  7. Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar

    一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...

  8. saltstack-把执行结果存储到mysql服务内

    saltstack把执行的结果保存到mysql中,以便进行命令安全审计 mysql负责存储数据,mysql-python负责收集数据 master需要安装mysql和MySQL-python,mini ...

  9. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

随机推荐

  1. Atitit.创建快捷方式 windows快捷方式的原理

    Atitit.创建快捷方式 windows快捷方式的原理 1. Windows中有2种快捷方式的文件:1 2. Jshortcut2 2.1. 提示新不上jshortcut.dll2 2.2. 使用w ...

  2. wxPython 4.0.0b2安装

    https://www.cnblogs.com/NanShan2016/p/5518235.html 亮的界面是一个GUI程序必不可少的一部分,wxPython可以做到这一点,加之Python强大的功 ...

  3. 查看zookeeper是否启动

    查看进程: 方法: ps -aux | grep 'zookeeper' 系统有返回,说明zookeeper启动. 你可以搜索ps -aux.

  4. FAT32和NTFS最大支持的单个文件大小分别是多大?

    以前,RAID控制器和文件系统都有2TB的限制.控制器上的限制,主要是指每个LUN不能大于2TB,而磁盘组一般则没有这个限制:文件系统的限制主要是指每个分区(partition)不能大于2TB,不过3 ...

  5. java gc日志详解

    从 Full GC 信息可知,新生代可用的内存大小约为 18M,则新生代实际分配得到的内存空间约为 20M(为什么是 20M? 请继续看下面...).老年代分得的内存大小约为 42M,堆的可用内存的大 ...

  6. hdu 4786 Fibonacci Tree(最小生成树)

    Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  7. 十年WEB技术发展历程

    一个小分享,知识有限,抛砖引玉. ajax 03年的时候我上六年级,那时候网吧刚在小县城的角落萌生.传奇,大话西游第一代网游一时风靡.我抱着试一试的心态给了网吧老板两块钱想申请个号玩玩,然后接下来的一 ...

  8. Hadoop科普文—常见的45个问题解答 · Hadoop

    个模式 · 单机(本地)模式 · 伪分布式模式 · 全分布式模式 2.  单机(本地)模式中的注意点? 在单机模式(standalone)中不会存在守护进程,全部东西都执行在一个JVM上. 这里相同没 ...

  9. ASP.NET动态网站制作(30)-- WEBService

    前言:继续讲正则表达式,然后介绍一下webservice. 内容: 1.匹配QQ号的正则表达式:^[1-9]\d{4,10}$:匹配手机号的正则表达式:^(0|86)?(13|14|15|18)[0- ...

  10. Material design之Material Theme

    Material Theme提供了三方面的内容: 系统组件的颜色可以自定义更改 系统组件添加了触摸反馈动画效果 Activity切换动画效果 系统主题默认被定义在以下三个样式中: 使用Material ...