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

2016-07-04 10:02:52来源:oschina作者:eddy_linux人点击

 
 

默认情况下发送给salt minion的命令执行结果将返回给salt master,saltstack returner的接口允许发送给任意系统

内置returner模块列表 carbon_return将结果返回给carbon接收器 cassandre_return 将结果返回给cassandra columnfamily local将结果返回本地测试returner接口,即打印当前结果 mongo_future_return 将结果返回给mongodb mongo_retuern将结果返回给mongodb mysql将结果返回给mysql postgres 将结果返回给postgres redis_return将结果返回给redis sentry_return将结果返回给sentry smtp_return 将email返回给salt数据 syslog_return将结果返回给系统的syslog facility

将返回值写到mysql的实现

1、创建salt存放数据库,使用如下sql CREATE DATABASE `salt`DEFAULT CHARACTER SET utf8DEFAULT 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,KEY `id` (`id`),KEY `jid` (`jid`),KEY `fun` (`fun`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建访问数据库用户 GRANT ALL PRIVILEGES ON salt.* to 'salt'@'%' identified by 'salt'; 在master端创建mysql returner脚本 在salt-minion上的配置文件加入以下内容 mysql.host: '192.168.1.200' mysql.user: 'salt' mysql.pass: 'salt' mysql.db: 'salt' mysql.port: 3306 重启minion

在master端执行 [root@salt-master ~]# salt '*' cmd.run 'uptime' --return mysql salt-minion: 21:21:22 up 38 min, 1 user, load average: 0.01, 0.04, 0.05 在mysql上查询 mysql> select * from salt_returns/G; *************************** 1. row *************************** fun: cmd.run jid: 20160702212122866058return: " 21:21:22 up 38 min, 1 user, load average: 0.01, 0.04, 0.05"id: salt-minion success: 1 full_ret: {"fun_args": ["uptime"], "jid": "20160702212122866058", "return": " 21:21:22 up 38 min, 1 user, load average: 0.01, 0.04, 0.05", "retcode": 0, "success": true, "fun": "cmd.run", "id": "salt-minion"} 1 row in set (0.00 sec) 可以看到已经将返回存入到mysql中的salt库中的salt_returns这个表里面了

实际生产中不建议这种方式

在master上采用event模式来采集所有master上的返回结果

event是一个本地的zeroMq PUB interface,event是一个开放的系统,用于发送信息通知salt或者其它操作系统 每个event都有一个标签,事件标签允许快速置顶过滤事件,除了标签之外,每个事件都有一个数据结构.这个数据结构是一个dict类型,其中包含关于时间的信息

以下是一个监听master收到返回的信息的脚本 #!/usr/bin/env python # #

import salt.utils.event event = salt.utils.event.MasterEvent('/var/run/salt/master') for eachevent in event.iter_events(full=True): print eachevent print '======='

下面就是如何把event事件存放到mysql中 1.master上需要安装python的mysql模块 2.创建salt存放数据库,使用如下sql CREATE DATABASE `salt`DEFAULT CHARACTER SET utf8DEFAULT 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,KEY `id` (`id`),KEY `jid` (`jid`),KEY `fun` (`fun`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建访问数据库用户 GRANT ALL PRIVILEGES ON salt.* to 'salt'@'%' identified by 'salt';

3.监听事件并把数据写入到mysql中 #!/use/bin/env python #coding=utf-8 #

import json import salt.config import salt.utils.event import MySQLdb

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

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

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']: if ret.has_key('id') and ret.has_key('return'):if ret['fun'] == 'saltutil.find_job':continuesql = '''insert into `salt_returns` (`fun`,`jid`,`return`,`id`,`success`,`full_ret`) values ('%s', '%s', '%s', '%s', '%s', '%s')''' %(ret['fun'],ret['jid'],json.dumps(ret['return']),ret['id'],ret['success'],json.dumps(ret))cursor.execute(sql)cursor.execute('commit') else: pass

主要就是实现接收到信息并写入到mysql数据库中 现在在master端上执行 [root@salt-master ~]# salt '*' cmd.run 'uptime' salt-minion: 22:27:04 up 1:44, 1 user, load average: 0.00, 0.01, 0.05 查看数据库 *************************** 6. row *************************** fun: cmd.run jid: 20160702222704667293return: " 22:27:04 up 1:44, 1 user, load average: 0.00, 0.01, 0.05"id: salt-minion success: True full_ret: {"fun_args": ["uptime"], "jid": "20160702222704667293", "return": " 22:27:04 up 1:44, 1 user, load average: 0.00, 0.01, 0.05", "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2016-07-02T14:27:04.787261", "fun": "cmd.run", "id": "salt-minion"} 6 rows in set (0.00 sec)

数据库也写入了

分组: 如果机器太多则需要进行分组 G grains globs匹配 E pcre minion id 正则匹配 P grains pcre匹配 L minions列表 l pillar glob匹配 S ip匹配 D minion data匹配

在master的配置文件中添加 nodegroups:test1: 'L@salt-minion' #精确匹配分组test2: 'E@salt*' #正则匹配分组test: 'N@test1 or N@test2' 多个组组合起来进行吩咐 执行 [root@salt-master ~]# salt -N test1 test.ping salt-minion: True [root@salt-master ~]# salt -N test2 test.ping salt-minion: True salt-master: True [root@salt-master ~]# salt -N test test.ping salt-minion: True salt-master: True

2.配置通过数据库接收SaltStack批量管理日志的更多相关文章

  1. saltStack的event接口通过mysql数据库接收SaltStack批量管理日志

    event是一个本地的ZeroMQ PUB Interface,event是一个开放的系统,用于发送信息通知salt或其他的操作系统.每个event都有一个标签.事件标签允许快速制定过滤事件.除了标签 ...

  2. saltstack批量管理文件和计划任务

    简介 saltstack是由thomas Hatch于创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统.用来管理你的基础架构,可轻松管理成千上万台服务器. 关于saltstack更多功能本 ...

  3. SaltStack 批量管理任务计划

    这里演示如何使用 salt-master 对多台 salt-minion 批量添加任务计划,步骤如下: [root@localhost ~]$ cat /srv/salt/top.sls # 先定义入 ...

  4. saltstack 服务器批量管理

    学习saltstack 服务器批量管理 1.saltstack 简介 SaltStack是一个开源的.新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维 ...

  5. OCM_第十五天课程:Section6 —》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  6. SharePoint管理中心配置内容数据库

    SharePoint管理中心配置内容数据库         在SharePoint2010中,内容数据库是组织数据的核心. 是全部站点内容信息,如文档.列表数据和Web部件属性等存储的地方.默认地,内 ...

  7. ansible批量管理常见的配置方法

    第7章 ansible的管理 7.1 ansible概念的介绍 ansible-playbook –syntax            检查语法 ansible-playbook -C         ...

  8. python数据库操作对主机批量管理

    import paramiko import MySQLdb conn = MySQLdb.connect(host=',db='host') cur = conn.cursor(cursorclas ...

  9. ansible批量管理软件部署及剧本

    服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_6 ...

随机推荐

  1. nginx的进程模型

    nginx采用的也是大部分http服务器的做法,就是master,worker模型,一个master进程管理站个或者多个worker进程,基本的事件处理都是放在woker中,master负责一些全局初 ...

  2. 经典SQL语句大全、50个常用的sql语句

    50个常用的sql语句 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,T ...

  3. HDU 5687 Problem C(Trie+坑)

    Problem C Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  4. BZOJ 4070 [Apio2015]雅加达的摩天楼 ——分块 SPFA

    挺有趣的分块的题目. 直接暴力建边SPFA貌似是$O(nm)$的. 然后考虑分块,$\sqrt n$一下用虚拟节点辅助连边, 以上的直接暴力连边即可. 然后卡卡时间,卡卡空间. 终于在UOJ上T掉辣. ...

  5. CSS3 Flex布局和Grid布局

      1 flex容器的六个属性 flex实现垂直居中: <div class="box"> <span class="item">< ...

  6. mac 常用操作

    1. 快速获取文件夹的位置: 打开文本 terminal 程序,将文件拖进去,路径会自己主动打印出来 2. 移动文件夹: 选中目标文件,然后使用 Command+C 复制,然后用 Command +O ...

  7. 基于webpack搭建vue-cli以及webstorm的设置

    N1.检查本地电脑是否安装node和npm 安装vue-cli的前提是已经安装了npm 是否安装npm检查命令 npm -v 如果出现版本号,说明已经安装了npm 查看node版本号 node -v ...

  8. 游戏(bzoj 1854)

    Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性 ...

  9. [AGC016B] Colorful Hats (结论)

    Description 有n个人,每个人都戴着一顶帽子.当然,帽子有不同的颜色. 现在,每个人都告诉你,他看到的所有其他人的帽子共有多少种颜色,请问你有没有符合所有人的描述的情况. Input 第一行 ...

  10. BZOJ 1132 Tro

    Tro [问题描述] 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积和 N<=3000 [输入格式] 第一行给出数字N,N在[3,3000] 下面N行给出N个点的坐标,其值在[0,10 ...