You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Logstash中统计特定应用来源每分钟的事件字节总大小

Logstash按应用维度统计每分钟事件总字节量实现方案

实现步骤

1. 计算单事件字节大小

在filter阶段通过ruby插件计算每个事件的字节长度,有两种可选方案:

  • 方案一:直接统计事件序列化后的完整字节数,适配没有保留原始上报报文的场景
filter {
  ruby {
    code => "event.set('event_byte_size', event.to_json.bytesize)"
  }
}
  • 方案二:统计原始上报报文的字节数,统计结果更精准,要求input阶段保留了完整原始报文字段(示例中原始报文字段为raw_message)
filter {
  ruby {
    code => "event.set('event_byte_size', event.get('raw_message').to_s.bytesize)"
  }
}

2. 按应用+时间维度聚合统计

首先要确保所有事件都携带唯一标识应用的字段(示例中为app_name),两种聚合方式可选:

  • 方式一:使用aggregate过滤器实现精准的分钟级聚合
filter {
  aggregate {
    task_id => "%{app_name}_%{+YYYYMMddHHmm}"
    code => "
      map['total_byte_size'] ||= 0
      map['total_byte_size'] += event.get('event_byte_size')
      map['app_name'] = event.get('app_name')
      map['stat_minute'] = event.get('@timestamp').time.utc.strftime('%Y-%m-%d %H:%M:00')
      event.cancel()
    "
    push_previous_map_as_event => true
    timeout => 120
  }
}

该配置会每分钟生成一个聚合事件,包含app_name、stat_minute、total_byte_size三个核心统计字段,直接输出到对应存储即可。

  • 方式二:使用metrics过滤器实现轻量统计,适配高吞吐量场景
filter {
  metrics {
    meter => "bytes.%{app_name}"
    add_field => { "type" => "byte_stat" }
    flush_interval => 60
    clear_interval => 60
  }
}

生成的聚合事件中bytes.[应用名].count字段即为对应应用每分钟的总字节量。

注意事项

  • 聚合的超时时间建议设置为统计周期的2倍,避免延迟到达的事件漏统计
  • 统计字节大小的逻辑可以根据业务需要调整,比如只统计特定字段的字节量即可,无需统计全量事件

内容的提问来源于stack exchange,提问作者dhananjay vispute

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:27:03