如何自己写一个telegraf的插件

简介: 之前有个特殊需求要自己搞一个telegraf的插件,就顺手写了这个小指南,go初学者级别吧

telegraf introduce

telegraf github 地址

why have this blog

我要写一个特殊监控,现有的telegraf插件又没有办法实现,所以就要自己写一个input plugin

先讲一下通常方法下,现有的input插件无法满足要求的情况下怎么做:

有一个input.exec插件,可以获取命令执行后的结果,取到这个结果然后结合一下telegraf允许输入的格式,就可以了。无奈我写bash的水平实在是太低了,刚开始的时候也没有发现这个东西,所以就没有管这个,直接上手撸了个插件

how write a input plugin

先看一下官方教程

如果看懂的话大概就不太需要接下来的东西了

接下来是小白版的教程:

一个input plugin需要从以下做起:

  1. /telegraf/plugins/input/ 下增加插件文件夹
  2. 编写插件go文件
  3. /telegraf/plugins/input/all/all.go下增加编写好的路径
  4. 重新编译telegraf
  5. 运行

接下来主要看以下 插件文件的编写,以下称为 example.go

要先给定一个输入参数的结构体:

type Info struct {
  Address  []string `toml:"address"`
}

这个结构体会作为很多函数的输入用:

描述:

func (*Info) Description() string {
  return "return netconf result"
}

样例输入:

var sampleConfig = `
Address = ["西街小学"]
`
func (*Info) SampleConfig() string {
  return sampleConfig
}

初始化:

func init() {
  inputs.Add("sample", func() telegraf.Input {
    return &Info{}
  })
}

Gather函数:用来处理信息、将信息给后续组件进行处理

func (a *Info) Gather(acc telegraf.Accumulator) error {
  //内容自由发挥,填写好addGauge的四个参数就ok
  fieldsG := map[string]interface{}{
    "address": a.Address,
  } 
  tags := map[string]string{}{}
  now := time.Now()
  acc.AddGauge("test", fieldsG, tags, now)
  return nil
}

将以上几个部分组合在一起就是一个最简单的input插件。最重要的就是gather函数,自己来组织fieldsG这个结构体,将要监控的信息填进去。

相关文章
|
SQL 算法 关系型数据库
MySQL InnoDB中的锁-自增锁(AUTO-INC Locks)
MySQL InnoDB 锁 自增锁AUTO-INC Locks
2964 0
|
存储 边缘计算 运维
核心网架构 | 带你读《5G时代的承载网》之十三
对 5G 核心网进行了颠覆性的设计,通过基于服务的架构、网络切片、C/U 分离等,结合云化技术,实现网络的定制化、开放化、服务化,支持大流量、 大连接和低时延的万物互联需求。
核心网架构  | 带你读《5G时代的承载网》之十三
|
机器学习/深度学习 前端开发 数据可视化
神奇的streamlit (哇 原来深度学习还可以这样玩)
神奇的streamlit (哇 原来深度学习还可以这样玩)
神奇的streamlit (哇 原来深度学习还可以这样玩)
|
11月前
|
安全 Unix Linux
Docker中授权普通用户使用docker命令以及解决无权限访问/var/run/docker.sock错误。
通过上述步骤,可以有效解决普通用户无法使用Docker命令的问题,同时处理 `/var/run/docker.sock`权限错误。这样的设置不仅方便用户使用Docker提供的各项服务,同时还能保护系统的安全性。在进行此类配置更改时,请确保理解每一步骤的作用及潜在的安全风险,尤其是在修改文件权限时。在实际的操作中,始终应该努力保持系统的最低必要权限,避免过度放宽权限,这是保障系统安全的一个重要方针。
3681 75
|
物联网 数据处理 持续交付
Docker适合哪些场景
【10月更文挑战第18天】Docker适合哪些场景
|
安全 Java API
SpringSecurity结合knife4j实现swagger文档
通过将Spring Security与Knife4j相结合,我们不仅能够为RESTful API提供强大的安全防护,还能保证API文档的易用性和可访问性,这对于API的设计、开发和维护来说至关重要。这种集成方式不仅提升了开发效率,也优化了API使用者的体验,是现代API驱动开发中不可或缺的一环。
844 0
|
存储 Java 流计算
Flink 分布式快照,神秘机制背后究竟隐藏着怎样的惊人奥秘?快来一探究竟!
【8月更文挑战第26天】Flink是一款开源框架,支持有状态流处理与批处理任务。其核心功能之一为分布式快照,通过“检查点(Checkpoint)”机制确保系统能在故障发生时从最近的一致性状态恢复,实现可靠容错。Flink通过JobManager触发检查点,各节点暂停接收新数据并保存当前状态至稳定存储(如HDFS)。采用“异步屏障快照(Asynchronous Barrier Snapshotting)”技术,插入特殊标记“屏障(Barrier)”随数据流传播,在不影响整体流程的同时高效完成状态保存。例如可在Flink中设置每1000毫秒进行一次检查点并指定存储位置。
528 0
|
存储 监控 Ubuntu
Linux系统之GoAccess实时Web日志分析工具的基本使用
【5月更文挑战第22天】Linux系统之GoAccess实时Web日志分析工具的基本使用
1142 1
|
缓存 监控 前端开发
优化前端性能:提升网页加载速度的10个技巧
在当今互联网时代,网页加载速度已成为用户体验和搜索引擎排名的重要因素。本文将介绍10个有效的技巧,帮助前端开发人员优化网页加载速度,提升用户体验和网站性能。
|
存储 C# 索引
C# | 比较IEnumerable、List、数组
IEnumerable`定义了一组用于枚举集合的方法,包括`GetEnumerator`方法,该方法返回一个实现了`IEnumerator`接口的对象,用于枚举集合中的每个元素。`List`和数组都可以使用`foreach`循环来遍历其中的元素,这是因为它们都实现了`IEnumerable`接口。 由于数组在内存中开辟了一段连续的空间,因此可以直接通过索引访问元素,访问速度很快。而 List 则需要通过指针或引用来访问元素,速度相对较慢。 由于数组的大小是固定的,当需要添加或删除元素时,需要重新创建一个新数组,将原数组中的元素复制到新数组中,并添加或删除元素。
735 0
C# | 比较IEnumerable、List、数组