Сделал шаблон для собора информации о "disk sleep" процессах.
- В Discovery rule указываю ключ "proc.get". Проверяю, он возвращает JSON:
Code:
[
{
"pid":1,
"ppid":0,
"name":"systemd",
"cmdline":"/lib/systemd/systemd --system --deserialize 38",
"user":"root",
"group":"root",
"uid":0,
"gid":0,
"vsize":171397120,
"pmem":0.29578540560244176,
"rss":12197888,
"data":21733376,
"exe":835584,
"hwm":12197888,
"lck":0,
"lib":8294400,
"peak":235130880,
"pin":0,
"pte":86016,
"size":23625728,
"stk":1056768,
"swap":0,
"cputime_user":2091.29,
"cputime_system":4083.09,
"state":"sleeping",
"ctx_switches":3451819,
"threads":1,
"page_faults":157
},
...
]
- Отфильтровываю процессы в состоянии disk sleep: "{#PROC.STATE} matches disk sleep"
- Делаю интервал сбора 5 сек
- Период хранения потерянных ресурсов (Keep lost resources period) 1 час
- Создаю прототип айтема с именем "Process - {#PROC.NAME}" и с ключом "proc.get[{#PROC.NAME}]"
- Интервал 5 сек
- Хранение истории 3 дня
- В препроцессинге "JSONPath = $..state.fitst()"
- Айтем выдает значение в виде текста со статусом пойманного LLD процесса (disk sleep/sleeping/running/idle/... и т.п.)
- Выражение в прототипе триггера ищет 6 диск слипов подряд из истории и говорит, что "{#PROC.NAME} - Disk Sleep for more than 30 sec". Само выражение: count(/Discovering of Proccesses with State - Disk Sleep/proc.get[{#PROC.NAME}],#6,"like","disk sleep")=6
С точки зрения опытных ребят, это нормальная схема для информирования о статусе процессов или можно было бы сделать проще/надежнее?
Comment