OK Log
OK Log是一个分布式、且无协同的日志管理系统,它是由peterbourgon大牛设计的,我最近想找一个日志搜集系统,用于监控和报警。用了两年的heka,去年年底因为性能问题导致作者rafrombrc放弃了Go版项目
oklog学习笔记
ps: 这个是简化版oklog,裁剪版本. 把终端日志采集源,改为了RabbitMQ,也可以改为其他输入源
我这两周准备整理和翻译OK Log相关文档,然后再动手部署并搭建个DEMO,如果好用,我再部署的测试环境中,后续持续更新....
集群使用手册
oklog通过数据传输形式,把各个节点串联起来,形成一个完备的分布式日志管理系统。它包括forward数据采集节点, ingest、store聚集和合并节点,query查询节点。且每一个节点都可以多实例,水平扩展, 集群节点之间的通信采用gossip协议。现实中的节点图:
-------------------------------------------------------------------------------------------------------------------
| ----------- ---------- ---------- ---------- |
| | forward | ------ |---- | ingest | ----- ---- | store |----- ---- | query |- |
| ----------- | | ---------- | | ---------- | | ---------- |
| | | | | | | |
| ----------- | | ------------ | | ------------ | | ------------ |
| | forward | -----|->----->- -----| ingest |-->------->--- |----| store |----|-<----<---|----| query |- |
| ----------- | | ------------ | | ------------ | | ------------ |
| ..... | | ..... | | ..... | | ..... |
| | | | | | | |
| ----------- | | ----------- | | |----------- | | |----------- |
| | forward | ------| |----| ingest |-----| |----| store |------ |----| query |- |
| ----------- |----------- |----------- |----------- |
| |
| |
-------------------------------------------------------------------------------------------------------------------
forward/ingest/store/query各个节点都是可以水平扩展,每个节点都可以对外提供服务, 由IP:PORT构成
每一个同类节点组成一个小集群、四个小集群组成一个大集群
DEMO搭建步骤
实验环境
- golang1.9.2 , ubuntu14.04 , 4CPU+8G内存
- IP地址:10.6.1.101
实验准备工作:
- 在同一台机器上搭建分别三个ingest/store节点, 一个forward节点和一个query节点
1. 一个forward节点, 作为日志采集服务
2. 三个节点ingest,服务地址分别是:10.6.1.101:10011, 10.6.1.101:10021, 10.6.1.101:10031
3. 三个节点store,服务地址分别是:10.6.1.101:20011, 10.6.1.101:20021, 10.6.1.101:20031
4. ingest和store集群内部一致性通信gossip节点:10.6.1.101:100[1~3]9, 10.6.1.101:200[1~3]9
5. prometheus监控拉取ingest数据的服务节点:10.6.1.101:10010, 10.6.1.101:10020, 10.6.1.101:10030
6. prometheus监控拉取store数据的服务节点:10.6.1.101:20010, 10.6.1.101:20020, 10.6.1.101:20030
git clone git@github.com:1046102779/oklog.git
cd ~/godev/src/github.com/oklog/oklog/cmd/oklog/
go build && go install // go build会报错,很多包还需要进行go get
## ps:在oklog目录下 pkg/cluster/peer.go 第85行, 感觉是一个显示缺陷的bug, 因为不去掉最先起来的小集群节点无法显示其他节点内容
暂时去掉了条件语句:if len(existing) > 0 {}
[执行quickstart-separate.bash脚本, 启动forward和ingest集群]
## store.segment-replication-factor 表示日志备份数量
## 还有其他参数,比如日志文件的切割维度:时间和大小, 有默认值1天和128M
日志数据:消息队列, forward采集数据:
oklog forward -prefix="FREEGO_WORK" -mq=amqp://username:password@xx.xx.xx.xx:5672/xxx?heartbeat=15 -api="tcp://10.6.1.101:7650" tcp://10.6.1.101:10011 tcp://10.6.1.101:10021 tcp://10.6.1.101:10031
## prefix表示前缀,这个真的很好,不同项目可以把日志放在一起存储了
## 当ingeststore集群起来时,会生成小集群各自的data/ingest, data/store日志文件目录
日志查询:
oklog query -store tcp://10.6.1.101:200X0 -from 5m -q "lily order"
上面这个IP和端口指定的是store服务存储,如果N个store服务节点,N个备份,理论上每个节点上都是可以访问完整日志的
## -store参数:查询某个指定节点的日志数据, 当ingeststore小集群数量等于日志的备份数量时,任何一个节点都可以查到想要的数据
## 这里我还有个疑问需要去研究下:当集群节点的数量大于日志的备份数量时,如果查询节点不能指定多个store节点的话,有可能日志生成,但是查不到
## 日志查询UI:http://10.6.1.101:200X0/ui
实验结果
日志相关查询结果展示
prometheus监控数据展示
接下来的事情
这个只是把oklog跑起来了,也不算吧,后续的工作
- OKLog作者是跑在docker里的,如果不懂docker的,可以用我的oklog这个demo, 所以不支持go get github.com/oklog/oklog
- OKLog架构上,我理解可能有些错误,还需要进一步学习和了解
- 深入了解下各类节点的参数
- 现在oklog的forward节点只是用了终端产生的日志,大多数时候我们是产生的日志文件,如果不想改造现有的日志系统,那需要做文件流的日志采集
- 更深入的了解OKLog,这个OKLog有很多可以学习的知识
ps: 共同学习、共同进步