Puppet: System Administration Automated

Support

Zabbix Agent recipe

Problem

Ensure that Zabbix agent is installed on a host and is configured properly.

Solution

$zabbix_user_parameters = []

class zabbix-agent {
	$zabbix_server = "XXX.XXX.XXX.XXX"
	$zabbix_config_dir = "/etc/zabbix"
	$zabbix_agent_conf = "$zabbix_config_dir/zabbix_agent.conf"
	$zabbix_agentd_conf = "$zabbix_config_dir/zabbix_agentd.conf"

	package {
		"zabbix-agent":
			ensure => installed
	}

	service {
		"zabbix-agent":
			enable => true,
			ensure => running,
			hasstatus => true,
			require => Package["zabbix-agent"]
	}

	file {
		$zabbix_config_dir:
			ensure => directory,
			owner => root,
			group => root,
			mode => 0755,
			require => Package["zabbix-agent"];

		$zabbix_agent_conf:
			owner => root,
			group => root,
			mode => 0644,
			content => template("zabbix_agent_conf.erb"),
			require => Package["zabbix-agent"];

		$zabbix_agentd_conf:
			owner => root,
			group => root,
			mode => 0644,
			content => template("zabbix_agentd_conf.erb"),
			require => Package["zabbix-agent"];
	}
}

Here is zabbix_agent_conf.erb:

# This is config file for zabbix_agent
# To get more information about ZABBIX, 
# go http://www.zabbix.com

# IP address of ZABBIX server
# Connections from other hosts will be denied

Server=<%= zabbix_server %>

# Spend no more than Timeout seconds on processing
# Must be between 1 and 30

Timeout=3

####### USER-DEFINED MONITORED PARAMETERS #######
# Format: UserParameter=<key>,<shell command>
# Note that shell command must not return empty string or EOL only
#UserParameter=system.test,who|wc -l
### Set of parameter for monitoring MySQL server (v3.23.42 and later)
### Change -u<username> and add -p<password> if required
#UserParameter=mysql.ping,mysqladmin -uroot ping|grep alive|wc -l
#UserParameter=mysql.uptime,mysqladmin -uroot status|cut -f2 -d":"|cut -f1 -d"T"
#UserParameter=mysql.threads,mysqladmin -uroot status|cut -f3 -d":"|cut -f1 -d"Q"
#UserParameter=mysql.questions,mysqladmin -uroot status|cut -f4 -d":"|cut -f1 -d"S"
#UserParameter=mysql.slowqueries,mysqladmin -uroot status|cut -f5 -d":"|cut -f1 -d"O"
#UserParameter=mysql.qps,mysqladmin -uroot status|cut -f9 -d":"
#UserParameter=mysql.version,mysql -V

<% zabbix_user_parameters.each do |zabbix_user_parameter| %>UserParameter=<%= zabbix_user_parameter %>
<% end %>

And here is zabbix_agentd_conf.erb:

# This is config file for zabbix_agentd
# To get more information about ZABBIX, go http://www.zabbix.com

############ GENERAL PARAMETERS #################

# List of comma delimited IP addresses (or hostnames) of ZABBIX servers. 
# No spaces allowed. First entry is used for sending active checks.
# Note that hostnames must resolve hostname->IP address and
# IP address->hostname.

Server=<%= zabbix_server %>

# Server port for sending active checks

#ServerPort=10051

# Unique hostname. Required for active checks.

Hostname=<%= hostname %>

# Listen port. Default is 10050

#ListenPort=10050

# IP address to bind agent
# If missing, bind to all available IPs

#ListenIP=127.0.0.1

# Number of pre-forked instances of zabbix_agentd.
# Default value is 5
# This parameter must be between 1 and 16

StartAgents=5

# How often refresh list of active checks. 2 minutes by default.

#RefreshActiveChecks=120

# Disable active checks. The agent will work in passive mode listening server.

#DisableActive=1

# Enable remote commands for ZABBIX agent. By default remote commands disabled.

#EnableRemoteCommands=1

# Specifies debug level
# 0 - debug is not created
# 1 - critical information
# 2 - error information
# 3 - warnings (default)
# 4 - for debugging (produces lots of information)

DebugLevel=3

# Name of PID file

PidFile=/var/run/zabbix/zabbix_agentd.pid

# Name of log file.
# If not set, syslog will be used

LogFile=/var/log/zabbix/zabbix_agentd.log

# Spend no more than Timeout seconds on processing
# Must be between 1 and 30

Timeout=3

####### USER-DEFINED MONITORED PARAMETERS #######
# Format: UserParameter=<key>,<shell command>
# Note that shell command must not return empty string or EOL only
#UserParameter=system.test,who|wc -l
### Set of parameter for monitoring MySQL server (v3.23.42 and later)
### Change -u<username> and add -p<password> if required
#UserParameter=mysql.ping,mysqladmin -uroot ping|grep alive|wc -l
#UserParameter=mysql.uptime,mysqladmin -uroot status|cut -f2 -d":"|cut -f1 -d"T"
#UserParameter=mysql.threads,mysqladmin -uroot status|cut -f3 -d":"|cut -f1 -d"Q"
#UserParameter=mysql.questions,mysqladmin -uroot status|cut -f4 -d":"|cut -f1 -d"S"
#UserParameter=mysql.slowqueries,mysqladmin -uroot status|cut -f5 -d":"|cut -f1 -d"O"
#UserParameter=mysql.qps,mysqladmin -uroot status|cut -f9 -d":"
#UserParameter=mysql.version,mysql -V

<% zabbix_user_parameters.each do |zabbix_user_parameter| %>UserParameter=<%= zabbix_user_parameter %>
<% end %>

Discussion