Skip to content

Instantly share code, notes, and snippets.

@chzyer
Created March 7, 2014 07:10
Show Gist options
  • Save chzyer/9406753 to your computer and use it in GitHub Desktop.
Save chzyer/9406753 to your computer and use it in GitHub Desktop.

Logstash

目录结构:

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解包,并把文件按照路径名复制到对应的路径
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment