MAGIC OF THE
NEW ZABBIX AGENT
WHAT IS ZABBIX AGENT?
MAGIC OF THE
NEW ZABBIX AGENT
Zabbix Agent
• Is a daemon, that gathers metrics locally from
the OS
• Available for UNIX-like and Windows operating
systems
• Low resource consumption.
• Can customize time intervals with a help of
Flexible/Scheduled intervals option
3
What Zabbix Agent can gather?
• Disk statistics, NIC statistics…
• Memory consumption, CPU usage…
• Generic metrics like hostname or OS release
• Listening port state
4
What Zabbix Agent can gather?
• Read logs or simple file contents
• Read Windows event logs
• Gather stats from a friendly Zabbix Server/Proxy
• and more (Read The Lovely Manual!)
5
Still not enough? Hungry for more?
Can be extended using
Custom User [Link]
modules Parameters [*]
6
Custom modules – coding jedies!
• As fast as native Zabbix Agent metrics
• But learn how to C
main {
printf("How to C learn, young padawan!")
}
7
User Parameters – scripting ninja!
• Can run any command respecting Zabbix Agent
user privileges
• Runs as fork
• Better to be Active
8
User Parameters
UserParameter=[Link], sleep 45 &&
echo "I'm a scripting genius!"
9
[Link][*] – simple yet powerful!
• No need to worry if UserParameter line or if
file had been deployed to the config
• No need to restart Zabbix Agent if you like to
change command
• "With great power comes great responsibility"
10
[Link][*]
• Server=[Link]/0
• EnableRemoteCommands=1
• LogRemoteCommands=0
• User=root
• AllowRoot=1
• shell> iptables –F
• shell> systemctl stop firewalld
• shell> setenforce 0
11
[Link][*]
12
CURRENT CHALLENGES
MAGIC OF THE
NEW ZABBIX AGENT
Limitations of current Zabbix Agent
• Lack of ability to receive 3rd party traps
• No Scheduled/Custom intervals for Active
checks
• One active checks process for each Zabbix
Server/Proxy record.
• Not everybody wants to learn/knows C
language
14
MEET THE BRAND NEW AGENT
MAGIC OF THE
NEW ZABBIX AGENT
16
Yes, NEW!
• It’s not C anymore
• It’s Go!
17
Why Go?
• Compile into a single binary and deploy!*
• In our days Go is one of the most popular
development languages
• A little bit easier than C.
*dependency limitations may apply in certain variations
18
Limitless Zabbix Agent 2
• Scheduled/Flexible intervals for both types of
checks
• Support of older .conf file
• Multiple parallel log file reading
• systemd monitoring out of the box!
• Timeouts implemented on plugin level
19
Components
• Connector:
• Manages communication with server
• Item configuration
• Metrics buffer
• 1 connector per 1 ServerActive
20
Components
• Listener
• Accepts passive requests and forwards them to
scheduler
21
Components
• Scheduler
• Manages the task queue respecting schedule and
task concurrency
• Only one Scheduler per agent
22
Passive checks
23
Active checks
24
Queue the task
• Two level queue:
• Each plugin has a queue of the requested check
• Scheduler has a queue of active plugins
25
Queue the task
• When a task cannot be executed because of concurrency
limits the plugin is taken from scheduler queue and
returned only when next task can be executed.
26
IT’S ALL ABOUT THE PLUGINS
MAGIC OF THE
NEW ZABBIX AGENT
brand new means BRAND NEW!
• It’s not just “yet another Zabbix Agent”!
• It’s the whole new platform!
29
Everyone is a Dev right now
• Writing your own plugins for Zabbix Agent
never been that easy.
• Multiple plugin interfaces for different
types of tasks.
30
Framework for every purpose.
• Exporter
• Runner
• Watcher
• Collector
31
Exporter
• Performs poll and returns:
• nothing
• an error
• single/multiple values
32
Watcher
• Allows to implement your own gathering
method.
• Listen to a specific port.
• Good for supporting different trap-based
communication methods
33
Collector
• Use it when you need to gather data on a
regular basis. For example, CPU related
metrics.
34
Runner
• For example plugin could start/stop some
background goroutine by implementing
Runner interface.
35
Just Go with it
[Link] the code
return string("Hello World!")
2. Register the metric
[Link](&impl, "HelloWorld","helloworld", "My
hello to the World!")
3. Place your plugin into the source folder
4. Add your plugin to the list
_ "zabbix/plugins/helloworld"
5. Compile
./configure --enable-agent2 && make install
6. Run and reuse your old .conf file
36
package helloworld
import (
"zabbix/pkg/plugin"
)
type Plugin struct {
[Link]
}
var impl Plugin
func (p *Plugin) Export(key string, params []string, ctx [Link]) (result
interface{}, err error) {
return string("Hello World!"),nil
}
func init() {
[Link](&impl, "helloworld", "helloworld", "My hello to the World!")
}
37
Availability
• Named as Zabbix Agent 2
• 4.4 – experimental, 5.0 – production ready
• Currently only Linux-like systems.
• Zabbix Agent 2 for Windows – already in development!
• Documentation - coming soon. Checkout our git!
[Link]
38
TUTIN’, ROOTIN’, PLUGIN BOOTIN’
MAGIC OF THE
NEW ZABBIX AGENT
Who? What? Where?
• Date: 11.10.2019
• Time:
• Session 1: 8:30 AM
• Session 2: 9:30 AM
40
What should I bring?
• Yourself ;)
• Awesome mood is a must!
• Mad skils are welcome but not mandatory
• Laptop with Zabbix Appliance
41
Our plan
• We will not learn Go, sorry :D
• To build a very simple yet functional Go
plugin for brand new Zabbix Agent!
42
Our goal
• Make it work!
• Have fun!
43
THANK YOU!