Elasticsearch + Logstash + Kibana 日志分析系统搭建

这篇具有很好参考价值的文章主要介绍了Elasticsearch + Logstash + Kibana 日志分析系统搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

1.1 Elasticsearch、Logstash 和 Kibana 简介

Elasticsearch、Logstash 和 Kibana 组成了一个开源的日志分析系统简称 ELK Stack。

  • Elasticsearch: 一个基于 Lucene 的搜索引擎,可以快速存储、检索和分析大量数据
  • Logstash: 一个日志收集和处理工具,可以将来自不同来源的数据收集到 Elasticsearch 中
  • Kibana: 一个数据可视化平台,可以实时地展示 Elasticsearch 存储的数据

1.2 日志分析系统的意义

在现代化的信息系统中需要收集、存储和分析庞大的日志数据,以便更好地理解系统的运行状态和诊断问题。而使用传统的方法如 grep、tail 和 awk 来分析日志数据,很容易出错并且不够灵活。通过使用 ELK Stack可以更快捷、更准确地进行日志分析和数据可视化,从而提高信息系统的稳定性和可靠性。

二、日志分析系统技术架构

本文主要介绍日志分析系统的技术架构,包括Logstash、Elasticsearch和Kibana三部分。

2.1 Logstash

Logstash是一个开源数据收集引擎。它能够动态地从不同的来源(如文件、网络流、系统日志等)收集数据,并对数据进行过滤、转换和输出。在Logstash中,输入、过滤器和输出是三个重要的模块。

  • 输入模块:负责从各种来源收集数据。
  • 过滤器模块:对输入数据进行过滤、转换和格式化等操作,使其变得易于搜索和分析。
  • 输出模块:将处理过后的数据输出至指定的位置,如Elasticsearch、TCP和STDOUT等。

下面是一个使用Java编写的Logstash配置文件示例,其中包含从文件读取数据、利用grok正则表达式过滤数据并输出到Elasticsearch的案例


input{
    file{
        path => "/usr/share/logstash/sample.log" //文件路径
        start_position => "beginning" //从头开始读取
    }
}

filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}" } //使用grok正则表达式过滤数据
    }
    date {
        match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] //解析时间戳
    }
}

output {
    elasticsearch {
        hosts => ["localhost:9200"] //指定Elasticsearch的地址
        index => "logstash-%{+YYYY.MM.dd}" //动态创建索引
    }
}

2.2 Elasticsearch

Elasticsearch是一个分布式、RESTful风格的搜索和分析引擎。它可以帮助用户存储、搜索、分析和可视化大量的数据。

Elasticsearch的核心概念是索引、文档和节点

  • 索引:类似于数据库中的表格,用于保存某种类型的文档。
  • 文档:实际存储的数据单元。每个文档都必须属于一个索引,并且具有唯一标识符。
  • 节点:存储和处理数据的服务器实例。

下面是一个Java编写的Elasticsearch配置文件示例,包含索引的设置、分片和副本的设置以及相应的mappings和settings等配置:

PUT /my-index          //创建索引
{
  "settings": {
    "number_of_shards": 2,    //设置分片数量
    "number_of_replicas": 1   //设置副本数量
  },
  "mappings": {              //设置mappings
    "properties": {
      "title": {
        "type": "text"
      },
      "content": {
        "type": "text"
      },
      "create_at": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      }
    }
  }
}

2.3 Kibana

Kibana是一个基于Elasticsearch的开源分析和可视化平台。它提供了各种数据探索、查询和可视化功能,使用户能够更好地理解和分析自己的数据。

Kibana主要有如下几个功能:

  • 可视化展示:通过多种可视化方式(如柱状图、饼图、地图等)展示数据
  • 查询和过滤:Kibana支持使用Lucene查询语句进行全文搜索和过滤操作
  • Dashboard:可以创建个性化的Dashboard,并将多个可视化组件组合在一起展示

下面是一个使用Java编写的Kibana配置文件示例,其中包含应用程序、查询和可视化的配置:

POST my-index/_search         //查询
{
  "query": {
    "match": {
      "content": "some words"
    }
  }
}
 
PUT /my-dashboard          //创建Dashboard
{
  "title": "My Dashboard",
  "panelsJSON": "[..., ...]"       //设置可视化组件
}

总的来说Logstash+Elasticsearch+Kibana的架构可以帮助我们搭建一个完整的日志分析系统,方便我们快速分析所需的数据,并对其进行合理的可视化展示和查询操作

三、环境搭建

3.1 下载安装 Elasticsearch Logstash Kibana

Elasticsearch Logstash Kibana 是三个不同的工具需要分别下载并安装

3.1.1 Elasticsearch

Elasticsearch是一个开源搜索引擎它的功能包括全文检索、结构化搜索、分布式搜索、分析 可以从官网下载最新版本的Elasticsearch

3.1.2 Logstash

Logstash是一个开源的数据处理工具,通常用于日志收集、过滤、格式化和转发 可以从官网下载最新版本的Logstash

3.1.3 Kibana

Kibana是一个开源的数据可视化工具,它可以将存储在Elasticsearch中的数据进行可视化展示可以从官网下载最新版本的Kibana

3.2 启动 Elasticsearch Logstash Kibana

在完成安装后需要启动三个工具

3.2.1 Elasticsearch

在Linux系统下可以通过以下命令启动Elasticsearch:

$ cd elasticsearch-x.x.x/bin/
$ ./elasticsearch

在Windows系统下可以通过运行bin/elasticsearch.bat文件启动Elasticsearch

3.2.2 Logstash

在Linux系统下可以通过以下命令启动Logstash:

$ cd logstash-x.x.x/bin/
$ ./logstash -f /path/to/config.conf

在Windows系统下可以通过运行bin/logstash.bat文件启动Logstash

3.2.3 Kibana

在Linux系统下可以通过以下命令启动Kibana:

$ cd kibana-x.x.x/bin/
$ ./kibana

在Windows系统下可以通过运行bin/kibana.bat文件启动Kibana

3.3 进行基础配置

在启动三个工具后需要进行一些基础的配置以便这些工具能够正常工作

具体的配置方法可以参考各自的官方文档。通常需要进行的配置包括Elasticsearch的集群配置、Logstash的Pipeline配置和Kibana的索引配置等

四、实现步骤

4.1 输入数据源

输入数据源可以是各种系统生成的日志文件例如 Apache、Nginx 的访问日志,应用程序的运行日志等。可以通过配置文件等方式将日志文件发送到 Logstash 进行处理。

4.2 编写 Logstash 配置文件 过滤 输出数据到 Elasticsearch 中

以下是示例代码:

input {
 // 指定输入源,这里假设使用的是 filebeat
  beats {
    port => "5044"
    type => "logs"
  }
}

filter {
  // 通过正则表达式进行过滤,提取所需信息
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  
  // 时间格式化,将默认格式转换为 ISO 标准格式
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

output {
  // 输出到 Elasticsearch 指定索引中
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logs-%{+YYYY.MM.dd}"
  }
}

在 Logstash 的配置文件中需要指定输入源(如上述代码中的 beats),就是从哪个通道读取数据。然后使用 filter 对数据进行过滤和处理,比如使用正则表达式对日志进行格式化。最后使用 output 将数据输出到 Elasticsearch 指定的索引中。

4.3 在 Kibana 中创建索引并进行可视化展示

在看到数据实时输出到 Elasticsearch 中就可以在 Kibana 中对数据进行可视化处理了。首先需要在 Kibana 中创建索引以便展示至页面上。然后可以使用多种图表、面板等方式对数据进行分析、呈现和展示,例如使用柱状图展示日志访问量 TopN、使用仪表盘展示系统运行状态等。Kibana 的可视化方式非常灵活,完全可以根据不同的应用场景做出定制化的展示效果。

五、常用操作

5.1 重启 关闭 启动: Elasticsearch Logstash Kibana

Elasticsearch

// 停止 Elasticsearch
service elasticsearch stop

// 启动 Elasticsearch
service elasticsearch start

// 重启 Elasticsearch
service elasticsearch restart

Logstash

// 停止 Logstash
service logstash stop

// 启动 Logstash
service logstash start

// 重启 Logstash
service logstash restart

Kibana

// 停止 Kibana
service kibana stop

// 启动 Kibana
service kibana start

// 重启 Kibana
service kibana restart

5.2 Logstash 配置文件优化

为了提高 Logstash 的性能可以进行如下配置文件优化:

  • 尽量使用过滤器插件中的 grok 插件,避免使用 ruby 插件。
  • 避免在条件语句中使用复杂表达式。
  • 避免使用 if 滤镜,使用 drop 来代替。
  • 避免使用 date filter 插件来解析时间戳,直接使用 elasticsearch 的时间戳字段即可。

5.3 Elasticsearch 性能优化

要想提高 Elasticsearch 的性能可以进行如下优化:

  • 提高数据写入速度:合理设置 shard、削减文档个数、利用 bulk API 批量插入等方法。
  • 提高数据读取速度:合理设置副本数量、利用 cache 提高查询效率、合理利用分片等方法。
  • 如有需要,可以将 Elasticsearch 的数据目录移动到一个快速的存储设备上。

5.4 Kibana 图表优化

  • 避免在画布等可视化组件中展示过多数据。
  • 利用 Elasticsearch 中已有的聚合函数,减少 Kibana 中的聚合计算工作量。
  • 对于一些复杂的可视化需求,可以通过自定义插件来满足。

六、实践案例

6.1 使用 ELK 收集服务器日志并分析

ELK 是一款用于收集、存储、搜索和可视化日志的开源平台,它由 Elasticsearch、Logstash 和 Kibana 三个开源项目组成

以下是使用 ELK 收集服务器日志并分析的具体步骤:

  1. 在服务器上安装 Logstash,并配置好输入、过滤器和输出。输入模块可以使用文件输入或者其他支持的协议输入,过滤器模块可以用于对数据进行处理和转换,输出模块可以将数据导出到 Elasticsearch 索引中。
input {
    file {
        path => "/var/log/messages"
        codec => plain {
            charset => "ISO-8859-1"
        }
    }
}

filter {
    json {
        source => "message"
    }
    date {
        match => [ "timestamp", "ISO8601" ]
    }
}

output {
    elasticsearch {
        hosts => [ "localhost:9200" ]
        index => "myserver-%{+YYYY.MM.dd}"
    }
    stdout { codec => rubydebug }
}
  1. 启动 Logstash 并检查是否正常运行。
bin/logstash -f /path/to/config.conf --config.reload.automatic
  1. 在 Elasticsearch 上查询和分析日志数据。可以使用 Kibana 来可视化数据和构建仪表盘。例如,可以使用 Kibana 显示最新的日志、错误率或者其他关键指标。

以上是一个简要的 ELK 收集服务器日志并分析的流程,具体实现要根据不同场景进行调整。

6.2 搭建远程日志系统并实时监控

可以使用 Rsyslog 或者其他日志采集器来轻松地将日志推送到 ELK 应用程序。以下是一些构建远程日志系统的步骤:

  1. 在远程服务器上安装 Rsyslog,并配置好输入和输出。输入模块可以使用文件输入或者其他支持的协议输入,例如 TCP、UDP、TLS 等。输出模块可以将数据导出到 Elasticsearch 索引中
module(load="imfile")

input(type="imfile"
      File="/var/log/syslog"
      Tag="system"
      severity="warning"
      Facility="local0")
      
action(type="omelasticsearch"
       template="json"
       searchIndex="syslog-%Y.%m.%d"
       dynSearchIndex="on"
       servers="127.0.0.1:9200")
  1. 在 Elasticsearch 中创建索引,并设置相关的映射规则。可以使用 curl 命令或者 Kibana DevTools 来完成此操作。
curl -X PUT "localhost:9200/syslog-2023.05.30" -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "properties": {
      "@timestamp": {
        "type": "date"
      },
      "hostname": {
        "type": "keyword"
      },
      "message": {
        "type": "text"
      },
      "program": {
        "type": "keyword"
      },
      "priority": {
        "type": "keyword"
      },
      "severity": {
        "type": "keyword"
      }
    }
  }
}
'
  1. 启动 Rsyslog 并检查是否正常运行可以使用以下命令测试是否能够将日志推送到 Elasticsearch 中
logger -t system -p local0.warning "this is a test message"
curl http://localhost:9200/syslog-2023.05.30/_search?pretty
  1. 在 Kibana 中创建 Dashboard 和可视化图表,用于实时监控和分析日志数据

以上是一个简单的搭建远程日志系统并实时监控的流程,具体实现要根据不同场景进行调整。

七、注意事项和常见问题

7.1 数据去重处理

为了避免数据在Elasticsearch中出现重复可以使用Logstash中的aggregate插件。该插件可以将经过特定字段排序后,相同字段值的事件合并为一个。由于处理过程中需要在内存中保存数据,所以需要根据实际情况调整max_map_sizetimeout参数避免意外的内存溢出。

示例代码:文章来源地址https://www.toymoban.com/news/detail-479028.html

input {
  file {
    path => "/log/path"
    start_position => "beginning"
  }
}
filter {
  # 针对某个字段进行排序
  aggregate {
    task_id => "%{task_id}" # 字段名
    code => "
      map['message'] ||= []
      map['message'].push(event.get('message')) # 收集字段值
      event.cancel() # 取消本行日志的索引
    "
    push_map_as_event_on_timeout => true # 所有事件被组合为一个事件,放到Logstash的输出队列
    timeout_task_id_field => "task_id"
    timeout => 3 # 等待时间,单位秒
  }
}
output {
  elasticsearch { hosts => ["localhost:9200"] }
}

7.2 避免 Elasticsearch 执行占用过多磁盘空间

优先使用批量API操作

Elasticsearch提供了批量API操作来提升性能。减少单个文档的请求次数可以降低网络开销,并减少Elasticsearch节点中内存的使用量。

关闭自动建立索引

默认情况下Elasticsearch会自动为每个新索引分配一个主分片和一个副本。这个操作通常非常耗费时间,磁盘空间和节点资源。所以当需要大量数据导入Elasticsearch时,建议关闭该功能,先导入数据后再手动建立索引。

设置方法:在elasticsearch.yml文件中增加以下内容

action.auto_create_index: false

7.3 Logstash 过滤器正则表达式语法错误导致的故障

在使用正则表达式时假如表达式存在语法错误,则过滤器将被卡住,不再适用于任何日志。这可能会导致Logstash停止收集而无法将日志发送到Elasticsearch中。在写正则表达式时建议先使用在线正则表达式工具进行测试。另外还可以在Logstash启动前运行一个自动化的正则表达式测试过程,以确保配置文件的完整性。

示例代码:

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  if "_grokparsefailure" in [tags] {
    drop { } # 发现Grok失败时,该事件会被地毯式丢弃
  }
}

7.4 日志数据丢失问题

应用程序级别的数据丢失

应用程序在给Logstash发送日志时很可能发生数据丢失。对于这种情况建议首先排除网络故障的可能性,并检查发送端和接收端之间的所有设备。

Logstash级别的数据丢失

如果经过排除后数据仍然丢失,则可能是由于Logstash无法处理大量数据而导致的,建议将日志文件划分为使用相同过滤器预处理的较小块。另一个常见的解决方案是增加Elasticsearch节点来容纳更多数据,或者升级硬件配置以提高性能。

以上方式均无效考虑采用kafka等高并发系统进行数据缓冲,以及定时备份进行数据恢复。

示例代码:

input {
  # 从Kafka主题my_topic中读取数据,该主题包含了在其他数据输入源中收集的数据
  kafka {
    bootstrap_servers => "localhost:9092"
    topics => ["my_topic"]
    client_id => "my_id"
    group_id => "logstash"
    auto_commit_interval_ms => 1000
    codec => json_lines
  }
}
output {
  elasticsearch { hosts => ["localhost:9200"] }
}

到了这里,关于Elasticsearch + Logstash + Kibana 日志分析系统搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ELKF日志系统搭建部署教程:从零开始构建Elasticsearch + Logstash + Filebeat + Kibana

    学习如何从头开始搭建和部署ELKF日志系统,利用Elasticsearch、Logstash、Filebeat和Kibana来实现高效的数据采集、处理和可视化展示。跟随本教程,轻松构建稳定的日志系统。

    2024年02月05日
    浏览(50)
  • 【ELK企业级日志分析系统】部署Filebeat+Kafka+Logstash+Elasticsearch+Kibana集群详解(EFLFK)

    参见安装与部署ELK详解 参见安装与部署EFLK详解 参见安装与部署Zookeeper集群详解 1.1.1 为什么需要消息队列(MQ) MQ(Message Queue)主要原因是由于 在高并发环境下,同步请求来不及处理,请求往往会发生阻塞 。比如大量的并发请求,访问数据库,导致行锁表锁,最后请求线程会

    2024年02月16日
    浏览(47)
  • docker搭建最新ELFK分布式日志收集系统(elasticsearch+logstash+filebeats+kibana7.16.1)

    随着分布式项目的集群部署,日志的存储也分散开来,在日后出现问题进行日志定位时就会出现很困难,服务器很多会做负载均衡,这样最终请求所落在的服务器也随机起来,所以好的方式就是集中收集起来,不需要一台一台服务器去查,方便查看。 ELFK是Elasticsearch+Logstash+F

    2024年02月08日
    浏览(49)
  • ELK日志平台(elasticsearch+logstash+kibana)搭建

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 为了实现分布式日志数据统一收集,实现集中式查询和管理 故障排查 安全信息和事件管理 ELK 是三个开源项目的首字母缩写,这三个项目分别是: Elasticsearch 、 Logstash 和 Kibana 。 • Elasticsearch 是一个搜索

    2024年02月03日
    浏览(45)
  • elk(elasticsearch+logstash+kibana)搭建日志监控平台

    目录 elk架构原理 安装部署elasticsearch 什么是elasticsearch 创建elasticserch docker容器  安装部署kibana 什么是Kinana 创建Kibana docker容器         拉取镜像         创建配置文件:D:Programsdockerkibanakibana.yml          创建并运行kibana容器         验证登录kibana 安装部署logstash 什么

    2024年02月04日
    浏览(63)
  • 日志系统一(elasticsearch+filebeat+logstash+kibana)

    目录 一、es集群部署 安装java环境 部署es集群 安装IK分词器插件 二、filebeat安装(docker方式) 三、logstash部署 四、kibana部署 背景:因业务需求需要将nginx、java、ingress日志进行收集。 架构:filebeat+logstash+es+kibana 服务器规划: 192.168.7.250(es) 192.168.6.216(filebeat,es) 192.168.7

    2024年02月03日
    浏览(42)
  • 基于Elasticsearch+Logstash+Kibana+Filebeat的日志收集分析及可视化

    sudo rm /var/lib/dpkg/lock* sudo dpkg --configure -a apt update tail -f /var/log/car.log 海量的业务应用,也带来了海量的日志数据,给业务应用的运维带来了新的挑战。例如,我们常用的网约车应用,单个平台的日订单数量可以达到上亿条,产生各种类型的日志数据,像用户业务方面会产生交

    2024年01月21日
    浏览(53)
  • 搭建Elasticsearch、Kibana和Logstash环境:构建强大的数据分析平台

    “限时免费赠送!人工智能测试开发资料大礼包,把握测试行业的新机遇\\\" 搭建 Elasticsearch、Kibana 和 Logstash(通常被称为 ELK Stack)环境是构建强大的数据分析平台的关键步骤。ELK Stack 提供了一套完整的解决方案,用于收集、存储、搜索、分析和可视化大量的日志数据。下面是

    2024年04月26日
    浏览(45)
  • 史上最全从零搭建ELKB(Elasticsearch、Logstash、Kibana、Beat)分布式日志管理可视化平台之一

    ELKB(Elasticsearch、Logstash、Kibana、Beat的组合)是一套开源的分布式日志管理方案。凭借其闭环的日志处理流程、高效的检索性能、线性的扩展能力、较低的运维成本等特点,ELKB在最近几年迅速崛起,成为实时日志处理开源领域的首要选择。(https://cloud.tencent.com/developer/article/1143

    2024年01月19日
    浏览(81)
  • 使用Filebeat+Kafka+Logstash+Elasticsearch构建日志分析系统

            随着时间的积累,日志数据会越来越多,当您需要查看并分析庞杂的日志数据时,可通过Filebeat+Kafka+Logstash+Elasticsearch采集日志数据到Elasticsearch中,并通过Kibana进行可视化展示与分析。本文介绍具体的实现方法。 Kafka是一种分布式、高吞吐、可扩展的消息队列服务,

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包