基于Linux下开发的ELK自动部署工具以及ELK基本操作

基于Linux下开发的ELK自动部署工具以及ELK基本操作

前言:

本文主要作为此次部署ELK环境的记录,希望我的一些经验可以帮到更多的人
1.介绍自定义开发了一款基于linux和docker(各个节点之间需要可以互相ping通,可以配置linux之间的网关即可互通)快速分布式部署ELK环境的工具(该工具的百度网盘地址:https://pan.baidu.com/s/1gfNEcyJ  密码:pxsv)
该工具内已经内置了
elasticsearch-5.6.0 + logstash-5.6.0.tar + kibana-5.6.0 + zookeeper-3.4.9 + kafka_2.12-0.11.0.0 
2.ELK的基本操作

工具说明


ELK环境是logstash+elasticsearch+kibana的一套搜索查询引擎。其中logstash负责数据的传输,elasticsearch负责数据存储以及数据分析,kibana负责数据减少elasticsearch操作和生成报表工具。

ELK自动部署工具是用于某平台log日志存储分析ELK环境搭建的一套自动化部署工具,目的是为了减少部署难度。

下面是某平台的ELK的架构图:

 基于Linux下开发的ELK自动部署工具以及ELK基本操作

使用说明

2.1 文件说明

elk部署工具文件结构

 基于Linux下开发的ELK自动部署工具以及ELK基本操作

2.1.1 deploy.sh

deploy.sh用于创建和启动docker容器。可使用-h查看可用命令

 基于Linux下开发的ELK自动部署工具以及ELK基本操作

-b:有此参数说明setting.conf中的task需要创建。

-s:有此参数说明setting.conf中的task需要启动。

-c: 此参数用于指定docker_create.sh的位置,docker_create.sh用于创建DockerFile,默认的dockerfile.sh的位置是同级目录下的dockerfile_create.sh

-l:此参数用于指定launcher.sh的位置,launcher.sh是在docker容器中的入口程序,可以启用多种配置等等。

2.1.2 setting.conf

setting.conf部署工具的配置文件,主要用于配置那些工具需要启动,如何启动等等。文件格式如下:

基于Linux下开发的ELK自动部署工具以及ELK基本操作

module:是deploy.sh所需要执行的task

下面是task的详细配置,每个task的配置必须使用task的名称作为起始,如zookeeper.dir等等。task可配置的参数有

dir:用于表示docker创建文件的元数据文件夹(相对于deploy.sh的位置)。

host:指定要发布的主机地址。

host.port:指定要发布的主机端口。

host.user:指定远程主机的用户名。

host.pass:指定远程主机的密码。

host.dir:指定发布到远程主机的文件夹。

start:启动task时系统执行的命令。

2.1.3 launcher.sh

launcher.sh会打包到docker的镜像中,作为docker镜像的启动入口。这个文件的用途是选定启动shell脚本配置好shell脚本的启动参数,移动指定的config文件到指定的文件夹下,或者在docker容器中执行一些命令。可用的参数信息如下:

 基于Linux下开发的ELK自动部署工具以及ELK基本操作

-a:配置要启动的程序的启动参数。

-p:配置要启动的程序。

-c:配置要移动的conf文件(可以有多个-c参数)

-d: 配置要移动的conf文件的目标文件夹

-e:配置执行entry point前可执行的linux命令。

2.1.4 生成docker镜像的标准结构

使用elk部署工具生成docker镜像的应用需要满足一下文件结构

 基于Linux下开发的ELK自动部署工具以及ELK基本操作

build.sh:此sh是用于生成Dockerfile文件的,使用上级目录的模板即可,如果有特殊的需求可以打开build.sh进行独立修改。

context:此文件夹是docker image生成时的context,里面可以存放docker生成镜像时需要的程序等等,比如zookeeper.tar.gz

mnt:此文件夹是docker image运行时所挂载的文件夹,此文件夹下一般有datalogconf文件夹。

2.2 启动演示

sh deploy.sh -b -s 执行此shell命令将会自动构建docker镜像与启动。

如下图:

基于Linux下开发的ELK自动部署工具以及ELK基本操作

logstash基本操作

logstash官方文档:https://www.elastic.co/guide/en/logstash/current/index.html

logstash在本elk环境中主要功能是对将数据源的数据进行分析整理,在发送到指定地址的组件。logstash一般由输入插件,过滤器插件,输出插件三个大部分组成,三个插件可以进行自定义组合。

本套环境使用logstashclient)插件有:

输入插件:file(用于读取log文件中的信息)下面是插件配置(此文件需要个人单独配置基本只需要配置pathlog文件的位置,可以使用test*.log)和type属性(具体哪个微服务产生的log)),

 

过滤插件:grok(解析log转换成为json格式)

 

输出插件:kafka(将解析好的数据发送到kafka消息队列)

 

 

本套环境使用的logstashserver)插件有:

输入插件:kafka(从消息队列中读取log消息),

过滤插件:date(修改日期格式),

 

输出插件:elasticsearch(将转换好的数据存入到elasticsearch中)

 

elasticsearch基本操作

elasticsearch是一个功能非常强大的查询引擎,如果想进行了解,建议查看官方的中文文档:

https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

 

elasticsearch常用的几个小查询:

集群健康: curl 'localhost:9200/_cat/health?v'

查看集群节点:curl 'localhost:9200/_cat/nodes?v'

查看集群索引:curl 'localhost:9200/_cat/indices?v'

查看指定索引:curl -XGET 'localhost:9200/megacorp/(index)/_search?pretty'

 

elasticsearch不错的博客:http://blog.csdn.net/cnweike/article/details/33736429

kibana基本操作

5.1 数据索引

我的测试数据索引是:jego_*,数据索引是logstash传进来的index,也可以通过curl 'localhost:9200/_cat/indices?v'查看目前elasticsearch中存在的索引,之后在Management配置,如下图:

 

图中画红圈的地方是代表哪一个字段是这个索引数据的时间字段,elasticsearch会使用这个字段作为数据时间。

5.2 索引映射

elasticsearch中每个索引都有自己的数据结构,数据结构可以通过logstash中上传的mapping定义,也可以提前在elasticsearch中定义好(不过此种方式容易被logstash中的mapping替代)。常用的数据类型有textnumberdate等等

选择好之后点击create按钮之后会显示出这个索引的具体mapping(映射)信息,如下图:

 

5.3 查询数据

我们点击Discover,之后选择日期(此日期是刚才选择@timestamp的时间)点击查询

 

我们会看到下面的页面,我画红圈的地方是可以点击操作的,增加各种filter等。最上面的搜索框也可以根据kibana提供的语法进行条件查询。

 

5.4 查看报表

点击如下图所示:

 

选择你想生成的报表,这里我们选择生成饼图(pie

 

根据自己定义的查询条件,进行查询,生成的结果如下图:

 

 

5.5 查看实时

kibana可以实时分析elasticsearch某段时间之内的数据(可以进行索引过滤)进入口情况。

 

5.6 elasticsearch便捷工具

上文我们说过elasticsearch提供rest风格的服务格式,我们可以使用http工具进行数据访问,kibana为我们提供了访问elasticsearch更加便捷的工具,此工具有elasticsearch命令的提示作用,与数据json转换的能力,非常的方便,具体如下图:

 

附录

elk官方网站:https://www.elastic.co/cn/



一些小坑:

1.像KAFA,Elasticsearch集群像zookeeper进行注册的时候,由于是运行在docker容器里面zookeeper只会获得docker宿主机的ip,所以像Elasticsearch在配置文件中可以配置:
network.publish_host: "172.20.54.225" 像zookeeper指定ip,
kafka则需要此配置属性指定ipadvertised.listeners=PLAINTEXT://172.20.54.225:9092

2.防止ELasticsearch脑裂发生,最好把Elasticsearch节点设置为奇数。