Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/1046102779/oklog
translation OKLog
https://github.com/1046102779/oklog
Last synced: 3 months ago
JSON representation
translation OKLog
- Host: GitHub
- URL: https://github.com/1046102779/oklog
- Owner: 1046102779
- License: apache-2.0
- Created: 2017-11-15T04:00:30.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2018-02-27T06:52:48.000Z (almost 7 years ago)
- Last Synced: 2024-10-20T23:47:44.173Z (3 months ago)
- Language: Go
- Homepage: https://github.com/oklog/oklog
- Size: 1.06 MB
- Stars: 41
- Watchers: 11
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- my-awesome - 1046102779/oklog - 02 star:0.0k fork:0.0k translation OKLog (Go)
README
## OK Log
OK Log是一个分布式、且无协同的日志管理系统,它是由peterbourgon大牛设计的,我最近想找一个日志搜集系统,用于监控和报警。用了两年的heka,去年年底因为性能问题导致作者rafrombrc放弃了Go版项目[oklog学习笔记](note.md)
**ps: 这个是简化版oklog,裁剪版本. 把终端日志采集源,改为了RabbitMQ,也可以改为其他输入源**
我这两周准备整理和翻译OK Log相关文档,然后再动手部署并搭建个DEMO,如果好用,我再部署的测试环境中,后续持续更新....
## 集群使用手册
oklog通过数据传输形式,把各个节点串联起来,形成一个完备的分布式日志管理系统。它包括forward数据采集节点, ingest、store聚集和合并节点,query查询节点。且每一个节点都可以多实例,水平扩展, 集群节点之间的通信采用gossip协议。现实中的节点图:```shell
-------------------------------------------------------------------------------------------------------------------
| ----------- ---------- ---------- ---------- |
| | forward | ------ |---- | ingest | ----- ---- | store |----- ---- | query |- |
| ----------- | | ---------- | | ---------- | | ---------- |
| | | | | | | |
| ----------- | | ------------ | | ------------ | | ------------ |
| | forward | -----|->----->- -----| ingest |-->------->--- |----| store |----|-<----<---|----| query |- |
| ----------- | | ------------ | | ------------ | | ------------ |
| ..... | | ..... | | ..... | | ..... |
| | | | | | | |
| ----------- | | ----------- | | |----------- | | |----------- |
| | forward | ------| |----| ingest |-----| |----| store |------ |----| query |- |
| ----------- |----------- |----------- |----------- |
| |
| |
-------------------------------------------------------------------------------------------------------------------
```forward/ingest/store/query各个节点都是可以水平扩展,每个节点都可以对外提供服务, 由IP:PORT构成
每一个同类节点组成一个小集群、四个小集群组成一个大集群
## DEMO搭建步骤
### 实验环境
1. golang1.9.2 , ubuntu14.04 , 4CPU+8G内存
2. IP地址:10.6.1.101### 实验准备工作:
1. 在同一台机器上搭建分别三个ingest/store节点, 一个forward节点和一个query节点
```golang
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
``````golang
git clone [email protected]:1046102779/oklog.gitcd ~/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:[email protected]: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
```## 实验结果
### 日志相关查询结果展示
![demo](demo.jpg)### prometheus监控数据展示
![prometheus metrics](prometheus.jpg)## 接下来的事情
这个只是把oklog跑起来了,也不算吧,后续的工作* OKLog作者是跑在docker里的,如果不懂docker的,可以用我的oklog这个demo, 所以不支持go get github.com/oklog/oklog
* OKLog架构上,我理解可能有些错误,还需要进一步学习和了解
* 深入了解下各类节点的参数
* 现在oklog的forward节点只是用了终端产生的日志,大多数时候我们是产生的日志文件,如果不想改造现有的日志系统,那需要做文件流的日志采集
* 更深入的了解OKLog,这个OKLog有很多可以学习的知识ps: 共同学习、共同进步