Настройте наблюдатель для оповещения о высокой загрузке ЦП некоторым процессом.

Я пытаюсь создать оповещение наблюдателя, которое будет срабатывать, когда какой-либо процесс на узле использует более 0,95% ЦП в течение последнего часа.

Вот пример моего конфига:

{
  "trigger": {
    "schedule": {
      "interval": "10m"
    }
  },
  "input": {
    "search": {
      "request": {
        "search_type": "query_then_fetch",
        "indices": [
          "metricbeat*"
        ],
        "types": [],
        "body": {
          "size": 0,
          "query": {
            "bool": {
              "must": [
                {
                  "range": {
                    "system.process.cpu.total.norm.pct": {
                      "gte": 0.95
                    }
                  }
                },
                {
                  "range": {
                    "system.process.cpu.start_time": {
                      "gte": "now-1h"
                    }
                  }
                },
                {
                  "match": {
                    "environment": "test"
                  }
                }
              ]
            }
          }
        }
      }
    }
  },
  "condition": {
    "compare": {
      "ctx.payload.hits.total": {
        "gt": 0
      }
    }
  },
  "actions": {
    "send-to-slack": {
      "throttle_period_in_millis": 1800000,
      "webhook": {
        "scheme": "https",
        "host": "hooks.slack.com",
        "port": 443,
        "method": "post",
        "path": "{{ctx.metadata.onovozhylov-test}}",
        "params": {},
        "headers": {
          "Content-Type": "application/json"
        },
        "body": "{ \"text\": \" ==========\nTest parameters:\n\tthrottle_period_in_millis: 60000\n\tInterval: 1m\n\tcpu.total.norm.pct: 0.5\n\tcpu.start_time: now-1m\n\nThe watcher:*{{ctx.watch_id}}* in env:*{{ctx.metadata.env}}* found that the process *{{ctx.system.process.name}}* has been utilizing CPU over 95% for the past 1 hr on node:\n{{#ctx.payload.nodes}}\t{{.}}\n\n{{/ctx.payload.nodes}}\n\nThe runbook entry is here: *{{ctx.metadata.runbook}}* \"}"
      }
    }
  },
  "metadata": {
    "onovozhylov-test": "/services/T0U0CFMT4/BBK1A2AAH/MlHAF2QuPjGZV95dvO11111111",
    "env": "{{ grains.get('environment') }}",
    "runbook": "http://mytest.com"
  }
}

Этот Наблюдатель не работает, когда я устанавливаю метрику system.process.cpu.start_time. Возможно, эта метрика не корректна... К сожалению, у меня нет соответствующего опыта работы с Watcher, чтобы решить эту проблему самостоятельно.

И еще одна проблема заключается в том, что я не знаю, как добавить system.process.name в тело сообщения.

Заранее благодарю за любую помощь!


person Oleksandr Novozhylov    schedule 13.07.2018    source источник


Ответы (1)


Используйте поле timestamp вместо system.process.cpu.start_time, чтобы проверить наличие всех metrcibeat-* документов за последние 10 минут.

"range": { 
    "timestamp": {
        "gte": "now-10m",
        "lte": "now"
    }
}

Чтобы включить system.process.name в тело сообщения, посмотрите на {{ctx.payload}} и используйте соответствующую нотацию для ссылки на имя процесса. Например в одной из наших конфигураций наблюдателя мы используем {{_source.appname}} для обозначения имени приложения.

person ben5556    schedule 24.10.2018