Solve 1 problem by using 2 triggers, Zabbix

Original video: https://www.youtube.com/watch?v=FgBepdItxvE

What is this?

When CPU utilization goes up, how to highlight process name (root cause) and possibly send an email.

Prerequsites

Tested and works with

Tested and NOT works

Global macro:
{$CMD:cpu.pct} = ps -eo args --sort pcpu | tac | head -1 | base64 -w0
Template macros:
{$CPU.PCT:room} = 10
{$CPU:window} = 1m
Calculated item 'cpu.avg.graph':
avg(/{HOST.HOST}/system.cpu.util,1h) + {$CPU.PCT:room}


On the top of 'cpu.avg.graph', create dependent item 'cpu.avg.trigger':


Create "Zabbix trapper" item:


Install JavaScript preprocessing step:
return String.fromCharCode.apply(this,[].slice.call(atob(value)));


First trigger:
Name:
CPU increase VS trends
Event name:
CPU: {{ITEM.VALUE1}.fmtnum(2)} VS trends: {{ITEM.VALUE2}.fmtnum(2)}
Expression:
(
last(/linux mod/cpu.avg.trigger) < 100
and
min(/linux mod/system.cpu.util,{$CPU:window}) >= last(/linux mod/cpu.avg.trigger)
)
or
(
last(/linux mod/cpu.avg.trigger) >= 100
and
min(/linux mod/system.cpu.util,{$CPU:window}) >= (last(/linux mod/cpu.avg.trigger) - {$CPU.PCT:room})
)
Description:
zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -s "{HOST.HOST}" -k cpu.pct -o $({$CMD:cpu.pct})


Tags:
collect: extra


"Alerts" => "Scripts" => "Create script" Name:
execute trigger description
Scope:
Action operation
Type:
Script
Type:
Script
Execute on:
Zabbix agent
Commands:
{TRIGGER.DESCRIPTION}


Trigger actions:


Second trigger:
Name:
Unusual CPU activity
Event name:
{{ITEM.VALUE1}.regsub("^(.{1,128})",\1)} consumes CPU: {{?last(//system.cpu.util)}.fmtnum(2)}
Expression:
nodata(/linux mod/cpu.pct,{$CPU:window}) = 0
and
min(/linux mod/system.cpu.util,{$CPU:window}) < 75


Tags:
cpuhot

Name:
CPU hot
Event name:
{{ITEM.VALUE1}.regsub("^(.{1,128})",\1)} consumes CPU: {{?last(//system.cpu.util)}.fmtnum(2)}
Expression:
nodata(/linux mod/cpu.pct,{$CPU:window}) = 0
and
min(/linux mod/system.cpu.util,{$CPU:window}) >= 75


Tags:
cpuhot