heka 介紹,以及編譯,備忘

# 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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章