日志收集系统搭建-BELK
Posted code-juggler
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日志收集系统搭建-BELK相关的知识,希望对你有一定的参考价值。
前言
日志是我们分析系统运行情况、问题定位、优化分析等主要数据源头。目前,主流的业务系统都采用了分布式、微服务的形式。如果想要查看日志,就需要从不同的节点上去查看,而且对于整个业务链路也非常不清晰。因此,我们首先引入日志收集框架,将分布在各个节点的日志统一汇总到一处。方便日志查询、分析与问题定位。
根据我们目前的技术栈,我们的服务是在spring cloud下搭建的。因而使用spring sleuth搭建日志收集是快而便捷的。个人使用spring sleuth + kafka +zipkin + mysql,搭建起一个系统间的trace日志追踪系统。该套框架的优势在于,使用简单(只要引入自己封装好的starter,指定kafka及zookeeper地址即可)。spring sleuth会自动拦截http请求,并分配统一trace id来追踪这一次的请求全链路。最后,通过zipkin的可视化页面,我们能非常方便的看出一次请求的整个链路,而且能直观的看出各个系统的耗时,对于性能分析比较有帮助。但是,相较于本文要说的ELK日志系统而言,spring sleuth还是有几个明显的缺点的:
1. spring sleuth只会获取过滤到的http请求信息,对于收集系统打印的业务日志信息较麻烦,可定制化相较于ELK太差。(这也是选择ELK的主要原因)
2. spring sleuth的日志生成、收集、生产、消费,都共同消耗服务资源。
反观ELK,有两种选择,即可以嵌入到系统(使用log4j的socket发送日志到ELK),也可以独立存在(logstash直接读取日志文件)。而且,对于日志文件中内容的获取,有更灵活的配置(基于logstash的filter插件)。So, it‘s ELK!
最后再说一点,说了这么多,应该都知道ELK指的是elasticsearch+logstash+kibana。对于logstash,如果你的server所在的机器上,资源比较紧张,那么可以选择elastic家族中的Filebeat来做server日志的收集工作。这也正是官方所推荐的(The Filebeat client is a lightweight, resource-friendly tool that collects logs from files on the server and forwards these logs to your Logstash instance for processing. Filebeat is designed for reliability and low latency. Filebeat has a light resource footprint on the host machine, and the Beats input
plugin minimizes the resource demands on the Logstash instance.)。我们日志系统的搭建也是使用了Filebeat来收集日志,统一汇总到日志系统的logstash,然后再由logstash将日志信息推送到elasticsearch。在此,暂且叫BELK。用一个图来形象的表述一下关系:
1. 环境准备
首先,我们需要准备日志系统需要的环境。
1. JRE需要1.8+。
2. ES等需要创建文件限制提升到65536+;虚拟内存区域最大数量262144+。
vi /etc/security/limits .conf # 添加下面内容 test - nofile 65536 # test为操作账号 vi /etc/sysctl .conf # 添加下面内容 vm.max_map_count=262144 # 保存并生效 sysctl -p |
2. 安装elasticsearch
1. 到官网下载压缩包。本例使用的是6.2.2版本。elasticsearch-6.2.2.zip。
2. 解压:unzip elasticsearch-6.2.2.zip -d /sinochem/software/elasticsearch-6.2.2
3. 配置文件修改。配置文件在解压目录中的./config下的elasticsearch.yml文件。需要我们修改的项为:
cluster.name: es-application # 集群名字 node.name: node-1 # 当前节点名字 path.data: /sinochem/software/elasticsearch-6.2.2/data # es数据存放路径 path.logs: /sinochem/software/elasticsearch-6.2.2/logs # es日志路径 network.host: 10.144.132.70 # 当前节点IP地址 http.port: 9200 # 监听端口号 |
4. 启动服务。nohup ./bin/elasticsearch >/dev/null &
注:目前ES只是单机模式,后续升级支持集群模式。
3. 安装Kibana
1. 到官网下载压缩包。本例使用的是6.2.2版本。kibana-6.2.2-linux-x86_64.tar.gz。
2. 解压:tar -zxvf kibana-6.2.2-linux-x86_64.tar.gz
3. 配置文件修改。配置文件在解压目录中的./config下的kibana.yml文件。需要我们修改的项为:
server.port: 5601 # 服务端口 server.host: "10.xxx.xxx.xxx" # 服务IP地址 kibana.index: ".kibana" # kibana在es中的索引 |
4. 启动服务。nohup ./bin/kibana >/dev/null &
4. 安装Logstash
1. 到官网下载压缩包。本例使用的是6.2.2版本。logstash-6.2.2.tar.gz。
2. 解压:tar -zxvf logstash-6.2.2.tar.gz
3. 配置文件修改。配置文件在解压目录中的./config下新增日志配置文件logstash.conf。文件内容为:
input { # beat插件,监听5044端口 beats { port => "5044" } } filter { grok { match => [ "message", "%{COMBINEDAPACHELOG}" ] } date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss.SSS" ] } } output { # 日志输出到ES elasticsearch { hosts => ["10.xxx.xxx.xxx:9200"] index => "logstash-%{+YYYY.MM.dd}" } } |
4. 启动服务。nohup ./bin/logstash -f config/logstash.conf --config.reload.automatic >/dev/null &
5. 安装Filebeat
以上几个都是安装在ELK系统体系下的,Filebeat需要安装到各个服务所在机器上。Filebeat使用的是6.3.0版本,使用该版本是为了使用其中的processors。当然以上也可以使用6.3.X版本。
1. 到官网下载压缩包。filebeat-6.3.0-linux-x86_64.tar.gz。
2. 解压:tar -zxvf filebeat-6.3.0-linux-x86_64.tar.gz
3. 配置文件修改。配置文件在解压目录中的./config下的filebeat.yml文件。简单配置如下:
filebeat.inputs: # 用户自定义部分 start - type: log paths: # 日志文件 - /sinochem/app/cooperation/monitor-gateway/logs/*-info.log exclude_lines: [‘^DBG‘] fields: # 服务名称 app_name: monitor-gateway fields_under_root: true - type: log paths: - /sinochem/app/cooperation/monitor-admin-service/logs/*-info.log exclude_lines: [‘^DBG‘] fields: app_name: monitor-admin-service fields_under_root: true # 用户自定义部分 end output.logstash: hosts: ["10.xxx.xxx.xxx:5044"] fields: # 需要用户设置环境变量,或者直接将本机IP替换变量 ip_address: "${IP_ADDRESS:UNKNOWN}" fields_under_root: true processors: - drop_fields: fields: ["host"] # - add_host_metadata: ~ # - decode_json_fields: # fields: ["host"] filebeat.shutdown_timeout: 5s |
4. 启动服务。nohup ./bin/filebeat -e -c config/filebeat.yml -d publish >/dev/null &
后记
至此,基础版本的BELK系统已经搭建完成。我们可以在浏览器中输入:http://10.xxx.xxx.xxx:5601/ 访问ES的可视化界面。如下图所示,日志信息已经汇总到了ES中。
目前版本只是雏形,其中还有一些功能需要完善。例如:ES集群的搭建、ES索引、ES历史数据的处理等。ELK搭建也是初次接触,存在使用与认知错误是不可避免的,在此欢迎各位童鞋当面或留言指正,以上。
以上是关于日志收集系统搭建-BELK的主要内容,如果未能解决你的问题,请参考以下文章