文档章节

让Heka支持lua的io操作和os操作

水东流
 水东流
发布于 2016/07/26 16:18
字数 525
阅读 52
收藏 0

Heka本身编译之后,不支持lua的io操作,貌似是影响什么sandbox机制。详情,https://mail.mozilla.org/pipermail/heka/2015-November/000882.html。

Hrm. There's a *lot* of code and complexity in the LogstreamerInput. And not because it's overengineered, IMHO, but because it's providing a lot of functionality and solving a complicated set of problems. While I'd be thrilled to have a SandboxInput replicating this functionality (mainly so it could be used with Hindsight), I suspect that this is a much larger and more difficult task than you might imagine. If you do end up going down that road, I suggest you start with a tight, well-defined subset of LogstreamerInput's features, and then work your way up from there.

I can't speak to the issues that you're having with trying to use `os.execute` or `io.popen` to run an external sleep command. It's very possible that you're bumping up against Heka bugs with the behaviour you're seeing. But that approach smells a bit off to me, I'm not surprised you're having issues. You might consider one of the other suggested mechanisms (see http://lua-users.org/wiki/SleepFunction), especially using `socket.select`, or writing a trivial C extension that exposes a sleep function. You also might try using Hindsight instead of Heka to test your code, since that's a much lighter code base and is likely to have fewer (or at least different) bugs.

You might already have this on your radar, but if I were working on this I'd almost certainly be using coroutines (http://lua-users.org/wiki/CoroutinesTutorial).

Finally, you say that the reason you're not using LogstreamerInput is because you need to use Lua's `io` module in your decoding code. If you're okay with building your own custom Heka binary, and you don't plan on using a SandboxManagerFilter to support dynamic sandbox injection (i.e. you trust all of the Lua code you'll be deploying) then you might consider rebuilding Heka with support for the io module allowed in all sandboxes. The code that causes the `io` module to not be available is here:

但是我们可以重新编译heka,让其支持io模块,https://github.com/mozilla-services/heka/blob/v0.10.0b1/sandbox/lua/lua_sandbox.go.in#L63有说明,就是heka/sandbox/lua/lua_sandbox.go.in的d963行,disable_modules = {io = 1} 改成=0或者干脆去掉,即可编译实现heka支持lua的io模块。

 

另外,heka支持lua的os模块,但是去掉了很多方法,比如execute,那么如果我非要execute方法,怎么处理?同样是lua_sandbox.go.文件。

51行到61行

os = {'exit', 'setlocale'}}}`

const SandboxTemplate = `{
memory_limit = %d,
instruction_limit = %d,
output_limit = %d,
path = [[%s]],
cpath = [[%s]],
remove_entries = {
[''] = {'collectgarbage','coroutine','dofile','load','loadfile','loadstring','newproxy','print'},
os = {'getenv','execute','exit','remove','rename','setlocale','tmpname'}
}

想使用哪个方法,就去掉哪个即可。

 

© 著作权归作者所有

水东流
粉丝 4
博文 51
码字总数 23858
作品 0
海淀
程序员
私信 提问
内置变量与原生shell脚本运行

xmake在xmake.lua中提供了 的语法,来支持内置变量的获取,例如: 它将会在在实际编译的时候,将内置的 变量转换为实际的构建输出目录: 并且这些变量在自定义脚本中,也是可以支持的,例如:...

ruki
2016/07/19
14
0
Heka - 来自 Mozilla 的插件式数据挖掘工具

近日Mozilla Service团队首次发布了 Heka测试版(v0.2b1),Heka是一款拥有数据收集、分析、监视和报表的工具,采用 Go 语言开发。其主要组件为 hekad,一个适用于任何主机的轻量级守护程序,...

taohongfei
2013/05/03
4.8K
24
ngx_lua_module-1.0.5.2 发布

注:最新版本在以下博客首发: http://blog.csdn.net/ngwsx/ ngx_lua_module是一个nginx http模块,它把lua解析器内嵌到nginx,用来解析并执行lua语言编写的网页后台脚本。 更新说明: *) 新...

无名码农
2011/08/10
1K
13
lua开发web应用--ngx_lua_module

ngxluamodule是一个nginx http模块,它把lua解析器内嵌到nginx,用来解析并执行lua语言编写的网页后台脚本。 特性: *) 支持Windows和Linux平台。 *) 支持高并发高性能。 *) HTML网页中内嵌L...

无名码农
2011/08/01
14.4K
1
xmake插件开发之类库使用

xmake通过import接口,可以在自定义脚本中导入各种内置类库和扩展类库模块,使得xmake的插件开发具有更多的灵活性,提供更丰富的功能。 我们先看下,目前xmake提供的一些类库: 在根目录下的...

ruki
2016/06/21
23
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
17分钟前
2
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
49分钟前
7
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
10
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
14
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部