如何使用Icinga在Ubuntu 16.04上监控主机和服务

介绍

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的主机。 将光标放在文件的底部,并添加一个新的主机:

/etc/icinga2/conf.d/hosts.conf
. . .
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

粘贴在存储库的详细信息:

/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

粘贴在下面,然后保存并关闭:

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

粘贴在以下配置中,然后保存并关闭文件:

网络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配置更新。 我们的教程系列配置管理入门概述了所涉及的概念和软件。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏