文章目录
Telegraf+Influxdb实现服务监控
influxdata官网:https://www.influxdata.com
github地址:https://github.com/influxdata
项目架构
TICK技术栈技术架构

- Telegraf - 指标数据采集
- InfluxDB - 数据接收和存储
- Chronograf - 数据可视化展示
- Kapacitor - 时序数据的处理,监视和警报等
influxdb 2.0 TI技术架构

新的变化
-
将Inluxdb、Kapacitor、Chronograf三个项目集成为Influxdb一个项目,对Telegraf提供访问接口
-
提供一种新的数据查询和处理语言Flux
telegraf架构

源码编译(CentOS8)
influxdb
-
安装 Golang
https://golang.org/doc/install -
安装 Rust
https://rustup.rs/ -
添加 yarn repository https://classic.yarnpkg.com/en/docs/install/#centos-stable
-
调整 node 版本:安装nvm或者n管理node版本 https://github.com/nvm-sh/nvm
-
安装 **protobuf ** https://github.com/protocolbuffers/protobuf/tree/master/src
-
安装 llvm 和 clang
-
make,成功后会在项目目录下生成bin/linux目录,并生成influxd和inlux两个可执行二进制文件,编译好的可执行文件如果要在CentOS7上运行需要安装glibc-2.18。
telegraf
- 安装Golang
https://golang.org/doc/install - 克隆源码
https://github.com/influxdata/telegraf - 安装 dep:
https://golang.github.io/dep/docs/installation.html
https://github.com/golang/dep - 执行make命令,成功后会在项目目录下生telegraf可执行二进制文件
相关操作
启动服务
-
运行influxdb的 influd 命令
-
访问 ip:8086 端口,创建初始配置,在页面中创建telegraf的配置,成功后会生成token和url
-
将token添加到环境变量中
export INFLUX_TOKEN=xxx -
指定配置的url启动**telegraf **
telegraf --config http://localhost:8086/api/v2/telegrafs/05b07d9bb5345000
采集展示
- 可以在页面创建Boards,从数据桶(Buckets)中获取数据进行展示
- 可以数据设置各种过滤条件,提供Flux语言支持
告警
- Checks
1. 可以在Alerts界面创建Checks,以对Buckets中的数据进行设置告警配置
2. 告警分为两种threshold check是阈值告警,deadman check是服务的死亡告警 - Notification Endpoints
1. 需要在Alerts界面创建Notification Endpoints,以确定发送的端点
2. 支持三种目的端点
1. Pagerduty:向本系统中发送告警信息
2. HTTP:向提供HTTP接口的服务发送告警信息
3. Slack:向Slack服务发送告警信息。Slack是国外一个企业聊天工具,可以推送消息和邮件 - Notification Rules
1. 需要在Alerts界面创建Notification Endpoints,以发送告警信息
2. Pagerduty默认已经创建了Rule,向**_monitoring**桶中发送数据,并提供页面访问url
telegraf 插件开发
官方示例: https://github.com/influxdata/telegraf/blob/master/docs/INPUTS.md
步骤
- 在 /telegraf/plugins/input/ 下增加插件文件夹
- 编写插件go文件
- 在 /telegraf/plugins/input/all/all.go下增加编写好的路径
- 重新编译telegraf
- 添加配置,并运行
telegraf 执行流程

调用过程
命令提交给main包的main函数,main函数在telegraf.go文件中
-
在main函数中先调用flag包的**Parse()**函数解析命令参数
-
执行系统中各组件的初始化
-
调用main包的**run()**函数,run()函数在telegraf_windows.go文件中
-
在run()函数中判断runtime.GOOS值是否为windows,
如果是调用runAsWindowsService(),如果不是调用**reloadLoop()**函数
-
在**reloadLoop()函数中,创建通道,并循环执行runAgent()**函数
-
在**runAgent()**函数中
- 读取配置文件中要使用的所有插件的配置信息
- 调用agent包中的NewAgent()函数获取Agent实例,agent包的相关函数在agent.go文件中
- 加载所有配置信息到agent中,并调用Agent的**Run()**方法
-
在**Run()**方法中
-
调用**initPlugins()**方法初始化插件的参数
-
调用**connectOutputs()**方法连接输出插件的接收数据接口
-
创建go的协程
-
调用**startServiceInputs()**方法启动输入插件
-
调用 **go func(src chan telegraf.Metric) **分别运行
runInputs()、runProcessors()、runAggregators()、runOutputs
-
-
执行运行插件程序的方法
-
在runInputs()方法中gatherLoop()
在**gatherLoop()方法中调用gatherOnce()**方法
在gatherOnce()方法中调用models包中的RunningInput对象的**Gather()**方法
-
在**runProcessors()方法中调用applyProcessors()**方法
在applyProcessors()方法调用models包中RunningProcessor对象的Apply()方法运行processor插件
-
在runAggregators方法中调用**push()**方法
在push()方法中调用models包中RunningAggregator对象的**Push()**方法
-
在runOutputs方法中调用**flushLoop()**方法
在**flushLoop()方法中调用flushOnce()**方法
在flushOnce()方法中调用models包中的RunningOutput对象的**LogBufferStatus()**方法
-
本文介绍了如何使用Telegraf和Influxdb 2.0搭建服务监控系统,包括TICK技术栈的架构,Influxdb的新特性,Telegraf的源码编译以及插件开发流程。同时,详细阐述了服务的启动、数据采集展示、告警配置以及Telegraf的执行流程。
3万+

被折叠的 条评论
为什么被折叠?



