我是靠谱客的博主 缓慢口红,最近开发中收集的这篇文章主要介绍filebeat开发自定义插件一 简介二 开发流程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一 简介

filebeat是一个纯go编写的日志收集工具,但是内置的插件不能满足所有的日常需求,那么我们就可以根据自己的需求自定义插件集成进去

filebeat启动的时候会将配置文件中processors给定的列表启动对应的插件有内置的有自定义的

processors:
 #数字1-100 不能超过100
 #如果是需要收集所有日志请关闭scale processor
  - scale_event:
      num: 10

二 开发流程

项目地址https://github.com/strive-after/beats
请看7.7分支

开发流程

首先我们需要在libbeat的process目录中添加自己的自定义插件 这个插件需要满足2个方法一个init函数

其中init函数主要是注册使用
Run是每次filebeat 读取一行日志都会生成一个event都会传递在Run里面 你可以针对这个消息处理
String 主要是名称 跟配置文件相互对应

package scalelog

import (
	"sync"

	"github.com/pkg/errors"

	"github.com/elastic/beats/v7/libbeat/beat"
	"github.com/elastic/beats/v7/libbeat/common"
	"github.com/elastic/beats/v7/libbeat/processors"
)

var (
	processorName = "scale_event"
	rantList = []string{}
	MaxNum  uint = 101
	MinNum uint = 0
)

type scaleLog struct {
	config
	lock sync.Mutex
	logNum uint
}

type config struct {
	//最大值100 百分比采样数据
	Num uint `config:"num" json:"num"`
}


func init() {
	processors.RegisterPlugin(processorName, newscaleLog)
	//processors.RegisterPlugin(processorName,checks.ConfigChecked(newscaleLog,checks.RequireFields("")))
}

func defaultconfig() config{
	return config{}
}

func newscaleLog(cfg *common.Config) (processors.Processor,error){

	scaleLogSingleton := &scaleLog{
		logNum: MinNum,
		lock: sync.Mutex{},
	}

	scaleconfig := defaultconfig()
	if err := cfg.Unpack(&scaleconfig); err != nil {
		return nil, errors.Wrapf(err, "fail to unpack the %v configuration", processorName)
	}
	if scaleconfig.Num > 101 {
		return nil, errors.Wrapf(errors.New("numbers greater than 100"), "fail to unpack the %v configuration", processorName)
	}
	scaleLogSingleton.config = scaleconfig

	return scaleLogSingleton,nil
}



func (s *scaleLog) Run(event *beat.Event) (*beat.Event, error) {

	if s.Num() {
		return event,nil
	}
	return nil, nil

}

func (s *scaleLog) Num() bool {

	s.lock.Lock()
	defer  s.lock.Unlock()

	s.logNum++

	if s.logNum == MaxNum {
		s.logNum = MinNum+1
	}

	if s.logNum > s.config.Num {
		return false
	}

	return  true
}


func (s *scaleLog) String() string {
	return processorName
}

写完主要的处理逻辑的部分之后需要在 加入引用 触发init函数
在这里插入图片描述

_ "github.com/elastic/beats/v7/libbeat/processors/scalelog"

最后

以上就是缓慢口红为你收集整理的filebeat开发自定义插件一 简介二 开发流程的全部内容,希望文章能够帮你解决filebeat开发自定义插件一 简介二 开发流程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部