学习日志分析相关的技术,参考文档:https://my.oschina.net/itblog/blog/547250
介绍
开源实时日志分析平台ELK能够解决1.日志分散;2.日志量大,查找麻烦。ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。ElasticSearch主要优化日志搜索,Logstash主要解决日志收集,Kiabana主要是可视化。
这三个主要关系如图:
环境搭建:
ELK下载链接:https://www.elastic.co/downloads/
ElasticSearch
启动elasticsearch
遇见的一些问题以及解决办法:
http://www.cnblogs.com/woxpp/p/6061073.html
另外停止elasticsearch的时候不要直接kill -9,最好kill -15,因为一旦数据有问题,就找不出来哪原因(暂时没找到),就要把之前所有数据都删了才行。
安装插件
需要安装个head插件:https://github.com/mobz/elasticsearch-head(旧的版本可以直接通过es自带的plugin安装,但是我的是6.X版本,已经不支持了,只能自己安装)
(外网访问不需要考虑。公司内网没办法使用npm安装,只能搞一个bignet或者是用公司内搞的npm,参考文章)
elasticsearch版本过高的话,只能用server的形式和head通信,需要更新下ea-head和es的配置,参考文章。需要配置下es-head的服务端口以及es的端口,需要注意的是,因为我是在虚机部署的ELK,然后在浏览器访问的,所以配置es-head的es的地址,不能写localhost,需要写ip。
可以通过红框判断es和es-head是否交互成功。
分布式的elasticsearch是这样的:
部署多台机器
我是部署了3台机器,每个机器都拷贝同一个版本的elasticsearch,然后更改配置文件,都启动起来就行,主要配置文件比较麻烦。
# cluster同一个集群是相同的
cluster.name: es_cluster
#每个机器的node.name设置不同的来区分
node.name: node0
path.data: ./data0
path.logs: ./logs
# 当前hostname或IP,这个不能写0.0.0.0,单机的时候可以写,多个机器的时候其他节点会找不到
network.host: 10.64.13.24
http.port: 8200
# 增加跨域的配置
http.cors.enabled: true
http.cors.allow-origin: "*"
# 是否是master,是否存储数据,3台机器一般要有2个master(n/2+1个)
# data我是都存了,可以只有两台机器来存
node.master: true
node.data: true
# 这是其实没搞的太明白,但是不配置会错
discovery.zen.ping.unicast.hosts: ["10.64.13.24", "10.99.204.219", "10.100.47.192"]
#一般要有(n/2+1个)个master
#discovery.zen.minimum_master_nodes: 2
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
Logstash
下载的话上面的链接有,需要注意的几点:
- logstash是需要安装在日志所在机器。
- 需要添加个配置,要搞清楚input,filter,output的概念,input是怎样输入的,filter是日志过滤的一些方式,output我这里配置的就是传输到elasticsearch上面。配置详解参考文章,很多类似文章,随便搜。
传输的时候是一行行传输的,文件稍微一丢丢大就卡死了,解决ing------> 这是机器不稳定的问题,nohup后台启动就没问题了。- 日志合并的问题:使用logstash的Multiline插件,参考文章。需要注意的是,我是使用的正则表达式,logstash的正则是ruby的正则,所以语法搜ruby就好了。
Kibana
自己贼傻逼的开了个9000多的端口号和5000多的端口号,用Chrome连不上,纠结了好多天,后来我浩哥告诉说,外面连基本上是8000-9000的端口才行,我就xxx...
其他的安装之类的参考文章最开始的链接就全部都可以搞定
权限
其中可以再kibana.yml里面配置日志文件
# 指定kibana的log写在哪个文件
logging.dest: ./kibana.log
遇见个报错如下:
原因:kibana异常了,跟elasticsearch链接出问题了,看下日志就找出来了。
其他
下面记录下其他需要考虑的优化方面的问题。
日志的合并。因为是几条一起过来的,但是合并的好像有点问题,最好是能同一条请求合并一条。---->参见logstash- 日志过滤。需要看看拿debug还是什么日志,然后日志取那一部分。
- 正则
- 模糊匹配改成精准匹配
一些优化方案:
问题:
这个message太长了,然后比如按照request id搜索,结果根本没搜索出来的字段(实际是有的,就是没展示出来),而且有一些字段是无效的,所以打算在logstash(因为是在logstash进行字段合并以及过滤匹配的)上面做些处理,过滤一些字段,然后字段细化下
其他的还未通,继续搞,不断更新
filebeat
目前遇到的问题是,logstash能够读取出来日志,但是可能会占用机器太多资源,还有log4j2这个东西我用不明白,导致日志格式很乱。所以考虑直接用filebeat好了。
下载之后解压,修改filebeat.yml文件进行配置。
同时更改下logstash的配置,这个参考文章