event是一个本地的ZeroMQ PUB Interface,event是一个开放的系统,用于发送信息通知salt或其他的操作系统。每个event都有一个标签。事件标签允许快速制定过滤事件。除了标签之外,每个事件都有一个数据结构。这个数据结构是一个dict类型,其中包含关于事件的信息。

在master上直接将返回结果写入mysql





1.event接口测试

测试脚本salt-event.py内容如下:

import salt.utils.event

event = salt.utils.event.MasterEvent('/var/run/salt/master')

for data in event.iter_events(full=True):

print data

print '------'

python salt-event.py    //执行这个脚本

然后再开一个新的master终端进行salt操作:

salt '*' test.ping

就可以看到返回结果了。结果正常应该如下:





python salt-event.py 

{'tag': 'salt/event/new_client', 'data': {'_stamp': '2016-08-07T02:54:56.612273'}}

------

{'tag': '20160807105456636003', 'data': {'_stamp': '2016-08-07T02:54:56.636483', 'minions': ['192.168.3.108', 'minion_client01.DHCP']}}

------

{'tag': 'salt/job/20160807105456636003/new', 'data': {'tgt_type': 'glob', 'jid': '20160807105456636003', 'tgt': '*', '_stamp': '2016-08-07T02:54:56.637362', 'user': 'root', 'arg': [], 'fun': 'test.ping', 'minions': ['192.168.3.108', 'minion_client01.DHCP']}}

------

{'tag': 'salt/job/20160807105456636003/ret/192.168.3.108', 'data': {'fun_args': [], 'jid': '20160807105456636003', 'return': True, 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2016-08-07T02:54:56.836851', 'fun': 'test.ping', 'id': '192.168.3.108'}}

------

{'tag': 'salt/job/20160807105456636003/ret/minion_client01.DHCP', 'data': {'fun_args': [], 'jid': '20160807105456636003', 'return': True, 'retcode': 0, 'success': True, 'cmd': '_return', '_stamp': '2016-08-07T02:54:56.845030', 'fun': 'test.ping', 'id': 'minion_client01.DHCP'}}

------

至此event接口测试结束,测试证明event接口是能正常工作的。





2.编写自定义return脚本

vim salt_event_to_mysql.py





#!/bin/env python

#coding=utf8

# Import python libs

import json

# Import salt modules

import salt.config

import salt.utils.event

# Import third part libs

import MySQLdb

__opts__ = salt.config.client_config('/etc/salt/master')

#create MySQL connect

#conn = MySQLdb.connect(host=__opts__['mysql.host'],user=__opts__['mysql.user'],passwd=__opts__['mysql.pass'],db=__opts__['mysql.db'],port=__opts__['mysql.port'])





conn = MySQLdb.connect(host='192.168.3.87',user='salt',passwd='salt',db='salt',port=3306)

cursor = conn.cursor()

# Listen Salt Master Event System

event = salt.utils.event.MasterEvent(__opts__['sock_dir'])

for eachevent in event.iter_events(full=True):

    ret = eachevent['data']

    if "salt/job/" in eachevent['tag']:

        #Return Event

        if ret.has_key('id') and ret.has_key('return'):

            #Ignore saltutil.find_job event

            if ret['fun'] == "saltutil.find_job":

                continue

            sql = '''INSERT INTO `salt_returns`

                (`fun`,`jid`,`return`,`id`,`success`,`full_ret` )

                VALUES (%s,%s,%s,%s,%s,%s)'''

            cursor.execute(sql,(ret['fun'],ret['jid'],

                                json.dumps(ret['return']),ret['id'],

                                ret['success'],json.dumps(ret)))

            cursor.execute("COMMIT")

    # Other Event

    else:

        pass

保存退出





注意:

MySQLdb.connect(host=__opts__['mysql.host'],user=__opts__['mysql.user'],passwd=__opts__['mysql.pass'],db=__opts__['mysql.db'],port=__opts__['mysql.port'])

要换成自己的实际数据库地址、数据库用户、密码,如:

conn = MySQLdb.connect(host='192.168.3.87',user='salt',passwd='salt',db='salt',port=3306)





3.修改master的配置文件

vim /etc/salt/master





mysql.host: '192.168.3.87' # mysql服务器的IP地址

mysql.user: 'salt' # mysql数据库的用户名,需要跟后面授权的用户名一致

mysql.pass: 'salt' # mysql数据库的密码,需要跟后面授权的密码一致

mysql.db: 'salt' # mysql数据库的名称

mysql.port: 3306 # 使用端口为3306





mysql.host: '192.168.3.87' # mysql服务器的IP地址

mysql.user: 'salt' # mysql数据库的用户名,需要跟后面授权的用户名一致

mysql.pass: 'salt' # mysql数据库的密码,需要跟后面授权的密码一致

mysql.db: 'salt' # mysql数据库的名称

mysql.port: 3306 # 使用端口为3306

保存退出





4.在master上安装MySQL-python

yum -y install MySQL-python





创建数据库

CREATE DATABASE `salt`DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; 

USE `salt`; 





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; 









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,KEY `id` (`id`),KEY `jid` (`jid`),KEY `fun` (`fun`) ) 

ENGINE=InnoDB DEFAULT CHARSET=utf8;





授权

GRANT ALL PRIVILEGES ON salt.* to 'salt'@'%' identified by 'salt';

flush privileges;





5.在master的后台执行自定义return脚本

python salt_event_to_mysql.py &





6.开一个新的master终端进行测试

salt '*' test.ping





7.在mysql上看是否已经将数据写入数据库

mysql -uroot -p

输入密码之后进入mysql数据库

use salt

show tables;

select * from salt_returns \G

如果出现如下结果表示插入成功:

mysql> select * from salt_returns \G

*************************** 1. row ***************************

     fun: test.ping

     jid: 20160807111832766142

  return: true

      id: 192.168.3.108

 success: 1

full_ret: {"fun_args": [], "jid": "20160807111832766142", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2016-08-07T03:18:32.950841", "fun": "test.ping", "id": "192.168.3.108"}

*************************** 2. row ***************************

     fun: test.ping

     jid: 20160807111832766142

  return: true

      id: minion_client01.DHCP

 success: 1

full_ret: {"fun_args": [], "jid": "20160807111832766142", "return": true, "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2016-08-07T03:18:32.953034", "fun": "test.ping", "id": "minion_client01.DHCP"}

saltStack的event接口通过mysql数据库接收SaltStack批量管理日志的更多相关文章

  1. 2.配置通过数据库接收SaltStack批量管理日志

    2.配置通过数据库接收SaltStack批量管理日志 2016-07-04 10:02:52来源:oschina作者:eddy_linux人点击     默认情况下发送给salt minion的命令执 ...

  2. saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入

    saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入salt的返回值写入mysql数据库:可参考:https://docs.saltstack.com/en/lat ...

  3. MySQL数据库以及表的管理

    MySQL数据库以及表的管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 今天我们探讨的话题就是如何使用MySQL做开发,我们运维的主要工作不是去开发SQL的,但尽管如此,我们有 ...

  4. 10款最好用的MySQL数据库客户端图形界面管理工具

    MySQL Workbench 该工具由MySQL开发,是一个跨平台的可视化数据库设计工具.它是DBDesigner4项目备受期待的替代者,它是一个本地图形化工具,支持的操作系统包括Windows.L ...

  5. 9款最好用的MySQL数据库客户端图形界面管理工具,第三款我用了10年

    MySQL的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,这里我介绍几个经常使用的MySQL图形化管理工具,供大家参考. MySQL是一个非常流行的小型关系型数据 ...

  6. mysql数据库用户和权限管理记录

    一.MySQL用户的基本说明: 1.1 用户的基本结构MySQL的用户:用户名@主机 ■用户名:16个字符以内■主机:可以是主机名.IP地址.网络地址等主机名:www.111cn.net,localh ...

  7. 使用JDBC在MySQL数据库中快速批量插入数据

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatch ...

  8. MySQL数据库用户和权限管理

    一.视图 视图:VIEW,虚表,保存有实表的查询结果,在视图插入的内容都会存入表中.创建方法: CREATE VIEW view_name [(column_list)] AS select_st ...

  9. JDBC课程1-实现Driver接口连接mysql数据库、通用的数据库连接方法(使用文件jdbc.properties)

    package day_18; import jdk.internal.util.xml.impl.Input; import org.junit.Test; import java.io.Input ...

随机推荐

  1. C# 面向对象的封装、继承、多态

    一.封装: 封装:把客观的事物封装成类,使用和修改方便: 作用和结构体使用方法相似,程序执行流程不同: 要点:成员变量,属性,成员方法,构造函数,成员方法的静态和非静态,命名空间,常用的访问修饰符pu ...

  2. 【洛谷P1347】排序

    题目大意:给定 N 个变量和 M 个变量之间的偏序关系,问能否求出这 N 个变量之间的一个全序.若能,输出最少利用多少条已知信息即可求的结果,且输出该全序:若无解,输出到第几条已知信息可以判定无解:若 ...

  3. [hihocoder1509][异或排序]

    hihocoder1509 思路 对于每两个数,从二进制的高位到低位考虑,发现,若前面一个的当前位是1,后面一个的当前位置是0,那么s的当前位置必须是1.反之,若前面是0,后面是1,那么s的当前位置必 ...

  4. html5的data-*属性,我们一起认识下

    html5的data-自定义属性出来很久了,我们一起认识一下. 比如如下一个代码,我们怎么取到对应的name,对应的age? 既然data-*自定义属性是它的一个属性,这个时候就可以用getAttri ...

  5. C#控件及常用设计整理

    1.窗体  1.常用属性  (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体.  (2) WindowState属性:  用来获取或设置窗体的窗口状态. 取值有三 ...

  6. 利用Screen重启DevStack服务

    上篇介绍了DevStack如何安装部署.集成化工具有好处,但在系统重启后,OpenStack的各个服务并不会随系统重启而启动,需要利用screen来重启,接下来就记录下如何使用screen. 准备工作 ...

  7. Swift学习笔记7--访问控制

    在Swift语言中,访问修饰符有三种,分别为private,internal和public.同时,Swift对于访问权限的控制,不是基于类的,而是基于文件的.其区别如下: 1,private priv ...

  8. jedis实现操纵redis的常用api及使用场景

    简单记录一下,和描述一下常用的业务场景.好记性不如烂笔头. pom.xml <!--整合redis--> <dependency> <groupId>redis.c ...

  9. JAVA-大白话探索JVM-类加载过程(二)

    首先我们知道JVM是什么以及类加载器的作用 不清楚的可以看看JAVA-大白话探索JVM-类加载器(一) 现在我们来摸索下类的加载过程 首先,我们将类加载过程分为三步走 装载 链接 初始化 其中 链接 ...

  10. android 插件合集

    1.增加编译速度:fastdex-plugin 2.gradle 版本网站http://services.gradle.org/distributions/