Telegraf&Influxdb学习笔记

文章目录

    • Telegraf+Influxdb实现服务监控
      • 项目架构
        • TICK技术栈技术架构
        • influxdb 2.0 TI技术架构
        • telegraf架构
      • 源码编译(CentOS8)
        • influxdb
        • telegraf
      • 相关操作
        • 启动服务
        • 采集展示
        • 告警
      • telegraf 插件开发
      • telegraf 执行流程

Telegraf+Influxdb实现服务监控

influxdata官网:https://www.influxdata.com

github地址:https://github.com/influxdata

项目架构

TICK技术栈技术架构

Telegraf&Influxdb学习笔记_第1张图片
- Telegraf - 指标数据采集
- InfluxDB - 数据接收和存储
- Chronograf - 数据可视化展示
- Kapacitor - 时序数据的处理,监视和警报等

influxdb 2.0 TI技术架构

Telegraf&Influxdb学习笔记_第2张图片
新的变化

  1. 将Inluxdb、Kapacitor、Chronograf三个项目集成为Influxdb一个项目,对Telegraf提供访问接口

  2. 提供一种新的数据查询和处理语言Flux

telegraf架构

Telegraf&Influxdb学习笔记_第3张图片

源码编译(CentOS8)

influxdb

  1. 安装 Golang
    https://golang.org/doc/install

  2. 安装 Rust
    https://rustup.rs/

  3. 克隆代码
    https://github.com/influxdata/influxdb

  4. 安装 EPEL
    https://fedoraproject.org/wiki/EPEL

  5. 添加 yarn repository https://classic.yarnpkg.com/en/docs/install/#centos-stable

  6. 调整 node 版本:安装nvm或者n管理node版本 https://github.com/nvm-sh/nvm

  7. 安装 **protobuf ** https://github.com/protocolbuffers/protobuf/tree/master/src

  8. 安装 llvmclang

  9. make,成功后会在项目目录下生成bin/linux目录,并生成influxdinlux两个可执行二进制文件,编译好的可执行文件如果要在CentOS7上运行需要安装glibc-2.18。

telegraf

  1. 安装Golang
    https://golang.org/doc/install
  2. 克隆源码
    https://github.com/influxdata/telegraf
  3. 安装 dep
    https://golang.github.io/dep/docs/installation.html
    https://github.com/golang/dep
  4. 执行make命令,成功后会在项目目录下生telegraf可执行二进制文件

相关操作

启动服务

  1. 运行influxdb的 influd 命令

  2. 访问 ip:8086 端口,创建初始配置,在页面中创建telegraf的配置,成功后会生成tokenurl

  3. 将token添加到环境变量中

      export INFLUX_TOKEN=xxx
    
  4. 指定配置的url启动**telegraf **

      telegraf --config http://localhost:8086/api/v2/telegrafs/05b07d9bb5345000
    

采集展示

  1. 可以在页面创建Boards,从数据桶(Buckets)中获取数据进行展示
  2. 可以数据设置各种过滤条件,提供Flux语言支持

告警

  1. Checks
    1. 可以在Alerts界面创建Checks,以对Buckets中的数据进行设置告警配置
    2. 告警分为两种threshold check是阈值告警,deadman check是服务的死亡告警
  2. Notification Endpoints
    1. 需要在Alerts界面创建Notification Endpoints,以确定发送的端点
    2. 支持三种目的端点
    1. Pagerduty:向本系统中发送告警信息
    2. HTTP:向提供HTTP接口的服务发送告警信息
    3. Slack:向Slack服务发送告警信息。Slack是国外一个企业聊天工具,可以推送消息和邮件
  3. Notification Rules
    1. 需要在Alerts界面创建Notification Endpoints,以发送告警信息
    2. Pagerduty默认已经创建了Rule,向**_monitoring**桶中发送数据,并提供页面访问url

telegraf 插件开发

官方示例: https://github.com/influxdata/telegraf/blob/master/docs/INPUTS.md
步骤

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

telegraf 执行流程

Telegraf&Influxdb学习笔记_第4张图片

调用过程

命令提交给main包的main函数,main函数在telegraf.go文件中

  1. main函数中先调用flag包的**Parse()**函数解析命令参数

  2. 执行系统中各组件的初始化

  3. 调用main包的**run()**函数,run()函数在telegraf_windows.go文件中

  4. run()函数中判断runtime.GOOS值是否为windows

    如果是调用runAsWindowsService(),如果不是调用**reloadLoop()**函数

  5. 在**reloadLoop()函数中,创建通道,并循环执行runAgent()**函数

  6. 在**runAgent()**函数中

    1. 读取配置文件中要使用的所有插件的配置信息
    2. 调用agent包中的NewAgent()函数获取Agent实例,agent包的相关函数在agent.go文件中
    3. 加载所有配置信息到agent中,并调用Agent的**Run()**方法
  7. 在**Run()**方法中

    1. 调用**initPlugins()**方法初始化插件的参数

    2. 调用**connectOutputs()**方法连接输出插件的接收数据接口

    3. 创建go的协程

    4. 调用**startServiceInputs()**方法启动输入插件

    5. 调用 **go func(src chan telegraf.Metric) **分别运行

      runInputs()、runProcessors()、runAggregators()、runOutputs

  8. 执行运行插件程序的方法

    1. runInputs()方法中gatherLoop()

      在**gatherLoop()方法中调用gatherOnce()**方法

      gatherOnce()方法中调用models包中的RunningInput对象的**Gather()**方法

    2. 在**runProcessors()方法中调用applyProcessors()**方法

      applyProcessors()方法调用models包中RunningProcessor对象的Apply()方法运行processor插件

    3. runAggregators方法中调用**push()**方法

      push()方法中调用models包中RunningAggregator对象的**Push()**方法

    4. runOutputs方法中调用**flushLoop()**方法

      在**flushLoop()方法中调用flushOnce()**方法

      flushOnce()方法中调用models包中的RunningOutput对象的**LogBufferStatus()**方法

你可能感兴趣的:(Telegraf&Influxdb学习笔记)