Commit f9390e8f authored by Lars Beckers's avatar Lars Beckers
Browse files

completed zabbix-server role

parent 28e73013
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.10 (GNU/Linux)
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
ui+/5ZJHakC67t5OgbMas3Hz4Q==
=HHRW
-----END PGP PUBLIC KEY BLOCK-----
-- http://www.dasm.cz/clanek/zabbix-postgresql-a-table-partitioning
CREATE SCHEMA IF NOT EXISTS partitions AUTHORIZATION zabbix;
CREATE OR REPLACE FUNCTION zbx_history_partition() RETURNS TRIGGER AS $$
DECLARE
parttable TEXT;
startdate INT;
enddate INT;
BEGIN
-- Figure out the partition table name
parttable := TG_TABLE_NAME || to_char(to_timestamp(NEW.clock), 'YYYYMM');
-- Try inserting data to the partition
EXECUTE 'INSERT INTO partitions.' || parttable || ' SELECT ($1).*' USING NEW;
RETURN NULL;
-- If the partition does not exist
EXCEPTION WHEN undefined_table THEN
-- Calculate the start and end dates for the respective day
startdate := EXTRACT(epoch FROM date_trunc('month', to_timestamp(NEW.clock)));
enddate := EXTRACT(epoch FROM date_trunc('month', to_timestamp(NEW.clock) + '1 month'::INTERVAL));
-- Create new partition with indexes, constraints and all the stuff from parent table and add also the clock check
EXECUTE 'CREATE TABLE partitions.' || parttable || ' (LIKE ' || TG_TABLE_NAME || ' INCLUDING ALL, CHECK (clock >= ' || startdate || ' AND clock < ' || enddate || ')) INHERITS (' || TG_TABLE_NAME || ')';
-- Retry inserting to the newly created partition
EXECUTE 'INSERT INTO partitions.' || parttable || ' SELECT ($1).*' USING NEW;
RETURN NULL;
END
$$ LANGUAGE plpgsql;
CREATE TRIGGER tg_history_before_insert BEFORE INSERT ON history FOR EACH ROW EXECUTE PROCEDURE zbx_history_partition();
CREATE TRIGGER tg_history_uint_before_insert BEFORE INSERT ON history_uint FOR EACH ROW EXECUTE PROCEDURE zbx_history_partition();
CREATE TRIGGER tg_history_str_before_insert BEFORE INSERT ON history_str FOR EACH ROW EXECUTE PROCEDURE zbx_history_partition();
CREATE TRIGGER tg_history_text_before_insert BEFORE INSERT ON history_text FOR EACH ROW EXECUTE PROCEDURE zbx_history_partition();
CREATE TRIGGER tg_history_log_before_insert BEFORE INSERT ON history_log FOR EACH ROW EXECUTE PROCEDURE zbx_history_partition();
CREATE TRIGGER tg_trends_before_insert BEFORE INSERT ON trends FOR EACH ROW EXECUTE PROCEDURE zbx_history_partition();
CREATE TRIGGER tg_trends_uint_before_insert BEFORE INSERT ON trends_uint FOR EACH ROW EXECUTE PROCEDURE zbx_history_partition();
......@@ -3,3 +3,7 @@
- name: restart zabbix server
service: name=zabbix-server state=restarted
- name: restart postgres
service: name=postgresql state=restarted
delegate_to: "{{ zabbix_db_host }}"
---
# recommends install postgres database and snmpd services
- name: ensure the server package is installed
apt: name=zabbix-server-pgsql state=latest
apt: name=zabbix-server-pgsql state=latest install_recommends=no
notify:
- restart zabbix server
tags:
- packages
- zabbix
# TODO configure database connection
# TODO initialize database using (local?) sql files
# TODO configure completely
- name: ensure proper configuration of the server
template: src=zabbix_server.conf.j2 dest=/etc/zabbix/zabbix_server.conf
notify:
- restart zabbix server
tags:
- config
- zabbix
- name: ensure the zabbix user has a home directory
file: path=/var/lib/zabbix state=directory owner=zabbix group=zabbix
tags:
- config
- zabbix
- name: ensure the zabbix user has a pgpass file
template: src=pgpass.j2 dest=/var/lib/zabbix/.pgpass owner=zabbix group=zabbix mode=0600
tags:
- config
- database
- zabbix
- name: ensure there is the parition optimization sql file
copy: src=zabbix-partition.sql dest=/usr/share/doc/zabbix-server-pgsql/zabbix-partition.sql
tags:
- database
- zabbix
- name: ensure we have a user on the database server
postgresql_user: name="{{ zabbix_db_user }}" password="{{ zabbix_db_password }}" state=present role_attr_flags=NOSUPERUSER,NOCREATEDB
become: yes
become_user: postgres
delegate_to: "{{ zabbix_db_host }}"
tags:
- database
- zabbix
- name: ensure we have a database on the database server
postgresql_db: name="{{ zabbix_db_name }}" owner="{{ zabbix_db_user }}" state=present
become: yes
become_user: postgres
delegate_to: "{{ zabbix_db_host }}"
tags:
- database
- zabbix
- name: ensure our user has the necessary privileges for the database
postgresql_privs: database="{{ zabbix_db_name }}" roles="{{ zabbix_db_user }}" privs=ALL state=present type=database
become: yes
become_user: postgres
delegate_to: "{{ zabbix_db_host }}"
tags:
- database
- zabbix
- name: ensure the database server listens on the external interface
replace: dest=/etc/postgresql/9.4/main/postgresql.conf regexp="#listen_addresses = 'localhost'" replace="listen_addresses = '*'"
notify:
- restart postgres
delegate_to: "{{ zabbix_db_host }}"
tags:
- database
- zabbix
- name: ensure the database server allows connections from the server
lineinfile: dest=/etc/postgresql/9.4/main/pg_hba.conf insertafter="host all all 127.0.0.1/32 md5" line="host {{ zabbix_db_name }} {{ zabbix_db_user }} {{ ansible_fqdn }} md5" state=present
notify:
- restart postgres
delegate_to: "{{ zabbix_db_host }}"
tags:
- database
- zabbix
- meta: flush_handlers
- name: apply database schema
shell: zcat /usr/share/doc/zabbix-server-pgsql/create.sql.gz | psql -h {{ zabbix_db_host }} -U {{ zabbix_db_user }} -w -d {{ zabbix_db_name }} && touch /var/lib/zabbix/.db_schema_created
args:
creates: /var/lib/zabbix/.db_schema_created
become: yes
become_user: zabbix
notify:
- restart zabbix server
tags:
- database
- zabbix
- name: apply database schema optimization
shell: psql -h {{ zabbix_db_host }} -U {{ zabbix_db_user }} -w -d {{ zabbix_db_name }} -f /usr/share/doc/zabbix-server-pgsql/zabbix-partition.sql && touch /var/lib/zabbix/.db_schema_optimized
args:
creates: /var/lib/zabbix/.db_schema_created
become: yes
become_user: zabbix
notify:
- restart zabbix server
tags:
- database
- zabbix
- name: ensure the server is enabled and running
service: name=zabbix-server state=running enabled=yes
......
{{ zabbix_db_host }}:5432:{{ zabbix_db_name }}:{{ zabbix_db_user }}:{{ zabbix_db_password }}
# This is a configuration file for Zabbix server daemon
# To get more information about Zabbix, visit http://www.zabbix.com
############ GENERAL PARAMETERS #################
### Option: ListenPort
# Listen port for trapper.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# ListenPort=10051
### Option: SourceIP
# Source IP address for outgoing connections.
#
# Mandatory: no
# Default:
# SourceIP=
### Option: LogType
# Specifies where log messages are written to:
# system - syslog
# file - file specified with LogFile parameter
# console - standard output
#
# Mandatory: no
# Default:
# LogType=file
### Option: LogFile
# Log file name for LogType 'file' parameter.
#
# Mandatory: no
# Default:
# LogFile=
LogFile=/var/log/zabbix/zabbix_server.log
### Option: LogFileSize
# Maximum size of log file in MB.
# 0 - disable automatic log rotation.
#
# Mandatory: no
# Range: 0-1024
# Default:
# LogFileSize=1
LogFileSize=0
### Option: DebugLevel
# Specifies debug level:
# 0 - basic information about starting and stopping of Zabbix processes
# 1 - critical information
# 2 - error information
# 3 - warnings
# 4 - for debugging (produces lots of information)
# 5 - extended debugging (produces even more information)
#
# Mandatory: no
# Range: 0-5
# Default:
# DebugLevel=3
### Option: PidFile
# Name of PID file.
#
# Mandatory: no
# Default:
# PidFile=/tmp/zabbix_server.pid
PidFile=/var/run/zabbix/zabbix_server.pid
### Option: DBHost
# Database host name.
# If set to localhost, socket is used for MySQL.
# If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
# DBName=localhost
DBHost={{ zabbix_db_host }}
### Option: DBName
# Database name.
# For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
#
# Mandatory: yes
# Default:
# DBName=
DBName={{ zabbix_db_name }}
### Option: DBSchema
# Schema name. Used for IBM DB2 and PostgreSQL.
#
# Mandatory: no
# Default:
# DBSchema=
### Option: DBUser
# Database user. Ignored for SQLite.
#
# Mandatory: no
# Default:
# DBUser=
DBUser={{ zabbix_db_user }}
### Option: DBPassword
# Database password. Ignored for SQLite.
# Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword=
DBPassword={{ zabbix_db_password }}
### Option: DBSocket
# Path to MySQL socket.
#
# Mandatory: no
# Default:
# DBSocket=/tmp/mysql.sock
### Option: DBPort
# Database port when not using local socket. Ignored for SQLite.
#
# Mandatory: no
# Range: 1024-65535
# Default (for MySQL):
# DBPort=3306
DBPort=5432
############ ADVANCED PARAMETERS ################
### Option: StartPollers
# Number of pre-forked instances of pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPollers=5
### Option: StartIPMIPollers
# Number of pre-forked instances of IPMI pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartIPMIPollers=0
### Option: StartPollersUnreachable
# Number of pre-forked instances of pollers for unreachable hosts (including IPMI and Java).
# At least one poller for unreachable hosts must be running if regular, IPMI or Java pollers
# are started.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPollersUnreachable=1
### Option: StartTrappers
# Number of pre-forked instances of trappers.
# Trappers accept incoming connections from Zabbix sender, active agents and active proxies.
# At least one trapper process must be running to display server availability and view queue
# in the frontend.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartTrappers=5
### Option: StartPingers
# Number of pre-forked instances of ICMP pingers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPingers=1
### Option: StartDiscoverers
# Number of pre-forked instances of discoverers.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartDiscoverers=1
### Option: StartHTTPPollers
# Number of pre-forked instances of HTTP pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartHTTPPollers=1
### Option: StartTimers
# Number of pre-forked instances of timers.
# Timers process time-based trigger functions and maintenance periods.
# Only the first timer process handles the maintenance periods.
#
# Mandatory: no
# Range: 1-1000
# Default:
# StartTimers=1
### Option: StartEscalators
# Number of pre-forked instances of escalators.
#
# Mandatory: no
# Range: 0-100
# Default:
# StartEscalators=1
### Option: JavaGateway
# IP address (or hostname) of Zabbix Java gateway.
# Only required if Java pollers are started.
#
# Mandatory: no
# Default:
# JavaGateway=
### Option: JavaGatewayPort
# Port that Zabbix Java gateway listens on.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# JavaGatewayPort=10052
### Option: StartJavaPollers
# Number of pre-forked instances of Java pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartJavaPollers=0
### Option: StartVMwareCollectors
# Number of pre-forked vmware collector instances.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartVMwareCollectors=0
### Option: VMwareFrequency
# How often Zabbix will connect to VMware service to obtain a new data.
#
# Mandatory: no
# Range: 10-86400
# Default:
# VMwareFrequency=60
### Option: VMwarePerfFrequency
# How often Zabbix will connect to VMware service to obtain performance data.
#
# Mandatory: no
# Range: 10-86400
# Default:
# VMwarePerfFrequency=60
### Option: VMwareCacheSize
# Size of VMware cache, in bytes.
# Shared memory size for storing VMware data.
# Only used if VMware collectors are started.
#
# Mandatory: no
# Range: 256K-2G
# Default:
# VMwareCacheSize=8M
### Option: VMwareTimeout
# Specifies how many seconds vmware collector waits for response from VMware service.
#
# Mandatory: no
# Range: 1-300
# Default:
# VMwareTimeout=10
### Option: SNMPTrapperFile
# Temporary file used for passing data from SNMP trap daemon to the server.
# Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
#
# Mandatory: no
# Default:
# SNMPTrapperFile=/tmp/zabbix_traps.tmp
### Option: StartSNMPTrapper
# If 1, SNMP trapper process is started.
#
# Mandatory: no
# Range: 0-1
# Default:
# StartSNMPTrapper=0
### Option: ListenIP
# List of comma delimited IP addresses that the trapper should listen on.
# Trapper will listen on all network interfaces if this parameter is missing.
#
# Mandatory: no
# Default:
# ListenIP=0.0.0.0
# ListenIP=127.0.0.1
### Option: HousekeepingFrequency
# How often Zabbix will perform housekeeping procedure (in hours).
# Housekeeping is removing outdated information from the database.
# To prevent Housekeeper from being overloaded, no more than 4 times HousekeepingFrequency
# hours of outdated information are deleted in one housekeeping cycle, for each item.
# To lower load on server startup housekeeping is postponed for 30 minutes after server start.
# With HousekeepingFrequency=0 the housekeeper can be only executed using the runtime control option.
# In this case the period of outdated information deleted in one housekeeping cycle is 4 times the
# period since the last housekeeping cycle, but not less than 4 hours and not greater than 4 days.
#
# Mandatory: no
# Range: 0-24
# Default:
# HousekeepingFrequency=1
### Option: MaxHousekeeperDelete
# The table "housekeeper" contains "tasks" for housekeeping procedure in the format:
# [housekeeperid], [tablename], [field], [value].
# No more than 'MaxHousekeeperDelete' rows (corresponding to [tablename], [field], [value])
# will be deleted per one task in one housekeeping cycle.
# SQLite3 does not use this parameter, deletes all corresponding rows without a limit.
# If set to 0 then no limit is used at all. In this case you must know what you are doing!
#
# Mandatory: no
# Range: 0-1000000
# Default:
# MaxHousekeeperDelete=5000
### Option: SenderFrequency
# How often Zabbix will try to send unsent alerts (in seconds).
#
# Mandatory: no
# Range: 5-3600
# Default:
# SenderFrequency=30
### Option: CacheSize
# Size of configuration cache, in bytes.
# Shared memory size for storing host, item and trigger data.
#
# Mandatory: no
# Range: 128K-8G
# Default:
# CacheSize=8M
### Option: CacheUpdateFrequency
# How often Zabbix will perform update of configuration cache, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# CacheUpdateFrequency=60
### Option: StartDBSyncers
# Number of pre-forked instances of DB Syncers.
#
# Mandatory: no
# Range: 1-100
# Default:
# StartDBSyncers=4
### Option: HistoryCacheSize
# Size of history cache, in bytes.
# Shared memory size for storing history data.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# HistoryCacheSize=16M
### Option: HistoryIndexCacheSize
# Size of history index cache, in bytes.
# Shared memory size for indexing history cache.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# HistoryIndexCacheSize=4M
### Option: TrendCacheSize
# Size of trend cache, in bytes.
# Shared memory size for storing trends data.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# TrendCacheSize=4M
### Option: ValueCacheSize
# Size of history value cache, in bytes.
# Shared memory size for caching item history data requests.
# Setting to 0 disables value cache.
#
# Mandatory: no
# Range: 0,128K-64G
# Default:
# ValueCacheSize=8M
### Option: Timeout
# Specifies how long we wait for agent, SNMP device or external check (in seconds).
#
# Mandatory: no
# Range: 1-30
# Default:
# Timeout=3