ansible一键部署elk

一、ELK介绍

1.1 ElasticSearch

ElasticSearch 是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

1.2 Logstash

Logstash 是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。 

1.3 Kibana

Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

 1.4 filebeat

Filebeat是本地文件的日志数据采集器,可监控日志目录或特定日志文件(tail file),并将它们转发给Elasticsearch或Logstatsh进行索引、kafka等。带有内部模块(auditd,Apache,Nginx,System和MySQL),可通过一个指定命令来简化通用日志格式的收集,解析和可视化。
工作原理:

Filebeat涉及两个组件:查找器prospector和采集器harvester,来读取文件(tail file)并将事件数据发送到指定的输出。

启动Filebeat时,它会启动一个或多个查找器,查看你为日志文件指定的本地路径。对于prospector所在的每个日志文件,prospector启动harvester。每个harvester都会为新内容读取单个日志文件,并将新日志数据发送到libbeat,后者将聚合事件并将聚合数据发送到你为Filebeat配置的输出。

1.5 zookeeper

zookeeper它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

简单来说zookeeper=文件系统+监听通知机制。

1.6 kafka

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景

特点:

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

  • 可扩展性:kafka集群支持热扩展

  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

  • 高并发:支持数千个客户端同时读写

ELK分布式日志收集原理

1、每台服务器集群节点安装Logstash日志收集系统插件

2、每台服务器节点将日志输入到Logstash中

3、Logstash将该日志格式化为json格式,根据每天创建不同的索引,输出到ElasticSearch中

4、浏览器使用安装Kibana查询日志信息

 

二、ansible安装elk

2.1 环境介绍(安装es,logstash,kibana版本为7.1.1,7以上都可以,jdk为1.8

官方地址:https://www.elastic.co

服务 ip
elasticsearch,jdk 192.168.253.202 192.168.253.53 192.168.253.54 
logstash 192.168.253.202 192.168.253.53
kibana 192.168.253.202

2.2 创建目录

  

2.3修改主机名(202,53,54)

202: hostnamectl set-hostname elk01
53: hostnamectl set-hostname elk02
54: hostnamectl set-hostname elk03

 

  • tasks:包含角色要执行的主要任务列表
  • handlers:包含处理程序,可以由此角色使用,甚至可以在此角色之外的任何位置使用
  • defaults:角色默认的变量
  • vars:角色其他的变量
  • files:包含可以通过此角色部署的文件
  • templates:包含可以通过此角色部署的模板
  • meta:角色定义的一些元数据

2.4 项目架构:

 

2.5 代码:(此配置es没有安装head插件,请根据以下内容安装,即可在web页面上查看)

github地址:elk

 

安装head插件

 

一、下载 elasticsearch-head-master.zip

 

下载地址:https://github.com/mobz/elasticsearch-head

 

二、下载node.js

 

解压下载的es-head插件,cd到解压目录,下载nodejs,并安装:

[elasticsearch-head-master]# curl --silent --location https://rpm.nodesource.com/setup_10.x | bash -
 
[elasticsearch-head-master]# yum install -y nodejs

查看是否安装成功:

[elasticsearch-head-master]# node -v
 v10.16.0
 
[elasticsearch-head-master]# npm -v
 6.9.0

三、安装grunt

[elasticsearch-head-master]# npm install -g grunt-cli
 
[elasticsearch-head-master]# npm install    #此过程有些长,请耐心等待哦

 

四、修改es配置,加入如下内容(如果使用上面的git文件,则不用修改此处,其中已经包含)

http.cors.enabled: true
http.cors.allow-origin: "*"

作用是开启HTTP对外提供服务,使Head插件能够访问Elasticsearch,修改完成后需要重启es。

 

五、修改head配置,

打开elasticsearch-head-master/Gruntfile.js,找到connect属性,修改hostname的值为es的IP:

server: {
options: {
hostname: '127.0.0.1',
port: 9100,
base: '.',
keepalive: true
  }
}


六、启动Head插件

切换到elasticsearch-head-master目录下,运行启动命令:

grunt server


启动成功后,输出如下信息:

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

 

2.6 执行顺序

cd elk
1
.ansible-playbook -i hosts jdk.yml 2.ansible-playbook -i hosts es.yml 3.ansible-playbook -i hosts logstash.yml 4.ansible-playbook -i hosts kibana.yml

 

 三、安装完成后再浏览器访问

elasticsearch: 192.168.253.202:9200

 

 es-head插件:192.168.253.202:9100

 

kibana:192.168.253.202:5601

 

cd /data/kibana
[root@elk01 kibana]# ls
bin           data         node_modules  package.json  src
built_assets  LICENSE.txt  NOTICE.txt    plugins       target
config        node         optimize      README.txt    webpackShims

nohup ./bin/kibana >> /tmp/kibana.nohup 2>&1 & #启动

 

 

 



posted on 2020-07-08 10:54  lanist  阅读(877)  评论(0编辑  收藏  举报