>MoSKito-Essential Configuration Guide Moskito的配置指导
从v2.x版本开始,MoSKito可以通过使用外部配置文件来完成配置。这个配置是基于ConfigeMe-使用JSON配置结构的语法来完成。
MoSKito 配置是建立不同的配置对象,使得它更容易修改和维护。每一个对象都能够独立被配置,下面是典型的配置,不同的部分将会单独讨论。
{
"@thresholdsAlertsConfig":{
"@notificationProviders":[
{
"className":"net.anotheria.moskito.core.threshold.alerts.notificationprovider.LogFileNotificationProvider",
"parameter":"MoskitoAlert",
"guardedStatus":"GREEN"
},
{
"className":"net.anotheria.moskito.core.threshold.alerts.notificationprovider.MailNotificationProvider",
"parameter":"
[email protected]",
"guardedStatus":"RED"
},
{
"className":"net.anotheria.moskito.core.threshold.alerts.notificationprovider.SysoutNotificationProvider",
"parameter":"",
"guardedStatus":"GREEN"
}
],
"@alertHistoryConfig":{
"maxNumberOfItems":500,
"toleratedNumberOfItems":550
}
},
"@accumulatorsConfig":{
"accumulationAmount":500,
"@accumulators":[
{
"name":"Configured SessionCount Cur 5m",
"producerName":"SessionCount",
"statName":"Sessions",
"valueName":"cur",
"intervalName":"5m"
}
]
},
"@thresholdsConfig":{
"@thresholds":[
{
"name":"Configured-5m-ThreadCount",
"producerName":"ThreadCount",
"statName":"ThreadCount",
"valueName":"Current",
"intervalName":"5m",
// time unit can be ignored here
"@guards":[
{
"value":"30",
"direction":"DOWN",
"status":"GREEN"
},
{
"value":"30",
"direction":"UP",
"status":"YELLOW"
},
{
"value":"45",
"direction":"UP",
"status":"ORANGE"
},
{
"value":"60",
"direction":"UP",
"status":"RED"
},
{
"value":"100",
"direction":"UP",
"status":"PURPLE"
}
]
}
]
},
"@dashboardsConfig":{
"@dashboards":[
{
"name":"Example Dashboard",
"refresh":60,
"@charts":[
{
"caption":"Threads",
"accumulators":[
"ThreadCount",
"ThreadStateBlocked-1m",
"ThreadStateRunnable-1m",
"ThreadStateTimedWaiting-1m",
"ThreadStateWaiting-1m"
]
},
{
"accumulators":[
"URL REQ 1m"
]
}
],
"@thresholds":[
"OrderPerMinuteThreshold",
"ShopServiceAVG"
],
"@gauges":[
"Memory",
"Running",
"Sessions",
"SysLoad"
],
"@producers":[
"ingredients",
"orders"
],
"@widgets":[
"gauges",
"charts",
"producers",
"thresholds"
],
}
]
}
}
Configuration file and location 配置文件和位置
MoSKito是基于@ConfigureMe的注解来配置的
@ConfigureMe(name="moskito")
public class MoskitoConfiguration {
@Configure
private ThresholdsAlertsConfig thresholdsAlertsConfig = new ThresholdsAlertsConfig();
@Configure
private ThresholdsConfig thresholdsConfig = new ThresholdsConfig();
@Configure
private AccumulatorsConfig accumulatorsConfig = new AccumulatorsConfig();
...
ConfigureMe 要求配置文件以moskito.json来命名并且在类路径下查找它。然而,你可能对该文件给出不同的名字(或者使用xml或是properties来代替json)。
MoskitoConfiguration configuration = new MoskitoConfiguration();
ConfigurationManager.INSTANCE.configureAs(configuration, "anothername");
MoskitoConfigurationHolder.INSTANCE.setConfiguration(configuration);
当然,你能设置配置对象完全由你自己来完成(写出需要的代码)或者获取当前配置对象从MoskitoConfigurationHolder 并且修改它。并且完成它自系统开始之前,因为许多配置选项在系统运行中不允许修改。不过,有些你还是可以修改的。
Sections 部分
ThresholdsAlerts 报警阈值
报警阈值包含两部分:AlertHistory and NotificationProviders. 告警历史和通知提供者
"@thresholdsAlertsConfig": {
"@notificationProviders": [ NOTIFICATIONPROVIDER ],
"@alertHistoryConfig": { }
}
AlertHistory
告警历史的配置定义了多少项被存储在内存中用于告警,并且能够被展示在MoSKito-WebUI:
"@alertHistoryConfig": {
"maxNumberOfItems": 500,
"toleratedNumberOfItems": 550
---------------------------------------------------------------------
属性 值 默认值
maxNumberOfItems 用于存储在告警历史中的项目数 200
toleratedNumberOfItems 允许负载。AlertHistory将会缩短当
大小超过了toleratedNumberOfItems 220
配置的数量。这可以帮助减少列表操作的
数量。
--------------------------------------------------------------------
NotificationProviders 通知提供者
通知系统的构建允许配置多个通知提供者。通知提供者将会被触发只要一个阈值改变了它的状态并且这个改变突破了通知提供者的限制。
每一个通知提供者被配置了如下的属性:
--------------------------------------------------------------------
属性 值
className 实现了net.anotheria.moskito.core.
threshold.alerts.NotificationProvider的类名
parameter 提供者的专有化。这属性是提供者特有
guardedStatus 触发的状态
--------------------------------------------------------------------
参数说明:
--------------------------------------------------------------------
类名 解释
net.anotheria.moskito.core.threshold
.alerts.notificationprovider 日志的名字
.LogFileNotificationProvider
net.anotheria.moskito.core.threshold
.alerts.notificationprovider 逗号分隔接收者的邮件地址
.MailNotificationProvider
net.anotheria.moskito.core.threshold
.alerts.notificationprovider 忽略
.SysoutNotificationProvider
--------------------------------------------------------------------
Thresholds阈值集
什么是一个阈值集?
阈值持续观察一个单一的生产者并在它的性能改变时给出一个信号。更多信息,请看MoSKito概念部分的阈值部分介绍。
阈值配置包含了一个阈值对象的集合。这是另外的一种定义阈值的方法。
阈值也可以通过MoSKito-Inspect来添加。
"@thresholdsConfig": {
"@thresholds": [ THRESHOLD ]
},
或者,在java代码关键字:
public class ThresholdsConfig {
/**
* Configured thresholds.
*/
@Configure
private ThresholdConfig[] thresholds;
阈值
每个阈值包含如下信息:
{
"name": "Configured-5m-ThreadCount",
"producerName": "ThreadCount",
"statName": "ThreadCount",
"valueName": "Current",
"intervalName": "5m",
//timeUnit can be ignored here
"@guards": [ GUARD ]
}
--------------------------------------------------------------------
属性 值
name AlertHistory,Logs和WebUi的值的名字
producerName 生产者的名字或id,要求精确匹配
statName StatValue的名字,要求精确匹配
valueName Value的名字,要求精确匹配
intervalName 系在阈值间隙的名字
timeUtil 使用的时间单元(例如,毫秒或者秒) 请看net.anotheria.moskito
.core.stats.TimeUnit
guards GUARD对象集合
--------------------------------------------------------------------
Threshold Guards 阈值守卫
一个守卫是一个触发器(被设置)用于改变阈值的状态。
例如:
{"value": "30", "direction": "DOWN", "status": "GREEN"},
{"value": "30", "direction": "UP", "status": "YELLOW"},
{"value": "45", "direction": "UP", "status": "ORANGE"},
--------------------------------------------------------------------
属性 值
value 关联的元组(生产者|stat|stat值)的值,用于改变阈值对象的值
direction 值通过以后的方向:UP意味着当前值高于守卫值,DOWN意味着低于守卫值
status 阈值对象设置的当守卫值触发以后的状态
--------------------------------------------------------------------
Accumulators 收集器集合
收集器存储了一个生产者性能的历史并且展示收集到的数据在图表中
更多信息请看MoSKito 概念模块中的Accumulators的部分。
收集器集合部分配置收集器,设置默认的收集器数量。
Accumulation amount 收集数量
"@accumulatorsConfig" : {
"accumulationAmount": 500
},
收集数量控制了一个收集器能够存储的数量值。真实的数量可能比配置高10%,因为为了减少集合数量的操作10%的负载是允许的。
Accumulators 收集器集
"@accumulatorsConfig" : {
...
"@accumulators": [
{
"name": "Configured SessionCount Cur 5m",
"producerName": "SessionCount",
"statName": "Sessions",
"valueName": "cur",
"intervalName": "5m"
}
...
]
},
基本上,收集器部分包含了相同的值对于每一个收集者对于每一个阈值:
--------------------------------------------------------------------
属性 值
name 对于WebUI值的名字
producerName 生产者的名字或id,要求精确匹配
statName StatValue的名字,要求精确匹配
valueName Value的名字,要求精确匹配
intervalName 系在阈值间隙的名字
timeUtil 使用的时间单元(例如,毫秒或者秒) 请看net.anotheria.moskito
.core.stats.TimeUnit
--------------------------------------------------------------------
Gauges 规格
规格是一个可视化的公交用于表现生产者当前状态和它期望的最大和最小状态值之间的关系。
如图所示gauges.png:
规格能够用在仪表板中。
规格的配置有它自己的部分在配置文件中。
"@gaugesConfig": {
"@gauges": [GAUGE],
"@defaultZones":[ZONE]
}
每一个规格以如下方法被配置:
{
"name": "Name of the gauge is displayed in the gauge itself and should be short",
"caption": "Caption of the gauge block, has more chars to fit",
"@minValue" : GAUGEVALUE,
"@currentValue" : GAUGEVALUE,
"@maxValue" : GAUGEVALUE,
"@zones": [ZONE]
}
一个GAUGE值可能是一个常量或者是一个生产者的引用。在下面的例子中是一个静态规格值被配置:
"@minValue": {
"constant": 0
},
"@currentValue": {
"constant": 70
},
"@maxValue": {
"constant":100
},
有人可能觉得一个静态值不够敏感,但是它说明了一个原则并且你能使用它代表一个值,你系统的的边界值。
一个GAUGE值可以和生产者/stat/value元组关联例如:
{
"name": "Running",
"caption": "Running Threads",
"@minValue": {
"constant": 0
},
"@currentValue": {
"producerName": "ThreadStates",
"statName": "RUNNABLE",
"valueName": "Current",
"intervalName": "1m"
},
"@maxValue": {
"producerName": "ThreadCount",
"statName": "ThreadCount",
"valueName": "current",
"intervalName": "default"
}
}
记住你能够使用的,可以是常量关键字或者是生产者名字,stat名字和value名字,如果一个gauge值配置包含了常量值其他情况将会忽略这个值。
除了每一个gauge能够配置的值域。如果你不提供gauge特有配置,默认域会被使用。如果你提供了非默认域的其他值,则每一个配置的域会被使用,将会被硬联系到GaugeAPI的实现。
DefaultZones默认域
你能够配置默认域,将会用到你所有的gauges,如果gauges没有明确的域配置。
"@gaugesConfig": {
"@gauges": [GAUGE],
"@defaultZones":[ZONE]
}
例如:
"@defaultZones":[
{
"color": "orange",
"left": 0.85,
"right": 0.9
},
{
"color": "red",
"left": 0.9,
"right": 1
}
]
完整的例子
下面的例子配置是关于gauges部分的配置:
"@gaugesConfig": {
"@gauges": [
{
"name": "Constant",
"@minValue": {
"constant": 0
},
"@currentValue": {
"constant": 70
},
"@maxValue": {
"constant":100
},
"@zones":[
{
"color": "green",
"left": 0,
"right": 0.25
},
{
"color": "yellow",
"left": 0.25,
"right": 0.5
},
{
"color": "orange",
"left": 0.5,
"right": 0.75
},
{
"color": "red",
"left": 0.75,
"right": 1
}
]
},
{
"name": "Sessions",
"@minValue": {
"constant": 0
},
"@currentValue": {
"producerName": "SessionCount",
"statName": "Sessions",
"valueName": "cur",
"intervalName": "default"
},
"@maxValue": {
"producerName": "SessionCount",
"statName": "Sessions",
"valueName": "max",
"intervalName": "default"
}
},
{
"name": "Memory",
"caption": "Used memory",
"@minValue": {
"constant": 0
},
"@currentValue": {
"producerName": "Heap memory",
"statName": "Heap memory",
"valueName": "Used Mb",
"intervalName": "default"
},
"@maxValue": {
"producerName": "JavaRuntimeMax",
"statName": "JavaRuntimeMax",
"valueName": "Current Mb",
"intervalName": "default"
}
},
{
"name": "Blocked",
"caption": "Blocked Threads",
"@minValue": {
"constant": 0
},
"@currentValue": {
"producerName": "ThreadStates",
"statName": "BLOCKED",
"valueName": "Current",
"intervalName": "1m"
},
"@maxValue": {
"producerName": "ThreadCount",
"statName": "ThreadCount",
"valueName": "current",
"intervalName": "default"
}
},
{
"name": "Running",
"caption": "Running Threads",
"@minValue": {
"constant": 0
},
"@currentValue": {
"producerName": "ThreadStates",
"statName": "RUNNABLE",
"valueName": "Current",
"intervalName": "1m"
},
"@maxValue": {
"producerName": "ThreadCount",
"statName": "ThreadCount",
"valueName": "current",
"intervalName": "default"
}
}
],
"@defaultZones":[
{
"color": "orange",
"left": 0.85,
"right": 0.9
},
{
"color": "red",
"left": 0.9,
"right": 1
}
]
},
Tracers 路径
路径允许你监控谁在执行代码,以及代码中的位置。Tracers的典型开关可以检查运行时的Tracer按钮在SingleProducerView 在MoSKito检查。
如图MoSKitoTracers.png:
然而,有一些配置选项对Tracers.
Tracers被配置通过在MoSkito配置tracingConfig元素。
这是一个列子:
"@tracingConfig": {
"tracingEnabled": true,
"loggingEnabled": true,
"inspectEnabled": true,
"maxTraces": 50,
"tracers": [],
"shrinkingStrategy": "KEEPLONGEST"
}
所有的tracing配置选项在运行时可变。这些选项意味着:
--------------------------------------------------------------------
属性 值
trcingEnabled true/false.false的设置tracing不可以用。Tracing可能会产生
额外的负载,主要是因为栈追踪而产生的。所以如果不用的话,把它关
闭是明智的。
loggingEnabled true/false.true表示每一个trace将会被记录到Logger中,被称
为MoSKitoTracer
inspectEnabled true/false.true支持MoSKito检查可用
maxTraces 每一个Tracer可有的最大数量traces. 实际上可以多10%
tracers 预定义的Tracers.这是基本的ProducerIds列表。实际上
理想的tracers应该是动态的,但你也可以通过配置来添加
shrinkingStrategy " FIFO" or " KEEPLONGEST" - defined by net.
anotheria.moskito.core.config.tracing
.ShrinkingStrategy 。traces的保留策略
--------------------------------------------------------------------
Dashboards 仪表板
仪表板允许你看到你的系统运行的健康状态。它可以完全定制并且可以被改变通过使用在配置文件中的部分或者是通过MoSKito-inspect UI.你能够创建任何数量的仪表板。当你不想看不到你系统关键部分的时候仪表板是有用的。
每一个仪表板由小部件组成。小部件可以是4种类型:
>Thresholds 阈值集合
>Gauges 规格
>Charts 图表
>Producers 生产者
如图:Dashboard.png
Thresholds
为了在仪表板中展示阈值集合额外添加了@thresholds部分包含了阈值的名字(精确匹配)
"@thresholds":[
"OrderPerMinuteThreshold",
"ShopServiceAVG"
]
Gauges
规格可以被添加到仪表板通过编辑合适的@gauges部分包含gauge名字(精确匹配)。
"@gauges":[
"Memory",
"Running",
"Sessions",
"SysLoad"
]
Charts
图表部分允许你来展示被计算的值作为线性图。更多信息请看MoSKito概念模块的Accumulators部分。
每一个图表有如下的属性:
>Caption-允许设置chart标题,将会被展示在chart 盒子的顶端。
>Accumulators-accumulator名字(精确匹配)的列表,换句话说-chart lines
"@charts":[
{
"caption":"Threads",
"accumulators":[
"ThreadCount",
"ThreadStateBlocked-1m",
...
]
},
...
]
Producers 生产者
生产者能够被添加到仪表板通过编辑合适的@producers部分。仅仅列出producer名字(精确匹配)。生产者将会被分组通过decorators
"@producers":[
"ingredients",
"orders"
]
Configure widgets 配置小组件
顺序和存在的小组件可以被配置通过@widgets部分在每一个仪表板中来完成。在数组中定义的顺序就是在仪表板中的顺序并且数组项定义了出现在仪表板中的小组件。可能的组件名字为:"thresholds", "gauges", "charts", "producers".
"@widgets":[
"gauges",
"charts",
"producers"
]
如果没有单独配置一个组件部分到仪表板的配置部分,那么默认配置会被使用,其中包括:
"@widgets":[
"thresholds",
"gauges",
"charts",
"producers"
]
Plugins 插件
Plugins部分允许加载自定义软件被称为插件
"@pluginsConfig": {
"@plugins": [
{
"name": "EmbeddedCentralConnector",
"configurationName": "none",
"className": "net.anotheria.moskito.central.connectors.embedded.EmbeddedConnector"
}
]
}
对于每一个插件,下面的值被配置:
--------------------------------------------------------------------
属性 值
name 插件的名字,可见的。
configurationName 插件配置的名字,是插件类型的配置
className 插件类的名字 类应该实现了net.anotheria.moskito
.core.plugins.Moskitoplugin
--------------------------------------------------------------------
Builtin Producers 内建的生产者
内建的生产者部分允许配置构建生产者应该默认可用。如果你没有任何设置,所有的生产者都是可以的(默认可用)
例如:
"@builtinProducersConfig": {
"javaMemoryProducers": false,
"javaMemoryPoolProducers": false,
"osProducer": false
}
支持的属性为:
---------------------------------------------------------------------
属性 Producers(生产者)
javaMemoryProducers 内存是基于Runtime.getRuntime().freeMemory
javaMemoryPoolProducers 内存是基于GC内存池/空间
javaThreadingProducers ThreadCountProducer(线程数量生产者)
ThreadStatesProducer(线程状态生产者)
osProducer OS stats(on *nix only)说明最大最小文件等
runtimeProducer 运行时--进程名字和运行时间
gcProducer 创建一个gc生产者对于每一个垃圾收集器mbean在系统中发现的
---------------------------------------------------------------------
关于MBeans生产者和Tomcat 全局请求程序生产者要求额外的配置。
MbeanProducerConfig 举例:
"@mbeanProducersConfig": {
"registerAutomatically": true,
"updateAutomatically": true,
"delayBeforeFirstUpdate": 15000,
"@domains": [
{
"name": "java.lang",
"classes": [
"sun.management.ClassLoadingImpl"
]
}
]
}
支持的属性是:
---------------------------------------------------------------------
属性 Producers(生产者)
registerAutomatically 声明如果生产者将会被自动注册。默认不是
updateAutomatically 声明如果生产者值会自动更新,默认是
delayBeforeFirstUpdate 时间在毫秒值在开始第一个生产者值更新之前,默认15秒
domains 列出所有的域,null意味着生产者将会被创建根据所有
的MBean域。默认是null.
name-MBean域配置的名字
classes-类列表将会作为生产者注册的,null意味着在域内的所有MBeans会被注册。默认是null.
---------------------------------------------------------------------
TomcatRequestProcessorProducerConfig 举例:
"@tomcatRequestProcessorProducerConfig": {
"ajp": true, //说明ajp进程应该被监视,默认为true
"http": true //说明http进程应该被监视,默认为true
}
Journey 历程
历程的配置在配置文件中有他们自己的部分
"@journeyConfig": {
"parameterLengthLimit": 200,
"toStringCollections": false,
"toStringMaps": false
}
每一个历程按如下方式被配置:
---------------------------------------------------------------------
属性 Value值
parameterLengthLimit 参数长度的限制,如果参数长度超过了配置,将会被截取
。这也应用到返回值。默认为100
toStringCollections 如果是true集合是“toStringed".如果是false,只有
大小被展示
toStringMaps 如果是true,map是”toStringed“。如果是false.只有
大小被展示
---------------------------------------------------------------------
ErrorHandling 错误处理
错误处理配置定义了MoSKito怎么样存储和帮你处理错误发生在你的应用。
这是配置举例:
"@errorHandlingConfig": {
"autoChartErrors": true,
"autoChartErrorsInterval": "1m",
"logErrors": true,
"@catchers": [
{
"clazz": "java.lang.IllegalArgumentException",
"target": "LOGANDMEMORY",
"parameter": "IllegalArgExcLog"
},
{
"clazz": "org.springframework.web.util.NestedServletException",
"target": "MEMORY",
"parameter": ""
}
],
"catchersMemoryErrorLimit": 50
---------------------------------------------------------------------
属性 意义
autoChartErrors 如果是true,对于每一个MoSKito看到的异常都会创建一个
accumulator
autoChartErrorsInterval error收集器使用的间隙名字。
这是用于autoChartedErrors(需要设置为true)
logErrors 如果是true,所有的错误将会记录到名为
auto-caught-errors.log的日志文件中。日志名字可以修改在logback.xml(或者其他slf4j等你使用的日志框架部分)
catchersMemoryErrorLimit 如果catchers被配置,他们将持有最大10%的错误,
比配置的限制值。默认是50
countRethrows 如果countRethrows是可以用,MoSKito将会分析如果
错误在运行中再次抛出。默认是false.这是因为事实上,再次抛出会被保存在Threadlocal变量在MoSKito上下文内并且能够导致内存泄漏如果MoSKitoContext.cleanup()没有在执行之后调用的话。
@catchers 被定义捕获特定的错误
---------------------------------------------------------------------
Catchers 捕手
你能够配置一个或多个捕手对于你想要研究的特定错误。
---------------------------------------------------------------------
属性 意义
clazz 异常类,例如java.lang.ILLegalArgumentException
target 捕获目标,是其中之一:LOG, MEMORY or LOGANDMEMORY.
内存意味着栈跟踪会被放到内存中通过console完成为了研究
日志意味着异常将会被记录在特定的日志文件中。
parameter 在日志或者日志和内存目标情况下,异常会被发送。你需要
单独配置这些在logback.xml文件中
---------------------------------------------------------------------
捕手将可以查看从Navigation point(导航点):每一个点|错误并且看起来如下
图Catchers.png
每一个catcher将集装到catchersMemoryErrorLimit 错误:
CatchersErrors.png
并且你可以通过单击每一个错误查看栈信息:
CatchersSingleError.png
Auto charted errors 自动绘图错误信息
如果自动绘图可用,则两幅图表会被创建对于每一个error,一个总的和一个初始值。初始化意味着错误在第一次线程执行遇到,总的-全部错误,包括接下来的全部错误。
如图IllegalArgumentExceptionChart.png
这将使你可以看到并且分析当错误发生时。
Tagging 标记
标记允许你添加额外的信息来记录并且捕获错误。一个例子标记配置如下:
"taggingConfig": {
"autotagSessionId": true,
"autotagIp": true,
"autotagUserAgent": true,
"autotagReferer": true,
"@customTags": [
{
"name": "CustomerID",
"attribute": "session.customerId"
}
],
"tagHistorySize": 10
}
Built in or Autotags. 内部构建或者自动标记
MoSKito 将会自动标记session,ip,referrer和用户代理,除非你使他们失效通过设置正确的属性到false在标记配置中。Tagging可以被添加在MoSKito2.8.4版本。
Custom Tags自定义标签
MoSKito能够自动使用任何header,parameter,request或者session属性的值作为标签。为了配置一个自定义标签,你不得不定义一个名字和路径作为一个json对象在@customerTags注解之下:
{
"name": "CustomerID",
"attribute": "session.customerId"
}
其中名字是你想要的一切并且属性由一个前缀和属性名组成,下面前缀是支持的:
>header
>request
>session
>parameter
看CustomTagSource了解更多
Tag History 标记历史
为了调试和报告的目的,MoSKito保持了一系列元素历史对每一个标记。这种方法你能看最近的值是什么并且检查是否他们是你希望看到的。默认的值是10.
关于配置的讲解就结束了,接下来要看的是LOG4J的配置