Icinga是一个开源监控系统,用于监控网络主机和服务的运行状况。在本教程中,我们将使用Icinga设置两种不同类型的监视配置。第一种是基于对主机外部服务的简单网络检查,例如向您的网站发出定期HTTP请求。另一种配置使用在主机上运行的软件代理来收集更详细的系统信息,例如负载和正在运行的进程数。
您需要一些服务器来监控。我们将使用两个安装了Apache的Ubuntu 16.04服务器作为示例。开始教程之前需要先装Icinga,详情请参考腾讯云+社区相应的安装教程。
使用Icinga监视服务器的一种简单方法是设置对其外部可用服务的定期检查。因此,对于Web主机,我们会定期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收集到足够的信息,健康检查将从Pending变为Ok。
这是监视主机上的外部服务的好方法,还有其他可用于SSH服务器,SMTP等的检查。但是,了解有关我们正在监控的服务器内部运行状况的更多详细信息也是很不错的。
接下来,我们将通过Icinga代理设置监控,因此我们可以关注更详细的系统信息。
Icinga提供了一种在主节点和客户机节点之间进行安全通信的机制,以便运行更广泛的远程运行状况检查。我们还可以监控CPU负载,进程数,磁盘空间等,而不是仅仅知道的Web服务器成功提供页面。
我们将设置第二台服务器进行监控。我们称之为web-2.example.com
。我们需要在远程计算机上安装Icinga软件,运行一些安装向导来建立连接,然后更新Icinga主节点上的一些配置文件。
注意:有许多方法可以构建Icinga安装,包括主节点 ,卫星节点,及用客户端节点的多层结构,高可用性故障转移以及在节点之间共享配置详细信息的多种方法。我们正在建立一个简单的两层结构,其中包含一个主节点和多个客户端节点。此外,所有配置都将在主节点上完成,我们的运行状况检查命令将在主节点上进行调度并推送到客户端。Icinga项目调用此设置自上而下命令端点模式。
首先,我们需要设置主节点以建立客户端连接。我们通过在主节点上运行节点设置向导来实现:
$ sudo icinga2 node wizard
这将启动一个脚本,询问我们几个问题,并为我们设置一些东西。在下面,我们点击ENTER接受大多数默认值。为清楚起见,在此删除了一些输出信息:
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) [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
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) [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
该向导现在将从我们的主节点获取公共证书并向我们显示其详细信息。确认信息,然后继续:
. . .
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
以继续向导。
. . .
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
连接。
tcp 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需要将此服务检查发送到远程命令端点。该assign where
行自动将服务检查分配给任何以client_endpoint
定义变量的主机。
我们现在创建这样一个主机。在我们之前创建的区域目录中打开一个新文件。这里我们在远程主机之后命名了文件:
$ sudo nano /etc/icinga2/zones.d/icinga-master.example.com/web-2.example.com<^>.conf
粘贴以下配置,然后保存并关闭文件:
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
模板导入一些默认规则。它还设置了一些使用vars
命令来创建HTTP检查并启用电子邮件通知。请注意,由于此主机已定义vars.client_endpoint = name
,因此还将为其分配我们刚刚在services.conf
中定义的服务检查。
重启Icinga以更新配置:
$ sudo systemctl restart icinga2
切换回Icinga Web界面,新主机将显示检查待处理。稍等片刻,那些检查应该转为ok。这意味着我们的客户端节点成功运行了对主节点的检查。
在本教程中,我们使用Icinga,外部服务检查和基于代理的主机检查设置了两种不同类型的监视。
请注意,如果到达需要自定义检查命令的位置,则需要使用全局配置区域将这些命令从主节点同步到客户端节点。
最后,如果要监视大量服务器,可以考虑使用配置管理软件自动执行Icinga配置更新。
参考文献:《How To Monitor Hosts and Services with Icinga on Ubuntu 16.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有