当前位置: 首页 > news >正文

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

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.hskmm.com/?act=detail&tid=32787

相关文章:

  • 2025年粉末冶金制品厂家推荐排行榜,粉末冶金零件,金属注射成形,结构件,齿轮,轴承公司最新精选
  • 2025 年升降平台车厂家最新推荐口碑排行榜:覆盖多类型产品,聚焦实力厂家,为企业选购提供权威参考剪叉式/手动液压/电动液压升降平台车厂家推荐
  • 供应商图纸协同是什么?主要有哪几个核心原则?
  • 2025 年堆高车厂家最新推荐排行榜:聚焦专利技术、华为等大牌合作案例及国内优质品牌解析手动液压/手动液压/卷筒/油桶堆高车厂家推荐
  • 2025 年最新推荐!编码器源头厂家排行榜:聚焦无磁 / 光学 / 脉冲等多类型产品,精选行业优质企业
  • Excelize 开源基础库发布 2.10.0 版本更新
  • 高效搞定outlook大附件怎么发送的方法与技巧
  • 2025年点胶机厂家权威推荐榜:精密点胶设备、自动化点胶系统、桌面点胶机源头厂家综合实力解析
  • HAP 签名提取:从定位到解析的实操指南
  • 深入解析:Redis List 类型全解析
  • 内外网文件传输工具有哪些?最强合集在这里
  • 汇川伺服常用参
  • IC 测试革新
  • 2025 年自动售卖机厂家最新推荐榜单:智能 / 无人 / 文创 / 盲盒 / 食品全品类优选,高性价比品牌选购指南
  • 使用SecureCRT从linux上传下载文件方法
  • 2025年保洁公司权威推荐榜:苏州/昆山驻场保洁/钟点保洁/开荒保洁/外包保洁/商场保洁/办公楼保洁/工厂保洁/医院保洁/企业保洁全方位解析
  • Content Hub接口文档
  • 2025年防水织带/鞋垫/编织包/松紧带/鞋带/织带/飞织鞋面厂家最新推荐榜单:专业工艺与创新设计深度解析
  • 2025年方钢/扁钢/圆钢/光轴/六角钢/异型钢/冷拉冷拔钢/热轧钢厂家最新权威推荐榜:Q355B/Q345B/16Mn/45#/40Cr/A3/Q235B钢材实力解析
  • NVIDIA Jetson TX2 边缘盒子运行姿态检测模型记录
  • 2025年电源适配器厂家权威推荐榜:笔记本适配器/工业电源/充电器厂家实力与市场口碑深度解析
  • 止损,补仓价格的合理设置
  • 鸿蒙应用开发从入门到实战(二十四):一文搞懂ArkUI网格布局
  • Go-Sciter入门系列-环境搭建
  • ChromeOS融合Android技术栈,打造更智能的Chromebook体验
  • Docker 部署 PHP 全手册
  • 2025 年最新推荐包装印刷制造厂家排行榜:聚焦设备、团队与服务的优质品牌精选定制/设计/优质/品质包装印刷厂家推荐
  • 2025 年国内发电机厂家最新推荐排行榜:涵盖多功率型号,助力精准选购优质发电机品牌指南
  • 作业二
  • VSCode 使用默认profile打开文件