基于Linux下开发的ELK自动部署工具以及ELK基本操作
基于Linux下开发的ELK自动部署工具以及ELK基本操作
前言:
1 工具说明
ELK环境是logstash+elasticsearch+kibana的一套搜索查询引擎。其中logstash负责数据的传输,elasticsearch负责数据存储以及数据分析,kibana负责数据减少elasticsearch操作和生成报表工具。
ELK自动部署工具是用于某平台log日志存储分析ELK环境搭建的一套自动化部署工具,目的是为了减少部署难度。
下面是某平台的ELK的架构图:
2 使用说明
2.1 文件说明
elk部署工具文件结构
2.1.1 deploy.sh
deploy.sh用于创建和启动docker容器。可使用-h查看可用命令
-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部署工具的配置文件,主要用于配置那些工具需要启动,如何启动等等。文件格式如下:
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容器中执行一些命令。可用的参数信息如下:
-a:配置要启动的程序的启动参数。
-p:配置要启动的程序。
-c:配置要移动的conf文件(可以有多个-c参数)
-d: 配置要移动的conf文件的目标文件夹
-e:配置执行entry point前可执行的linux命令。
2.1.4 生成docker镜像的标准结构
使用elk部署工具生成docker镜像的应用需要满足一下文件结构
build.sh:此sh是用于生成Dockerfile文件的,使用上级目录的模板即可,如果有特殊的需求可以打开build.sh进行独立修改。
context:此文件夹是docker image生成时的context,里面可以存放docker生成镜像时需要的程序等等,比如zookeeper.tar.gz。
mnt:此文件夹是docker image运行时所挂载的文件夹,此文件夹下一般有data,log,conf文件夹。
2.2 启动演示
sh deploy.sh -b -s 执行此shell命令将会自动构建docker镜像与启动。
如下图:
3 logstash基本操作
logstash官方文档:https://www.elastic.co/guide/en/logstash/current/index.html
logstash在本elk环境中主要功能是对将数据源的数据进行分析整理,在发送到指定地址的组件。logstash一般由输入插件,过滤器插件,输出插件三个大部分组成,三个插件可以进行自定义组合。
本套环境使用logstash(client)插件有:
输入插件:file(用于读取log文件中的信息)下面是插件配置(此文件需要个人单独配置基本只需要配置path(log文件的位置,可以使用test*.log)和type属性(具体哪个微服务产生的log)),
过滤插件:grok(解析log转换成为json格式)
输出插件:kafka(将解析好的数据发送到kafka消息队列)
本套环境使用的logstash(server)插件有:
输入插件:kafka(从消息队列中读取log消息),
过滤插件:date(修改日期格式),
输出插件:elasticsearch(将转换好的数据存入到elasticsearch中)
4 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.****.net/cnweike/article/details/33736429
5 kibana基本操作
5.1 数据索引
我的测试数据索引是:jego_*,数据索引是logstash传进来的index,也可以通过curl 'localhost:9200/_cat/indices?v'查看目前elasticsearch中存在的索引,之后在Management配置,如下图:
图中画红圈的地方是代表哪一个字段是这个索引数据的时间字段,elasticsearch会使用这个字段作为数据时间。
5.2 索引映射
在elasticsearch中每个索引都有自己的数据结构,数据结构可以通过logstash中上传的mapping定义,也可以提前在elasticsearch中定义好(不过此种方式容易被logstash中的mapping替代)。常用的数据类型有text,number,date等等
选择好之后点击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转换的能力,非常的方便,具体如下图:
6 附录
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节点设置为奇数。