Instalação do Zabbix utilizando o Ansible

Voltamos com a 3º e ultima parte do Artigo primeiros passos com o Ansible, hoje iremos criar uma Role chamada Zabbix Server e verificar seu funcionamento.

Roles:

As Roles disponibilizam uma estrutura baseada na ideia de incluir arquivos e combina-los para formar abstrações limpas e reutilizáveis, permitindo que você se concentre mais no cenário geral e só foque nos detalhe quando houver necessidade.

 

Do que são formadas?

Abaixo iremos mostrar a estrutura padrão de pastas em uma role no Ansible:

Defaults:

É o diretório onde são definidas as variáveis padrões que serão utilizadas na Role. Todos os padrões definidos em Defaults podem ser substituídos nos arquivos de Playbook, Inventory e Templates.

 

Handlers:

É o diretório onde são inseridas listas de tarefas opcionais, responsáveis por realizar  os comandos para inciar ou restartar uma aplicação ou serviço recém instalado. Os Handlers são notificados após a execução das Tasks, caso mais de uma Task solicite a execução de um Handler, elas só serão executadas no final do bloco das Tasks.

 

Tasks:

É o diretório onde são inseridos os arquivos para execução dos Playbooks, Tasks e Modules.

 

Templates:

É o diretório onde serão inseridos os Templates que irão gerar arquivos nos hosts alvo do Ansible, os arquivos de Templates geralmente utilizam as variáveis declaradas em Defaults ou em uma pasta destinada para as demais variáveis.

 

Criando a Role:

1) Iremos criar um role com o nome de ZabbixServerAllInOne na pasta roles no diretório do Ansible, com as seguintes subpastas:

cd /etc/ansible/roles/ 
mkdir ZabbixServerAllInOne
mkdir ZabbixServerAllInOne/defaults 
mkdir ZabbixServerAllInOne/handlers 
mkdir ZabbixServerAllInOne/tasks 
mkdir ZabbixServerAllInOne/templates

Criar arquivo um chamado deploy.yml:

touch deploy.yml

Inserir no arquivo os comandos baixo:

- name: Install Zabbix Server
  hosts: 10.0.0.240
  roles:
  - ZabbixServerAllInOne

 

2)  Acessar o diretório Defaults e criar o arquivo padrão com as variáveis que serão utilizadas:

cd /defaults

Criar o arquivo main.yml onde serão definidas todas as variavels que serão utilizadas na Role para instalação do Zabbix Server:

vim main.yml

Inserir no arquivo os comandos abaixo:

zabbix_version: 4.4

zbx_server_address: 127.0.0.1
zbx_frontend_address: 127.0.0.1
zbx_database_address: 127.0.0.1
zbx_database_saas: False

mysql_root_password: Zabbixdb#2019!
zbx_database_user: zabbix
zbx_database_password: ZabbixDB#2019!

zabbix_server_package_state: present
zabbix_server_install_recommends: True
zabbix_server_install_database_cliente: True

zabbix_repo: zabbix

zabbix_repo_yum:
  - name: zabbix
    description: Zabbix Official Repository - $basearch
    baseurl: http://repo.zabbix.com/zabbix/{{ zabbix_version }}/rhel/{{ ansible_distribution_major_version }}/$basearch/
    gpgcheck: 0
    gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
    state: present
  - name: zabbix-supported
    description: Zabbix Official Repository non-supported - $basearch
    baseurl: http://repo.zabbix.com/non-supported/rhel/{{ ansible_distribution_major_version }}/$basearch/
    gpgcheck: 0
    gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
    state: present

# Zabbix Server parameters
zbx_start_pollers: 10
zbx_start_pollersunreachable: 10
zbx_start_trappers: 10
zbx_start_pingers: 10
zbx_timeout: 30
zbx_cache_size: 256M
zbx_value_cache_size: 256M

# Frontend parameters
time_zone: America/Sao_Paulo


# Database
zabbix_server_database: mysql # mysql or pgsql
zabbix_server_database_long: mysql # mysql or postgresql
zabbix_database_creation: True
zabbix_database_sqlload: True

# MySQL
mysql_repo: https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

Onde:

As variáveis declaradas no arquivo main.yml seguem o padrão:

nome_variável: valor_variável 

Ex:

zbx_server_address: 127.0.0.1

 

3) Acessar o diretório Tasks e criar os Playbooks para a instalação do Zabbix, iremos separar por arquivos as tarefas a serem executadas:

cd /tasks

Criar um arquivo chamado common.yml que será o arquivo onde estarão as Tasks e Modules para a instalação dos pré requisitos para instalação do Zabbix Server:

vim commom.yml

Inserir os comandos abaixo no arquivo:

- name: Debug IPv4
  debug: 
    msg: "{{ ansible_default_ipv4.address }} {{ ansible_all_ipv4_addresses[0] }} {{ ansible_lo.ipv4.address }} {{ zbx_server_address }} {{ zbx_frontend_address }} {{ zbx_database_address }}"

- name: Disable SELinux
  selinux:
    state: disabled

- name: Install packages
  yum:
    name: 
        - epel-release
        - net-tools
        - vim
        - nano
        - wget
        - telnet
        - rsync
        - git
        - python36
        - python36-pip
    state: present

- name: Install python packages
  yum:
    name:
        - python
        - python-pip
    state: present

- name: Install pip packages
  pip:
    name:
        - pymysql

 

Criar um arquivo chamado MySQL.yml que será o arquivo responsável pela instalação e configuração do MySQL:

vim MySQL.yml

Inserir os comandos abaixo no arquivo:

- name: Install repo MySQL
  yum:
    name: "{{ mysql_repo }}"
    state: latest

- name: Install MySQL server
  yum:
    name: mysql-server
    state: present

- name: Start MySQL and enable on boot
  service:
    name: mysqld
    state: started
    enabled: yes

- name: Find MySQL temporary password 
  shell: "grep temporary.*root@localhost /var/log/mysqld.log | sed 's/.*root@localhost: //' | tail -n 1"
  register: mysql_root_password_temp

- name: Debug MySQL temporary password
  debug: 
    msg: "{{ mysql_root_password_temp.stdout }}"

- name: Detect and properly set root password
  stat:
    path: /root/.my.cnf
  register: r
- mysql_user:
    name: root
    password: "{{ mysql_root_password }}"
  when: r.stat.exists==True
- name: Set new password from temporary password
  shell: 'mysql -e "SET PASSWORD = PASSWORD(''{{ mysql_root_password }}'');" --connect-expired-password -uroot -p"{{ mysql_root_password_temp.stdout }}"'
  when: r.stat.exists==False

- name: Create `/root/.my.cnf`  with root password credentials
  template:
    src:  user.root.my.cnf.j2
    dest: /root/.my.cnf
    owner: root
    mode: 0600
    force: yes

- name: Remove anonymous MySQL user accounts
  mysql_user:
    name: ''
    state: absent

- name: Remove MySQL database test
  mysql_db:
    name: test
    state: absent

- name: Create database zabbix
  mysql_db:
    login_user: root
    login_password: "{{ mysql_root_password }}"
    name: zabbix
    encoding: utf8
    collation: utf8_bin
    state: present

- name: Create zabbix MySQL user accounts
  mysql_user: name={{ zbx_database_user }} password={{ zbx_database_password }} priv=zabbix.*:ALL host={{ item }} state=present
  with_items:
    - "{{ zbx_server_address }}"
    - "{{ zbx_frontend_address }}"
    - "{{ zbx_database_address }}"
  notify: restart mysql

 

Criar um arquivo chamado Zbx-server.yml que será responsável pela instalação e configuração do Zabbix Server:

vim Zbx-server.yml

Inserir os comandos abaixo no arquivo:

- name: Set some fact
  set_fact:
    zabbix_short_version: "{{ zabbix_version | regex_replace('\\.', '') }}"

- name: Install Zabbix Repo.
  yum_repository:
    name: "{{ item.name }}"
    description: "{{ item.description }}"
    baseurl: "{{ item.baseurl }}"
    gpgcheck: "{{ item.gpgcheck }}"
    gpgkey: "{{ item.gpgkey }}"
    state: "{{ item.state | default('present') }}"
  with_items: "{{ zabbix_repo_yum }}"

- name: Install package Zabbix
  yum:
    name:
      - zabbix-server-{{ zabbix_server_database }}
      - zabbix-get
      - zabbix-sender

- name: Import initial schema zabbix database
  shell: "zcat /usr/share/doc/zabbix-server-{{ zabbix_server_database }}*/create.sql.gz | mysql -h {{ zbx_database_address }} -u{{ zbx_database_user }} -p{{ zbx_database_password }} zabbix"
  register: result_schema

- name: Debug
  debug:
    msg: "{{ result_schema }}"

- name: Create /etc/zabbix/scripts
  file: 
    path: /etc/zabbix/scripts
    state: directory
    recurse: yes

- name: Make sure zabbix-server service is running
  systemd:
    name: zabbix-server
    state: started
    enabled: yes

- name: Copy zabbix_server.conf template 
  template:
    src: templates/zabbix_server.conf.44.j2
    dest: /etc/zabbix/zabbix_server.conf
  notify: restart zabbix-server

 

Criar um arquivo chamado Zbx-frontend.yml que será responsável pela instalação e configuração do Zabbix Front End :

vim Zbx-frontend.yml

Inserir os comandos abaixo no arquivo:

- name: Set some fact
  set_fact:
    zabbix_short_version: "{{ zabbix_version | regex_replace('\\.', '') }}"

- name: Install Zabbix Repo.
  yum_repository:
    name: "{{ item.name }}"
    description: "{{ item.description }}"
    baseurl: "{{ item.baseurl }}"
    gpgcheck: "{{ item.gpgcheck }}"
    gpgkey: "{{ item.gpgkey }}"
    state: "{{ item.state | default('present') }}"
  with_items: "{{ zabbix_repo_yum }}"

- name: Install package Zabbix
  yum:
    name:
      - zabbix-web-{{ zabbix_server_database }}
      - zabbix-get
      - zabbix-sender

- name: Make sure httpd service is running
  systemd:
    name: httpd
    state: started
    enabled: yes

- name: Copy web.zabbix.conf template 
  template:
    src: templates/web.zabbix.conf.j2
    dest: /etc/httpd/conf.d/zabbix.conf
  notify: restart httpd
  
- name: Create firewall rule
  firewalld:
    port: 80/tcp
    permanent: yes
    immediate: yes
    state: enabled

- name: Firewalld reload
  command: firewall-cmd --reload

 

Criar um arquivo chamado main.yml que será responsável por chamar os arquivos criados anteriormente:

vim main.yml

Inserir os comandos abaixo no arquivo:

- name: Install common packages
  include_tasks: "common.yml"

- name: Install Database
  include_tasks: "MySQL.yml"  

- name: Install Zabbix Server
  include: "Zbx-server.yml"

- name: Install Frontend
  include: "Zbx-frontend.yml"

4) Acessar o diretório Templates e criar os modelos de arquivos que iremos utilizar na instalação do Zabbix:

cd /templates

Criar um arquivo chamado user.root.mycnf.j2 que será responsável por habilitar a senha de root do MySQL:

vim user.root.mycnf.j2

Inserir os comandos abaixo no arquivo criado:

[client]
user=root
password="{{ mysql_root_password }}"

Criar um arquivo chamado zabbix_server.conf.44.j2, que será responsável por alterar os parâmetros no arquivo de configuração do Zabbix Server conforme as variáveis declaradas no Default:

vim zabbix_server.conf.44.j2

Inserir os comandos abaixo no arquivo criado:

# 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: yes, if LogType is set to file, otherwise 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: SocketDir
#	IPC socket directory.
#		Directory to store IPC sockets used by internal Zabbix services.
#
# Mandatory: no
# Default:
# SocketDir=/tmp

SocketDir=/var/run/zabbix

### 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:
DBHost={{ zbx_database_address }}

### Option: DBName
#	Database name.
#
# Mandatory: yes
# Default:
# DBName=

DBName=zabbix

### Option: DBSchema
#	Schema name. Used for IBM DB2 and PostgreSQL.
#
# Mandatory: no
# Default:
# DBSchema=

### Option: DBUser
#	Database user.
#
# Mandatory: no
# Default:
# DBUser=

DBUser=zabbix

### Option: DBPassword
#	Database password.
#	Comment this line if no password is used.
#
# Mandatory: no
# Default:
DBPassword={{ zbx_database_password }}

### Option: DBSocket
#	Path to MySQL socket.
#
# Mandatory: no
# Default:
# DBSocket=

### Option: DBPort
#	Database port when not using local socket.
#
# Mandatory: no
# Range: 1024-65535
# Default:
# DBPort=

### Option: HistoryStorageURL
#	History storage HTTP[S] URL.
#
# Mandatory: no
# Default:
# HistoryStorageURL=

### Option: HistoryStorageTypes
#	Comma separated list of value types to be sent to the history storage.
#
# Mandatory: no
# Default:
# HistoryStorageTypes=uint,dbl,str,log,text

### Option: HistoryStorageDateIndex
#	Enable preprocessing of history values in history storage to store values in different indices based on date.
#	0 - disable
#	1 - enable
#
# Mandatory: no
# Default:
# HistoryStorageDateIndex=0

### Option: ExportDir
#	Directory for real time export of events, history and trends in newline delimited JSON format.
#	If set, enables real time export.
#
# Mandatory: no
# Default:
# ExportDir=

### Option: ExportFileSize
#	Maximum size per export file in bytes.
#	Only used for rotation if ExportDir is set.
#
# Mandatory: no
# Range: 1M-1G
# Default:
# ExportFileSize=1G

############ ADVANCED PARAMETERS ################

### Option: StartPollers
#	Number of pre-forked instances of pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
StartPollers={{ zbx_start_pollers | default('5') }}

### Option: StartIPMIPollers
#	Number of pre-forked instances of IPMI pollers.
#		The IPMI manager process is automatically started when at least one IPMI poller is started.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartIPMIPollers=0

### Option: StartPreprocessors
#	Number of pre-forked instances of preprocessing workers.
#		The preprocessing manager process is automatically started when preprocessor worker is started.
#
# Mandatory: no
# Range: 1-1000
# Default:
# StartPreprocessors=3

### 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={{ zbx_start_pollersunreachable | default('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={{ zbx_start_trappers | default('5') }}

### Option: StartPingers
#	Number of pre-forked instances of ICMP pingers.
#
# Mandatory: no
# Range: 0-1000
# Default:
StartPingers={{ zbx_start_pingers | default('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 maintenance periods.
#	Only the first timer process handles host maintenance updates. Problem suppression updates are shared
#	between all timers.
#
# 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: StartAlerters
#	Number of pre-forked instances of alerters.
#	Alerters send the notifications created by action operations.
#
# Mandatory: no
# Range: 0-100
# Default:
# StartAlerters=3

### 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

SNMPTrapperFile=/var/log/snmptrap/snmptrap.log

### 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.
#	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: CacheSize
#	Size of configuration cache, in bytes.
#	Shared memory size for storing host, item and trigger data.
#
# Mandatory: no
# Range: 128K-8G
# Default:
CacheSize={{ zbx_cache_size | default('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={{ zbx_value_cache_size | default('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

Timeout={{ zbx_timeout | default('4') }}

### Option: TrapperTimeout
#	Specifies how many seconds trapper may spend processing new data.
#
# Mandatory: no
# Range: 1-300
# Default:
# TrapperTimeout=300

### Option: UnreachablePeriod
#	After how many seconds of unreachability treat a host as unavailable.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnreachablePeriod=45

### Option: UnavailableDelay
#	How often host is checked for availability during the unavailability period, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnavailableDelay=60

### Option: UnreachableDelay
#	How often host is checked for availability during the unreachability period, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnreachableDelay=15

### Option: AlertScriptsPath
#	Full path to location of custom alert scripts.
#	Default depends on compilation options.
#	To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
# AlertScriptsPath=${datadir}/zabbix/alertscripts

AlertScriptsPath=/usr/lib/zabbix/alertscripts

### Option: ExternalScripts
#	Full path to location of external scripts.
#	Default depends on compilation options.
#	To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
# ExternalScripts=${datadir}/zabbix/externalscripts

ExternalScripts=/usr/lib/zabbix/externalscripts

### Option: FpingLocation
#	Location of fping.
#	Make sure that fping binary has root ownership and SUID flag set.
#
# Mandatory: no
# Default:
# FpingLocation=/usr/sbin/fping

### Option: Fping6Location
#	Location of fping6.
#	Make sure that fping6 binary has root ownership and SUID flag set.
#	Make empty if your fping utility is capable to process IPv6 addresses.
#
# Mandatory: no
# Default:
# Fping6Location=/usr/sbin/fping6

### Option: SSHKeyLocation
#	Location of public and private keys for SSH checks and actions.
#
# Mandatory: no
# Default:
# SSHKeyLocation=

### Option: LogSlowQueries
#	How long a database query may take before being logged (in milliseconds).
#	Only works if DebugLevel set to 3, 4 or 5.
#	0 - don't log slow queries.
#
# Mandatory: no
# Range: 1-3600000
# Default:
# LogSlowQueries=0

LogSlowQueries=3000

### Option: TmpDir
#	Temporary directory.
#
# Mandatory: no
# Default:
# TmpDir=/tmp

### Option: StartProxyPollers
#	Number of pre-forked instances of pollers for passive proxies.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartProxyPollers=1

### Option: ProxyConfigFrequency
#	How often Zabbix Server sends configuration data to a Zabbix Proxy in seconds.
#	This parameter is used only for proxies in the passive mode.
#
# Mandatory: no
# Range: 1-3600*24*7
# Default:
# ProxyConfigFrequency=3600

### Option: ProxyDataFrequency
#	How often Zabbix Server requests history data from a Zabbix Proxy in seconds.
#	This parameter is used only for proxies in the passive mode.
#
# Mandatory: no
# Range: 1-3600
# Default:
# ProxyDataFrequency=1

### Option: StartLLDProcessors
#	Number of pre-forked instances of low level discovery processors.
#
# Mandatory: no
# Range: 1-100
# Default:
# StartLLDProcessors=2

### Option: AllowRoot
#	Allow the server to run as 'root'. If disabled and the server is started by 'root', the server
#	will try to switch to the user specified by the User configuration option instead.
#	Has no effect if started under a regular user.
#	0 - do not allow
#	1 - allow
#
# Mandatory: no
# Default:
# AllowRoot=0

### Option: User
#	Drop privileges to a specific, existing user on the system.
#	Only has effect if run as 'root' and AllowRoot is disabled.
#
# Mandatory: no
# Default:
# User=zabbix

### Option: Include
#	You may include individual files or all files in a directory in the configuration file.
#	Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
#
# Mandatory: no
# Default:
# Include=

# Include=/usr/local/etc/zabbix_server.general.conf
# Include=/usr/local/etc/zabbix_server.conf.d/
# Include=/usr/local/etc/zabbix_server.conf.d/*.conf

### Option: SSLCertLocation
#	Location of SSL client certificates.
#	This parameter is used only in web monitoring.
#	Default depends on compilation options.
#	To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
# SSLCertLocation=${datadir}/zabbix/ssl/certs

### Option: SSLKeyLocation
#	Location of private keys for SSL client certificates.
#	This parameter is used only in web monitoring.
#	Default depends on compilation options.
#	To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
# SSLKeyLocation=${datadir}/zabbix/ssl/keys

### Option: SSLCALocation
#	Override the location of certificate authority (CA) files for SSL server certificate verification.
#	If not set, system-wide directory will be used.
#	This parameter is used only in web monitoring and SMTP authentication.
#
# Mandatory: no
# Default:
# SSLCALocation=

### Option: StatsAllowedIP
#	List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of external Zabbix instances.
#	Stats request will be accepted only from the addresses listed here. If this parameter is not set no stats requests
#	will be accepted.
#	If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
#	and '::/0' will allow any IPv4 or IPv6 address.
#	'0.0.0.0/0' can be used to allow any IPv4 address.
#	Example: StatsAllowedIP=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
#
# Mandatory: no
# Default:
# StatsAllowedIP=
StatsAllowedIP=127.0.0.1

####### LOADABLE MODULES #######

### Option: LoadModulePath
#	Full path to location of server modules.
#	Default depends on compilation options.
#	To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
# LoadModulePath=${libdir}/modules

### Option: LoadModule
#	Module to load at server startup. Modules are used to extend functionality of the server.
#	Formats:
#		LoadModule=<module.so>
#		LoadModule=<path/module.so>
#		LoadModule=</abs_path/module.so>
#	Either the module must be located in directory specified by LoadModulePath or the path must precede the module name.
#	If the preceding path is absolute (starts with '/') then LoadModulePath is ignored.
#	It is allowed to include multiple LoadModule parameters.
#
# Mandatory: no
# Default:
# LoadModule=

####### TLS-RELATED PARAMETERS #######

### Option: TLSCAFile
#	Full pathname of a file containing the top-level CA(s) certificates for
#	peer certificate verification.
#
# Mandatory: no
# Default:
# TLSCAFile=

### Option: TLSCRLFile
#	Full pathname of a file containing revoked certificates.
#
# Mandatory: no
# Default:
# TLSCRLFile=

### Option: TLSCertFile
#	Full pathname of a file containing the server certificate or certificate chain.
#
# Mandatory: no
# Default:
# TLSCertFile=

### Option: TLSKeyFile
#	Full pathname of a file containing the server private key.
#
# Mandatory: no
# Default:
# TLSKeyFile=

Criar um arquivo chamado web.zabbix.conf.j2 que será responsável por aplicar as alterações no arquivo de configuração do Apache conforme as variáveis definidas em Default:

vim zabbix_web.conf.j2

Inserir os comandos abaixo no arquivo criado:

#
# Zabbix monitoring system php web frontend
#

Alias /zabbix /usr/share/zabbix

<Directory "/usr/share/zabbix">
    Options FollowSymLinks
    AllowOverride None
    Require all granted

    <IfModule mod_php5.c>
        php_value max_execution_time 300
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 2M
        php_value max_input_time 300
        php_value max_input_vars 10000
        php_value always_populate_raw_post_data -1
        php_value date.timezone {{ time_zone }}
    </IfModule>
</Directory>

<Directory "/usr/share/zabbix/conf">
    Require all denied
</Directory>

<Directory "/usr/share/zabbix/app">
    Require all denied
</Directory>

<Directory "/usr/share/zabbix/include">
    Require all denied
</Directory>

<Directory "/usr/share/zabbix/local">
    Require all denied
</Directory>

 

5) Acessar o diretório Handlers e criar o arquivo responsável por Reiniciar ou Inicializar os serviços instalados:

cd /handlers

Criar um arquivo chamado main.yml que será responsável pela inicialização ou reinicialização dos serviços:

vim main.yml

Inserir os comandos abaixo no arquivo criado:

- name: restart mysql
  service:
    name: mysqld
    state: restarted

- name: restart zabbix-server
  service:
    name: zabbix-server
    state: restarted

- name: restart httpd
  service:
    name: httpd
    state: restarted

 

6) Acessar o diretório da role ZabbixServerAllInOne e executar o comando para deploy do Ansible:

cd /etc/ansible/roles/ZabbixServerAllInOne

Executar o comando abaixo:

ansible-playbook deploy.yml

Verificar a saída e validar se não irá retornar nenhum falha:

7) Acessar o endereço do Zabbix no navegador e seguir os passos abaixo:

Acessar o endereço http://SEU_IP/zabbix:

Selecionar o Next step:

Alterar o Database host para 127.0.0.1, Adicionar a senha para o usuário zabbix que foi definida no arquivo main.yml do diretório Defaults:

Adicionar zabbix_srv no campo Name:

Selecionar Next step:

O servidor Zabbix Server foi configurado com sucesso:

Para validar acessar o endereço em seu navegador http://SEU_IP/zabbix:
User: Admin e Password: zabbix

 

Não inserimos uma Role para instalação do Zabbix Agent, crie uma Role e pratique o que foi demonstrado nos artigos.

Esperamos que tenham curtido a serie de Artigos!
Até o próximo. 

Este post tem 2 comentários

  1. Avatar
    Rafael Vinícius

    Demais essa role pra instalação. Vou adaptar ela pra subir um zabbix-proxy, valeu por compartilhar esse conhecimento!!!

    1. Jean Caires
      Jean Caires

      Muito Obrigado, manda bala que vai dar certo para o Zabbix-Proxy.

Deixe uma resposta