数值统计(Metrics)

    web 访问日志的异常状态码频率是运维人员会非常关心的一个数据。通常我们的做法,是通过 logstash 或者其他日志分析脚本,把计数发送到 rrdtool 或者 graphite 里面。然后再通过 check_graphite 脚本之类的东西来检查异常并报警。

    这里需要注意 的含义。

    Timer 示例(box and whisker 异常检测)

    官版的 filters/metrics 插件只适用于 metric 事件的检查。由插件生成的新事件内部不存有来自 input 区段的实际数据信息。所以,要完成我们的百分比分布箱体检测,需要首先对代码稍微做几行变动,即在 metric 的 timer 事件里加一个属性,存储最近一个实际事件的数值:

    1. filter {
    2. metrics {
    3. timer => {"rt" => "%{request_time}"}
    4. percentiles => [25, 75]
    5. if "percentile" in [tags] {
    6. ruby {
    7. code => "l=event['rt.p75']-event['rt.p25'];event['rt.low']=event['rt.p25']-l;event['rt.high']=event['rt.p75']+l"
    8. }
    9. }
    10. output {
    11. if "percentile" in [tags] and ([rt.last] > [rt.high] or [rt.last] < [rt.low]) {
    12. exec {
    13. command => "echo \"Anomaly: %{rt.last}\""
    14. }

    小贴士:有关 box and shisker plot 内容和重要性,参见《数据之魅》一书。