# 1. heka 介绍
heka 是mozilla组织使用GoLang 编写的一个日志收集服务,提供Go/Lua扩展。支持多种输入,以及输出。通常用于,将服务器集群中的日志信息,收集写入统一的数据库等输出。
heka 的github地址为
> 官方主干:https://github.com/mozilla-services/heka
> heka 已经多年`暂停更新`了。并且直接克隆下来的项目是无法通过编译的,因为其中使用的其他git分支的tag已经无法对应起来,需要自己修改 cmake 文件才能通过编译
> 推荐使用下边这个子分支,可直接通过编译
> 可用分支:https://github.com/composit/heka
备注:
> 官方已经因为`heka`吞吐量的问题,弃用这个项目了。转而开发了一个类似的,新架构的项目`hindsight`
> 官方主干:https://github.com/mozilla-services/hindsight
[↑返回顶部↑](#heka)
# 2. 依赖环境
> 系统:ubuntu 16.04
如果是初次编译,需要安装一些依赖环境。我全部加到脚本中了,直接执行脚本即可(需要`root`用户)
```shell
root@U-996-web:~# ./initRequire.sh
```
[↑返回顶部↑](#heka)
# 3. 编译
进入heka的源码目录下,执行 source build.sh 命令
source 命令用于切换环境变量
```shell
root@U-996-web:~# source build.sh
```
[↑返回顶部↑](#heka)
# 4. 生成deb安装文件
编译完成后,会生成一个build目录,进入这个目录,然后执行 `make deb`,即可生成deb文件
```shell
root@U-996-web:~# make deb
root@U-996-web:~# ls heka_0.10.0_amd64.deb
```
[↑返回顶部↑](#heka)
# 4. 发布安装
将生成好的`heka_0.10.0_amd64.deb`,拷贝到远程服务器中,然后安装(需要`root`用户)
```shell
root@U-996-web:~# dpkg -i heka_0.10.0_amd64.deb
```
[↑返回顶部↑](#heka)
# 5. 配置文件
配置文件都位于`/etc/heka/conf.d`,新增的配置文件,全部都放在这里边
下边给出一个简单的示例
```perl
[bloodInput]
type="LogstreamerInput"
log_directory = "/var/log/blood"
file_match = 'track\.json' ##读取这个文件的内容
decoder = "BloodDecoder" ##通过BloodDecoder来解析
[BloodDecoder]
type = "SandboxDecoder"
filename = "lua_decoders/game_blooddecoder.lua" ##实际对应的heka内自定义的lua文件
[BloodOutput] ##输出类型,heka内自定义的插件
message_matcher = "Type == 'common'"
redis_addr = "127.0.0.1:6379"
mongo_addr = ["127.0.0.1:27017"]
agent_mongo_addr = ["127.0.0.1:27017"]
mysql_addr = "root:james123456!!@tcp(127.0.0.1:3306)/lucky?charset=utf8mb4&parseTime=True"
```
[↑返回顶部↑](#heka)
# 6. 启动服务
> 启动 service heka start
> 停止 service heka stop
> 重启 service heka restart
> 查看状态 service heka status
> 重载配置 service heka force-reload
[↑返回顶部↑](#heka)
# 7. 自定义插件说明
自定义的插件,输入输出,都位于 `externals` 目录(go语言),以及`sandbox/lua/decoders`中(lua文件)
新增的第三方依赖,需要放入`thirdlib`下,然后修改`cmake/externals.cmake` 文件
这个文件,修改的地方有两个
1. lua_sanbox.git 地址,原版的地址有错
```perl
if(INCLUDE_SANDBOX)
set(PLUGIN_LOADER ${PLUGIN_LOADER} "github.com/mozilla-services/heka/sandbox/plugins")
set(SANDBOX_PACKAGE "lua_sandbox")
set(SANDBOX_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${PROJECT_PATH} -DLUA_JIT=off --no-warn-unused-cli)
externalproject_add(
${SANDBOX_PACKAGE}
###这是新的,可用的
GIT_REPOSITORY https://github.com/composit/lua_sandbox.git
GIT_TAG dd0f11dcc07a289bb236d4f255dc5e9caa2c4784
###旧的,不可用
# GIT_REPOSITORY https://github.com/mozilla-services/lua_sandbox.git
# GIT_TAG 4bf74cc480c2306fcffe1e423186e115cc87222d
CMAKE_ARGS ${SANDBOX_ARGS}
INSTALL_DIR ${PROJECT_PATH}
)
endif()
```
2. 自定义文件,所需要的第三方库。 直接使用静态拷贝的方式,不使用git clone方式
```perl
#########################################
## not use git_clone,use offline
# git_clone(https://github.com/jinzhu/gorm 5174cc5c242a728b435ea2be8a2f7f998e15429b)
# git_clone(https://github.com/jinzhu/inflection f5c5f50e6090ae76a29240b61ae2a90dd810112e)
message("offline,copy thirdlib")
###自定的第三方库,直接拷贝上层文件夹; 当有新增的时候,需要来这里增加
execute_process(COMMAND cp -r ${CMAKE_SOURCE_DIR}/thirdlib/gopkg.in ${PROJECT_PATH}/src/
ERROR_VARIABLE cperr)
execute_process(COMMAND cp -r ${CMAKE_SOURCE_DIR}/thirdlib/github.com ${PROJECT_PATH}/src/
ERROR_VARIABLE cperr)
if(cperr STREQUAL "")
message("copy success!")
else()
message("copy failed:"${cperr})
endif()
#########################################
```
[↑返回顶部↑](#heka)