修改Icinga2以在CentOS 6或CentOS 7上使用Master/Client模型

・24 分钟阅读

Icinga2是一个功能强大的监控系统,当在Master/Client模型中使用时,它可以满足对基于NRPE的监控检查的需求。Master/Client模型更安全的原因 ,它还允许在一个服务器上修改检查,并且传播到其他服务器,从而允许更多的分布式监控。

例如:假设你有4个不同的负载平衡Web服务器,如果你知道将要出现负载峰值(可能是销售或你预计会有大量活动的事情),你可能需要提高CPU使用率警告系统管理员的级别。如果你使用的是NRPE检查,就需要转到每个服务器,并且修改其中每个服务器上的/etc/nrpe.d/common_commands.cfg 文件,在Master/Client模型中你可以在/etc/icinga2/repository.d/hosts/文件夹中简单地修改它们的主机定义,然后重新加载Icinga,检查将传播到每个服务器,并自动获取,你还可以通过修改 /etc/icinga2/repository.d/services/ 只要客户端服务器上存在插件,它们就会自动传播,并且被识别。

前提条件

  • 安装并配置了Icinga2和Icingaweb2的服务器实例,名为icinga2master.example.com。
  • 你希望监控的全新CentOS 6或7服务器实例名为icinga2client.example.com。
  • sudo访问,

步骤1更新系统

将Icinga repo添加到客户端系统以安装Icinga包。


sudo cat > /etc/yum.repos.d/ICINGA-release.repo << 'EOF'
[icinga-stable-release]
name=ICINGA (stable release for epel)
baseurl=http://packages.icinga.org/epel/$releasever/release/
enabled=1
gpgcheck=1
gpgkey=http://packages.icinga.org/icinga.key
EOF

步骤2:安装所需的包

安装所需软件包。


# CentOS 6
sudo yum -y install icinga2 mysql-server mysql icinga2-ido-mysql nagios-plugins-disk nagios-plugins-load nagios-plugins-procs nagios-plugins-ssh nagios-plugins-users nagios-plugins-swap nagios-plugins-ping icingacli

# CentOS 7
sudo yum -y install icinga2 mariadb-server mysql icinga2-ido-mysql nagios-plugins-disk nagios-plugins-load nagios-plugins-procs nagios-plugins-ssh nagios-plugins-users nagios-plugins-swap nagios-plugins-ping icingacli

Centos7使用Mariadb而不是MySQL,因此所需的软件包略有不同,启动服务,并将它们设置为开机时启动。


sudo chkconfig icinga2 on
sudo service icinga2 start

设置MySQL服务开机时启动,并启动它,以便我们可以保护它。


# CentOS 6
sudo chkconfig mysqld on
sudo service mysqld start

#CentOS 7
sudo systemctl enable mariadb.service
sudo systemctl start mariadb.service

mysql/MariaDB安装保护,Centos 6和7都使用相同的命令。


sudo mysql_secure_installation

在该过程中,按如下所示回答问题:


Enter current password for root (enter for none): Enter
Set root password? [Y/n]: Y
New password: $newRootPassword
Re-enter new password: $newRootPassword
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

请注意$newRootPassword,因为你需要提供几次,而且重置是很痛苦的。

步骤3:设置数据库

你需要创建icinga用户名,并将模式导入数据库。 在CentOS 6和7上都以同样方式完成。


sudo mysql -u root -p
>CREATE DATABASE icinga;
>GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE ON icinga.* TO 'icinga'@'localhost' IDENTIFIED BY '$someIcingaPassword'; 
>exit

接下来,将schema导入刚才创建的数据库中。


sudo mysql -u root -p icinga < /usr/share/icinga2-ido-mysql/schema/mysql.sql

你需要输入在上面的mysql_secure_installation命令中使用的$newRootPassword mysql/MariaDB密码,而不是刚刚创建的$someIcingaPassword

启用ido (数据库)模块。


sudo icinga2 feature enable ido-mysql

你将需要编辑 /etc/icinga2/features-enabled/ido-mysql.conf 添加数据库信息的文件,你可以使用以下命令执行这个操作。


sudo vi /etc/icinga2/features-enabled/ido-mysql.conf

在该文件中,找到注释掉的行(从//开始)。


//user ="icinga"
//password ="icinga"
//host ="localhost"
//database ="icinga"

...并使用你刚刚创建的用户/密码编辑它们。


user ="icinga"
password ="$someIcingaPassword"
host ="localhost"
database ="icinga"

请删除开头的双斜杠来取消注释行。

接下来,重新启动服务以获取更改。


sudo service icinga2 restart

你需要在客户端服务器和已配置的Icinga2主服务器之间添加连接。你需要在CentOS 7上使用Firewalld或者在CentOS 6或7上使用IPTables。


# CentOS 6
sudo vi /etc/sysconfig/iptables
...
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5665 -j ACCEPT
...
#Icinga2 Master
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport 5665 -j ACCEPT

sudo iptables restart

# CentOS 7 
sudo firewall-cmd --add-port=5665/tcp --permanent
sudo firewall-cmd --reload

现在,编辑主机文件,以便将主机作为本地域名添加。


sudo vi /etc/hosts
...
$masterIP icinga2master icinga2master.example.com

步骤4 :初始化主服务器

这一步需要在ICINGA2 主服务器上完成,你需要将它初始化为主服务器,然后生成客户端用于通信的证书签名请求。


sudo icinga2 node wizard

这将运行节点向导,它将询问几个问题。屏幕将如下所示,并列出给出的答案。


Welcome to the Icinga 2 Setup Wizard!

We'll guide you through all required configuration details.

Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: n
Starting the Master setup routine...
Please specify the common name (CN) [icinga2-master1.localdomain]: icinga2master.example.com
Checking for existing certificates for common name 'icinga2master.example.com'...
Certificates not yet generated. Running 'api setup' now.
information/cli: Generating new CA.
information/base: Writing private key to '/var/lib/icinga2/ca/ca.key'.
information/base: Writing X509 certificate to '/var/lib/icinga2/ca/ca.crt'.
information/cli: Generating new CSR in '/etc/icinga2/pki/icinga2master.example.com.csr'.
information/base: Writing private key to '/etc/icinga2/pki/icinga2master.example.com.key'.
information/base: Writing certificate signing request to '/etc/icinga2/pki/icinga2master.example.com.csr'.
information/cli: Signing CSR with CA and writing certificate to '/etc/icinga2/pki/icinga2master.example.com.crt'.
information/cli: Copying CA certificate to '/etc/icinga2/pki/ca.crt'.
Generating master configuration for Icinga 2.
information/cli: Adding new ApiUser 'root' in '/etc/icinga2/conf.d/api-users.conf'.
information/cli: Enabling the 'api' feature.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Dumping config items to file '/etc/icinga2/zones.conf'.
information/cli: Created backup file '/etc/icinga2/zones.conf.orig'.
Please specify the API bind host/port (optional):
Bind Host []: <hit enter>
Bind Port []: <hit enter>
information/cli: Created backup file '/etc/icinga2/features-available/api.conf.orig'.
information/cli: Updating constants.conf.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
Done.

Now restart your Icinga 2 daemon to finish the installation!

然后,重新启动Icinga2以获取更改。


sudo service icinga2 restart

现在它是一个主服务器,可以使用它生成证书签名请求字符串。


sudo icinga2 pki ticket --cn icinga2client.example.com

你会得到一些字符串$pkiString ,复制该字符串,因为你将在客户端上需要它。

步骤5:初始化客户端

运行节点向导以生成证书,并且连接到主服务器。


sudo icinga2 node wizard

它将出现类似于上面的页面,下面的页面显示了包含的答案。


Welcome to the Icinga 2 Setup Wizard!

We'll guide you through all required configuration details.



Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: Y
Starting the Node setup routine...
Please specify the common name (CN) [icinga2client.example.com]:
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): icinga2master.example.com
Do you want to establish a connection to the master from this node? [Y/n]: Y
Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN): icinga2master.example.com
Master endpoint port [5665]: 5665
Add more master endpoints? [y/N]: N
Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host [icinga2master.example.com]: icinga2master.example.com
Port [5665]: 5665
information/cli: Created backup file '/etc/icinga2/pki/icinga2client.example.com.key.orig'.
information/cli: Created backup file '/etc/icinga2/pki/icinga2client.example.com.crt.orig'.
information/base: Writing private key to '/etc/icinga2/pki/icinga2client.example.com.key'.
information/base: Writing X509 certificate to '/etc/icinga2/pki/icinga2client.example.com.crt'.
information/cli: Fetching public certificate from master (icinga2master.example.com, 5665):

Certificate information:

 Subject: CN = icinga2master.example.com
 Issuer: CN = Icinga CA
 Valid From: Jan 10 21:08:37 2017 GMT
 Valid Until: Jan 7 21:08:37 2032 GMT
 Fingerprint: FE 72 AB F3 18 A5 12 E0 0C 5D 94 8B 96 C4 57 3B 00 5C E0 04

Is this information correct? [y/N]: Y
information/cli: Received trusted master certificate.

Please specify the request ticket generated on your Icinga 2 master.
 (Hint: # icinga2 pki ticket --cn 'icinga2client.example.com'): $pkiString

information/cli: Requesting certificate with ticket '$pkiString'.

warning/cli: Backup file '/etc/icinga2/pki/icinga2client.example.com.crt.orig' already exists. Skipping backup.
information/cli: Writing signed certificate to file '/etc/icinga2/pki/icinga2client.example.com.crt'.
information/cli: Writing CA certificate to file '/etc/icinga2/pki/ca.crt'.
Please specify the API bind host/port (optional):
Bind Host []: <enter key>
Bind Port []: <enter key>
Accept config from master? [y/N]: Y
Accept commands from master? [y/N]: Y
information/cli: Disabling the Notification feature.
Disabling feature notification. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Enabling the Apilistener feature.
warning/cli: Feature 'api' already enabled.
information/cli: Created backup file '/etc/icinga2/features-available/api.conf.orig'.
information/cli: Generating local zones.conf.
information/cli: Dumping config items to file '/etc/icinga2/zones.conf'.
information/cli: Created backup file '/etc/icinga2/zones.conf.orig'.
information/cli: Updating constants.conf.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
Done.

Now restart your Icinga 2 daemon to finish the installation!

继续并重新启动Icinga2以获取更改。

 
sudo icinga2 restart

 

已经完成,但是,你需要确保启用API功能。


sudo icinga2 feature enable command
sudo icinga2 feature enable api

如果它们没有启用,它会说"feature enabled ",所以,你需要重新启动Icinga2守护进程。但是首先,你需要更改/etc/icinga2目录中文件的所有权,因为有些文件在运行节点向导后,有错误的权限,应该把他们的所有者和组设置为icinga ,通过使用以下命令更改权限:


sudo chown -R icinga:icinga /etc/icinga2/

现在你可以重新启动Icinga2守护进程。


sudo service icinga2 restart

步骤6:配置客户端

客户端配置需要编辑几个不同的文件。

  • /etc/icinga2/zones.conf :包含包含它们的端点的(服务器)和区域,这就是服务器的分区方式,确保客户端名称与服务器名称匹配,
  • /etc/icinga2/icinga2.conf :你从主服务器接受命令和配置,因此需要对这个文件进行一点编辑,以避免重复的命令定义,

首先,我们将修改zones.conf文件以定义服务器及它所在的区域,以及为所有服务器通用的命令定义创建"global"区域而不是每个(例如,磁盘检查)都是唯一。


sudo vi /etc/icinga2/zones.conf

object Zone clientZone { 
 endpoints = ["icinga2master.example.com" ]
}

object Zone"global-templates" { # Add global templates zone
 global = true
}

object Endpoint NodeName {
 host ="$icinga2clientIP" 
}

object Zone ZoneName {
 endpoints = [ NodeName ]
 parent = clientZone
} 

重要的是要知道,目前每个区域只能有2个节点,你可以创建任意多个区域,但是如果每个区域有两个上的节点ICINGA2服务可能无法正常工作,这不是客户端上的问题,除非你在区域clientZone中已经有2个节点,在这种情况下,你需要创建另一个区域名称。

现在,在/etc/icinga2/icinga2.conf文件中进行修改,你需要注释掉include_recursive"conf.d"行。


sudo vi /etc/icinga2/icinga2.conf
...
//include_recursive"conf.d"
...

验证配置以确保所有内容都正确格式化。


sudo icinga2 daemon -C

如果出现权限问题,可能是因为该项目属于root:root ,要解析的icinga:icinga到。


sudo chown -R icinga:icinga /etc/icinga2/

如果还有其他问题,通常是输出中可以得到信息,sudo icinga2 daemon -C 命令将可以跟踪它们。

如果验证成功,请继续重新加载服务:


sudo service icinga2 restart

你将需要给icinga用户sudo权限,以便可以运行命令,这些sudo权限将仅限于特定的插件目录。


sudo vi /etc/sudoers
...
Defaults:icinga !requiretty
icinga ALL=(ALL) NOPASSWD: /usr/lib64/nagios/plugins/

现在客户机配置已经正式完成,你不需要进行任何更改,任何检查都先在主服务器上配置,并将传播到客户端。

步骤7:将客户端添加到主配置

你将需要返回到主服务器以配置客户端以便可以连接它。需要采取以下几个步骤:

  1. 将主机配置添加到repository.d
  2. 将主机作为终结点添加到区域,
  3. 为客户端配置检查,

主服务器配置在/etc/icinga2/repository.d/hosts/icinga2client.example.com.conf 文件。


sudo vi /etc/icinga2/repository.d/hosts/icinga2client.example.com.conf
object Host"icinga2client.example.com" {
 import"satellite-host"
 address ="$icinga2clientIP"
 vars.os ="Linux"
}
sudo chown icinga:icinga /etc/icinga2/repository.d/hosts/icinga2client.example.com.conf

现在主机存在于客户端配置中,但是,需要将它放入区域。此区域会位于/etc/icinga2/repository.d/zones文件夹中,名称相同,让跟踪它更容易。


sudo vi /etc/icinga2/repository.d/zones/clientZone.conf
object Zone"clientZone" {
 endpoints = ["icinga2client.example.com" ]
 parent ="icinga2master.example.com"
}

接下来,你需要添加global-templates区域。


sudo vi /etc/icinga2/repository.d/zones/global-templates.conf
object Zone"global-templates" {
 global = true
}

最后,添加客户端端点,以便在"clientzone"端点数组运行时填充它。


sudo vi /etc/icinga2/repository.d/endpoints/icinga2client.example.com.conf

#Change values to match the host you're adding
object Endpoint"icinga2client.example.com" {
 host ="$icinga2clientIP"
}

要确保没有权限问题,请继续更改所有者/组。


sudo chown -R icinga:icinga /etc/icinga2

验证配置更改以确保没有其他问题。


sudo icinga2 daemon -C

如果验证成功,请继续重新加载。


sudo service icinga2 restart

如果你访问Icinga2网站,你将看到服务器可以访问。

步骤8: 自定义命令和检查

你可能会遇到关于"command not found"或"check not defined"的错误,你将需要复制/etc/icinga2/conf.d/文件中的配置并将它们放入 /etc/icinga2/zones.d/global-templates/ 例如,要创建"check_software"命令,你需要执行以下操作。


sudo mkdir /etc/icinga2/zones.d/global-templates
sudo vi /etc/icinga2/zones.d/global-templates/commands.conf
object CheckCommand"check_software" {
 import"plugin-check-command"
 command = ["/usr/bin/sudo", PluginDir +"/software_service_check.sh" ]
}

software_service_check.sh文件会需要存在于客户端的/usr/lib64/nagios/plugins文件夹中。

接下来,将服务检查添加到 /etc/icinga2/repository.d/hosts/services.conf 文件。


sudo vi /etc/icinga2/repository.d/hosts/services/services.conf
apply Service"Check Software Service" {
 import"mail-service"
 check_command ="check_software" # This check command is the same name as the one you defined in global-templates/commands.conf

 assign where host.vars.client_endpoint # This will apply to every client server. If you need it to be more restrictive, you should look into custom variables
}

你将需要再次更改权限。


sudo chown -R icinga:icinga /etc/icinga2

然后,验证配置。


sudo icinga2 daemon -C

最后,如果成功,请重新加载:


sudo service icinga2 restart

恭喜你,现在master/client模型中已经使用Icinga2,可以避免使用不安全的NRPE检查了!

Hrh profile image