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

介绍

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》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏肖洒的博客

GitHub Pages自定义域名

最早用GitHub Pages做个人博客,初始的二级域名就是https://x-nicolo.github.io/,之后用了一个免费顶级域名,在Freenom ...

46550
来自专栏信安之路

利用 nslookup 解析 DNS 记录

nslookup 是一个域名解析工具,在进行一些网页无法打开的问题上,能帮助我们进行更全面理解问题的所在!

35000
来自专栏耕耘实录

Linux(RHEL7及CentOS7)下DNS服务器的搭建与配置

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

50640
来自专栏张善友的专栏

Windows 下的安装phpMoAdmin

Windows7 下安装PHP非常容易,推荐使用WPI,通过框架和运行时选择PHP5.2安装: ? mongoDB 是以 PHP 扩展库 .dll 的形式与 P...

24570
来自专栏流柯技术学院

CAS客户端服务器端配置步骤

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一...

68020
来自专栏JetpropelledSnake

SNMP学习笔记之Linux下安装和配置SNMP

  选择一个SNMP版本,比如5.7.1,下载地址如下:http://sourceforge.net/projects/net-snmp/files/net-s...

29430
来自专栏北京马哥教育

HTTP 协议漫谈

简介 网络上已经有不少介绍 HTTP 的好文章,对HTTP的一些细节介绍的比较好,所以本篇文章不会对 HTTP 的细节进行深究,而是从够高和更结构化的角度将 H...

314110
来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第27章 DNS域名系统基础知识

本章节为大家讲解DNS(Domain Name System,域名系统),通过前面章节对TCP和UDP的学习,需要大家对DNS也有个基础的认识。

21030
来自专栏Java工程师日常干货

对缓存击穿的一点思考前言什么是缓存击穿?避免缓存击穿的思路分析代码抽象

缓存(内存 or Memcached or Redis.....)在互联网项目中广泛应用,本篇博客将讨论下缓存击穿这一个话题,涵盖缓存击穿的现象、解决的思路、以...

24220
来自专栏pangguoming

ant安装、环境变量配置及验证

一、安装ant 到官方主页http://ant.apache.org下载新版(目前为Ant1.8.1)的ant,得到的是一个apache-ant-1.8.1-...

40870

扫码关注云+社区

领取腾讯云代金券