SimData简介
Splunk去年发布了其最新的模拟工具-SimData。SimData允许用户为自己的Splunk应用程序模拟相关数据集,来构建、测试以及演示这些应用程序,而无需访问生产数据。
SimData是一种从用户定义的模拟场景中生成模拟数据的工具。SimData不是简单地使用数据样本集来生成重复的模拟数据,而是通过模拟多个系统如何协同工作并互相影响,让用户依据现实世界的情况生成丰富而强大的事件集。
假设用户的系统包括一个Web服务器和一个数据库服务器,SimData可以关联Web服务器和数据库服务器的行为,以此方式来模拟在数据库服务器受到Web流量等情况影响时可能的结果,让用户看到整体性能如何受到影响。
SimData的主要应用场景有:
- 应用程序开发:使用SimData生成特定格式的数据以测试用户的应用程序的不同功能。SimData允许用户使用自己的样本数据来表示场景,并根据样本数据生成更多的模拟数据。
- 现场演示:可以使用SimData来实时生成模拟数据,演示不同的用户场景。用户可以在运行时更改模拟配置,SimData会自动对配置更改做出响应,以此演示应用程序如何响应不同的行为,完成一个逼真的实时演示。
Splunk自己的技术营销团队也使用了SimData来演示一些复杂的场景,如整个Splunk ITSI环境以及一些微服务等等。
SimData的模拟数据输出渠道包括:
- Splunk HEC
- 文本文件
- 标准输出stdout
SimData是在Java中使用Akka库实现的。SimData专为Splunk Enterprise的独立实例、松散耦合的集群和远程节点而设计。其主要功能特性包括:
- 使用了具有强大表达能力的简单描述语言(Simple Description Language)来定义模拟逻辑
- 灵活、强大的建模能力,将模拟对象建模为实体,并支持模拟实体之间的简单和复杂交互
- 支持使用消息在模拟实体之间进行通信,基于Akka消息范式
- 支持基于已有的数据来模拟更多数据
- 实时生成模拟数据,并提供了一个Web UI来支持实时修改模拟配置,来完成一个逼真的现场演示
- 支持多种模拟数据输出渠道,包括Splunk HEC,文本文件、标准输出等
SimData总体使用流程
- 定义模拟中的实体:使用SimData DSL来定义。例如如果要为简单的Web 应用程序进行模拟数据的建模,通常有3个实体:用户、Web服务器和数据库。
- 定义实体之间的交互:使用SimData DSL来定义。例如,用户发出Web请求,然后Web服务器连接数据库。然后将数据库中的数据返回给用户。
- 为模拟创建事件类型:根据用户希望SimData输出的数据,用户可以使用字符串模板(类似正则表达式)定义事件类型。例如,可以为数据库定义用户HTTP请求、Apache日志和事务日志。
- 配置发送模拟数据的位置:Splunk HEC是最常用的SimData输出渠道,除此之外,也支持输出到文件或标准输出等渠道。
值得一提的是,SimData还带有自己的UI管理界面(控制面板),用于管理、修改已在运行中的模拟任务。该控制面板允许用户在生成数据的同时实时更改模拟配置,而无需提前对这些更改进行编码,SimData引擎也会实时对这些配置更改做出响应。例如,在电子商务网站模拟中,用户可以通过在控制面板上修改相关模拟配置,实时模拟Web服务器上的用户负载或数据库磁盘故障等场景。
SimData工作原理
SimData的建模逻辑中主要包含如下概念:
- 实体:指代现实世界中的系统
- 机器人:一个实体的运行实例
- 消息:机器人之间使用消息相互通信
- 操作:针对用户指定的条件做出操作
- 事件:一个事件通常对应一条日志
例如对于与Web服务器交互的一组用户,该服务器与后端数据库服务器通信,交互流程可能如下所示:
在上述场景的模拟建模过程中,包含三个实体:用户(User)、数据库服务器(Database)和Web服务器(Webserver)。每个实体会包含N个机器人,即:SimData会为每个不同的用户、不同的Web服务器以及不同的数据库服务器创建一个机器人。
在上述场景模拟建模过程中,消息是机器人之间(即用户和服务器之间)的请求和响应内容。在模拟运行过程中,用户可以通过增加每个请求的往返时间来模拟当流量过大时,服务器会发生什么。这样的场景往往会触发诸如强制重启数据库之类的操作,在SimData中这样的重启操作可以通过更新代表过载数据库的机器人的状态来实现。
用户还可以在上述场景的数据库服务器和Web服务器的实体定义中添加事件,这些事件可以是来自Web服务器的网络日志、来自数据库的日志以及反映底层服务器负载的CPU负载指标等。以此方式,在模拟运行时,可以实时收到反映机器内部状态的日志,逼真地模拟现实情况。
SimData模拟数据最佳实践
一、安装SimData
- 安装Java 8+
- 下载并安装Java SE Runtime Environment (JRE) 1.8或更高版本
- 下在SimData JAR包
二、配置SimData
SimData的配置包含两部分:模拟对象的配置和模拟运行环境的配置
配置模拟对象
SimData引擎在一个“模拟定义文件”(Simulation File, 文件扩展名为.simulation)中定义了模拟任务中的对象以及模拟运行时会发生什么。在该文件中,使用了Splunk提供的DSL语言来编写定义内容。
在模拟定义文件中可以指定以下内容:
- 系统中的实体及其初始状态
- 模拟任务中要用到的数据,可以以CSV文件的形式提供
- 要在实体之间发送的消息
- 在模拟期间发出的事件
- 定义模拟过程中发生事件的规则
- 发送哪些消息
- 发出哪些事件
- 运行这些规则的频率
- 建模机器人响应传入消息的处理程序
模拟定义文件(Simulation File)的配置语法细节可以参考SimData simulation file refrence,下面是Simulation File的一个简单示例,它定义了一个Greeter实体,每隔5秒发出一个“Hello World!”。
# Simulation File # hello.simulation event Greeting { required: [text]; } entity Greeter { every(5s) { emit Greeting { text: "Hello, World!"; } } }
更复杂的Simulation File的示例可以参考Github。
配置模拟运行环境
SimData引擎使用一个“场景文件”(Scene File, 文件扩展名为.json)来配置模拟的运行时环境。此场景文件允许用户使用不同的设置来运行相同的模拟任务,以此来模拟不同的运行环境。
在场景文件(Scene File)中可以配置以下内容:
- 可以在运行时控制的变量以及允许的值范围
- 例如,配置一个滑块,允许用户更改Web服务器的实时访问流量。
- 在模拟任务运行时,SimData控制面板会支持对这些暴露出来的变量进行实时更改。
- 在模拟中使用的实体类型,包括它们的初始状态以及每种类型要运行的数量。
- 例如,配置多个用户和两个Web服务器
- 实体之间的消息映射和通信方向
- 即:当一个机器人发送消息时,定义哪个机器人接收它
- 模拟数据的输出渠道,支持配置一个或多个输出渠道
- Splunk HEC
- 控制台作为标准输出(stdout)
- 文本文件
场景文件(Scene File)的配置语法细节可以参考SimData scene file refrence,下面是Scene File的一个简单示例,该配置包含1个Greeter实体和默认的模拟时钟设置,另外通过将“default_transport”(默认传输渠道)设置为“Text”来将模拟数据打印到控制台标准输出。
# Scene File # hello.json { "default_transport": "Text", "entities":[ { "count": 1, "entity_name": "Greeter" } ], "time_unit": "Seconds", "update_interval": 1 }
更复杂的Scene File的示例可以参考Github
三、运行SimData模拟
SimData CLI运行命令
在上述两个步骤安装和配置SimData完成后,使用CLI执行如下命令,来运行模拟任务
java -jar simdata-<version>.jar -s <simulation_file> -c <scene_file>
例如,基于上述第二步【配置SimData】中的Simulation File和Scen File的简单示例hello.simulation和hello.json,执行如下命令来运行模拟任务
java -jar <SimData JAR file> --simulation hello.simulation --scene hello.json
因为上述配置中,配置模拟数据的输出渠道为:打印到控制台标准输出,因此可以产生如下输出
Starting simulation "eventType"="Greeting" "text"="Hello, World!" "eventType"="Greeting" "text"="Hello, World!" "eventType"="Greeting" "text"="Hello, World!" "eventType"="Greeting" "text"="Hello, World!" "eventType"="Greeting" "text"="Hello, World!"
更多详细的运行命令参考:SimData CLI refrence
配置通过HEC发送模拟数据
要将SimData的模拟输出发送到Splunk HTTP事件收集器(HTTP Event Collector, HEC)中,需要做如下配置
- 启动Splunk Enterprise实例
- 启用HEC
- 为模拟任务创建HEC datainput
- 在SimData的Scene File中配置"default_transport"的值为"SplunkHEC"
- 在SimData的Scene File中配置HEC token和索引名称
下面是Scene File中的相关配置样例
{ "default_transport": "SplunkHEC", ... "transports": [ { "config": { "default_index": "simdata", "token": "<your token>", "uri": "https://localhost:8088" }, "name": "SplunkHEC" } ], ... }
在模拟任务运行时更改变量
为了演示模拟数据,用户可能需要在运行时更改模拟变量的值以产生预期行为。例如,为了演示IT操作员如何监控或诊断Web请求失败,Web流量数据的模拟从正常场景开始,运行一段时间后,开始模拟异常的流量数据。
为了模拟上述由正常转变为异常的场景,可以使用多种方式,如:
- 在Webserver实体中设置一个flag变量,以标识Web服务器响应请求失败
- 在Webserver实体中定义最大请求队列大小的变量。减小该值会模拟Web服务器的容量减少,可能导致Web请求失败
- 定义Web请求响应时间变量。增大该值以模拟Web请求延迟增加,可能导致Web请求失败
更多信息参考SimData Scen File Refrence - controls
使用模拟控制UI
SimData提供了一个基于Web的用户界面,供用户在运行时更改模拟配置。该控制UI默认运行在http://localhost:11013,用户也可以在运行模拟任务时,通过命令行指定端口。当然用户在不需要时,也可以通过传递--no-web参数,在运行模拟任务时,禁用该组件。更多细节可以参考SimData CLI refrence。
该UI可用于管理、修改已在运行中的模拟任务。它允许用户在生成数据的同时实时更改模拟配置,而无需提前对这些更改进行编码,SimData引擎也会实时对这些配置更改做出响应。例如,在电子商务网站模拟中,用户可以通过在控制UI上修改相关模拟配置,实时模拟Web服务器上的用户负载或数据库磁盘故障等场景,通过上述方式,完成一个实时、逼真的模拟。
总结
SimData是一种从用户定义的模拟场景中生成模拟数据的工具。SimData不是简单地使用数据样本集来生成重复的模拟数据,而是通过模拟多个系统如何协同工作并互相影响,让用户依据现实世界的情况生成丰富而强大的事件集。具体来讲,SimData通过使具有强大表达能力的简单描述语言(Simple Description Language)来定义模拟逻辑,具有灵活、强大的建模能力。通过将模拟对象建模为实体,并支持模拟实体之间的简单和复杂交互,可以模拟复杂的现实场景。
值得一提的是,使用SimData来实时生成模拟数据、演示不同的用户场景时,用户可以在运行时更改模拟配置,SimData会自动对配置更改做出响应,以此演示应用程序如何响应不同的行为,完成一个逼真的实时演示。
SimData的模拟数据输出渠道包括:Splunk HEC、文本文件和标准输出stdout等,用户可按需灵活配置输出渠道。