UDP Multithreaded Source

支持的管道类型:

  •  Data Collector

UDP Multithreaded Source源从一个或多个UDP端口读取消息。源端可以创建多个工作线程,以在多线程管道中启用并行处理。

UDP Multithreaded Source源为每个消息生成一条记录。UDP Multithreaded Source源可以处理collectd消息,NetFlow 5和NetFlow 9消息以及以下类型的syslog消息:

  • RFC 5424
  • RFC 3164
  • 非标准通用消息,例如没有版本数字的RFC 3339日期

在处理NetFlow消息时,该阶段会根据NetFlow版本生成不同的记录。处理NetFlow 9时,将基于NetFlow 9配置属性生成记录。有关更多信息,请参见NetFlow数据处理。

源端也可以读取二进制或基于字符的原始数据。

配置UDP Multithreaded Source时,可以指定要使用的端口以及批处理大小和等待时间。您指定要在多线程处理中使用的辅助线程数,并且可以指定数据包队列大小。当epoll在Data Collector计算机上可用时,您还可以指定用于增加流向数据包的吞吐量的接收器线程数。

您可以为数据指定数据格式,然后配置所有相关属性。

处理原始数据

使用“Raw/Separated Data”数据格式可以使UDP Multithreaded Source源从二进制或基于字符的原始数据生成记录。

处理原始数据时,源可以为其接收的每个UDP数据包生成一条记录。或者,如果指定分隔符,则源端可以从每个UDP数据包生成多个记录。

生成多个记录时,可以指定多个值的行为:一个仅包含第一个值的记录,一个包含所有值作为列表的记录,或每个值包含一个记录的多个记录。

您可以选择指定用于数据的输出字段。如果未指定,则源端将原始数据写入根字段。

您可以使用“Raw/Separated Data”数据格式将原始数据写入到一个字段中,然后使用Data Parser处理器对其进行处理。这使您可以保留原始数据以供其他使用。

接收方线程和工作线程

UDP Multithreaded Source源使用以下两种类型的线程:

接收线程
用于将数据从操作系统套接字传递到源端数据包队列。默认情况下,源端使用单个接收器线程。

Data Collector在启用了epoll的计算机上运行时,可以将源配置为使用多个接收器线程。Epoll需要本机库,并且仅在Data Collector在最新版本的64位Linux上运行时才可用。

启用多个接收器线程时,可以提高将数据传递到源端的速度,但是会以标准增加线程管理开销的代价为代价。

若要使用其他接收方线程,请选择“Use Native Transports (epoll)”属性,然后配置“Number of Receiver Threads”。

工作线程
用于执行多线程管道处理。默认情况下,源端使用单个线程进行管道处理。您可以增加用于并行处理大量数据的线程数。有关更多信息,请参见多线程管道。
若要将其他工作线程用于并行处理,请增加“Number of Worker Threads”属性。

数据包队列

UDP Multithreaded Source源使用数据包队列将传入的数据保存在内存中,直到可以将这些数据批量合并并通过管道为止。当数据包队列已满时,传入的数据包将被丢弃。丢弃的数据包数量在阶段度量中记录。

配置源端时,可以指定队列中允许的最大数据包数。默认值为200,000。因为数据包队列使用Data Collector 堆内存,所以在增加队列的大小时,还应考虑增加 Data Collector堆的大小。

多线程管道

UDP Multithreaded Source源执行并行处理,并允许创建多线程管道。

启用多线程处理时,UDP Multithreaded SourceMultithreaded Source源会根据“Number of Worker Threads”属性使用多个并发线程进行管道处理。当启动管道时,源端将创建属性中指定的线程数。

当数据包从指定的UDP端口到达时,它们进入数据包队列。每个管道只有一个数据包队列实例。所有接收方线程(使用epoll时,可以多于一个)将数据包放入队列。同时,每个工作线程从队列中删除数据包,根据指定的数据格式解析它们,并使用管道运行器处理其余的管道。

管道运行器是无源管道实例 ——一种包括所有处理器、执行器和目标端的管道实例,并处理源端之后的所有管道处理逻辑。每个管道运行程序一次处理一批,就像在单个线程上运行的管道一样。当数据流变慢时,管道运行器会闲置等待,直到需要它们为止,并定期生成一个空批。您可以配置“Runner Idle Time”管道属性来指定间隔或选择退出空批次生成。

多线程管道保留每个批次中的记录顺序,就像单线程管道一样。但是由于批次是由不同的流水线处理程序处理的,因此无法确保将批次写入目标端的顺序。

例如,假设您将“Max Concurrent Requests”属性设置为5。启动管道时,源将创建5个线程,而Data Collector将创建匹配数量的管道运行器。 接收到数据后,源端将批处理传递给每个管道运行器进行处理。 在批处理中,HTTP Server仅包含具有指定应用程序ID的HTTP POST和PUT请求。

每个管道运行器执行与其余管道相关联的处理。将一批写入流水线目标后,流水线运行器将可用于另一批数据。每个批次都应尽快处理和写入,这与其他管道处理器处理的其他批次无关,因此,批次的写入方式可能与读取顺序不同。

在任何给定的时刻,五个管道运行器每个都可以处理一批,因此该多线程管道一次最多可以处理五个批次。当传入数据变慢时,管道运行器将处于空闲状态,并在数据流增加时立即可用。

有关多线程管道的更多信息,请参见《多线程管道概述》。

性能调整指标

UDP Multithreaded Source源提供了可用来调整管道性能的数据包队列指标。

源端提供以下数据包队列指标:

  • Dropped Packets-由于数据包队列已满而丢弃的数据包数。
  • Queue Size-数据包队列的当前大小。
  • Queued Packets-已通过数据包队列进行处理的数据包总数。

这些指标可以帮助您确定如何提高管道性能。例如,如果丢弃的数据包数量很大,并且在监视管道时队列大小似乎已满,则可以增加管道的工作线程数,以提高吞吐量。或者,如果您有相对较高的突发数据量,并且发现数据包在这些突发中丢失,请考虑增加数据包队列大小以更好地容纳它们。

如果队列大小未达到最大,但是排队的数据包数量似乎没有您期望的那么高,则可能是在操作系统端丢弃了数据包。当epoll可用时——也就是说,当Data Collector 在64位Linux的最新版本上运行时——增加接收器线程数可以增加传递到源端的数据包的数量。

配置UDP Multithreaded Source

配置UDP Multithreaded Source源以使用多个工作线程来处理来自一个或多个UDP端口的消息。

  1. 在“Properties”面板的“General选项卡上,配置以下属性:
    一般属性 描述
    Name 阶段名。
    Description 可选说明。
    On Record Error 该阶段的错误记录处理:

    • Discard-放弃记录。
    • To Error-将记录发送到管道以进行错误处理。
    • Stop Pipeline-停止管道。
  2. 在“UDP”选项卡上,配置以下属性:
    UDP属性 描述
    Port 侦听数据的端口。使用简单或批量编辑模式,单击 添加图标以列出其他端口。

    要侦听低于1024的端口,必须由具有root特权的用户运行Data Collector。否则,操作系统不允许Data Collector绑定到端口。

    注意:没有其他管道或进程已经可以绑定到侦听端口。侦听端口只能由单个管道使用。
    Use Native Transports (epoll) 指定是否对每个端口使用多个接收器线程。使用多个接收器线程可以提高性能。

    您可以使用epoll来使用多个接收器线程,当Data Collector在最新版本的64位Linux上运行时,该线程可以使用。

    Number of Receiver Threads 每个端口要使用的接收器线程数。例如,如果您为每个端口配置2个线程,并将源配置为使用3个端口,则源总共使用6个线程。

    当epoll在Data Collector计算机上可用时,用于增加将数据传递到源端的线程数。

    默认值为1。

    Data Format UDP传递的数据格式:

    • collectd
    • NetFlow
    • syslog
    • Raw/separated data
    Max Batch Size (messages) 批量包含并一次通过管道的最大消息数。接受的值最高为 Data Collector的最大批处理大小。

    默认值是1000。

    Batch Wait Time (ms) 发送部分或空批次之前要等待的毫秒数。
    Packet Queue Size 要保留在数据包队列中以进行处理的最大数据包数。
    Number of Worker Threads 源端用来执行管道处理的线程数。
  3. 在“syslog选项卡上,定义数据的字符集。
  4. 在“collectd选项卡上,定义以下collectd的属性:
    collectd属性 性质
    TypesDB File Path 用户提供的types.db文件的路径。覆盖默认的types.db文件。
    Convert Hi-Res Time & Interval 将收集的高分辨率时间格式间隔和时间戳转换为UNIX时间(以毫秒为单位)。
    Exclude Interval 从输出记录中排除间隔字段。
    Auth File 可选身份验证文件的路径。使用认证文件接受签名和加密的数据。
    Charset 数据的字符集。
  5. 对于raw data,在“Raw/Separated Data选项卡上,定义以下属性:
    原始/分隔数据属性 描述
    Data Separator 可选的数据分隔符,用于将UDP数据包分隔为多个值。使用Java Unicode语法\u<字符代码>指定字节文字。

    例如,默认换行符表示为: \u000A

    Raw Data Mode 要处理的原始数据类型:二进制或字符串数​​据。
    Charset 字符串数据使用的字符集。
    Output Field Path 原始数据的可选输出字段。当不使用原始数据时,源端会将原始数据写入根字段。
    Multiple Values Behavior

    当数据分隔符中的数据从UDP数据包生成多个值时采取的操作:

    • First Value Only-返回带有第一个值的一条记录。
    • All Values as a List-返回一条记录,其中所有值都在列表中。
    • Split into Multiple Records-返回多个记录,每个值一个记录。
  6. 对于NetFlow 9数据,在NetFlow 9选项卡上,配置以下属性:

    处理早期版本的NetFlow数据时,将忽略这些属性。

    Netflow 9属性 描述
    Record Generation Mode 确定要包含在记录中的值的类型。选择以下选项之一:

    • Raw Only
    • Interpreted Only
    • Both Raw and Interpreted
    Max Templates in Cache 模板缓存中存储的最大模板数。有关模板的更多信息,请参见缓存NetFlow 9模板。

    对于无限的缓存大小,默认值为-1。

    Template Cache Timeout (ms) 缓存空闲模板的最大毫秒数。超过指定时间未使用的模板将从缓存中逐出。有关模板的更多信息,请参见 缓存NetFlow 9模板。

    无限期缓存模板的默认值为-1。