Giter VIP home page Giter VIP logo

qiniu / logkit Goto Github PK

View Code? Open in Web Editor NEW
1.3K 59.0 254.0 26.18 MB

Very powerful server agent for collecting & sending logs & metrics with an easy-to-use web console.

Home Page: https://logkit-pro.qiniu.com

License: Apache License 2.0

Makefile 0.01% Go 93.49% JavaScript 5.66% HTML 0.15% CSS 0.16% Batchfile 0.07% Shell 0.05% Python 0.38% Dockerfile 0.02%
logkit pandora go metrics-gathering collector-agent log-collector

logkit's Introduction

logkit-community Build Status Go Report Card codecov GoDoc

logkit LOGO

中文版

Introduce

Very powerful server agent for collecting & sending logs & metrics with an easy-to-use web console.

logkit-community Detail doc can be referred toWIKI

Support sources

  • File: read data in file, including csv file,kafka-rest log,nginx log.
  • Elasticsearch: read data in ElasticSearch.
  • MongoDB: read data in MongoDB.
  • MySQL: read data in MySQL.
  • MicroSoft SQL Server: read data in Microsoft SQL Server.
  • Postgre SQL: read data in PostgreSQL.
  • Kafka: read data in Kafka.
  • Redis: read data in Redis.
  • Socket: read data via tcp\udp\unixsocket protocol.
  • Http: reveive data in post request as http server.
  • Script: support script and read data from the result.
  • Snmp: auto read data from Snmp service.

Working method

logkit-community support multiple sources and can send kinds of data to Pandora, every data source relevant to a logic runner,a runner's workaround as follows:

logkit workaround

Contributing

Weclome to contribute to logkit:

Download

lastest stable:Go to Download page

History:Go to Releases

Trial:construct lastest logkit trial version every 5:00am (only for Linux 64 and Docker), you can download it (note: not include update of frontend).

Install and Usage

1. Download&Decompress logkit-community tool

  • Linux
export LOGKIT_VERSION=<version number>
wget https://pandora-dl.qiniu.com/logkit_${LOGKIT_VERSION}.tar.gz && tar xvf logkit_${LOGKIT_VERSION}.tar.gz && rm logkit_${LOGKIT_VERSION}.tar.gz && cd _package_linux64/
  • MacOS
export LOGKIT_VERSION=<version number>
wget https://pandora-dl.qiniu.com/logkit_mac_${LOGKIT_VERSION}.tar.gz && tar xvf logkit_mac_${LOGKIT_VERSION}.tar.gz && rm logkit_mac_${LOGKIT_VERSION}.tar.gz && cd _package_mac/
  • Windows

please download https://pandora-dl.qiniu.com/logkit_windows_<LOGKIT_VERSION>.zip 并解压缩,go to directory

2. change logkit-community configuration

logkit.conf is logkit-community tool's configuration,mainly for specifing running resource and paths of runners.

Open logkit.conf, for example:

{
    "max_procs": 8,
    "debug_level": 1,
    "clean_self_log":true,
    "bind_host":"localhost:3000",
    "static_root_path":"./public",
    "confs_path": ["confs*"]
}

For simply use, you can only focus on three options:

  1. bind_host port of logkit we。
  2. static_root_path statistic resource path of logkit page, recommand to use absolute path note:old version moved to "public-old" directory。
  3. confs_path including add conf in web, logkit also support monitor directory to add runners. (if you only need to add logkit runner in web, you can ignore this option)

3. startup logkit-community tool

./logkit -f logkit.conf

4. Open logkit-community config page in web

the web url is the value of bind_host configured in step 2

Contribute frontend code

refer to README file:logkitweb/README.md

Install and startup from source code

go build -o logkit logkit.go
./logkit -f logkit.conf

startup logkit using docker

docker pull wonderflow/logkit:<version>
docker run -d -p 3000:3000 -v /local/logkit/dataconf:/app/confs -v /local/log/path:/logs/path logkit:<version>

Deploying logkit in Kubernetes

get configs deploying in Kubernetes

curl -L -O https://raw.githubusercontent.com/qiniu/logkit/master/deploy/logkit_on_k8s.yaml

enjoy it!

logkit's People

Contributors

2yz avatar ahbll avatar andrewei1316 avatar asiocity avatar bourned avatar crazyjvm avatar danghexuan avatar dependabot[bot] avatar hongdanyang1991 avatar jjvvv avatar lolivia avatar longbai avatar mengjinglei avatar mockerzzz avatar pangel18 avatar papapiya avatar redhj avatar shangmin-001 avatar suikammd avatar sven0726 avatar unknwon avatar wangqiang-qiniu avatar wangtuo avatar wenhaochen avatar wonderflow avatar wuxiangzhou2010 avatar xingfeng2510 avatar xxh2000 avatar yangwenmai avatar zhonghuiping avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

logkit's Issues

logkit自动化部署

  1. shell脚本方式,scp到多个服务器,ssh启动 daemon运行
  2. 提供curl的方式,只要有外网的机器就可以一键部署
  3. 与zabbix、puppet等现有部署方式结合

保存到es中数据重复了!

将java web工程产生的日志按行保存到es中,大部分日志记录是重复的。经过测试,效果如下:
1.同时保存2行日志记录,logkit将最后一条日志记录保存到es中2次。
2.同理,tomcat产生的日志记录,在同时刻产生的n条日志记录,logkit都会将最后一条记录保存n次。

File Reader 缓存机制疑问

Hi,最近准备使用 logkit 作当前业务的日志收集器,主要是将日志文件中的数据直接读取到 Elasticsearch 中,直接使用 logkit 无法满足当前业务日志插入速率,所以考虑从以下 3 个方面进行优化:
1)日志源读取(Reader
2)日志解析(JSON Parser
3)日志插入(Sender
针对 2),使用 https://github.com/json-iterator/go 替换了 encoding/json,参见 #277 。针对 3),同样对 github.com/olivere/elastic 中的 encoding/json 做了替换,参见 olivere/elastic#667。最后发现,日志插入速率瓶颈应该在日志文件读取这一部分。
通过阅读源码,发现 Reader 从文件中读取的数据是先缓存到一个临时文件,之后 Sender 从临时文件读取数据,请问为什么不使用内存作缓存而采用当前机制?我想,如果使用内存作缓存,日志读取速率应该会有一个比较大的提升,目前也在尝试相关实现,请问有没有相关建议?

自动创建导出存储

目前我把mysql数据同步到Pandora 然后再从Pandora把数据发送到存储 目前这个过程都是手动配置,能不能实现自动化。就是配置一次后数据从Pandora自动发送数据到存储

script transformer

Feature Request

功能描述:

增加一个script transformer,用户通过填写简单的js脚本,达到灵活transform字段的目的

背景及目标:

robertkrimen/otto可以实现在go中执行js代码字符串

有些日志 用 i,e,d 等表示日志level,希望通过一个transformer来将字段值转换为 info, error, debug
{
"newKey": "level",
"oldKey": "level",
"script": "
switch(level){
case "i":
level="info";
case "e":
level="error";
case "d":
level="debug";
}
",
"type": "script"
},

用户场景: [这个功能重要度、优先级等等]

Docker Compose/Swarm 支持

Feature Request

功能描述:

能不能在一个Docker集群中加一些启动,就收集这个集群的所有日志。

用户场景: [这个功能重要度、优先级等等]

直接在 docker-compose.yml 里加一个服务搞定的话就太方便了。

Windows平台单元测试Fail

Bug report

logkit 相关配置:

无配置, 直接拉下源码

go get -u github.com/qiniu/logkit

运行环境:

$ go version
go version go1.10 windows/amd64

logkit 版本:

86a9c43

操作系统版本:

win10 64bit

复现过程操作步骤:

在windows 下测试

go generate; CGO_ENABLED=1 go test -race ./...

预期表现:

测试pass

实际情况:

测试Fail

相关日志等其他信息:

测试log

当Reader文件失败时,阻塞前端提交

Bug report

logkit 相关配置:

运行环境: Windows

logkit 版本:1.4.7

操作系统版本:Window 7

复现过程操作步骤:

  1. 新建一个Runner,从dir读取文件,但是这个dir不存在
  2. 后端会sleep几秒后不断重试
  3. 这时候在前端新建一个新的runner,在最后一步提交的时候,点击确认并提交没有响应

预期表现:

提交成功

实际情况:

点击确认提交没有响应,无法提交一个新的runner

相关日志等其他信息:

image

image

image

从Sciprt执行结果读取时报错

Bug report

配置数据源从脚本执行结果收集。如果同时配置了定时任务,那么创建ScriptReader的时候后台会报错,空指针异常

可配置 runner 停止超时

Feature Request

功能描述:

可配置 runner 停止超时

func (r *LogExportRunner) Stop() {
	...
	timer := time.NewTimer(time.Second * 10)
	select {
	case <-r.exitChan:
		log.Warnf("runner " + r.Name() + " has been stopped ")
	case <-timer.C:
		log.Warnf("runner " + r.Name() + " exited timeout ")
		atomic.AddInt32(&r.stopped, 1)
	}
	...
}

背景及目标:

在某些场景下,默认10秒超时不适用,容易出现异常情况。

用户场景: [这个功能重要度、优先级等等]

数据同步到 TsDB 中序列名称错误

Bug report

logkit 相关配置:

image

运行环境:

logkit 版本:v1.4.4

操作系统版本:CentOS Linux release 7.0.1406 (Core)

预期表现:

数据同步到 TsDB 中,仓库名称为 cloud_buy 序列名称为 pet_order

实际情况:

数据同步到 TsDB 中,仓库名称为 cloud_buy 序列名称为 cloud_buy

image

增强replace transformer 使其支持正则替换

Feature Request

功能描述:

增强replace transformer 使其支持正则替换

背景及目标:

现阶段replace transformer 只支持字符串匹配替换,但是很多情况下需要用到正则去匹配替换,包括通过正则捕获,对字段值进行重组.

用户场景: [这个功能重要度、优先级等等]

no Elasticsearch node available

在本地es 5.x已经启动,且可以通过localhost:9200访问,但是使用logkit创建runner,将日志采集到es中时报错,生成的配置文件为:
{
"name": "logkit.runner.20170919100403",
"reader": {
"mode": "dir",
"log_path": "C:\iNodeLog",
"read_from": "oldest",
"encoding": "UTF-8",
"ignore_hidden": "true",
"ignore_file_suffix": ".pid,.swap,.go,.conf,.tar.gz,.tar,.zip,.a,.o,.so"
},
"parser": {
"type": "raw",
"name": "pandora.parser.20170919100204"
},
"senders": [
{
"sender_type": "elasticsearch",
"elastic_host": "localhost:9200",
"elastic_index": "logkit",
"elastic_type": "iNode",
"fault_tolerant": "true",
"ft_save_log_path": "E:\logkit_windows\ft_save",
"ft_sync_every": "10",
"ft_strategy": "backup_only",
"ft_memory_channel": "false"
}
]
}

启动项目时报错

reader/kafka.go:245:22: kr.Consumer.HighWaterMarks undefined (type *consumergroup.ConsumerGroup has no field or method HighWaterMarks)

vendor 入库

Feature Request

功能描述:

将 vendor 的 pkg 入库,使得项目开箱即用,方便开发者贡献。

背景及目标:

获取 vendor pkg、熟悉 vendor 工具等与开发项目的关系不大,同时操作也比较耗时,开发者也没有必要熟悉项目所使用的管理 vendor 的工具。故可考虑将 vendor 入库,使得开发者的注意力更集中在项目功能或 bugfix 上。

elasticsearch sender 字段重命名导致其它字段丢失

Bug report

elasticsearch sender 字段重命名导致其它字段丢失

logkit 版本:

v1.3.5

复现过程操作步骤:

1.选择elasticsearch sender发送数据
2假设此时每条数据中有两个字段:raw , timestamp
3.使用elastic_keys 对字段重命名 如: "elastic_keys":"timestamp @timestamp"

预期表现:

发送至es中数据应该包含 raw, @timestamp两个字段

实际情况:

只有@timestamp 一个字段

reader增加redis数据源

用惯了ELK去实现日志系统,logstash采集日志是很方便高效的,希望logkit的reader也可以实现类似。
具体形式可以是:

  • Lists类型数据,可做json解析或者对应回logkit的raw采集。
  • Pub/Sub类型,同上。

同时cleaner也配套清除。

docker 镜像启动 无异常,但是浏览器无法访问

docker 启动命令
docker run -d -p 3000:3000 -v /Users/hong/Desktop/confs:/logs/path -v /Users/hong/Desktop/logs:/logs/path wonderflow/logkit

启动后,通过docker logs [CONTAINER ID] 显示如下:
2017/09/30 06:16:34 [INFO][github.com/qiniu/logkit/conf] load_conf.go:71: Use the config file of logkit.conf
2017/09/30 06:16:34 [INFO][github.com/qiniu/logkit] logkit.go:114: Welcome to use Logkit, Version: v1.2.3

Config: main.Config{MaxProcs:8, DebugLevel:1, ProfileHost:"", ConfsPath:[]string{"confs*"}, CleanSelfLog:true, CleanSelfDir:"", CleanSelfPattern:"", TimeLayouts:[]string(nil), CleanSelfLogCnt:0, StaticRootPath:"./public", ManagerConfig:mgr.ManagerConfig{BindHost:"localhost:3000", Idc:"", Zone:"", RestDir:""}}
2017/09/30 06:16:34 [WARN][github.com/qiniu/logkit/mgr] mgr.go:375: start to add watcher of conf path /app/confs
2017/09/30 06:16:34 [INFO][github.com/qiniu/logkit/mgr] mgr.go:425: successfully restored 0 runners in /app/.logkitconfs web rest dir
2017/09/30 06:16:34 [INFO][github.com/qiniu/logkit/mgr] rest.go:87: successfully start RestService and bind address on localhost:3000

但是浏览器无法访问 localhost:3000

Invalid request payload JSON format

Bug report

logkit 相关配置:

运行环境:

logkit 版本:1.4.7

操作系统版本:centos 7.2

复现过程操作步骤:

  1. 创建系统信息收集器时,选择多个模块,比如,cpu,磁盘,内存
  2. 最后选择以josn格式发送http post

预期表现: http服务端能收到正确的数据

实际情况: 提示 json格式不正确,“Invalid request payload JSON format”

相关日志等其他信息:

{"statusCode":400,"error":"Bad Request","message":"Invalid request payload JSON format"}

单个模块的数据格式是正确的,多个模块时,缺少了数组括号,和逗号分隔。

Read meta File err

Bug report

logkit 相关配置:

{
"max_procs": 8,
"debug_level": 1,
"clean_self_log":true,
"bind_host":"xxxxxxxxxx:3000",
"static_root_path":"/home/work/logkit/public",
"confs_path": ["confs*"],
"cluster": {
"master_url": ["http://xxxxxxxxx:3000"],
"is_master": false,
"enable": true,
"tag": "log_sys"
}
}

运行环境:

centos 7

logkit 版本:

1.4.3

操作系统版本:

复现过程操作步骤:

  1. 配置读取文件tailx模式
  2. 日志里不停地显示
    Read meta File err open /home/work/logkit/meta/runner.20180208171553_4008696495/file.meta: no such file or directory, can't get stats

预期表现:

 file.meta文件在runner.20180208171553_4008696495/_日志文件名/file.meta下

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.