ELK日志框架

一、需求背景

随着业务发展越来越庞大,服务器越来越多,各种访问日志、应用日志、错误日志量越来越多,开发人员排查问题,需要到服务器上查日志,不方便。运营人员需要一些数据,需要我们运维到服务器上分析日志。

二、简介

ELK日志框架_第1张图片

 

ELK是 ElasticSearch、 Logstash 、 Kibana的简称,主要用于解决日志的采集、分析、存储、查看问题。也有人称为EFK,即 ElasticSearch、 FileBeat 、 Kibana,还有人称为Elastic Stack

ElasticSearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据

三、工作原理

FileBeat工作原理

ELK日志框架_第2张图片

 

FileBeat主要有两部分组成:inputs、harvester 。完成将指定文件的数据传输到指定的服务器上。

harvester

harvester负责一行行读取每个文件的内容,并读取内容输出。每个文件启动一个harvester。harvester负责打开和关闭文件。如果在读取文件的过程中,文件被重命名,FileBeat会继续读取文件内容。如果在harvester仍在读取文件时文件被删除,则关闭文件句柄,释放底层资源。

input

input 负责管理harvester,并且配置需要读取的文件路径。

FileBeat如何保持文件的状态

FileBeat保存每个文件的状态并频繁的记录到磁盘的注册文件中,该状态记录每个日志的读取的偏移量,并确保发送的日志行。如果输出无法访问,FileBeat会跟踪最后一次的发送行,并在输出可用时继续读取文件。在FileBeat运行过程中,内存会保存每个文件的状态,并在FileBeat重启后,根据磁盘注册文件记录的数据,重建文件状态。由于文件可能会被重命名或者移动,对于每个文件,FileBeat存储一个唯一标识符,检测文件是否被采集过。

FileBeat如何保持至少输出一次

FileBeat保证事件至少会传输到配置的输出一次,数据不会丢失。在输出阻塞或者未确认所有事件的情况下,FileBeat将继续尝试发送事件,直到接收端确认收到。发送到输出端,但是未等到接收端确认时关闭FileBeat,FileBeat在下次启动后,会重新发送。这样可以确保事件至少发送一次,但是接收端可能接收到多次输出。

Logstash工作原理

Logstash 事件处理分三个阶段 input —> filter —> output

input

监听输入端口,输入数据到logstash
常用的类型有:
1)、文件
2)、syslog
3)、redis
4)、kafka
5)、beats

filter

数据中间处理,对数据进行操作。
grok 解析任意文本数据,是logstash一个插件,主要作用是将字符串格式的文本,转换成具体的结构化数据,配合正则表达式使用。

output

将解析的结构化文本数据存储。

简单应用

Logstash + ElasticSearch + Kibana

logstash作为采集和分析,需要安装在应用服务器上,比较占用资源,在日志量比较大的时候,可能对服务器上的其他应用有影响。

fileBeat + Logstash + ElasticSearch + Kibana

因为logstash比较占用资源,这里做了优化,filebeat采集日志,logstash 解析过滤日志。filebeat占用资源比较少,对服务器上其他应用不会有很大资源竞争,logstash可以单独部署。

fileBeat + kafka/redis + Logstash + elasticsearch + kibana

当采集的日志数据量比较大,logstash日志处理任务比较重,可能会有日志积压,添加kafka或者redis作日志缓存。

四、环境搭建

版本说明:

jdk:1.8.0_191
filebeat:filebeat-6.8.2-linux-x86_64.tar.gz
logstash:logstash-6.8.2.tar.gz
elasticsearch:elasticsearch-6.8.2.tar.gz
kibana:kibana-6.8.2-linux-x86_64.tar.gz

服务器IP filebeat logstash elasticsearch kibana
192.168.100.01     安装(主节点) 安装
192.168.100.02   安装 安装(从节点)  
192.168.100.03     安装(从节点)  
192.168.100.04 安装      

elasticsearch安装

参考 技术分享文档 -> ElasticSearch 6.3.x安装

kibana安装

  • 将安装kibana-6.8.2-linux-x86_64.tar.gz包放置到/data/software目录下
  • 解压
     
    1. tar -zxvf kibana-6.8.2-linux-x86_64.tar.gz
  • 建立软链接
     
    1. ln -s kibana-6.8.2-linux-x86_64 kibana
  • 授权给work用户
     
    1. chown -R work:users kibana-6.8.2-linux-x86_64
    2. chown -R work:users kibana
  • 修改配置
     
    1. cd /data/software/kibana/config
    2. vi ./kibana.yml
    3. server.port: 5601
    4. server.host: "192.168.100.01"
    5. elasticsearch.hosts: ["http://192.168.100.01:9200"]
  • 后台启动
     
    1. nohup /data/soft/kibana/kibana &

    filebeat安装

  • 将安装filebeat-6.8.2-linux-x86_64.tar.gz包放置到/data/software目录下
  • 解压
     
    1. tar -zxvf filebeat-6.8.2-linux-x86_64.tar.gz
  • 建立软链接
     
    1. ln -s filebeat-6.8.2-linux-x86_64 filebeat
  • 授权给work用户
     
    1. chown -R work:users filebeat-6.8.2-linux-x86_64
    2. chown -R work:users filebeat
  • 修改配置

     
    1. cd /data/software/filebeat/
    2. vi ./kibana.yml
    3. - type: log
    4. enabled: true
    5. paths:

    指定需要采集的文件(同一层级模糊匹配,不能子文件递归)

     
    1. - /data/logs/*.log

    日志合并行,正则表达式匹配日志的开头行或者日志中需要合并到前面日志的行,例如日志开头为日期2019-08-10,我们可以配置如下:

     
    1. Multiline.pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}

    或者日志为[warn],我们可以这样配置:

     
    1. Multiline.pattern: ^\[

    配置日志规则匹配的行,如果正则匹配的是首行就为false,如果是后面的行和首行合并,就为true。具体看正则规则

     
    1. multiline.negate: false

    合并的日志是追加到前面日志的前面还是后面,我们这里为after

     
    1. multiline.match: after

    日志输出,可以选择elasticsearch,logstash, console中的一种,这里采用logstash
    去掉output.logstash:前面的#

     
    1. hosts: ["192.168.100.02:5040"]

    保存

  • 后台启动

     
    1. nohup /data/soft/filebeat/filebeat -e -c /data/soft/filebeat/filebeat.yml &

    logstash安装

  • 将安装logstash-6.8.2.tar.gz包放置到/data/software目录下
  • 解压
     
    1. tar -zxvf logstash-6.8.2.tar.gz
  • 建立软链接
     
    1. ln -s logstash-6.8.2.tar.gz logstash
  • 授权给work用户
     
    1. chown -R work:users logstash-6.8.2.tar.gz
    2. chown -R work:users logstash
  • 修改配置
    创建日志解析配置
 
  1. mkdir conf.d
  2. cd /data/software/logstash/conf.d
  3. touch test.yml
  4. vi ./test.yml
  5. input{
  6. beats{
  7. port=>5040
  8. }
  9. }
  10. filter{
  11. if [fields][logtype] in ["icrm-prod-catalina", "icrm-prod-localhost", "icrm-prod-localhost_access", "icrm-prod-o2oapi", "icrm-prod-o2otask", "icrm-prod-rest", "icrm-prod-catalina-daemo
  12. n"]{
  13. grok{
  14. match => [ "message", "%{TIMESTAMP_ISO8601:logdate}" ]
  15. }
  16. date{
  17. match => ["logdate", "YYYY-MM-dd HH:mm:ss,SSS"]
  18. }
  19. }
  20.  
  21. }
  22. output{
  23. elasticsearch{
  24. hosts: ["192.168.200.01:9200"]
  25. index: "teset-%{+YYYY-MM-dd}"
  26. }
  27. }
  • 后台启动
     
    1. nohup /data/soft/logstash/bin/logstash --path.settings /data/soft/logstash/config -f /data/software/logstash/conf.d &

你可能感兴趣的:(学习笔记)