使用 Ansible 安装 Nagios,主机变量
install Nagios with Ansible, host variables
我正在学习 Ansible,我想安装带有多个受监控节点的 Nagios 服务器。我遵循的 Nagios 安装步骤是 from this tutorial on Digitalocean.
本教程的第 5 步让我感到困惑,因为这是我第一次使用 Ansible。这一步涉及到主服务器上监控节点的配置文件,我使用这样的模板实现的
- name: Configure Nagios server
hosts: master
sudo: true
vars:
nagios_slaves_config_dir: /etc/nagios/servers
nagios_config_file: /etc/nagios/nagios.cfg
tasks:
# shortened for brevity
- name: copy slaves config
template: src=../templates/guest.cfg.j2 dest=/etc/nagios/servers/{{ item }}.cfg owner=root mode=0644
with_items: groups['slaves']
模板看起来像这样
define host {
use linux-server
host_name {{ inventory_hostname }}
alias {{ inventory_hostname }}
address {{ hostvars['slave'].ansible_eth1.ipv4.address }}
}
define service {
use generic-service
host_name {{ inventory_hostname }}
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
此配置文件已创建,但 {{ inventory_hostname }}
变量错误 - 而不是 node_1
它声明 master
我如何为每个受监控的节点模板化配置文件,以便使用正确的值创建它?
:编辑:
一个想法是在监控节点上生成配置文件并将它们复制到主节点。明天试试。
从您的解释中不清楚您希望 Ansible 从何处获取 node_1
值。如果这不是主机名,信息存储在哪里?如果它存储在变量中,您可以那样访问它,但从它的外观来看,您正在以一种向后的方式使用您的库存。您不应该使用系统的内部实现细节作为清单名称。您甚至如何能够通过 /etc/hosts
中的条目连接到 master
?
我可以创建一个变量来跟踪和指定主机是主机还是从机,而不是将主机名定义为 master
,例如,使用 cluster_type: master
或 cluster_type: slave
。这些变量可以用作主机变量或组变量(如果您有多个从属变量,这可能是您想要的)。清单中的主机名最好是您可以实际连接和引用的名称。
您的游戏专门针对您的 master
服务器:
- name: Configure Nagios server
hosts: master
...
因此该任务将仅针对此节点(或名为 master
的清单组中的多个节点)运行。
然后您似乎对如何从您希望监视的其他服务器获取变量(在您的案例中 slaves
清单组中的所有内容)感到困惑。
inventory_hostname
将完成它在罐子上所说的几乎所有内容 - 它将为您提供任务 运行 所针对的服务器的主机名。在这种情况下,这只会是 master
.
然而,你在这条线的正确轨道上:
address {{ hostvars['slave'].ansible_eth1.ipv4.address }}
但您应该改为使用在任务循环中传递给模板的 item
(您使用 with_items: groups['slaves']
循环遍历 slaves
中的所有主机)。
所以您的模板看起来像:
define host {
use linux-server
host_name {{ hostvars[item].ansible_hostname }}
alias {{ hostvars[item].ansible_hostname }}
address {{ hostvars[item].ansible_eth0.ipv4.address }}
}
define service {
use generic-service
host_name {{ hostvars[item].ansible_hostname }}
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
这将在主服务器上生成一个 Nagios 配置文件,其名称与 slaves
组下的清单文件中的条目相同(这可以是任何东西,但默认情况下是 IP 地址,短的或完整的slaves
组中每台服务器的合格域名),其中包含模板化的预期值。
或者您可能需要重新考虑您的整个策略,以便 运行针对受监视节点执行任务会在 Nagios 服务器上创建配置文件,从而允许您注册要使用中央 Nagios 服务器监视的服务器。
我正在学习 Ansible,我想安装带有多个受监控节点的 Nagios 服务器。我遵循的 Nagios 安装步骤是 from this tutorial on Digitalocean.
本教程的第 5 步让我感到困惑,因为这是我第一次使用 Ansible。这一步涉及到主服务器上监控节点的配置文件,我使用这样的模板实现的
- name: Configure Nagios server
hosts: master
sudo: true
vars:
nagios_slaves_config_dir: /etc/nagios/servers
nagios_config_file: /etc/nagios/nagios.cfg
tasks:
# shortened for brevity
- name: copy slaves config
template: src=../templates/guest.cfg.j2 dest=/etc/nagios/servers/{{ item }}.cfg owner=root mode=0644
with_items: groups['slaves']
模板看起来像这样
define host {
use linux-server
host_name {{ inventory_hostname }}
alias {{ inventory_hostname }}
address {{ hostvars['slave'].ansible_eth1.ipv4.address }}
}
define service {
use generic-service
host_name {{ inventory_hostname }}
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
此配置文件已创建,但 {{ inventory_hostname }}
变量错误 - 而不是 node_1
它声明 master
我如何为每个受监控的节点模板化配置文件,以便使用正确的值创建它?
:编辑:
一个想法是在监控节点上生成配置文件并将它们复制到主节点。明天试试。
从您的解释中不清楚您希望 Ansible 从何处获取 node_1
值。如果这不是主机名,信息存储在哪里?如果它存储在变量中,您可以那样访问它,但从它的外观来看,您正在以一种向后的方式使用您的库存。您不应该使用系统的内部实现细节作为清单名称。您甚至如何能够通过 /etc/hosts
中的条目连接到 master
?
我可以创建一个变量来跟踪和指定主机是主机还是从机,而不是将主机名定义为 master
,例如,使用 cluster_type: master
或 cluster_type: slave
。这些变量可以用作主机变量或组变量(如果您有多个从属变量,这可能是您想要的)。清单中的主机名最好是您可以实际连接和引用的名称。
您的游戏专门针对您的 master
服务器:
- name: Configure Nagios server
hosts: master
...
因此该任务将仅针对此节点(或名为 master
的清单组中的多个节点)运行。
然后您似乎对如何从您希望监视的其他服务器获取变量(在您的案例中 slaves
清单组中的所有内容)感到困惑。
inventory_hostname
将完成它在罐子上所说的几乎所有内容 - 它将为您提供任务 运行 所针对的服务器的主机名。在这种情况下,这只会是 master
.
然而,你在这条线的正确轨道上:
address {{ hostvars['slave'].ansible_eth1.ipv4.address }}
但您应该改为使用在任务循环中传递给模板的 item
(您使用 with_items: groups['slaves']
循环遍历 slaves
中的所有主机)。
所以您的模板看起来像:
define host {
use linux-server
host_name {{ hostvars[item].ansible_hostname }}
alias {{ hostvars[item].ansible_hostname }}
address {{ hostvars[item].ansible_eth0.ipv4.address }}
}
define service {
use generic-service
host_name {{ hostvars[item].ansible_hostname }}
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
这将在主服务器上生成一个 Nagios 配置文件,其名称与 slaves
组下的清单文件中的条目相同(这可以是任何东西,但默认情况下是 IP 地址,短的或完整的slaves
组中每台服务器的合格域名),其中包含模板化的预期值。
或者您可能需要重新考虑您的整个策略,以便 运行针对受监视节点执行任务会在 Nagios 服务器上创建配置文件,从而允许您注册要使用中央 Nagios 服务器监视的服务器。