使用Ansible进行New Relic Infrastructure代理配置管理
首先
这次是关于使用Ansible安装New Relic Infrastructure代理的故事。
背景
在不久前,我们在公司举办了一场关于New Relic的研讨会(实践培训)。为了准备这次活动,我们需要准备20至30人的服务器环境。在制定研讨会的场景时,虽然有一些基本要求和目标,但我们会不断吸收好的想法,因此是一个流动的过程。在经常进行废弃和重建的过程中,渐渐地我们会思考将简单的手工操作自动化。这时就轮到Ansible登场了。
Ansible 的应用场景
在这种情况下,它对我非常有帮助。具体的步骤将在后面提到。
-
- EC2インスタンスに New Relic Infrastructure エージェントをインストールする
- New Relic Infrastructure の設定ファイルの値を臨機応変に書き換える
在我看来,当需要进行一些小的改动,比如“紧急更改许可证密钥”时,Ansible非常方便易用。每次重新构建AMI有点太过夸张了。虽然可以使用CodeDeploy来使用AWS执行环境,但考虑到需要理解其使用方式所需的时间,手动安装可能更快,这是无可争议的原因,所以这次我们放弃了此选项。我会在GW上慢慢考虑这个问题。
步骤
简述
使用Ansible自动化新的Relic基础结构代理的手动安装步骤。
安装 Ansible
# yum install ansible
# ansible --version
ansible 2.3.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
#
主机文件的设置
# vi /etc/ansible/hosts
XX.XX.XX.XX 是 EC2 的IP地址(公有或弹性)。
[infrastructure]
XX.XX.XX.XX ansible_ssh_user=ec2-user ansible_ssh_private_key_file=[EC2の鍵のパス]
确认疏通
# ansible all -m ping
XX.XX.XX.XX | SUCCESS => {
"changed": false,
"ping": "pong"
}
#
如果出现 “Unreachable!” 的提示,首先要确认EC2是否能够联通,如果没有问题,可以尝试怀疑hosts的描述是否正确(例如EC2密钥的路径、权限等)。
对Ansible的可用性进行测试
如果进展顺利,就能够使用Ansible。
# ansible infrastructure -a "/bin/date"
13.112.244.194 | SUCCESS | rc=0 >>
Tue Apr 25 02:43:21 UTC 2017
#
剧本 (jù
New Relic 提供了示例。(参考:这里 和 Github)
但是,这次我自己制作了。由于我对Ansible的熟练程度仅仅是今天第一次接触,所以没有时间来掌握使用方法,这是一个无法抵赖的情况。关于详细的使用方法,将成为以后的课题。
游戏册(infra_agent_install.yml)
# cat infra_agent_install.yml
---
- hosts: infrastructure
sudo: yes
tasks:
- name: install config file
template: src=newrelic-infra.yml dest=/etc/newrelic-infra.yml
- name: repo update
command: curl -o /etc/yum.repos.d/newrelic-infra.repo https://download.newrelic.com/infrastructure_agent/linux/yum/el/6/x86_64/newrelic-infra.repo
- name: repo
command: yum -q makecache -y --disablerepo='*' --enablerepo='newrelic-infra'
- name: install
command: yum install newrelic-infra -y
#
設定檔案(newrelic-infra.yml)
当设置文件(newrelic-infra.yml)只包含许可证密钥。如果许可证密钥发生变化,需要修改设置文件并重新执行。
# cat newrelic-infra.yml
license_key: <ライセンスキーを記載>
#
确认动作并执行
在执行之前,请确保Playbook没有任何问题。
# ansible-playbook -i hosts infra_agent_install.yml --syntax-check
执行
# ansible-playbook -i hosts infra_agent_install.yml
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and mak
This feature will be removed in
a future release. Deprecation warnings can be disabled by setting deprecation_wa
PLAY [infrastructure] **********************************************************
TASK [Gathering Facts] *********************************************************
ok: [XX.XX.XX.XX]
TASK [install config file] *****************************************************
changed: [XX.XX.XX.XX]
TASK [repo update] *************************************************************
[WARNING]: Consider using get_url or uri module rather than running curl
changed: [XX.XX.XX.XX]
TASK [repo] ********************************************************************
[WARNING]: Consider using yum module rather than running yum
changed: [XX.XX.XX.XX]
TASK [install] *****************************************************************
changed: [XX.XX.XX.XX]
PLAY RECAP *********************************************************************
XX.XX.XX.XX : ok=5 changed=4 unreachable=0 failed=0
#
EC2实例已成功安装了New Relic Infrastructure代理。虽然过程中可能会有一些强制性操作,但目标已经达到。当需要更改授权密钥时,只需修改配置文件(newrelic-infra.yml),然后重新运行ansible-playbook命令即可。
可能会上瘾的地方
重新创建 EC2 实例之后,常常会遇到身份验证错误的情况。请执行 “ssh-keygen -R” 命令。
以上