开源数据采集工具 logstash(收集日志)/telegraf(收集指标)

news/2025/10/17 10:10:32/文章来源:https://www.cnblogs.com/pass-ion/p/19147159

Telegraf 是一个用 Go 编写的代理程序,是收集和报告指标和数据的代理。可收集系统和服务的统计数据,并写入到 InfluxDB 数据库。Telegraf 具有内存占用小的特点,通过插件系统开发人员可轻松添加支持其他服务的扩展。

Telegraf是TICK Stack的一部分,是一个插件驱动的服务器代理,用于收集和报告指标。

Telegraf 集成了直接从其运行的容器和系统中提取各种指标,事件和日志,从第三方API提取指标,甚至通过StatsD和Kafka消费者服务监听指标。

它还具有输出插件,可将指标发送到各种其他数据存储,服务和消息队列,包括InfluxDB,Graphite,OpenTSDB,Datadog,Librato,Kafka,MQTT,NSQ等等。

 

Telegraf作为数据采集模块,需要安装至被监控的目标主机上。Telegraf设计目标是较小的内存使用,通过插件来构建各种服务和第三方组件的metrics收集
Telegraf由4个独立的插件驱动:

  • Input Plugins
    输入插件,收集系统、服务、第三方组件的数据。
  • Processor Plugins
    处理插件,转换、处理、过滤数据。
  • Aggregator Plugins
    聚合插件,数据特征聚合。
  • Output Plugins
    输出插件,写metrics数据。

在平台监控系统中,可以使用 Telegraf 采集多种组件的运行信息,而不需要自己手写脚本定时采集,大大降低数据获取的难度;且 Telegraf 配置极为简单,只要有基本的 Linux 基础即可快速上手。Telegraf 按照时间序列采集数据,数据结构中包含时序信息,时序数据库就是为此类数据设计而来,使用 Influxdb 可以针采集得到的数据完成各种分析计算操作。

telegraf接入influxdb
[root@node1 ~]# wget http://get.influxdb.org/telegraf/telegraf-0.11.1-1.x86_64.rpm
[root@node1 ~]# rpm -ivh telegraf-0.11.1-1.x86_64.rpm
[root@node1 ~]# systemctl start telegraf 
[root@node1 ~]# vim /etc/telegraf/telegraf.conf## 修改内容如下: 
  [agent]

   ## Default data collection interval for all inputs
     interval = "10s"

   [[inputs.cpu]]
    ## no configuration options required

   [[inputs.mem]]
    ## no configuration options required

   [[outputs.influxdb]]urls = ["http://localhost:8086"] # required database = "telegraf" # requiredretention_policy = ""precision = "s"timeout = "5s"username = "telegraf"password = "password"    
[root@node1 ~]# systemctl restart telegraf

 

docker-compose.yml

version: '3'
services:telegraf:image: telegrafvolumes:- ./telegraf.conf:/etc/telegraf/telegraf.conf:ro

 

添加各种设备(SNMP、HTTP、MQTT、OPC UA)并扩展Telegraf配置:

[[inputs.opcua]]name = "opcua"endpoint = "opc.tcp://opcua_server:4840/freeopcua/server/"security_policy = "None"security_mode = "None"auth_method = "Anonymous"nodes = [{ name = "status", namespace = "2", identifier_type = "i", identifier = "2" }][[inputs.http_response]]interval = "10s"name_override = "http_metrics"urls = ["http://http_api:8080/metrics"]method = "GET"response_timeout = "5s"data_format = "json"[[inputs.snmp]]agents = ["snmp_agent"]version = 2community = "public"interval = "10s"timeout = "5s"[[inputs.snmp.field]]name = "cpu"oid = "1.3.6.1.4.1.2021.11.11.0"[[inputs.snmp.field]]name = "memory"oid = "1.3.6.1.4.1.2021.4.6.0"[[inputs.mqtt_consumer]]servers = ["tcp://mqtt_broker:1883"]topics = ["sensor/cpu/#", "sensor/mem/#"]data_format = "value"data_type = "float"

# 从RabbitMQ Management API获取指标
[[inputs.rabbitmq]]## RabbitMQ Management API 的URLurl = "http://localhost:15672"username = "telegraf"password = "your_secure_password"## 要采集的指标类型# 采集节点指标(内存、磁盘等)collect = ["connections", "queues", "exchange", "node", "overview"]## 可选:只监控特定的队列,使用正则匹配# queues_include = [".*"] # 监控所有队列# queues_include = ["important_queue", "task_.*"] # 监控指定队列[inputs.rabbitmq.tags]environment = "staging"source = "rabbitmq-cluster"

# 从Kafka主题消费消息
[[inputs.kafka_consumer]]## Kafka Broker 地址brokers = ["localhost:9092"]## 要消费的主题列表topics = ["app_metrics", "server_stats"]## 消费者组ID,用于偏移量管理consumer_group = "telegraf_consumers"## 数据格式:Kafka消息是二进制的,需要告诉Telegraf如何解析## 假设你的Kafka消息是JSON格式的InfluxDB Line Protocoldata_format = "influx"## 如果消息是JSON格式,但不是Line Protocol,可以这样解析:# data_format = "json"# json_query = "" # 如果JSON不是数组,需要指定一个查询来定位数据# tag_keys = ["host", "region"] # 指定哪些JSON字段作为Tag# json_string_fields = ["message"] # 指定哪些字段作为String类型字段## 可选:连接Kafka的认证信息(如果Kafka需要SASL/SSL)# sasl_username = "kafka-user"# sasl_password = "kafka-password"[inputs.kafka_consumer.tags]source = "kafka-cluster-1"data_topic = "app_metrics"

# 从PostgreSQL服务器获取指标
[[inputs.postgresql]]## 指定连接地址,可以同时监控多个数据库实例address = "host=localhost user=telegraf password=your_secure_password sslmode=disable"## 可选:指定要连接的数据库,默认为 'postgres'# databases = ["app_db", "postgres"]## 要采集的指标# 采集数据库大小、表统计、连接数等# 采集详细的查询统计(需要pg_stat_statements)[[inputs.postgresql.query]]query="SELECT * FROM pg_stat_database"measurement="pg_stat_database"[[inputs.postgresql.query]]query="SELECT * FROM pg_stat_statements"measurement="pg_stat_statements"# 这个查询可能返回大量数据,建议启用标签限制# withdbname = false# taglimit = 10[inputs.postgresql.tags]environment = "production"source = "postgres-primary"
# 读取MySQL的指标和统计信息
[[inputs.mysql]]## 指定MySQL服务器连接地址,%s会被替换为下面的数据库名servers = ["tcp(127.0.0.1:3306)/"]## 步骤1中创建的监控用户和密码username = "telegraf"password = "your_secure_password"## 要采集的指标列表# 采集全局状态metric_types = ["global_status", "innodb_metrics", "binary_logs", "table_schema", "user_statistics"]# 可选:指定要监控的数据库,如果为空则监控所有# databases = ["app_db", "test_db"]# 表架构指标采集的时间间隔(较慢,可以设置长一些)interval_slow = "30m"## 可选:添加标签,便于在InfluxDB中筛选[inputs.mysql.tags]environment = "production"source = "mysql-primary"

[[inputs.postgresql_extensible]]address = "host=localhost user=telegraf password=your_secure_password dbname=your_database_name"## 自定义查询 1:订单统计[[inputs.postgresql_extensible.query]]measurement = "order_metrics"sql = """SELECT COUNT(*) as total_orders,SUM(amount) as daily_revenue,COUNT(CASE WHEN status = 'pending' THEN 1 END) as pending_orders,date_trunc('hour', created_at) as timeFROM orders WHERE created_at >= NOW() - INTERVAL '1 hour'GROUP BY time"""# 将 'time' 字段作为时间戳timestamp = "time"## 自定义查询 2:产品库存监控[[inputs.postgresql_extensible.query]]measurement = "inventory"sql = """SELECT product_id,product_name,quantity_in_stock,(quantity_in_stock < low_stock_threshold) as is_low_stockFROM products"""# 不指定 timestamp,使用 Telegraf 采集时间作为时间戳
[[inputs.mysql]]servers = ["tcp(localhost:3306)/your_database_name"]username = "telegraf"password = "your_secure_password"# 禁用默认的监控指标采集(可选,如果只想采集业务数据)# metric_types = []## 自定义指标查询[[inputs.mysql.metric_query]]# 查询名称,会作为 measurement 名称measurement = "user_metrics"# 自定义 SQL 查询query = """SELECT COUNT(*) as total_users,COUNT(CASE WHEN created_at >= CURDATE() THEN 1 END) as new_users_today,DATE(created_at) as dateFROM users GROUP BY DATE(created_at)"""# 指定时间戳字段(可选)# timestamp = "date"
[[outputs.influxdb_v2]]urls = ["http://influxdb:8086"]token = "replace-with-your-own-token"organization = "test-org"bucket = "metrics"

 

Telegraf 是 InfluxData 平台的核心数据采集组件。它本身不是一个数据源,而是一个拥有超过200个插件的采集器,可以从海量的数据源中拉取或接收数据,然后写入到 InfluxDB。

  • 接入方式:通过配置 Telegraf 的 Input Plugins 和 Output Plugins。

  • 支持的数据源(通过Telegraf):

    • 系统指标:CPU、内存、磁盘、网络、进程(通过 cpumemdisknet 等插件)。

    • 数据库:MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch, SQL Server, Oracle 等。

    • 消息队列:Kafka, RabbitMQ, MQTT(也可作为输入)。

    • 云服务:AWS CloudWatch, Google Cloud Monitoring, Azure Monitor。

    • 容器与编排:Docker, Kubernetes。

    • 日志文件:通过 tail 插件读取日志文件。

    • API 数据:通过 http 插件从任何提供 JSON/XML 等格式的 REST API 拉取数据。

    • 网络设备:通过 snmp 插件采集网络设备指标。

    • 硬件传感器:通过 sensors 插件读取主板传感器数据。

特性TelegrafLogstash
核心定位 指标收集代理 日志处理管道
开发背景 InfluxData(时间序列数据库厂商) Elastic(搜索和分析引擎厂商)
架构设计 基于插件的代理,轻量级 基于 JVM 的完整处理管道
资源消耗 低内存(通常 10-50MB) 高内存(通常 500MB-1GB+)
性能 高吞吐,低延迟 中等吞吐,处理能力强
数据模型 主要为指标和时序数据 主要为日志和事件数据
配置复杂度 简单直观的 TOML 配置 灵活的 Ruby DSL 配置
 

Telegraf:

  • 为时间序列数据而生,专门优化用于指标收集

  • 与 InfluxDB 紧密集成,但支持多种输出

  • "Batteries included" 理念 - 开箱即用

Logstash:

  • 为日志处理而生,是 ELK/ELK Stack 的核心组件

  • 强调数据的解析、转换和丰富

  • "Pipeline" 理念 - 灵活可扩展的数据管道

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

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

相关文章

2025年粉末冶金制品厂家推荐排行榜,粉末冶金零件,金属注射成形,结构件,齿轮,轴承公司最新精选

2025年粉末冶金制品厂家推荐排行榜:粉末冶金零件、金属注射成形、结构件、齿轮、轴承公司最新精选行业背景与发展趋势粉末冶金技术作为现代制造业的核心工艺之一,在汽车、家电、机械装备等领域发挥着越来越重要的作用…

多模态大语言模型LISA - 详解

多模态大语言模型LISA - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

2025 年升降平台车厂家最新推荐口碑排行榜:覆盖多类型产品,聚焦实力厂家,为企业选购提供权威参考剪叉式/手动液压/电动液压升降平台车厂家推荐

在工业生产、仓储物流等领域,升降平台车是不可或缺的关键设备,其质量与性能直接关系到企业运营效率与生产安全。当前市场上,升降平台车品牌繁杂,部分厂家技术落后、工艺不规范、售后不完善,导致企业选购时面临诸多…

供应商图纸协同是什么?主要有哪几个核心原则?

供应商图纸协同是确保制造业供应链高效运作的基础。它不仅涉及图纸和数据的安全传递,也需要关注信息的准确性和及时性。企业通过建立数字平台,可以统一管理图纸及相关文件,加快信息流转。这一过程强调了沟通的重要性…

「Java EE开发指南」用MyEclipse开发的EJB开发工具(二)

「Java EE开发指南」用MyEclipse开发的EJB开发工具(二)如果您需要支持Java EE 5中引入的简化基于注释的POJO编程模型,那么EJB开发工具就是您的正确选择。在此您将了解到:EJB开发工具和EJB项目 持久性支持和EJB项目…

2025 年堆高车厂家最新推荐排行榜:聚焦专利技术、华为等大牌合作案例及国内优质品牌解析手动液压/手动液压/卷筒/油桶堆高车厂家推荐

当前,仓储物流与生产制造行业对堆高车的需求持续攀升,但其市场供给呈现 “质量参差、选型复杂” 的态势。一方面,部分厂家缺乏核心技术,产品故障率高、维护成本高,难以适配高强度作业;另一方面,企业采购时易受低…

chromadb的使用

chromadb的使用from chromadb.config import Settings from chromadb.utils import embedding_functions import os import chromadb # 设置 Chroma 配置 persist_directory = "database" if not os.path.ex…

TResult Funcin T, out TResult的应用

TResult Func<in T, out TResult>的应用在 C# 中,Func<bool, string>是一个委托类型,表示一个接受 bool类型参数并返回 string类型的方法。 // 声明 Func<bool, string> 变量 Func<bool, strin…

2025 年最新推荐!编码器源头厂家排行榜:聚焦无磁 / 光学 / 脉冲等多类型产品,精选行业优质企业

随着工业自动化向高精度、高智能化方向快速迈进,编码器作为闭环控制系统的核心传感部件,市场需求持续攀升,但行业乱象也随之凸显。部分厂家缺乏核心技术,产品精度与可靠性不足,难以适配高端制造场景;售后体系不完…

Excelize 开源基础库发布 2.10.0 版本更新

2025年10月14日,开源电子表格文档基础库 Excelize 发布了 2.10.0 正式版本,该版本包含了 40 多项新增功能、错误修复和兼容性提升优化。Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,…

高效搞定outlook大附件怎么发送的方法与技巧

在邮件沟通中,大附件的发送常常是个棘手的问题。为了高效解决这个难题,用户可以采取多种策略。首先,专业的插件如飞驰云联Outlook超大附件插件,能让用户轻松发送超大文件,无需压缩,简化了整个过程。实用技巧结合…

2025年点胶机厂家权威推荐榜:精密点胶设备、自动化点胶系统、桌面点胶机源头厂家综合实力解析

2025年点胶机厂家权威推荐榜:精密点胶设备、自动化点胶系统、桌面点胶机源头厂家综合实力解析随着工业4.0时代的深入发展,点胶技术作为精密制造领域的关键环节,正经历着前所未有的技术革新。从传统的半自动点胶到如…

HAP 签名提取:从定位到解析的实操指南

鸿蒙应用的HAP文件通过嵌入式JSON签名保障分发安全,其签名提取与解析是验证应用合法性的基础。本文聚焦实操,详解从HAP文件中提取签名并解析证书信息的核心流程。 一、签名数据的精准定位 HAP文件的签名信息藏于尾部…

深入解析:Redis List 类型全解析

深入解析:Redis List 类型全解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

内外网文件传输工具有哪些?最强合集在这里

内外网文件传输工具有很多,传统的、专业的、免费的、付费的,等等,那么,具体到底有哪些内外网文件传输工具呢?各有什么特点呢?企业要入选选择呢? 本文中,就来揭晓答案,大合集就在这篇文章里了! 第一类:物理隔…

IC 测试革新

无论你是 IC 设计新手,还是资深 RTL Synthesis 工程师,深入掌握设计可测试性(DFT)关键技术,是提升芯片可靠性的必经之路。 1、为什么 DFT 在现代 IC 中变得不可或缺提升可控性与可观测性:通过在设计中嵌入测试结…

2025 年自动售卖机厂家最新推荐榜单:智能 / 无人 / 文创 / 盲盒 / 食品全品类优选,高性价比品牌选购指南

引言智能零售浪潮下,自动售卖机行业加速扩张,但市场乱象让运营商陷入选型困境:设备卡货、温控失效、后台卡顿等问题频发,部分品牌缺乏核心技术,智能化与售后服务严重脱节。随着消费需求升级,具备高清触控、多支付…

DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(二)

DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(二)DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程…

使用SecureCRT从linux上传下载文件方法

​​一、从 Linux 服务器打包并用 CRT 下载到 Windows 的完整流程​​ 1、准备工作​​ 在 Linux 服务器安装打包工具与 lrzsz(lrzsz 用于 ZModem 快速直传): RHEL/CentOS: sudo yum install -y ​​lrzsz​​ ​​…