zoukankan      html  css  js  c++  java
  • 【saltstack】saltstack执行结果和事件存储到mysql

    前言

        项目中使用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_returnsG
    
    

    *************************** 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_eventsG
    
    *************************** 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事件写入数据库,供后续查看。

  • 相关阅读:
    Yii Listview 更新及搜索
    Yii框架CGridView columns中使用数组或变量传值
    冲刺七天---05
    冲刺七天---04
    爱心图书剧本描述
    冲刺七天----03
    冲刺七天---02
    冲刺七天---01
    PSP周总结03
    psp周总结02
  • 原文地址:https://www.cnblogs.com/zhenglisai/p/9817246.html
Copyright © 2011-2022 走看看