用Ansible部署ELK STACK

本文获得了原作者的授权,转载本文需要注明来自EAWORLD公众号。



作者:Daniel Berman 

译者:张斌


想要重复部署你的ELK STACK更方便一点?在这篇帖子中,我们来看看如何通过使用Ansible来实现这一点。


通常,安装ELK很容易。 


但是,为了开发与测试的目的,你可能会发现自己重复安装了堆栈这一套东西。虽然安装过程够简单,且不超过5分钟,但使用一个单行解决方案来安装和配置各组件会更好。


这就是Ansible可派上用场的地方。


Ansible可以使你自动创建、配置和管理机器。你无需再手动更新服务器、进行配置、移动文件等,而是可以使用Ansible通过一台控制机器为一组服务器自动实施这样的操作。


本文介绍如何使用Ansible 剧本在远程服务器上设置ELK(5.x版本)进行开发。它将带你完成安装Ansible的步骤,连接到目标服务器,执行该剧本,并建立初始的日志流水线。


让我们开始吧!


1.安装Ansible


如果你已经安装了Ansible,那么很好。如果没有安装,这里有几个简短提示,帮你在计划用于访问服务器的计算机上进行安装。你需要在此计算机上安装Python 2.x。


以我为例,我在Mac OS X上安装了Ansible:


  
  
  
  
  1. sudo easy_install pipbook

  2. sudo pip install ansible

对于其他操作系统,请查看Ansible的在线文档。


2.连接到你的服务器


接下来,我们将确保可以连接目标VM,我们要在以AWS上运行的Ubuntu 16.04实例上安装ELK,以本教程为例。


首先,你需要编辑Ansible主机文件(/etc/ansible/hosts)。在这个文件中,你通常会列出你希望使用Ansible来管理的服务器与主机组。我将定义一个服务器组,并列出其服务器IP与用户名:


  
  
  
  
  1. [elkservers]

  2. 52.90.104.179 ansible_user=ubuntu

Ansible使用多种默认设置运行。要覆盖这些设置,你可以编辑/etc/ansible/ansible.cfg文件。


我将使用此选项进入我计划用来访问远程服务器的.pem文件位置:


  
  
  
  
  1. [defaults]

  2. private_key_file=/path/to/keyfile.pem

一切都设置好了。要测试连接,请使用以下命令ping服务器。


  
  
  
  
  1. ansible elkservers -m ping

你应该看到以下结果:


  
  
  
  
  1. {

  2. "changed": false,

  3. "ping": "pong"

  4. }

提示:默认情况下,Ansible使用Python 2解释器。意思是说,如果目标VM正运行Python 3及以上版本,则你需要在命令中添加‘-e ‘ansible_python_interpreter=/usr/bin/python3’。


2.执行ELK剧本


由于我们已经使用Ansible建立了与服务器的连接,因此我们可以使用Ansible ELK Playbook(https://github.com/DanielBerman/ansible-elk-playbook)来进行部署。

3.剧本概述


该剧本遵循经典的Ansible剧本结构:


site.yml定义了我们要连接的服务器、sudo权限假设和我们希望执行的角色。将各类事项列在这里,Ansible将通过此文件中设置的顺序来执行角色。


目前该剧本的配置是搭建ELK STACK和Metricbeat,以便进行服务器监控。要使用Filebeat替代日志文件,只需切换此文件中的角色。


Java角色在目标服务器上安装Java 8。


Elasticsearch角色则搭建Elasticsearch apt repo、安装Elasticsearch,并将一些配置应用于'elasticsearch.yml'文件。如果要更改安装的ELK版本,请在Elasticsearch repo任务中编辑repo URL。


这里要注意的是,为了简单起见,这个文件中的'network.host'指令设置为'0.0.0.0'以进行远程访问。如果你打算在生产中执行此剧本,请勿使用此设置,而应该绑定到本地主机(localhost)。


Kibana角色用来安装与配置Kibana。同样的,“server.host”设置为“0.0.0.0”,你需要将其设置为不同的IP。


Filebeat和Metricbeat角色使用其默认设置安装并启动这些日志收集器(shipper)。在Metricbeat的情况下,这足以开始监控你的服务器。在Filebeat的情况下,你最有可能希望为角色添加一些可执行任务来定义要用日志记录的文件。


4.我们执行吧


在Ansible主机上,下载并访问该剧本:


  
  
  
  
  1. git clone https://github.com/DanielBerman/ansible-elk-playbook.git

  2. cd ansible-elk-playbook

使用此命令执行该剧本:


  
  
  
  
  1. sudo ansible-playbook site.yml

Ansibler创建了与目标主机的连接,并开始执行各种角色与任务。



整个执行的输出应该看起来像这样(“失败”进程的上限应为0):


  
  
  
  
  1. PLAY RECAP ****************************************************************

  2. 52.90.104.179 : ok=18 changed=17 unreachable=0 failed=0


5.从日志流水线开始


如果一切都按预期工作,你所需要做的就是使用以下URL访问Kibana(替换为你安装ELK的服务器IP):


  
  
  
  
  1. http://:5601

打开Kibana页面后,你仍然需要定义索引模式。



在本例中我们安装Metricbeat进行服务器性能监控,输入'metricbeat- *'作为索引模式,并选择@timestamp字段作为时间过滤字段名称:



点击创建按钮,将看到Kibana的“Discover”选项卡显示的数据:



我使用这本剧本来跟进和使用Elasticsearch、Logstash、Kibana和各种Beats中的最新功能。使用Ansible有一定的约束(比如YAML语法)和学习曲线,但什么技术没有呢?除了安装Ansible的命令,你只需使用2-3个命令就能安装并使其运行。


请记住,这个剧本的只是一个基本的ELK部署,也只适用于某些开发环境。为了使其适合生产,对角色的修改最有可能包括添加Logstash角色来处理日志、添加用于代理Kibana的nginx角色,并稍稍修改Elasticsearch和Kibana配置文件以确保安全性。


我会尽快使用Ansible模板添加一些支持,帮助大家使用Filebeat把日志输送到Logz.io上。


欢迎反馈和PR!


Logz.io是一个基于开源ELK STACK的支持AI的日志分析平台,可用于监控应用程序和云基础设施。今天就开始免费试用它或者要求免费演示吧!


原文链接:https://logz.io/blog/elk-stack-ansible/


关于作者

丹尼尔·伯曼(Daniel Berman)是Logz.io的产品传播者。他热衷于日志分析、大数据、云计算、家庭,爱好跑步、利物浦足球俱乐部,以及写写关于颠覆性高科技东西的文章。在推特上@proudboffin关注他。


关于EAWorld

微服务,DevOps,元数据,企业架构原创技术分享EAii(Enterprise Architecture Innovation Institute)企业架构创新研究院旗下官方微信公众号。


微信号:eaworld,长按二维码关注

8月-9月,PWorld系列技术趴还将继续上演。目前,9月24日将在上海举行PWorld MeetUP“微服务的编排、配置与12要素专场”已启动报名,戳“阅读原文”可直达报名页面,并了解更多详情~

PWorld软件架构&平台创新大会:由普元发起主办的全国顶级技术盛会,探讨“数字化时代的企业软件变化与创新”推进中国企业在数字化时代的成功转型,积极为CTO、CIO、架构师、技术经理、开发工程师等技术相关人员设计各项议题,演讲嘉宾从企业软件、人工智能、区块链、云计算、大数据、业务流程、移动开发等热门话题中,分享他们的技术见解和最佳实践。同时,PWorld在企业级技术会议里独开“交互式体验”先河、赋予参会者最大程度尊重,带给现场以及线上的听众以全新的参会体验。


阅读原文:http://mp.weixin.qq.com/s?timestamp=1504603454&src=3&ver=1&signature=OtHbNzOh6VuPwsT6trxMdEYLhPeX2868txBxiWYJqfUzdNAJF1p2vItVuOI9l6NZ7szl3w6xiqlsNDqw2HGpMLHqUD41sATcuzOiDrKf*7bfRlXZnrC*kmydBF4CLNXuaC08s0t3mFDjfwR*gL3DQXJeUrJ3LPHu31xUgePPqQU=&devicetype=Windows-QQBrowser&version=61030004&pass_ticket=qMx7ntinAtmqhVn+C23mCuwc9ZRyUp20kIusGgbFLi0=&uin=MTc1MDA1NjU1&ascene=1

你可能感兴趣的:(用Ansible部署ELK STACK)