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涉及两个组件:查找器prospector和采集器harvester,来读取文件(tail file)并将事件数据发送到指定的输出。
启动Filebeat时,它会启动一个或多个查找器,查看你为日志文件指定的本地路径。对于prospector所在的每个日志文件,prospector启动harvester。每个harvester都会为新内容读取单个日志文件,并将新日志数据发送到libbeat,后者将聚合事件并将聚合数据发送到你为Filebeat配置的输出。
1.5 zookeeper
zookeeper它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
简单来说zookeeper=文件系统+监听通知机制。
1.6 kafka
特点:
-
高吞吐量、低延迟: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 & #启动