原 文 日 期:2019-04-26
一、为什么使用elk
一般大型系统是一个分布式部署的架构,不同的服务模块在不同的服务器上,出问题时,需要根据问题暴露的关键信息定位到具体的服务器和模块,构建一套集中式的日志系统,可以提高定位问题的效率
很多时候对于业务关键逻辑,通过file_put_content存储请求数据或者debug,数据量大的时候,对服务器和访问性能都具有不小的影响
一个完整的集中式日志系统包含的主要特点:
收集 - 能够采集多种来源的日志数据
传输 - 能够稳定的吧日志数据传输到中央系统
存储 - 如何存储日志数据
分析 - 可以支持UI分析
警告 - 能够提供错误报告、监控机制
二、elk相关介绍
名词解释
elk是三个开源软件的缩写:Elasticsearch , Logstash, Kibana
elasticsearch: 开源的日志搜索引擎,可搜集、分析、存储数据
kibana:web面板,可以为logstash和els提供的日志分析展示在web界面,
logstash:日志的搜索、分析、过滤日志的工具,支持大量的数据获取方式,工作方式是c/s架构,client端安装在需要收集日志的主机上,service端负责收集各个节点日志,并对日志进行过滤和修改等操作,并将其发往elasticsearch上
FileBeat:轻量级的日志收集处理工具,使用具在各个服务器上搜集日志后传输给logstash
filebeat数据beat 目前beat包含四种工具:
1、Packetbeat(搜集网络流量数据)
2、Topbeat (搜集系统、进程和文件系统级别低的CPU和内存使用情况等数据)
3、filebeat (搜集文件数据)
4、Winlogbeat (搜集windows事件日志数据)
使用流程:
方案一:项目产生的日志 -- filebeat(收集) -- els(存储) -- kibana(查看)
方案二:项目产品的日志 -- filebeat(收集) - logstash(过滤解析)-- els(存储) -- kibana(查看)
结论: 目前使用方案二, 各个项目的日志格式不统一,会通过logstash做修改后,再发送给els
三、 安装
1. 安装 elasticsearch/kibana/logstash
下载tar包解压缩,然后执行bin里的命令行即可
2. 配置
2.1 elasticsearch/config/elasticsearch.yml
主要配置network.host和http.port
2.2 kibana/config/kibana.yml
elasticsearch.hosts
3. 启动命令
1 els
$ cd elasticsearch-6.7.1/bin
$ elasticsearch
2 kibana
$ cd kibana-6.7.1-darwin-x86_64
$ ./bin/kibana
4 访问
els: http://192.168.3.132:11001/
kibana: http://192.168.3.132:5601/
5. 注意事项
els就需要2G内存,宿主机最好不低于4G内存
不然很容易因为内存申请不下来,然后挂掉
四、logstash和filebeat使用
logstash配合filebeat的使用
1、配置
1.1 logstash 增加配置文件
first-pipeline.conf(root权限)
1.2 filebeat/filebeat.yml
paths和output.logstash的hosts
2、启动命令
2.1 filebeat
$ cd filebeat
$ sudo ./filebeat -e -c filebeat.yml -d "publish"
2.2 loghash
$ cd logstash
$ bin/logstash -f config/logstash-sample.conf --
config.test_and_exit // 第一次校验配置是否正确
$ bin/logstash -e 'input { stdin { } } output { stdout {} }' // 普通输出
$ bin/logstash -f config/logstash-sample.conf --config.reload.automatic
3、注意
1、logstash的GROK过滤插件
grokdebug: http://grokdebug.herokuapp.com/
文档:https://github.com/elastic/logstash/tree/v1.4.2/patterns
文档解析【没有找到官方文档。。】:https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/filter/grok.html
2、filebeat模块开启
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-apache.html
3、filebeat权限问题
相关文件权限为root权限:modules
4、使用redis input 插件
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-redis.html
5、logstash管道解析
https://www.elastic.co/guide/en/logstash/current/logstash-config-for-filebeat-modules.html
6、logstash实践
https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/filter/grok.html
五、相关命令:
1、filebeat 开启apache模块
filebeat modules enable apache mysql
2、logstash 多实例运行命令
bin/logstash -f config/config.d/filebeat-apache.conf --config.reload.automatic --path.data=/opt/ci123/logstash-6.7.0/config/config.d/filebeat-apache.conf
bin/logstash -f config/config.d/filebeat-apache.conf --config.reload.automatic --path.data=data/filebeat-apache |pv -abt > /dev/null
六、项目的使用要求
1、配置:
1.1、区分各个系统
1.2、区分日志:apache、mysql
1.3、根据时间解析
1.4、旧数据access不读取
2、 制作图表
请求bytes 字节
3、filebeat重写匹配规则
系统自定义规则不能完全按照默认规则解析,需要重写apache access、error的匹配规则
3.1、使用管道写相应规则,并通过grokdebug查看是否正确
3.2、执行重新set up 管道 ./filebeat setup --pipelines -modules apache2
3.3、执行数据
检测电商所有的log是否符合匹配规则
重新跑一边apache-log
七、后期待解决的问题:
1、取apache日志时,导致服务器负载异常高,
2、部分日志会因jvm堆栈空间不够,写入失败
3、filebeat中偶尔报错Failed to connect to failover(backoff(async(tcp://192.168.1.119:9601)),backoff(async(tcp://192.168.1.119:9601))): dial tcp 192.168.1.119:9601: connect: connection refused