Giter Site home page Giter Site logo

2892931976 / oklog Goto Github PK

View Code? Open in Web Editor NEW

This project forked from 1046102779/oklog

0.0 1.0 0.0 1.09 MB

translation OKLog

Home Page: https://github.com/oklog/oklog

License: Apache License 2.0

Go 93.65% Shell 0.22% HTML 0.17% JavaScript 0.81% Elm 4.06% CSS 1.09%

oklog's Introduction

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搭建步骤

实验环境

  1. golang1.9.2 , ubuntu14.04 , 4CPU+8G内存
  2. IP地址:10.6.1.101

实验准备工作:

  1. 在同一台机器上搭建分别三个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:[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节点的话有可能日志生成但是查不到
## 日志查询UIhttp://10.6.1.101:200X0/ui

实验结果

日志相关查询结果展示

demo

prometheus监控数据展示

prometheus metrics

接下来的事情

这个只是把oklog跑起来了,也不算吧,后续的工作

  • OKLog作者是跑在docker里的,如果不懂docker的,可以用我的oklog这个demo, 所以不支持go get github.com/oklog/oklog
  • OKLog架构上,我理解可能有些错误,还需要进一步学习和了解
  • 深入了解下各类节点的参数
  • 现在oklog的forward节点只是用了终端产生的日志,大多数时候我们是产生的日志文件,如果不想改造现有的日志系统,那需要做文件流的日志采集
  • 更深入的了解OKLog,这个OKLog有很多可以学习的知识

ps: 共同学习、共同进步

oklog's People

Contributors

1046102779 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.