Prometheus+Telegraf实现自定义监控项配置

系列文章目录

运维监控平台搭建
运维监控平台监控标签
golang_Consul代码实现Prometheus监控目标的注册以及动态发现与配置V1版本
Prometheus运维监控平台之监控指标注册到consul脚本开发、自定义监控项采集配置调试(三)
golang开发alertmanagerWebhook,实现prometheus+alertmanagerWebhook告警
golang实现mysql实例存活检查及全量备份是否完成检查工具开发


文章目录

  • 系列文章目录
  • 前言
  • 一、telegraf引入
    • 1、定义
    • 2、telegraf配置解析
  • 二、Telegraf内部数据结构(InfluxDB行协议)
    • 1.支持的内部数据结构类型
    • 2.使用示例
    • 3.InfluxDB行协议
  • 三、自定义监控示例


前言

为什么需要配置自定义监控?当采用telegraf作为agent采集监控信息时,虽然telegraf的inputs插件提供了不少封装好的监控配置文件,但是在生产环境下,直接使用telegraf提供好的配置文件来监控相应的指标总是不全面的。例如:自己编写了一个azkaban组件监控脚本,实现对其中的任务状态及任务数进行监控,那么这时候telegraf提供的开源inputs插件就实现不了这个监控过程,那么怎么办?因此本篇文章主要针对telegraf的自定义监控实现方式进行展示


一、telegraf引入

telegraf的安装可参考顶部文章<运维监控平台搭建>,这篇文章中有搭建过程,在本篇中不做过多描述

1、定义

Telegraf 是一个用Go语言编写的插件驱动的开源软件代理,用于收集和发送来自数据库、系统的所有包括不限于指标、事件等数据.
拥有了多达 200 余种采集插件以及 40 余种导出插件,几乎覆盖了所有的监控项,例如机器监控、服务监控甚至是硬件监控同时Telegraf 提供了4种基本的插件类型,常用的是输入插件input:
输入插件(Input)用于从各种来源(系统、服务、第三方API等)收集数据,
处理插件(Process)在发送之前转换、清洗、过滤数据,
聚合插件(Aggregate)使用聚合计算获得聚合值例如平均值,最小值和最大值等,从你已经收集和处理的度量。
输出插件(Output)可以将数据发送到数据存储、服务和消息队列,如InfluxDB、Graphite、OpenTSDB、Datadog、Kafka、MQTT、NSQ等。

2、telegraf配置解析

在这里插入图片描述

定义telegraf全局配置文件如下所示

[root@python2 telegraf.d]# vim ../telegraf.conf [global_tags]
[agent]interval = "60s"round_interval = truemetric_batch_size = 30000metric_buffer_limit = 100000collection_jitter = "5s"flush_interval = "60s"flush_jitter = "5s"precision = ""hostname = ""omit_hostname = false
[[outputs.prometheus_client]]listen = ":9273"
[[inputs.cpu]]percpu = truetotalcpu = truecollect_cpu_time = falsereport_active = false
[[inputs.disk]]ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.diskio]]
[[inputs.kernel]]
[[inputs.mem]]
[[inputs.processes]]
[[inputs.swap]]
[[inputs.system]]
[[inputs.netstat]]interval = "1m"fielddrop = ["tcp_none","tcp_closing","tcp_close*"]
[[inputs.net]]interval = "60s"fieldpass = ["packets_*","bytes_*","drop_*","err_*"]
配置文件涉及到3个主要配置块[ agent ] 这里面是一些涉及全局的配置。此处我们设置interval=“60s”,意思是让配置文件中的所有input插件每隔60秒去采集一次指标。interval的默认值是10秒。[[ inputs.cpu ]] 这是一个input输入组件,这里的配置是说我们导出的指标会包含每一个CPU核的使用情况,而且还包含所有CPU总的使用情况。[[ outputs.prometheus_client ]]这是一个output输出组件,这里我们用了一个名为prometheus_client 的输出组件,且prometheus_client 参数设为了:9273,这样程序运行起来我们通过http://ip:9273/metrics查看到对应的信息,如上图所示。

运行telegraf

[root@python2 telegraf.d]# ../../../usr/bin/telegraf --config ../telegraf.conf --test
观察运行信息得知:
加载了多个输入插件、0个处理插件、0个聚合插件、0个输出插件(test模式不加载输出插件)

在这里插入图片描述
从下图可以看到输入插件的数据都是未聚合和处理的原始数据
在这里插入图片描述
在上述Telegraf的配置内容输出完毕后,可以看到一堆密密麻麻的数据。会发现它不像json,也不像csv格式。这其实是Telegraf内置的数据结构,叫做InfluxDB行协议。接下来专门讲解这种数据结构

二、Telegraf内部数据结构(InfluxDB行协议)

1.支持的内部数据结构类型

如下(示例):从官方文档中获取到的所支持的数据结构类型

在这里插入图片描述

2.使用示例

任何包含该选项的输入插件都可以使用它来选择 所需的解析器:data_format
在这里插入图片描述

[[inputs.exec]]## Commands arraycommands = ["/tmp/test.sh", "/usr/bin/mycollector --foo=bar"]## measurement name suffix (for separating different commands)name_suffix = "_mycollector"## Data format to consume.data_format = "json"

指定的返回格式
在这里插入图片描述

echo 'example,tag1=a,tag2=b i=42i,j=43i,k=44i'i 明确指示该字段的类型为整数

解释一下这个返回格式的构成部分

接下来介绍一下上述几个构成部分。example(测量名称)
目前,你可以将它理解为存放数据的容器。这个名称自定义即可
必需
测量的名称。每个数据点都必须声明自己是哪个测量里面的 ,不可省略。
大小写敏感
不可以下划线 _ 开头Tag(标签集)
标签应该用在一些值的范围有限的,不太会变动的属性上。
比如传感器的类型和id等等。在InfluxDB中一个Tag相当于一个索引。
给数据点加上Tag有利于将来对数据进行检索。但是如果索引太多了,就会减慢数据的插入速度。
可选
键值关系使用 = 表示
多个键值对之间使用英文逗号 , 分隔
标签的键和值都区分大小写
标签的键不能以下划线 _ 开头
键的数据类型:字符串
值的数据类型:字符串Field (字段集)
必需
一个数据点上所有的字段键值对,键是字段名,值是数据点的值。
一个数据点至少要有一个字段。
字段集的键是大小写敏感的。
字段
键的数据类型:字符串
值的数据类型:浮点数 | 整数 | 无符号整数 | 字符串 | 布尔值Timestamp(时间戳)
可选。若不指定,则默认使用当前时间。
数据点的Unix时间戳,每个数据点都可以指定自己的时间戳。
如果时间戳没有指定。那么InfluxDB就使用当前系统的时间戳。
数据类型:Unix timestamp
如果你的数据里的时间戳不是以纳秒为单位的,那么需要在数据写入时指定时间戳的精度。空格
行协议中的空格决定了InfluxDB如何解释数据点。第一个未转义的空格将测量值&Tag Set (标签集)与 Field Set(字段集) 分开。

在这里插入图片描述

3.InfluxDB行协议

Telegraf的内部数据结构叫做InfluxDB行协议。Telegraf本身是InfluxData公司专门为InfluxDB开发的数据采集器。
上面这种数据格式是InfluxDB数据库使用的,只要数据符合上面这种格式,
就能通过InfluxDB的API将数据导入数据库。所以,自家的插件当然支持自家的生态了InfluxDB

三、自定义监控示例

需求一:监控某台主机的系统内核参数是否是指定的阈值,如果不是则通过配置的告警规则文件进行告警通知

	1、在192.168.56.131机器的/opt/monitor/telegraf/scripts/目录下,增加一个探测的脚本文件test.sh,并授权执行权限。脚本内容如下[root@python2 telegraf.d]# cat ../../../scripts/test.sh #!/bin/bashvalue=$(sysctl  fs.file-max| awk '{print $3}')echo "FS_fileMax,host=192.168.56.131 status=${value}i" #其中FS_fileMax为监控项,也就是使用它可以在prometheus的web界面中查看对应的数据,即它就是一个自定义的PromQL.host为标签 status为整型类型的字段2、在192.168.56.131机器的/opt/monitor/telegraf/etc/telegraf/telegraf.d/目录下新增类似zabbix中的conf文件,配置如下[[inputs.exec]] #使用telegraf的exec插件,它还有inputs.中间件名 的插件#指定脚本位置commands = ["/opt/monitor/telegraf/scripts/test.sh"]#探测超时时间timeout = "5s"#数据格式,通常为influx类型data_format = "influx"3、在192.168.56.131机器的/opt/monitor/telegraf/etc/telegraf/telegraf.conf主配置文件中,必须添加以下配置.配置Prometheus从Telegraf抓取对应的指标[[outputs.prometheus_client]]listen = ":9273"4、在监控机器中配置对应的yml告警规则增加 /opt/monitor/prometheus/rules/test_rules.yml文件,配置文件如下
groups:
- name: fsFile_checkrules:- alert: fsFileexpr: FS_fileMax_status != 65535for: 1mlabels:severity: warningannotations:summary: "FS_fileMax is not disabled (host {{ $labels.instance }})"description: "FS_fileMax is expected to be 0 but is {{ $value }} on {{ $labels.instance }}"5、重启prometheus、telegraf组件,查看prometheus-ui界面是否产生告警明为fsFile的告警消息,如下图所示

在这里插入图片描述
用这个expr: FS_fileMax_status != 65535表达式在promQL中查看结果
在这里插入图片描述

需求二:在顶部文章<golang实现mysql实例存活检查及全量备份是否完成检查工具开发>博客中,通过golang语言编写了一个mysql实例存活探测和mysql全量备份检查工具,现在想通过自定义脚本的方式对其进行监控

#mysql alive check
[[inputs.exec]]
commands = ["/opt/monitor/telegraf/scripts/mysqlCheckTools mysqlpingcheck -H 192.168.56.131 -P 3306 -p dbbackup -u dbbackup"]
timeout='5s'
data_format="influx"#mysql backup check
[[inputs.exec]]
commands = ["/opt/monitor/telegraf/scripts/mysqlCheckTools mysqlbackupcheck -d /export/servers/data/mybackup/my3306/xtrabackup/data -L /export/servers/data/mybackup/my3306/xtrabackup/log"]
timeout='5s'
data_format="influx"

脚本执行结果如下所示
在这里插入图片描述
配置告警规则

  - alert: mysqlbackupcheckexpr: mysqlbackupcheck_status == 0for: 1mlabels:severity: warningannotations:summary:  "{{ $labels.host }} {{ $labels.port }} "- alert: mysqlPingexpr: mysqlping_status == 0for: 1mlabels:severity: warningannotations:summary:  "{{ $labels.host }} {{ $labels.port }} "

重启prometheus和telegraf组件,关闭数据库测试并查看web界面是否产生告警
在这里插入图片描述
通过告警表达式查看promQL返回的值
在这里插入图片描述
在这里插入图片描述

注意事项:
在下方的自定义监控中设置的返回格式是 echo "tcp_timestamps value=$value",当写告警规则的表达式时,直接用名称tcp_timestamps就可以采集到监控数据了。
但是在上方的两个需求示例中,当返回形式为mysqlbackupcheck,port=3306 status=0i, 含有status字段时,则告警规则就是名称_status才可以获取到监控指标的值,如上所示。否则会获取不到

需求:需要通过监控telegraf组件实现对10.192.10.14服务器的/etc/sysctl.conf中配置的内核参数进行监控实现过程:1、联想到zabbix监控可以通过agent端编辑相关的conf文件,且conf文件中编写脚本或者其他采集发送,实现某个时刻组件的监控,因此再telegraf/scripts目录下也用同样方式测试是否能实现2、在10.192.10.14机器的/opt/monitor/telegraf/scripts/目录下,增加一个探测的脚本文件check_tcp_timesmaps.sh,并授权执行权限。脚本内容如下#!/bin/bash
# 读取net.ipv4.tcp_timestamps的值value=$(sysctl net.ipv4.tcp_timestamps | awk '{print $3}')
# 输出为InfluxDB格式的指标echo "tcp_timestamps value=$value"  #其中tcp_timestamps为监控项,也就是使用它可以在prometheus的web界面中查看对应的数据,即它就是一个自定义的PromQL.3、在10.192.10.14机器的/opt/monitor/telegraf/etc/telegraf/telegraf.d/目录下新增类似zabbix中的conf文件,配置如下[[inputs.exec]] #使用telegraf的exec插件,它还有inputs.中间件名 的插件#指定脚本位置commands = ["/opt/monitor/telegraf/scripts/check_tcp_timestamps.sh"]#探测超时时间timeout = "5s"#数据格式,通常为influx类型data_format = "influx"4、在10.192.10.14机器的/opt/monitor/telegraf/etc/telegraf/telegraf.conf主配置文件中,必须添加以下配置.配置Prometheus从Telegraf抓取对应的指标[[outputs.prometheus_client]]listen = ":9273"5、在监控机器中配置对应的yml告警规则增加 /opt/monitor/prometheus/rules/sysctl_tcp_timesamps.yml文件,配置文件如下groups:- name: tcp_timestamps_checkrules:- alert: TCPTimestampsDisabledexpr: tcp_timestamps != 0for: 1mlabels:severity: warningannotations:summary: "TCP Timestamps is not disabled (host {{ $labels.instance }})"description: "net.ipv4.tcp_timestamps is expected to be 0 but is {{ $value }} on {{ $labels.instance }}"

至此telegraf自定义监控演示完成


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Mysql、JavaScript、PHP、ajax开发的MBTI性格测试网站(前端+后端)

源码地址&#xff1a;https://download.csdn.net/download/2302_79553009/89933699 项目简介 本项目旨在构建一个基于MBTI&#xff08;迈尔斯-布里格斯性格分类指标&#xff09;理论的在线平台——“16Personalities”。该平台利用PHP、MySQL、JavaScript等技术栈开发&#xf…

uniapp的IOS证书申请(测试和正式环境)及UDID配置流程

1.说明 本教程只提供uniapp在ios端的证书文件申请&#xff08;包含正式环境和开发环境&#xff09;、UDID配置说明&#xff0c;请勿用文档中的账号和其他隐私数据进行测试&#xff0c;请勿侵权&#xff01; 2.申请前准备 证书生成网站&#xff1a;苹果应用上传、解析&#x…

【JavaEE初阶】网络原理—关于TCP协议值滑动窗口与流量控制,进来看看吧!!!

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP协议的重要的机制“连接的建立和断开”~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1…

Docker部署教程:打造流畅的斗地主网页小游戏

Docker部署教程&#xff1a;打造流畅的斗地主网页小游戏 一、项目介绍项目简介项目预览 二、系统要求环境要求环境检查Docker版本检查检查操作系统版本 三、部署斗地主网页小游戏下载镜像创建容器检查容器状态查看容器日志安全设置 四、访问斗地主网页小游戏五、总结 一、项目介…

【Unity】游戏UI中添加粒子特效导致穿层问题的解决

这里介绍一下简易的ui系统中&#xff0c;添加粒子特效导致的穿层问题 首先是在ui界面中添加粒子特效预制体&#xff0c;这个时候&#xff0c;控制这个粒子显示层级的有两个方面 上图中&#xff0c;如果你的Sorting Layer ID的值&#xff08;Layer排序&#xff09;是大于当前C…

以太网交换安全:DHCP Snooping

一、DHCP Snooping的概念及功能 DHCP Snooping是一种用于增强网络中DHCP服务安全性的技术。以下是对以太网交换安全中的DHCP Snooping进行详细的介绍&#xff1a; 基本概述 定义目的&#xff1a;DHCP Snooping是一种网络安全技术&#xff0c;旨在防止未经授权的DHCP服务器在网…

[Linux进程控制]进程创建|进程终止|进程等待

目录 一、进程创建 1.fork函数 2.写实拷贝 二、进程终止 1.进程退出场景 2.进程常见退出方法 &#xff08;1&#xff09;从main函数返回 &#xff08;2&#xff09;_exit &#xff08;3&#xff09;调用exit 三、进程等待 1.进程等待的方法 &#xff08;1&#xff…

12. MapReduce全局计数器

一. 计数器概述 在执行MapReduce程序时&#xff0c;控制台的输出中一般会包含如下内容。 这些输出就是MapReduce的全局计数器的输出信息。计数器是用来记录job的执行进度和状态的&#xff0c;它的作用可以理解为日志&#xff0c;方便用户了解任务的执行状况&#xff0c;辅助…

超好玩又简单-猜数字游戏(有手就行)

云边有个稻草人-CSDN博客 我的个人主页 目录 云边有个稻草人-CSDN博客 前言 猜数字游戏的游戏要求 1. 随机数的生成 1.1 rand 1.2 srand 1.3 time 1.4 设置随机数的范围 2. 猜数字游戏实现 2.1 游戏实现基本思路 2.2 代码实现 Relaxing Time! —————————…

基于Qt的多线程并行和循序运行实验Demo

致谢&#xff08;Acknowledgement&#xff09;&#xff1a; 感谢Youtube博主Qt With Ketan与KDAB精心录制的Qt多线程处理应用教程&#xff0c;感谢Bilibili博主爱编程的大丙对Qt多线程与线程池内容深入浅出的讲解。 一、计算机线程相关概念 线程概念[1]&#xff1a; 在计算机科…

2024年9月电子学会青少年软件编程Python等级考试(三级)真题试卷

2024年9月青少年软件编程Python等级考试&#xff08;三级&#xff09;真题试卷 选择题 第 1 题 单选题 以下python表达式的值为True的是&#xff1f;&#xff08; &#xff09; A.all( ,1,2,3) B.any([]) C.bool(abc) D.divmod(6,0) 第 2 题 单选题 下列python代码的…

smuge error

0 Preface/Foreword 1 解决方法 第一步&#xff1a;跳过大文件下载&#xff0c;到时候统一使用快速批处理fast batch git lfs install --skip-smudge 故意敲错指令&#xff0c;会出现git lfs install 的usage&#xff1a; 第二步&#xff1a;clone仓库 下载结果&#xff1a;…

如何用猿大师办公助手实现OA系统中Word公文/合同在线编辑及流转?

在OA系统或者合同管理系统中&#xff0c;我们会经常遇到网页在线编辑Word文档形式的公文及合同的情况&#xff0c;并且需要上级对下级的公文进行批注等操作&#xff0c;或者不同部门的人需要签字审核&#xff0c;这就需要用到文档流转功能&#xff0c;如何用猿大师办公助手实现…

HTB:Analytics[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many open TCP ports are listening on Analytics? 2.What subdomain is configured to provide a different application on the target web server? 3.What application is running on data.analytical.htb? 4.What version of…

计算机网络IP地址分类,子网掩码,子网划分复习资料

IP 地址的概念 IP 地址是独立于硬件地址的逻辑地址&#xff0c;它是由软件提供的地址。 IP 地址是网络层地址。 IP 编址方案和分类 IP 地址由 32 位二进制数构成&#xff0c;分为前缀(网络地址)和后缀(主机地址) 同一网段中每台计算机的 IP 地址是唯一的网络地址的分配全球…

stm32入门教程--DMA 超详细!!!

目录 简介 工作模式 1、数据转运DMA 2、ADC扫描模式DMA 简介 工作模式 1、数据转运DMA 这个例子的任务是将SRAM的数组DataA&#xff0c;转运到另一个数组DataB中&#xff0c;这个基本结构里的各个参数应该如何配置呢&#xff1f; 首先是外设站点和存储器站点的起始地址、…

宇音天下最新力作 | VTX356语音识别合成芯片问世

北京宇音天下科技有限公司&#xff0c;依托在语音技术领域的丰富经验和技术积累&#xff0c;成功推出了一款具有里程碑意义的语音识别合成芯片——VTX356。这款芯片的问世&#xff0c;不仅彰显了公司在智能语音处理领域的专业实力&#xff0c;也预示着智能家居、车载电子、智能…

STM32F1+HAL库+FreeTOTS学习21——内存管理

STM32F1HAL库FreeTOTS学习21——内存管理 1. 内存管理简介2. 内存管理相关的API函数3. 内存管理算法4. 内存管理实验4.1. 实验内容4.2 代码实现4.3 运行结果 5. 总结 上一期我们学习了FreeRTOS中的低功耗Tickless模式&#xff0c;这一期我们学习最后一个章节&#xff1a;内存管…

Linux高手进阶

查看系统资源占用&#xff1a; top&#xff1a;查看CPU、内存使用情况&#xff0c;类似 windows 的任务管理器 默认 5秒刷新一次语法&#xff1a; 直接输入 top按 q 或 ctrl c 退出内容详解&#xff1a; 第一行&#xff1a; top&#xff1a;命令名称 -系统时间up 23:57 min &…

vue3学习记录-单文件组件 CSS 功能

vue3学习记录-单文件组件 CSS 功能 1.组件作用域 CSS1.1为什么要用到样式穿透&#xff08;&#xff1a;deep&#xff08;&#xff09;&#xff09;1.2 插槽选择器:slotted(div)1.3 全局选择器:global 2.CSS Modules2.1 基本用法2.2 自定义注入名称2.3 与组合式 API 一同使用 3.…