记一次Docker下安装Logstash+Elasticsearch+Kibana经历
2016-08-27 15:20
976 查看
前言
最近遇到一个困惑,在kibana上捞客户端用户行为相关的数据,无奈无法提取一个字段中的kv值。作为一个移动开发人员,对这种东西简直就是日了狗了,请教了下公司推荐组的人,也没有得到结果,靠人不如靠自己去。这个数据在kibana上显示的是一个用英文逗号分隔,用等号连接的键值对,假设这个字段显示的是args,其值为:
args:key1=value1,key2=value2,key3=value3
而我想要的结果就是提取args中的键值对到外层,便于进行一些图表方面的统计,比如某个字段的成功率等,提取后的内容如下:
args:key1=value1,key2=value2,key3=value3 key1:value1 key2:value2 key3:value3
在这之前,需要把对应的环境先搭建起来,这里使用Docker进行搭建,对Logstash+Elasticsearch+Kibana不了解的可以简单了解下这篇文章,ELKstack 中文指南。而Logstash,个人找到一篇相对比较详细入门的介绍,也可以看下logstash快速入门,在写这篇文章之前,我个人也是对这三个东西一无所知,完全从0开始。
Elasticsearch的安装
Mac下Docker的安装见Mac OSX Docker下搭建Android+Jenkins+Gitlab,elasticsearch需要暴露两个端口,9200和9300,我们直接使用docker run命令运行一个elasticsearch容器。docker run --name myes -d -p 9200:9200 -p 9300:9300 elasticsearch
容器运行起来后可以在日志中找到对应的ip:port,注意这里不能使用localhost,具体原因可能localhost指的是该容器本身,而我们需要在另一个容器中访问该容器,因此需要。。。。(计算机网络的内容忘得差不多了,专业术语无视就好)
从图中看到,ip加端口的值为172.17.0.2:9200
kibana的安装
kibana容器的运行需要指定elasticsearch的url,通过环境变量传递进去即可,并暴露默认端口5601供浏览器访问docker run --name mykibana -e ELASTICSEARCH_URL=http://172.17.0.2:9200 -p 5601:5601 -d kibana
到目前为止,还没有日志输入到es中,kibana自然也没有什么内容可以查询了。
Logstash的安装
docker运行logstash的容器的时候,需要指定输入输出及过滤器,我们先使用控制台输入,然后输出到控制台。docker run -it --rm logstash -e 'input { stdin { } } output { stdout { } }'
然后在控制台输入helloworld,你就能立即看到输出了
文章开头说到了日志内容不能被解析的问题,简单尝试了下,可以进行解析,不过需要对logstash的配置进行修改
input { //控制台输入 stdin { } } filter { //kv插件,每一对使用|分割,kv使用=分割 kv { source => "message" field_split => "|" value_split => "=" } //将args作为输入再次分割 kv { source => "args" field_split => "&" value_split => "=" } } output { //输出到es elasticsearch { hosts => ["172.17.0.2:9200"] } //同时输出到控制台 stdout { codec => rubydebug } }
这里使用了kv插件进行解析,举一个例子,我的日志输入内容为:
arg1=a1|arg2=b2|arg3=c3|args=a=b&b=c&c=d&d=e
最终上面的内容会被解析成
arg1=a1 arg2=b2 arg3=c3 a=b b=c c=d d=e
运行docker命令,传入刚刚的logstash的配置
docker run -it --rm logstash -e 'input { stdin { } } filter { kv { source => "message" field_split => "|" value_split => "=" } kv { source => "args" field_split => "&" value_split => "=" } } output { elasticsearch { hosts => ["172.17.0.2:9200"] } stdout { codec => rubydebug } }'
在控制台中输入
arg1=a1|arg2=b2|arg3=c3|args=a=b&b=c&c=d&d=e
然后控制台就会输出解析后的内容
打开kibana验证一下,浏览器输入http://localhost:5601/,先建立索引,直接点击create即可
然后就能看的解析后的内容了
如果字段上出现黄色的警告,必要时到Setting Tab刷新一下filed list即可。
总结
经过自己的一番实验,对于args中的内容,解析出来是完全没有什么问题的,关键在于logstash的配置问题,然后问题并没有这么简单,对于同一个配置,发现一部分日志中的args能被解析出来,还有大部分的日志的args并不能解析出来,这个原因没找到。。。。。同一种方式解析,理论上应该不存在一部分解析的出来一部分解析不出来,除非使用的配置是不一样的。相关文章推荐
- docker 安装 elasticsearch、kibana、logstash 5.6.1,带x-pack,从kafka中获取数据
- 安装logstash,elasticsearch,kibana三件套
- 在 Ubuntu14.04上安装 Elasticsearch, Logstash, Kibana (ELK Stack)
- ELK学习笔记(一)安装Elasticsearch、Kibana、Logstash和X-Pack
- 安装logstash,elasticsearch,kibana三件套
- 基于CentOS6.5或Ubuntu14.04下Suricata里搭配安装 ELK (elasticsearch, logstash, kibana)(图文详解)
- Docker日志自动化: ElasticSearch、Logstash、Kibana以及Logspout
- 怎么在 Ubuntu14.04上安装 Elasticsearch, Logstash, Kibana (ELK Stack)
- CentOS7 安装EFK(elasticsearch、fluent、kibana)进行Docker下日志搜集 - The magic of fingertips - CSDN博客
- 如何在Ubuntu 14.04上安装Elasticsearch、Logstash以及Kibana(即ELK堆栈)
- 使用 Docker 部署和迁移多节点的 ElasticSearch-Logstash-Kibana 集群
- 安装logstash,elasticsearch,kibana三件套(转)
- kubernetes 1.5安装 ELK(ElasticSearch, Logstash, Kibana)
- 安装Elasticsearch,Logstash,Kibana(5.0.1-mac版)
- Elasticsearch5.4.0(head/kibana/logstash)安装部署深入详解
- ELK(Elasticsearch,logstash,kibana)无痛安装教程
- 安装logstash,elasticsearch,kibana三件套
- 安装logstash,elasticsearch,kibana三件套
- CentOS7下安装ELK(elasticsearch-5.1.1、logstash-5.1.1、kibana-5.1.1)
- Elasticsearch5.4.0(head/kibana/logstash)安装部署深入详解