client.conf
用于限定机器的列表,并指定对应机房名称,支持目录glob匹配
permission.conf
用于权限控制
conf.py
配置信息
logstash.py
主程序文件
actions/
qlogstash 支持的命令
files/
用于deploy的原文件
lib/
python lib
$host 支持匹配格式
- host1,host2 => host1 host2
- host[1-2] => host1 host2
- host[1-2],host[5-6] => host1 host2 host5 host6
- host* => host1 host2 host3 ...
* qlogstash client <start|stop|restart|status> <$hosts>
对客户端进行操作,或者查看状态
* qlogstash deploy <$filesDirectory> <$hosts>
部署文件到客户端
* qlogstash service <show|use|remove> <$pattern> <$hosts>
客户端的服务收集控制,pattern支持前缀匹配
* qlogstash init supervisor -sf <$hosts>
更新supervisor中的配置,会导致重启
程序会对files里面的文件进行编译和部署,有如下约定
第一级目录用于分类,在执行deploy的时候需要指定目录,不可多选
目前有 `client`, `server`
qlogstash deploy client nb*
表示往宁波所有的机器部署client里面的内容
程序会对第二级目录进行预处理,约定如下
1. 目标路径定义:
可以自定义部署文件的路径,具体体现在文件名上。采用冒号来代替/表示路径。
如果是:开头,则表示相对于根目录,否则,将相对于/home/qboxserver/logstash存放
例子:
:etc:supervisord:go-logstash.conf -> /etc/supervisord/go-logstash.conf
conf:logstash.conf -> /home/qboxserver/logstash/conf/logstash.conf
2. 模板支持
如果需要模板引擎介入处理,需要在文件名末尾加上 .tpl
程序会使用模板引擎对其翻译一遍后去掉.tpl文件名。
目前支持的内置变量可以在conf.py global_env这个dict找到,直接`$key`使用便可拿到
额外的会根据传入的host配置,逐个遍历解析一遍,在程序内部可以直接用到
$host => 机器名
$idc => 机房名
模板引擎会对不同的host生成不同的配置文件并且配置到不同的机器上面去
3. go编译支持
需要建立文件夹,文件夹名规则和第1点一致,会成为go最终编译成exe的文件路径
文件夹内可以存放任何文件文件夹。
程序内部编译打包流程:
1. 针对每台机器在新建 /$tmppath/_file/ 文件夹下面新建以 机器名 为名字的文件夹
2. 找到文件夹的列表,对go程序进行编译,然后放到 /$tmppath/_go/ 目录下,保持文件名
5. 将 /$tmppath/_go下面的exe文件复制到各个 /$tmppath/_file/$host下面
3. 找出目录下所有不带.tpl后缀的文件,复制到 /$tmppath/_file/$host/ 文件夹下面
4. 找出.tpl模板文件,翻译,放到各自的 /$tmppath/_file/$host/ 文件夹下面,去掉.tpl文件夹名
6. 将相对路径的文件补全:home:qboxserver:logstash:
7. 遍历 /$tmppath/_file 下所有文件夹,打包成 $host:package.tar.gz, 放到 /$tmppath/目录下
8. 执行 salt $host cp.get_file salt://logstash/{{gain.os}}:package.tar.gz 部署
9. 执行shell在客户端上面将tar解包,并把文件按照路径名复制到对应的路径