记一次Docker下安装Logstash+Elasticsearch+Kibana经历

前言

最近遇到一个困惑,在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并不能解析出来,这个原因没找到。。。。。同一种方式解析,理论上应该不存在一部分解析的出来一部分解析不出来,除非使用的配置是不一样的。

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
通过docker-compose安装logstash的步骤如下: 1. 首先,需要编写一个docker-compose.yaml文件,指定logstash的版本、资源限制、挂载路径、端口等配置信息。示例文件如下: version: '3' services: logstash: restart: always image: logstash:6.7.0 deploy: replicas: 1 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure delay: 5s max_attempts: 3 window: 120s resources: limits: cpus: '0.5' memory: 1024M reservations: cpus: '1' memory: 2408M volumes: - /opt/data/logstash/:/opt/data/logstash/ ports: - "9600:9600" - "5044:5044" container_name: "logstash" networks: - back-up networks: back-up: driver: bridge 2. 然后,使用docker-compose命令构建logstash容器: docker-compose -f docker-compose.yaml up -d 3. 最后,通过以下命令进入logstash容器进行操作: docker exec -it logstash /bin/bash 这样就可以通过docker-compose安装logstash了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker-compose搭建 es/kibana/logstash elk](https://blog.csdn.net/chugu5948/article/details/100614342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [docker-compose docker 一次安装打包 各个中间件 mysql zookeeper kafka redis](https://download.csdn.net/download/huangyanhua616/85592973)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [docker部署logstash](https://blog.csdn.net/u013214151/article/details/105682052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值