Installs and configures Zabbix agent and server with PostgreSQL/MySQL and Nginx. Provides LWRP for creating and modifying Zabbix objects.
- ubuntu
- centos
- windows
- apt
- build-essential
- chef_nginx
- chocolatey
- database
- lvm
- php-fpm
- postgresql
- mysql2_chef_gem
- mysql
- yum-mysql-community
- mysql2_chef_gem
- windows_firewall
node['zabbix']['agent']['windows']['installer']
- 'chocolatey' or 'bin'(zabbix binaries). Defaults tochocolatey
.node['zabbix']['agent']['windows']['version']
- Defaults to3.2.0
.node['zabbix']['agent']['windows']['chocolatey']['repo']
- Defaults tohttps://chocolatey.org/api/v2
.node['zabbix']['agent']['windows']['path']
- Defaults toC:\ProgramData\zabbix
.node['zabbix']['agent']['scripts']
- Defaults tocase node['platform']
.node['zabbix']['agent']['include']
- Defaults tocase node['platform']
.node['zabbix']['agent']['config']['listen_ip']
- Defaults to0.0.0.0
.node['zabbix']['agent']['config']['listen_port']
- Defaults to10050
.node['zabbix']['agent']['config']['serverhost']
- Defaults tolocalhost
.node['zabbix']['agent']['config']['hostname']
- Defaults tonode['fqdn']
.node['zabbix']['agent']['config']['pidfile']
- Defaults to/var/run/zabbix/zabbix_agentd.pid
.node['zabbix']['agent']['config']['logs']
- Defaults to{ ... }
.node['zabbix']['agent']['config']['global']
- Defaults to{ ... }
.node['zabbix']['agent']['config']['user_params']
- Defaults to{ ... }
.
node['zabbix']['version']
- Defaults to3.2
.node['zabbix']['api-version']
- Defaults to3.1.0
.node['zabbix']['host']['group']
- Defaults toHosts
.node['zabbix']['host']['name']
- Defaults tonode['fqdn']
.node['zabbix']['host']['dns']
- Defaults tonode['fqdn']
.node['zabbix']['host']['ipaddress']
- Defaults tonode['ipaddress']
.node['zabbix']['host']['ipmi']['enabled']
- Defaults tofalse
.node['zabbix']['host']['ipmi']['port']
- Defaults to623
.node['zabbix']['host']['ipmi']['use_ip']
- Defaults totrue
.node['zabbix']['host']['jmx']['enabled']
- Defaults tofalse
.node['zabbix']['host']['jmx']['port']
- Defaults to12345
.node['zabbix']['host']['jmx']['use_ip']
- Defaults totrue
.node['zabbix']['host']['snmp']['enabled']
- Defaults tofalse
.node['zabbix']['host']['snmp']['port']
- Defaults to161
.node['zabbix']['host']['snmp']['use_ip']
- Defaults totrue
.node['zabbix']['host']['agent']['use_ip']
- Defaults totrue
.node['zabbix']['java_gateway']['enabled']
- Defaults tofalse
.node['zabbix']['java_gateway']['config']
- Defaults to{ ... }
.node['zabbix']['server']['database']['mysql']['filesystem']
- Defaults toext4
.node['zabbix']['server']['database']['mysql']['lvm_group']
- Defaults toshared
.node['zabbix']['server']['database']['mysql']['lvm_volume']
- Defaults to/dev/sda3
.node['zabbix']['server']['database']['mysql']['partition_size']
- Defaults to10G
.node['zabbix']['server']['database']['mysql']['mount_point']
- Defaults to/var/lib/mysql_zabbix
.node['zabbix']['server']['database']['mysql']['databag']
- Defaults tozabbix
.node['zabbix']['server']['database']['mysql']['version']
- Defaults to5.5
.node['zabbix']['server']['database']['mysql']['service_name']
- Defaults tozabbix
.node['zabbix']['server']['database']['mysql']['database_name']
- Defaults tozabbix
.node['zabbix']['server']['database']['mysql']['configuration']['listen_addresses']
- Defaults to127.0.0.1
.node['zabbix']['server']['database']['mysql']['configuration']['port']
- Defaults to3306
.node['zabbix']['server']['database']['mysql']['configuration']['character_set']
- Defaults toutf8
.node['zabbix']['server']['database']['mysql']['configuration']['collate']
- Defaults toutf8_bin
.node['zabbix']['server']['database']['postgresql']['filesystem']
- Defaults toext4
.node['zabbix']['server']['database']['postgresql']['lvm_group']
- Defaults toshared
.node['zabbix']['server']['database']['postgresql']['lvm_volume']
- Defaults to/dev/sda3
.node['zabbix']['server']['database']['postgresql']['partition_size']
- Defaults to10G
.node['zabbix']['server']['database']['postgresql']['cluster']
- Defaults tomain
.node['zabbix']['server']['database']['postgresql']['databag']
- Defaults tozabbix
.node['zabbix']['server']['database']['postgresql']['locale']
- Defaults toen_US.utf8
.node['zabbix']['server']['database']['postgresql']['mount_point']
- Defaults to/var/lib/postgresql
.node['zabbix']['server']['database']['postgresql']['network']
- Defaults to127.0.0.0/8
.node['zabbix']['server']['database']['postgresql']['version']
- Defaults to9.4
.node['zabbix']['server']['database']['postgresql']['configuration']['listen_addresses']
- Defaults to127.0.0.1
.node['zabbix']['server']['database']['postgresql']['configuration']['port']
- Defaults to5432
.node['zabbix']['server']['database']['postgresql']['configuration']['max_connections']
- Defaults to300
.node['zabbix']['server']['database']['postgresql']['configuration']['shared_buffers']
- Defaults to128MB
.node['zabbix']['server']['database']['postgresql']['configuration']['maintenance_work_mem']
- Defaults to128MB
.node['zabbix']['server']['database']['postgresql']['configuration']['work_mem']
- Defaults to8MB
.node['zabbix']['server']['database']['postgresql']['configuration']['effective_cache_size']
- Defaults to2GB
.node['zabbix']['server']['database']['postgresql']['configuration']['log_min_duration_statement']
- Defaults to1000
.node['zabbix']['server']['database']['postgresql']['configuration']['archive_mode']
- Defaults toon
.node['zabbix']['server']['database']['postgresql']['configuration']['archive_command']
- Defaults toexit 0
.node['zabbix']['server']['database']['postgresql']['configuration']['wal_level']
- Defaults toarchive
.
node['zabbix']['server']['database']['mysql']['filesystem']
- Defaults toext4
node['zabbix']['server']['database']['mysql']['lvm_group']
- Defaults toshared
node['zabbix']['server']['database']['mysql']['lvm_volume']
- Defaults to/dev/sda3
node['zabbix']['server']['database']['mysql']['partition_size']
- Defaults to10G
node['zabbix']['server']['database']['mysql']['mount_point']
- Defaults to/var/lib/mysql_zabbix
. Do not set to/var/lib/mysql
because it will conflict.node['zabbix']['server']['database']['mysql']['databag']
- Defaults tozabbix
node['zabbix']['server']['database']['mysql']['version']
- Defaults to5.5
node['zabbix']['server']['database']['mysql']['service_name']
- Defaults tozabbix
node['zabbix']['server']['database']['mysql']['database_name']
- Defaults tozabbix
node['zabbix']['server']['database']['mysql']['configuration']['listen_addresses']
- Defaults to127.0.0.1
node['zabbix']['server']['database']['mysql']['configuration']['port']
- Defaults to3306
node['zabbix']['server']['database']['mysql']['configuration']['character_set']
- Defaults toutf8
node['zabbix']['server']['database']['mysql']['configuration']['collate']
- Defaults toutf8_bin
node['zabbix']['version']
- Defaults to3.2
.node['zabbix']['api-version']
- Defaults to3.1.0
.node['zabbix']['server']['database']['vendor']
- Defaults topostgresql
. Make sure that is setup for MySQL.
node['zabbix']['host']['group']
- Defaults toHosts
.node['zabbix']['host']['name']
- Defaults tonode['fqdn']
.node['zabbix']['host']['dns']
- Defaults tonode['fqdn']
.node['zabbix']['host']['ipaddress']
- Defaults tonode['ipaddress']
.node['zabbix']['host']['ipmi']['enabled']
- Defaults tofalse
.node['zabbix']['host']['ipmi']['port']
- Defaults to623
.node['zabbix']['host']['ipmi']['use_ip']
- Defaults totrue
.node['zabbix']['host']['jmx']['enabled']
- Defaults tofalse
.node['zabbix']['host']['jmx']['port']
- Defaults to12345
.node['zabbix']['host']['jmx']['use_ip']
- Defaults totrue
.node['zabbix']['host']['snmp']['enabled']
- Defaults tofalse
.node['zabbix']['host']['snmp']['port']
- Defaults to161
.node['zabbix']['host']['snmp']['use_ip']
- Defaults totrue
.node['zabbix']['host']['agent']['use_ip']
- Defaults totrue
.
node['zabbix']['java_gateway']['enabled']
- Defaults tofalse
.node['zabbix']['java_gateway']['timeout']
- Defaults to3
.node['zabbix']['java_gateway']['listen_ip']
- Defaults to127.0.0.1
.node['zabbix']['java_gateway']['listen_port']
- Defaults to10052
.node['zabbix']['java_gateway']['pollers']
- Defaults to5
.
node['zabbix']['server']['database']['vendor']
- Defaults topostgresql
.node['zabbix']['server']['service']
- Defaults tozabbix-server
.node['zabbix']['server']['credentials']['databag']
- Defaults tozabbix
.node['zabbix']['server']['templates']
- Defaults to/opt/zabbix/templates
.node['zabbix']['server']['sync_hosts']
- Defaults tofalse
.node['zabbix']['server']['config']['listenip']
- Defaults to0.0.0.0
.node['zabbix']['server']['config']['debuglevel']
- Defaults to3
.node['zabbix']['server']['config']['workers']
- Defaults to{ ... }
.node['zabbix']['server']['config']['hk']
- Defaults to{ ... }
.node['zabbix']['server']['config']['cache']
- Defaults to{ ... }
.node['zabbix']['server']['config']['timeouts']
- Defaults to{ ... }
.node['zabbix']['server']['config']['global']
- Defaults to{ ... }
.node['zabbix']['server']['config']['java_gateway']
- Defaults to{ ... }
.node['zabbix']['server']['config']['alerts']
- Defaults to{ ... }
.node['zabbix']['server']['web']['server_name']
- Defaults tolocalhost
.node['zabbix']['server']['web']['listen']
- Defaults to127.0.0.1
.node['zabbix']['server']['web']['port']
- Defaults to9200
.node['zabbix']['server']['web']['max_requests']
- Defaults to500
.node['zabbix']['server']['web']['max_children']
- Defaults to5
.node['zabbix']['server']['web']['min_spare_servers']
- Defaults to1
.node['zabbix']['server']['web']['start_servers']
- Defaults to2
.node['zabbix']['server']['web']['max_spare_servers']
- Defaults to3
.node['zabbix']['server']['web']['process_manager']
- Defaults todynamic
.node['zabbix']['server']['web']['configuration']['php_admin_value[date.timezone]']
- Defaults toUTC
.node['zabbix']['server']['web']['configuration']['php_admin_flag[display_errors]']
- Defaults tofalse
.node['zabbix']['server']['web']['configuration']['php_admin_value[error_reporting]']
- Defaults toE_ALL & ~E_DEPRECATED
.node['zabbix']['server']['web']['configuration']['php_admin_value[error_log]']
- Defaults to/var/log/zabbix-php-error.log
.node['zabbix']['server']['web']['configuration']['php_admin_value[max_execution_time]']
- Defaults to600
.node['zabbix']['server']['web']['configuration']['php_admin_value[max_input_time]']
- Defaults to300
.node['zabbix']['server']['web']['configuration']['php_admin_value[memory_limit]']
- Defaults to128M
.node['zabbix']['server']['web']['configuration']['php_admin_value[post_max_size]']
- Defaults to32M
.node['zabbix']['server']['web']['configuration']['php_admin_flag[register_globals]']
- Defaults totrue
.node['nginx']['default_site_enabled']
- Defaults tofalse
.
- zabbix_lwrp::agent_linux - Installs and configures Zabbix agent for Linux.
- zabbix_lwrp::agent_win_bin - Installs and configures Zabbix agent for Windows.
- zabbix_lwrp::agent_win_choco - Installs and configures Zabbix agent for Windows.
- zabbix_lwrp::agent - Installs and configures Zabbix agent.
- zabbix_lwrp::connect - Connects to Zabbix API to sync configuration.
- zabbix_lwrp::default - Installs and configures Zabbix official repository and agent.
- zabbix_lwrp::postgresql - Installs and configures PostgreSQL database for Zabbix.
- zabbix_lwrp::mysql - Installs and configures MySQL database for Zabbix.
- zabbix_lwrp::database - Installs and configures Zabbix database.
- zabbix_lwrp::default - Installs and configures Zabbix official repository and agent.
- zabbix_lwrp::host - Creates host via Zabbix API.
- zabbix_lwrp::java_gateway - Installs and configures Zabbix Java Gateway.
- zabbix_lwrp::partition - Configures LVM for Zabbix database.
- zabbix_lwrp::repository - Installs Zabbix official repository.
- zabbix_lwrp::server - Installs and configures Zabbix server.
- zabbix_lwrp::web - Installs and configures Zabbix frontend.
- zabbix_action
- zabbix_application
- zabbix_connect
- zabbix_database
- zabbix_graph
- zabbix_host
- zabbix_media_type
- zabbix_screen
- zabbix_template
- zabbix_user_group
- zabbix_user_macro
- sync: Default action.
- name:
- event_source:
- escalation_time: Defaults to
60
. - enabled: Defaults to
true
. - message_subject:
- message_body:
- send_recovery_message: Defaults to
false
. - recovery_message_subject:
- recovery_message_body:
- sync: Default action.
- name:
- make: Default action.
- name:
- databag:
- apiurl:
- user:
- password:
- sync: Defaults to
false
.
- create: Default action.
- db_vendor: Defaults to
"postgresql"
. - db_name:
- db_user:
- db_pass:
- db_host:
- db_port:
- create: Default action.
- name:
- height:
- width:
- graph_items:
- graph_type:
- create: Default action.
- type: Defaults to
1
. - host_name:
- host_group:
- port: Defaults to
10050
. - ip_address:
- dns:
- use_ip: Defaults to
true
. - ipmi_enabled: Defaults to
false
. - snmp_enabled: Defaults to
false
. - jmx_enabled: Defaults to
false
. - ipmi_port: Defaults to
623
. - snmp_port: Defaults to
161
. - jmx_port: Defaults to
12345
. - ipmi_use_ip: Defaults to
true
. - snmp_use_ip: Defaults to
true
. - jmx_use_ip: Defaults to
true
.
- create: Default action.
- name:
- type:
- server:
- helo:
- email:
- path:
- gsm_modem:
- username:
- password:
- sync: Default action.
- name:
- hsize:
- vsize:
- add: Default action.
- import:
- host_name:
- path:
- create: Default action.
- name:
- create: Default action.
- name:
- value:
- host_name:
Data bag zabbix
must contains the following items:
- admin (with Zabbix admin password)
- postgresql
- users
postgresql
and users
items related to the postgresql database
users
item related to MySQL database, necessarily contains root
and zabbix
entries
For examples see fixture data bag test/fixtures/databags/zabbix/
Optionally this data can be provided in node.run_state instead of data bags.
This is useful in a wrapper cookbook that retrieves credentials from other locations such as chef-vault.
Simply set the 'databag' attributes to the value of the run_state key that contains the data.
#Your super secret code to get credentials here
node.default['zabbix']['server']['database']['databag'] = 'zabbix_data'
node.default['zabbix']['server']['database']['postgresql']['databag'] = 'zabbix_data'
node.default['zabbix']['server']['credentials']['databag'] = 'zabbix_data'
node.run_state['zabbix_data'] = {
'users' => {
'id' => 'users',
'users' => {
'zabbix' => {
'options' => {
'password' => secret_zabbix_pass_here
'superuser' => false
}
}
}
},
'databases' => {
'id' => 'databases',
'databases' => {
'zabbix' => { 'options' => { 'owner' => 'zabbix' } }
}
},
'admin' => {'id' => 'admin', 'pass' => secret_admin_pass_here }
}
include_recipe 'zabbix_lwrp::default'
include_recipe 'zabbix_lwrp::database'
include_recipe 'zabbix_lwrp::server'
include_recipe 'zabbix_lwrp::web'
This cookbooks provides next resources:
- zabbix_action
- zabbix_application
- zabbix_connect
- zabbix_database
- zabbix_graph
- zabbix_host
- zabbix_media_type
- zabbix_screen
- zabbix_template
- zabbix_user_group
- zabbix_user_macro
Creates zabbix action with operations, conditions and messages.
Action | Description |
---|---|
sync | Default action. Sync action description with one's in zabbix server |
Attribute | Description | Default |
---|---|---|
name | Name attribute. Name of the action (required) | |
event_source | Source of event for action, now only :trigger allowed | :triggers |
escalation_time | Delay between escalation steps | 60 |
enabled | Is action enabled? | true |
message_subject | Subject of action message | |
message_body | Body of action message | true |
send_recovery_message | Send recovery message when conditions of action become false | false |
recovery_message_subject | Subject of recovery message | |
recovery_message_body | Body of recovery message | |
operation | Add an operation to action, see below. It's possible to add more then one operation | |
condition | Add an condition to action, see below. It's possible to add more the one condition |
Attributes for operation.
Attribute | Description | Default |
---|---|---|
type | Type of operation, can be :message or :command | :message |
escalation_time | Time to escalate to next step | |
start | Start step, when this operation take place | |
stop | Last step, when this operation take place | |
user_groups | Zabbix user group names that'll receive message | |
message | Message description, see below | Use default actin message if empty |
Attributes for conditions.
Attribute | Description | Default |
---|---|---|
type | Type of condition, can be one of :trigger, :trigger_value, :trigger_serverity, :host_group, :maintenance | |
operator | Operator for condition, can be one of :equal, :not_equal, :like, :not_like, :in, :gte, :lte, :not_in | |
value | Value for condition. |
It also possible to use short form of condition, like:
condition :trigger, :equal, '42th trigger name'
Attributes for message.
Attribute | Description | Default |
---|---|---|
use_default_message | Use default message from action | |
subject | Message subject | |
message | Message body | |
media_type | Name of media type to use | By default all media types are used |
zabbix_action 'Test action' do
action :sync
event_source :triggers
operation do
user_groups 'Test group'
message do
use_default_message false
subject 'Test {TRIGGER.SEVERITY}: {HOSTNAME1} {TRIGGER.STATUS}: {TRIGGER.NAME}'
message "Trigger: {TRIGGER.NAME}\n"\
"Trigger status: {TRIGGER.STATUS}\n" \
"Trigger severity: {TRIGGER.SEVERITY}\n" \
"\n" \
"Item values:\n" \
'{ITEM.NAME1} ({HOSTNAME1}:{TRIGGER.KEY1}): {ITEM.VALUE1}'
media_type 'sms'
end
end
condition :trigger_severity, :gte, :high
condition :host_group, :equal, 'Main'
condition :maintenance, :not_in, :maintenance
end
Creates application, items and triggers. You should think about items and triggers like nested resources inside zabbix_application resource.
Action | Description |
---|---|
sync | Default action. Sync application description with one's in zabbix server |
Attribute | Description | Default |
---|---|---|
name | Name attribute. Name of the application (required) | |
item | Add an item to application, see below. It's possible to add more then one item | |
trigger | Add an trigger to application, see below. It's possible to add more the one trigger |
Create/update zabbix item
Attribute | Description | Default |
---|---|---|
key | Name attribute. Zabbix key for an item, should be unique. | |
type | Type of zabbix check, possible values :zabbix, :trapper, :active, :calculated | |
name | Descriptive name of zabbix check, shown in web-interface | |
frequency | How often zabbix checks this item in seconds | 60 |
history | How many days store item's history | 7 days |
multiplier | Set a multiplier for item | 0 |
trends | How many days store item's trends (archived history) | 365 |
units | Set a unit for item | |
value_type | Type of gathered value, possible values :float, :character, :log_line, :unsigned_int, :text | :unsigned_int |
Attribute | Description | Default |
---|
zabbix_application "Test application" do
action :sync
item 'vfs.fs.size[/var/log,free]' do
type :active
name 'Free disk space on /var/log'
frequency 600
value_type :unsigned_int
end
trigger "Number #{node.fqdn} of free inodes on log < 10%" do
expression "{#{node.fqdn}:vfs.fs.size[/var/log,free].last(0)}>0"
severity :high
end
end
zabbix_connect 'default' do
action :make
apiurl 'http://localhost/api_jsonrpc.php'
databag 'zabbix'
end
zabbix_database db_name do
db_user db_user
db_pass db_pass
db_host db_host
db_port db_port
action :create
end
zabbix_graph 'Test Graph' do
action :create
width 640
height 480
graph_items [:key => 'vfs.fs.size[/var/log,free]', :color => '111111']
end
zabbix_host node['fqdn'] do
action :create
host_group 'Hosts'
use_ip true
ip_address node['ipaddress']
end
zabbix_media_type 'sms' do
action :create
type :sms
gsm_modem '/dev/modem'
end
zabbix_screen 'Test Screen' do
action :sync
screen_item 'Test Graph' do
resource_type :graph
end
end
Action | Description |
---|---|
add | Default action. Add a template to node |
import | Import templates from xml file to zabbix server |
Attribute | Description | Default |
---|---|---|
path | Name attribute. Path to file for :import or name of template for :add action (required) | |
host_name | Name of host new template to add | FQDN of current node |
zabbix_template '/opt/zabbix/templates/zbx_templates_linux.xml' do
action :import
end
zabbix_template 'Linux_Template'
action :add
end
Action | Description |
---|---|
create | Default action. Create a new zabbix user group |
Attribute | Description | Default |
---|---|---|
name | Name attribute. Name of new zabbix user group (required) |
zabbix_user_group 'Test group' do
action :create
end
zabbix_user_macro 'Test_macro' do
action :create
value 'foobar'
end
To install Zabbix agent just include zabbix_lwrp
default recipe into your node's run_list
:
{
"name":"my_node",
"run_list": [
"recipe[zabbix_lwrp]"
]
}
This recipe should be included before all usage of LWRP, because connection to zabbix server is established here.
To install Zabbix server include the following recipes:
{
"name":"my_node",
"run_list": [
"recipe[zabbix_lwrp::default]",
"recipe[zabbix_lwrp::database]",
"recipe[zabbix_lwrp::server]",
"recipe[zabbix_lwrp::web]"
]
}
For examples of LWRP see fixture cookbook in tests/fixtures/cookbooks
.
Maintainer:: LLC Express 42 ([email protected]) Source:: https://github.com/express42/zabbix_lwrp Issues:: https://github.com/express42/zabbix_lwrp/issues
License:: MIT