国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

夜鶯初探四·mtail插件采集日志指標(biāo)

這篇具有很好參考價(jià)值的文章主要介紹了夜鶯初探四·mtail插件采集日志指標(biāo)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

夜鶯初探四·mtail插件采集日志指標(biāo)

前言

上一篇介紹了Categraf的配置,這篇我們嘗試通過使用google開源的mtail工具來作為Categraf的插件,從應(yīng)用日志中提取指標(biāo)數(shù)據(jù)。

mtail項(xiàng)目介紹和配置文件說明

通過mtail -h可以很方便看到參數(shù)詳細(xì),也推薦喬克-從日志中提取指標(biāo)的瑞士軍刀或者Dream運(yùn)維夢(mèng)工廠-categraf-mtail日志收集插件詳解來了解更多,我就不再班門弄斧了。
當(dāng)然也可以通過官方來了解詳情新手村介紹 和高手入門

Categraf采集插件

categraf-mtail插件地址

https://github.com/flashcatcloud/categraf/tree/main/inputs/mtail

源碼解讀

package mtail
...

//常量值
const inputName = `mtail`
const description = ` extract internal monitoring data from application logs`

//配置
// MTail holds the configuration for the plugin.
type MTail struct {
    config.PluginConfig
    Instances []*Instance `toml:"instances"`
}
//配置文件中instances對(duì)象需要參數(shù)結(jié)構(gòu)體
type Instance struct {
	config.InstanceConfig


	/**
		type InternalConfig struct {
			// append labels
			Labels map[string]string `toml:"labels"`

			// metrics drop and pass filter
			MetricsDrop       []string `toml:"metrics_drop"`
			MetricsPass       []string `toml:"metrics_pass"`
			MetricsDropFilter filter.Filter
			MetricsPassFilter filter.Filter

			// metric name prefix
			MetricsNamePrefix string `toml:"metrics_name_prefix"`

			// mapping value
			ProcessorEnum []*ProcessorEnum `toml:"processor_enum"`

			// whether instance initial success
			inited bool `toml:"-"`
		}
		type InstanceConfig struct {
			InternalConfig
			IntervalTimes int64 `toml:"interval_times"`
		}
	**/


	NamePrefix           string        `toml:"name_prefix"`
	Progs                string        `toml:"progs"` 							//規(guī)則文件(xxx.mtail)的目錄
	Logs                 []string      `toml:"logs"` 							//要監(jiān)控的日志文件
	IgnoreFileRegPattern string        `toml:"ignore_filename_regex_pattern"`
	OverrideTimeZone     string        `toml:"override_timezone"`				//指定時(shí)區(qū)
	EmitProgLabel        string        `toml:"emit_prog_label"`					//是否導(dǎo)出label標(biāo)簽 string類型的bool值 
	emitProgLabel        bool          `toml:"-"`
	EmitMetricTimestamp  string        `toml:"emit_metric_timestamp"`			//metrics是否帶時(shí)間戳 string類型的bool值
	emitMetricTimestamp  bool          `toml:"-"`
	PollInterval         time.Duration `toml:"poll_interval"`
	PollLogInterval      time.Duration `toml:"poll_log_interval"`
	MetricPushInterval   time.Duration `toml:"metric_push_interval"`
	MaxRegexpLen         int           `toml:"max_regexp_length"`
	MaxRecursionDepth    int           `toml:"max_recursion_depth"`

	SyslogUseCurrentYear string `toml:"syslog_use_current_year"` // true
	sysLogUseCurrentYear bool   `toml:"-"`
	LogRuntimeErrors     string `toml:"vm_logs_runtime_errors"` // true
	logRuntimeErrors     bool   `toml:"-"`
	//
	ctx    context.Context    `toml:"-"`
	cancel context.CancelFunc `toml:"-"`
	m      *mtail.Server
}
//配置文件中instances對(duì)象的Init函數(shù),調(diào)用mtail
func (ins *Instance) Init() error {

	//初始化檢查,設(shè)置默認(rèn)值

	if len(ins.Progs) == 0 || len(ins.Logs) == 0 {
		return types.ErrInstancesEmpty
	}

	// set default value
	ins.sysLogUseCurrentYear = ins.SyslogUseCurrentYear == "true"
	ins.logRuntimeErrors = ins.LogRuntimeErrors == "true"
	ins.emitProgLabel = ins.EmitProgLabel == "true"
	ins.emitMetricTimestamp = ins.EmitMetricTimestamp == "true"

	if ins.PollLogInterval == 0 {
		ins.PollLogInterval = 250 * time.Millisecond
	}
	if ins.PollInterval == 0 {
		ins.PollInterval = 250 * time.Millisecond
	}
	if ins.MetricPushInterval == 0 {
		ins.MetricPushInterval = 1 * time.Minute
	}
	if ins.MaxRegexpLen == 0 {
		ins.MaxRegexpLen = 1024
	}
	if ins.MaxRecursionDepth == 0 {
		ins.MaxRecursionDepth = 100
	}
	buildInfo := mtail.BuildInfo{
		Version: config.Version,
	}
	//時(shí)區(qū)設(shè)置
	loc, err := time.LoadLocation(ins.OverrideTimeZone)
	if err != nil {
		fmt.Fprintf(os.Stderr, "Couldn't parse timezone %q: %s", ins.OverrideTimeZone, err)
		return err
	}
	//mtail參數(shù)設(shè)置
	opts := []mtail.Option{
		mtail.ProgramPath(ins.Progs),
		mtail.LogPathPatterns(ins.Logs...),
		mtail.IgnoreRegexPattern(ins.IgnoreFileRegPattern),
		mtail.SetBuildInfo(buildInfo),
		mtail.OverrideLocation(loc),
		mtail.MetricPushInterval(ins.MetricPushInterval), // keep it here ?
		mtail.MaxRegexpLength(ins.MaxRegexpLen),
		mtail.MaxRecursionDepth(ins.MaxRecursionDepth),
		mtail.LogRuntimeErrors,
	}
	if ins.cancel != nil {
		ins.cancel()
	} else {
		ins.ctx, ins.cancel = context.WithCancel(context.Background()) //父級(jí)ctx
	}
	//mtail配置,每隔1h啟動(dòng) 清理過期日志
	staleLogGcWaker := waker.NewTimed(ins.ctx, time.Hour)
	opts = append(opts, mtail.StaleLogGcWaker(staleLogGcWaker))

	if ins.PollInterval > 0 {
		logStreamPollWaker := waker.NewTimed(ins.ctx, ins.PollInterval)
		logPatternPollWaker := waker.NewTimed(ins.ctx, ins.PollLogInterval)
		opts = append(opts, mtail.LogPatternPollWaker(logPatternPollWaker), mtail.LogstreamPollWaker(logStreamPollWaker))
	}
	if ins.sysLogUseCurrentYear {
		opts = append(opts, mtail.SyslogUseCurrentYear)
	}
	if !ins.emitProgLabel {
		opts = append(opts, mtail.OmitProgLabel)
	}
	if ins.emitMetricTimestamp {
		opts = append(opts, mtail.EmitMetricTimestamp)
	}
	//指標(biāo)結(jié)果存儲(chǔ)對(duì)象
	store := metrics.NewStore()
	//間隔1h清理歷史指標(biāo)
	store.StartGcLoop(ins.ctx, time.Hour)

	m, err := mtail.New(ins.ctx, store, opts...)
	if err != nil {
		log.Println(err)
		ins.cancel()
		return err
	}
	ins.m = m

	return nil
}
//銷毀取消所有任務(wù)
func (ins *Instance) Drop() {
	ins.cancel()
}
//對(duì)象初始化方法
func init() {
	inputs.Add(inputName, func() inputs.Input {
		return &MTail{}
	})
}
//對(duì)象復(fù)制返回新建對(duì)象
func (s *MTail) Clone() inputs.Input {
	return &MTail{}
}

func (s *MTail) Name() string {
	return inputName
}
//MTail獲取配置文件中所有instances
func (s *MTail) GetInstances() []inputs.Instance {
	ret := make([]inputs.Instance, len(s.Instances))
	for i := 0; i < len(s.Instances); i++ {
		ret[i] = s.Instances[i]
	}
	return ret
}

// Description returns a one-sentence description on the input.
func (s *MTail) Description() string {
	return description
}
//抓取數(shù)據(jù)方法?
// Gather retrieves all the configured fields and tables.
// Any error encountered does not halt the process. The errors are accumulated
// and returned at the end.
// func (s *Instance) Gather(acc telegraf.Accumulator) error {
func (ins *Instance) Gather(slist *types.SampleList) {
	//獲取到prometheus注冊(cè)器
	reg := ins.m.GetRegistry()
	mfs, done, err := prometheus.ToTransactionalGatherer(reg).Gather()
	if err != nil {
		log.Println(err)
		return
	}
	defer done()
	//遍歷所有指標(biāo)向量?
	for _, mf := range mfs {
		metricName := mf.GetName()
		//遍歷所有指標(biāo)
		for _, m := range mf.Metric {
			//加入配置的Lables
			tags := util.MakeLabels(m, ins.GetLabels())
			//處理不同指標(biāo)類型
			if mf.GetType() == dto.MetricType_SUMMARY {
				util.HandleSummary(inputName, m, tags, metricName, ins.GetLogMetricTime, slist)
			} else if mf.GetType() == dto.MetricType_HISTOGRAM {
				util.HandleHistogram(inputName, m, tags, metricName, ins.GetLogMetricTime, slist)
			} else {
				util.HandleGaugeCounter(inputName, m, tags, metricName, ins.GetLogMetricTime, slist)
			}
		}
	}
}
//返回時(shí)間戳
func (p *Instance) GetLogMetricTime(ts int64) time.Time {
	var tm time.Time
	if ts <= 0 || !p.emitMetricTimestamp {
		return tm
	}
	sec := ts / 1000
	ms := ts % 1000 * 1e6
	tm = time.Unix(sec, ms)
	return tm
}

整體理解下來,Categraf有效的通過統(tǒng)一的文件完成了多個(gè)目錄,多個(gè)規(guī)則的日志采集,簡(jiǎn)化許多操作。

最后感謝看完,由于作者水平有限,使用很多工具并不熟悉,如有錯(cuò)誤和遺漏歡迎指出,感謝諒解。
以上內(nèi)容來源于官方推出的夜鶯黃埔營(yíng)的免費(fèi)培訓(xùn)活動(dòng),加入 QQ 群查看直播視頻,還可以在官方答疑站點(diǎn)獲得更多支持 https://answer.flashcat.cloud/文章來源地址http://www.zghlxwxcb.cn/news/detail-442171.html

到了這里,關(guān)于夜鶯初探四·mtail插件采集日志指標(biāo)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot+Prometheus采集Metrics指標(biāo)數(shù)據(jù)

    SpringBoot+Prometheus采集Metrics指標(biāo)數(shù)據(jù)

    簡(jiǎn)介 本文介紹在springboot3.x里配置啟用系統(tǒng)指標(biāo)監(jiān)控功能,來監(jiān)視系統(tǒng)各項(xiàng)Metrics指標(biāo),從而實(shí)時(shí)了解應(yīng)用的運(yùn)行健康狀態(tài),通過promtheus服務(wù)提供數(shù)據(jù)收集與指標(biāo)可視化方案; Metrics指標(biāo) metrics指標(biāo)表示應(yīng)用程序代碼運(yùn)行中提供的多維度指標(biāo)數(shù)據(jù),每一條指標(biāo)數(shù)據(jù)通常由時(shí)間序列

    2024年02月04日
    瀏覽(17)
  • MySQL性能監(jiān)控全掌握,快來get關(guān)鍵指標(biāo)及采集方法!

    MySQL性能監(jiān)控全掌握,快來get關(guān)鍵指標(biāo)及采集方法!

    數(shù)據(jù)庫中間件監(jiān)控實(shí)戰(zhàn),MySQL中哪些指標(biāo)比較關(guān)鍵以及如何采集這些指標(biāo)了。幫助提早發(fā)現(xiàn)問題,提升數(shù)據(jù)庫可用性。 監(jiān)控哪類指標(biāo)? 如何采集數(shù)據(jù)? 第10講監(jiān)控方法論如何落地? 這些就可以在MySQL中應(yīng)用起來。MySQL是個(gè)服務(wù),所以可借用Google四個(gè)黃金指標(biāo)解決問題: 1.1 延

    2024年02月02日
    瀏覽(23)
  • ChatGPT科研閱讀論文應(yīng)用插件(txyz.ai)使用初探

    ChatGPT科研閱讀論文應(yīng)用插件(txyz.ai)使用初探

    ???? ?? ChatGPT沒有辦法直接閱讀論文,但使用txyz.ai插件可以使用ChatGPT來幫助快速得到論文中想要的信息,特別是對(duì)于專業(yè)名詞較多的文章,而且可以問它關(guān)于這篇文章的問題,能夠加快研究的進(jìn)程。剛開始了解到這個(gè)應(yīng)用是一個(gè)ChatGPT插件,需要在GPT模型中安裝,對(duì)于國內(nèi)

    2024年02月10日
    瀏覽(24)
  • Spring Boot指標(biāo)監(jiān)控及日志管理

    Spring Boot指標(biāo)監(jiān)控及日志管理

    目錄 一、添加Actuator功能 二、SpringBoot指標(biāo)監(jiān)控 Spring Boot Admin 1. 創(chuàng)建Spring Boot Admin服務(wù)端項(xiàng)目 2. 連接Spring Boot Admin項(xiàng)目 三、SpringBoot日志管理 Spring Boot Actuator可以幫助程序員監(jiān)控和管理SpringBoot應(yīng)用,比如健康檢查、內(nèi)存使用情況統(tǒng)計(jì)、線程使用情況統(tǒng)計(jì)等。我們?cè)赟pringBoot項(xiàng)目

    2024年02月06日
    瀏覽(16)
  • 1、電商數(shù)倉(用戶行為采集平臺(tái))數(shù)據(jù)倉庫概念、用戶行為日志、業(yè)務(wù)數(shù)據(jù)、模擬數(shù)據(jù)、用戶行為數(shù)據(jù)采集模塊、日志采集Flume

    1、電商數(shù)倉(用戶行為采集平臺(tái))數(shù)據(jù)倉庫概念、用戶行為日志、業(yè)務(wù)數(shù)據(jù)、模擬數(shù)據(jù)、用戶行為數(shù)據(jù)采集模塊、日志采集Flume

    數(shù)據(jù)倉庫( Data Warehouse ),是為企業(yè)制定決策,提供數(shù)據(jù)支持的??梢詭椭髽I(yè),改進(jìn)業(yè)務(wù)流程、提高產(chǎn)品質(zhì)量等。 數(shù)據(jù)倉庫的輸入數(shù)據(jù)通常包括:業(yè)務(wù)數(shù)據(jù)、用戶行為數(shù)據(jù)和爬蟲數(shù)據(jù)等。 業(yè)務(wù)數(shù)據(jù):就是各行業(yè)在處理事務(wù)過程中產(chǎn)生的數(shù)據(jù)。比如用戶在電商網(wǎng)站中登錄、

    2024年02月12日
    瀏覽(46)
  • ELK 日志采集使用

    ELK 日志采集使用

    Docker 最新版Version 20.10安裝_docker最新版本是多少_猿小飛的博客-CSDN博客 安裝docker compose_猿小飛的博客-CSDN博客 1.3.1.編寫 docker-compose.yml 腳本啟動(dòng) ELK 服務(wù) 忘記了文件在哪里,可以使用下面命令進(jìn)行查找 ?? 1.3.2.創(chuàng)建對(duì)應(yīng)容器掛載目錄 針對(duì)微服務(wù),我們不同的服務(wù),會(huì)專門設(shè)置

    2024年02月08日
    瀏覽(14)
  • Nginx 日志采集與分析

    Nginx 日志采集與分析

    觀測(cè)云擁有全面的日志采集能力,包括系統(tǒng)日志、應(yīng)用日志、安全日志等多種日志類型,通過觀測(cè)云提供的自定義日志采集器可采集任意日志匯總到觀測(cè)云進(jìn)行統(tǒng)一存儲(chǔ)和分析;通過觀測(cè)云提供的文本處理器(Pipeline)可對(duì)采集的日志進(jìn)行自定義切割,并把切割出來的字段作

    2024年02月13日
    瀏覽(22)
  • logstash 采集 docker 日志

    logstash 采集 docker 日志

    1、nginx容器部署 參考:nginx容器部署 將容器內(nèi)的nginx日志文件映射到宿主機(jī)/home/logs/nginx目錄下 注意:并且需要需要將日志的輸出格式修改為json? 2、編輯vim /opt/logstash-7.4.2/config/nginx-log-es.conf 文件,收集docker nginx容器日志 input{ ?file{ ? ?path = \\\"/home/logs/nginx/access.log\\\" ? ?start_p

    2024年02月13日
    瀏覽(12)
  • loki采集docker日志

    說明 本文通過安裝 docker loki plugin 直接采集docker容器日志,并推送至loki。官方文檔 插件安裝 插件升級(jí) 插件卸載 使用 單獨(dú)為一個(gè)容器設(shè)置日志驅(qū)動(dòng) 為所有的容器設(shè)置默認(rèn)參數(shù) 編輯 /etc/docker/daemon.json 文件(如果沒有就新建). 更多如 docker-compose 的用法參考官網(wǎng)文檔.

    2024年02月15日
    瀏覽(14)
  • 開源日志監(jiān)控采集平臺(tái)ELKF

    開源日志監(jiān)控采集平臺(tái)ELKF

    ---------------------- Filebeat+ELK 部署 ---------------------- Node1節(jié)點(diǎn)(2C/4G):node1/192.168.179.20?? ??? ??? ??? ??? ?Elasticsearch Node2節(jié)點(diǎn)(2C/4G):node2/192.168.179.23?? ??? ??? ??? ??? ?Elasticsearch Apache節(jié)點(diǎn):apache/192.168.179.25?? ??? ??? ??? ??? ??? ?Logstash ?Kibana ?Apache F

    2024年02月07日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包