使用Puppet配置Zabbix Monitoring Server

时间:2020-03-21 11:43:05  来源:igfitidea点击:

我们将使用Puppet来安装和配置Zabbix服务器。
我们还将允许活跃的Zabbix代理自动注册。

测试环境

我们已经安装了CentOS 7 VM,我们希望将其配置为Zabbix服务器:

带有代理程序自动注册的monitoring.igi.local(10.11.1.13)Zabbix服务器

SELinux设置为强制模式。

Zabbix LTS和PHP

我们要使用稳定的Zabbix LTS版本,在撰写本文时为Zabbix 3.0。

请注意,Zabbix 3.0 LTS版本支持PHP 5.4或者更高版本,但是尚不支持PHP v7.
有关更多信息,请参见Zabbix文档。

另请注意,PHP 5.6将在2016年12月31日之前获得安全支持。
有关更多信息,请参见PHP支持的版本。

因此,我们将使用Katello提供的Remi的PHP 5.6存储库(我们在此处进行了配置)。

用Puppet配置

Puppet Master 在Katello服务器上运行。

Puppet模块

我们使用puppet-zabbix Puppet模块来配置服务器。

我们还使用puppetlabs-apache和puppetlabs-mysql配置前端和后端服务。

请参阅每个模块的文档以获取支持的功能和可用的配置选项。

管理防火墙

我们从防火墙配置开始:

firewall { '007 allow Zabbix active checks':
  dport  => [10051],
  source => '10.11.1.0/24',
  proto  => tcp,
  action => accept,
}->
firewall { '008 allow Zabbix WebUI':
  dport  => [80, 443],
  source => '10.11.1.0/24',
  proto  => tcp,
  action => accept,
}

安装Apache

我们使用Apache运行Zabbix前端,并使用MySQL作为Zabbix后端数据库。

仅执行最小限度的Apache安装,但请确保已加载PHP模块:

class { 'apache':
  default_vhost     => false,
  default_ssl_vhost => false,
  default_mods

=> false,
  mpm_module

=> 'prefork',
  server_signature  => 'Off',
  server_tokens     => 'Prod',
  trace_enable

=> 'Off',
}
include apache::mod::php

安装MySQL

MySQL 5.7存储库由Katello提供服务(我们在此处进行了配置)。

class { 'mysql::server':
  package_name

=> 'mysql-community-server',
  service_name

=> 'mysqld',
  root_password

=> 'PleaseChangeMe',
  create_root_my_cnf => true,
  manage_config_file => true,
  config_file

=> '/etc/my.cnf',
  purge_conf_dir     => true,
  restart

=> true,
  override_options   => {

mysqld => {

bind-address => '127.0.0.1',

datadir

=> '/var/lib/mysql',

log-error    => '/var/log/mysqld.log',

pid-file     => '/var/run/mysqld/mysqld.pid',

wait_timeout => '3600',

interactive_timeout => '3600',

},

mysqld_safe => {

log-error => '/var/log/mysqld.log',

},
  },
  remove_default_accounts => true,
}

安装Zabbix服务器

Zabbix 3.0存储库由Katello提供。
既然是这种情况,我们将manage_repo设置为false。

class { 'zabbix':
  zabbix_version  => '3.0',
  zabbix_url

=> 'monitoring.igi.local',
  database_type   => 'mysql',
  manage_repo     => false,
  manage_firewall => true,
  manage_vhost    => true,
  apache_use_ssl  => true,
}

如果一切顺利,此时Zabbix应该已启动并正在运行。

配置活动代理自动注册

创建服务器后,应配置此部分。

可以允许活动的Zabbix代理自动注册,然后服务器可以开始监视它们。
这样,可以添加新主机进行监视,而无需在服务器上手动配置它们。

成功安装后,Zabbix Web界面将成为accessibe,我们可以使用默认凭据登录:

  • 用户名:Admin
  • 密码:zabbix

在Zabbix前端中,转到“配置”>“操作”,选择“自动注册”作为事件源,然后单击“创建操作”。
使用这样的东西:

  • 名称:Linux主机自动注册
  • 条件:无
  • 操作:链接到模板:模板OS Linux

有关更多信息,请参见下面的图像。

我们这里没有使用任何条件,因为它是可选的,对于测试环境来说并不是真正必要的,但是,如果我们想将Linux服务器与Windows分开,则可以使用“ HostMetadataItem = system.uname”。

在所有服务器上安装Zabbix代理

现在,我们应该在启用代理自动注册的情况下运行Zabbix服务器。
剩下要做的一件事是配置Puppet在所有homelab服务器上安装Zabbix代理,并允许Zabbix被动检查。

这需要进入主环境列表文件“ /etc/puppetlabs/code/environments/homelab/manifests/site.pp”,以便将配置应用于所有服务器。

class { 'zabbix::agent':
  zabbix_version => '3.0',
  ## Do not use DNS, use IP address.
  server  => '10.11.1.13',
  ## Do not set logtype to 'system' unless you want 
  ## to find yourself debugging SELinux problems.
  logtype => 'file',
  logfile => '/var/log/zabbix/zabbix_agentd.log',
  ## Use Katello repository
  manage_repo => false,
  manage_firewall => false,
  manage_selinux => true,
  ## Zabbix Agent does not work well with SELinux
  ## See: https://support.zabbix.com/browse/ZBX-12592
  selinux_require => [

'type kernel_t',

'type devlog_t',

'type zabbix_agent_t',

'class sock_file write',

'class process setrlimit',

'class unix_dgram_socket {connect create sendto}',
  ],
  selinux_rules => { 'zabbix_agent_t' => [

'allow zabbix_agent_t kernel_t:unix_dgram_socket sendto',

'allow zabbix_agent_t self:process setrlimit',

'allow zabbix_agent_t self:unix_dgram_socket { connect create }',

]
  },
  ## Allow active Zabbix agent auto-registration,
  ## after which the server can start monitoring them.
  serveractive => 'monitoring.igi.local',
  hostmetadata => 'system.uname',
}

在所有服务器上配置防火墙,以允许Zabbix被动检查:

firewall { '006 allow Zabbix passive checks':
  proto  => 'tcp',
  source => 'monitoring.igi.local',
  dport  => '10050',
  action => 'accept',
}

最终结果应与此类似:

所有代理都会自动向服务器注册。