介绍
Icinga是一个开源监控系统,用于监控网络主机和服务的健康状况。 在本教程中,我们将使用Icinga来设置两种不同的监视配置。 第一个是基于对主机外部服务的简单网络检查,例如定期向您的网站发送HTTP请求。 另一个配置使用在主机上运行的软件代理来收集更详细的系统信息,如负载和正在运行的进程数。
先决条件
在开始本教程之前,您应该已经完成了本系列的上一个教程, 如何在Ubuntu 16.04上安装Icinga和Icinga Web 。 这将使您能够在单个主机上运行Icinga内核和Icinga Web界面,我们将其称为icinga-master节点。
您还需要一些服务器进行监控。 我们将使用安装了Apache的两台Ubuntu 16.04服务器作为我们的示例。 您可以使用上述LAMP教程的Apache部分来设置这些。
第1步 - 设置简单的主机监控
使用Icinga监控服务器的一种简单方法是定期检查其外部可用服务。 所以对于一个网络主机,我们会定期ping服务器的IP地址,并尝试访问一个网页。 这将告诉我们主机是否启动,以及Web服务器是否正常工作。
我们设置一个web服务器的监控。 选择其中一个提到的Apache服务器作为先决条件,并确保正确提供默认的Apache占位符页面。 我们会将此服务器web-1.example.com
。 我们完全不需要登录,所有的健康检查都将在主节点上进行配置和执行。
注意: Icinga总是默认使用其处理的任何主机的完全限定域名(FQDN)。 FQDN是一个主机名及其域名,例如web-1.example.com
。 如果您没有为主机设置适当的域,则FQDN将类似于web-1 .localdomain
。
这些都可以使用,只是一致,如果您没有“真正的”FQDN,在您配置的任何Icinga address
字段中始终使用服务器的IP地址。
登录到主节点。 要添加新的主机,我们需要编辑Icinga的hosts.conf
文件。 在文本编辑器中打开它:
sudo nano /etc/icinga2/conf.d/hosts.conf
这将打开一个文件,并提供一些解释性注释,并定义一个主机块 。 现有object Host NodeName
配置块定义了icinga-master主机,这是我们安装Icinga和Icinga Web的主机。 将光标放在文件的底部,并添加一个新的主机:
. . .
object Host "web-1.example.com" {
import "generic-host"
address = "web-1_server_ip"
vars.http_vhosts["http"] = {
http_uri = "/"
}
vars.notification["mail"] = {
groups = [ "icingaadmins" ]
}
}
这定义了名为web-1.example.com
主机,从名为generic-host
的模板导入一些默认的主机配置,将Icinga指向正确的IP地址,然后定义一些变量,指示Icinga检查HTTP响应根( /
)URL,并在出现问题时通过电子邮件通知icingaadmins
组。
保存并关闭文件,然后重新启动Icinga:
sudo systemctl restart icinga2
在浏览器中切换回Icinga Web界面。 界面更新本身相当快速,所以您不需要刷新页面。 新的主机信息应该按照简单的顺序填写,并且一旦Icinga收集足够的信息,健康状况检查将从“待机”改变为“ 确定” 。
这是监控主机外部服务的好方法,还有其他可用于SSH服务器,SMTP等的检查。 但是,了解有关我们正在监控的服务器的内部运行状况的更多细节,这也是很好的。
接下来,我们将通过Icinga代理设置监控,因此我们可以关注更详细的系统信息。
第2步 - 设置基于代理的监控
Icinga提供了一种在主节点和客户机节点之间进行安全通信的机制,以便运行更广泛的远程健康检查。 我们也可以监视CPU负载,进程数,磁盘空间等,而不是只知道我们的Web服务器是成功的服务页面。
我们要设置第二台服务器进行监控。 我们称它为web-2.example.com
。 我们需要在远程机器上安装Icinga软件,运行一些安装向导进行连接,然后更新Icinga主节点上的一些配置文件。
注意:建立Icinga安装的方式有很多,可以配置多层主 / 卫星 / 客户机节点,高可用性故障切换以及多种方式在节点之间共享配置细节。 我们正在建立一个简单的双层结构,一个主节点和多个客户端节点。 此外,所有配置将在主节点上完成,我们的健康检查命令将在主节点上调度并推送到客户端。 Icinga项目调用此设置自顶向下命令端点模式。
设置主节点
首先,我们需要设置主节点来进行客户端连接。 我们通过在主节点上运行节点设置向导来执行此操作:
sudo icinga2 node wizard
这将启动一个脚本,要求我们几个问题,并为我们设置了一些事情。 在下文中,我们ENTER
接受大多数默认值。 非默认答案突出显示。 为了清楚起见,删除了一些信息输出:
OutputPlease 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) [icinga-master.example.com]: ENTER to accept the default, or type your FQDN
Checking for existing certificates for common name 'icinga-master.example.com'...
Certificates not yet generated. Running 'api setup' now.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
Please specify the API bind host/port (optional): ENTER
Bind Host []: ENTER
Bind Port []: ENTER
Done.
Now restart your Icinga 2 daemon to finish the installation!
重新启动Icinga以完成更新配置:
sudo systemctl restart icinga2
打开防火墙端口以允许外部连接到Icinga:
sudo ufw allow 5665
现在我们将切换到客户端节点,安装Icinga并运行相同的向导。
设置客户端节点
登录到我们称之为web-2.example.com的服务器。 我们需要重新安装Icinga存储库,然后安装Icinga本身。 这是我们在主节点上使用的相同的过程。 首先安装密钥:
curl -sSL https://packages.icinga.com/icinga.key | sudo apt-key add -
打开icinga.list
文件:
sudo nano /etc/apt/sources.list.d/icinga.list
粘贴在存储库的详细信息:
deb https://packages.icinga.com/ubuntu icinga-xenial main
保存并关闭文件,然后更新程序包缓存:
sudo apt-get update
然后,安装icinga2
。 请注意, 我们不需要在主节点上安装的icinga2-ido-mysql
包:
sudo apt-get install icinga2
现在我们运行这个服务器上的节点向导,但是我们做一个卫星配置而不是主机 :
sudo icinga2 node wizard
OutputPlease 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) [web-2.example.com]: ENTER
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): icinga-master.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): icinga-master_server_ip
Master endpoint port [5665]: ENTER
Add more master endpoints? [y/N]: ENTER
Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host [icinga-master_server_ip]: ENTER
Port [5665]: ENTER
该向导现在将从主节点获取公共证书,并向我们显示其详细信息。 确认信息,然后继续:
Output. . .
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 'web-2.example.com'):
此时,切换回master
服务器并运行该向导提示您的命令。 别忘了在它前面的sudo
:
sudo icinga2 pki ticket --cn 'web-2.example.com'
命令将输出一个键。 将其复制到剪贴板,然后切换回客户端节点,将其粘贴ENTER
继续向导。
Output. . .
information/cli: Requesting certificate with ticket '5f53864a504a1c42ad69faa930bffa3a12600546'.
Please specify the API bind host/port (optional):
Bind Host []: ENTER
Bind Port []: ENTER
Accept config from master? [y/N]: n
Accept commands from master? [y/N]: y
Done.
Now restart your Icinga 2 daemon to finish the installation!
现在打开防火墙上的Icinga端口:
sudo ufw allow 5665
并重新启动Icinga以完全更新配置:
sudo systemctl restart icinga2
您可以使用netstat
验证两台服务器之间是否存在连接:
netstat | grep :5665
连接可能需要一些时间。 最终netstat
将输出一条在正确端口上显示ESTABLISHED
连接的行。
Outputtcp 0 0 web-2_server_ip:58188 icinga-master_server_ip:5665 ESTABLISHED
这表明我们的服务器已连接,我们已准备好配置客户端检查。
配置代理监控
即使主服务器和客户端现在已连接,仍然有一些设置可以在主服务器上进行监控。 我们需要设置一个新的主机文件。 切换回主节点。
Icinga安装中的一个重要组织是一个区域的概念。 所有客户端节点都必须创建自己的区域,并报告给父区域,在本例中为主节点。 默认情况下,我们的主节点的区域以其FQDN命名。 我们将在Icinga的zones.d
目录中创建一个以我们的主区域命名的目录。 这将保存所有主区客户的信息。
创建区域目录:
sudo mkdir /etc/icinga2/zones.d/icinga-master.example.com
我们要创建一个服务配置文件。 这将定义我们将在任何远程客户端节点上执行的一些服务检查。 立即打开文件:
sudo nano /etc/icinga2/zones.d/icinga-master.example.com/services.conf
粘贴在下面,然后保存并关闭:
apply Service "load" {
import "generic-service"
check_command = "load"
command_endpoint = host.vars.client_endpoint
assign where host.vars.client_endpoint
}
apply Service "procs" {
import "generic-service"
check_command = "procs"
command_endpoint = host.vars.client_endpoint
assign where host.vars.client_endpoint
}
这定义了两个服务检查。 第一个将报告CPU负载,第二个将检查服务器上的进程数。 每个服务定义的最后两行很重要。 command_endpoint
告诉Icinga该服务检查需要发送到远程命令端点。 线路自动将服务检查分配给定义了client_endpoint
变量的任何主机。
现在我们来创建一个这样的主机。 在我们以前创建的区域目录中打开一个新文件。 这里我们在远程主机之后命名了该文件:
sudo nano /etc/icinga2/zones.d/icinga-master.example.com/web-2.example.com<^>.conf
粘贴在以下配置中,然后保存并关闭文件:
object Zone "web-2.example.com" {
endpoints = [ "web-2.example.com" ]
parent = "icinga-master.example.com"
}
object Endpoint "web-2.example.com" {
host = "web-2_server_ip"
}
object Host "web-2.example.com" {
import "generic-host"
address = "web-2_server_ip"
vars.http_vhosts["http"] = {
http_uri = "/"
}
vars.notification["mail"] = {
groups = [ "icingaadmins" ]
}
vars.client_endpoint = name
}
此文件为我们的远程主机定义了一个区域,并将其绑定到父区域。 它还将主机定义为端点,然后定义主机本身,从generic-host
模板导入一些默认规则。 它还设置一些var来创建HTTP检查并启用电子邮件通知。 请注意,由于此主机已定义了vars.client_endpoint = name
,因此也将分配我们刚刚在services.conf
定义的服务检查。
重新启动Icinga来更新配置:
sudo systemctl restart icinga2
切换回Icinga Web界面,新主机将显示“ Pending”(检查)。 过了一会儿,那些检查应该会转好了 。 这意味着我们的客户端节点成功运行主节点的检查。
结论
在本教程中,我们使用Icinga,外部服务检查和基于代理的主机检查来设置两种不同类型的监视。 要了解如何配置和使用Icinga,您可能希望深入了解Icinga的大量文档 。
请注意,如果您到达需要自定义检查命令的点,则需要使用全局配置区将这些从主服务器同步到客户端节点。 您可以在这里找到关于这个特定功能的更多信息。
最后,如果要监视大量的服务器,可以查看使用配置管理软件来自动执行Icinga配置更新。 我们的教程系列配置管理入门概述了所涉及的概念和软件。